It's been a few years….. IIRC the problem here is that your datasource is not 
set up correctly.  Again IIRC you need both a transactional and a 
non-transactional datasource for the persistence-unit.  Again IIRC this is more 
likely to work if the transactional datasource is XA.  The non transactional 
datasource must be no-transaction.

hope this helps
david jencks

On Dec 29, 2014, at 10:35 AM, ivan frias <[email protected]> wrote:

> Hi,
> Currently I am developing an application using OpenJPA . I've decide to use 
> CMP to manage the transactions.
> I am able to insert /edit and delete rows from the database ( through a 
> configured Datasource ), however, it seems that transaction is only commited 
> at Geronimo level. If I use the datasource control to execute a query ( 
> inside the management window on Geronimo ) I get the modified rows, however 
> If I try it outside the container ( e.g. using Sql Developer ) I can't see 
> the modifications.
> 
> Persistence.xml :
> 
> 
> <persistence-unit name="FleaCircus" transaction-type="JTA">
>               <description>Flea Circus</description>
>               
> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>               <jta-data-source>FleaCircusOracleDS</jta-data-source>
>               <class>de.carmedialab.db.entities.ApplicationItem</class>
>               <class>de.carmedialab.db.entities.FleaResult</class>
>               <class>de.carmedialab.db.entities.FleaResultType</class>
>               <class>de.carmedialab.db.entities.ItemAttribute</class>
>               <class>de.carmedialab.db.entities.ItemGroup</class>
>               <class>de.carmedialab.db.entities.ItemType</class>
>               <class>de.carmedialab.db.entities.ItemTypeAttribute</class>
>               
> <class>de.carmedialab.db.entities.ItemTypeOperationAttribute</class>
>               <class>de.carmedialab.db.entities.Operation</class>
>               <class>de.carmedialab.db.entities.OperationAttribute</class>
>               <class>de.carmedialab.db.entities.OperationType</class>
>               <class>de.carmedialab.db.entities.Role</class>
>               <class>de.carmedialab.db.entities.UserAccount</class>
>               <class>de.carmedialab.db.entities.Measurement</class>
>               <class>de.carmedialab.db.entities.MeasurementType</class>
>               <class>de.carmedialab.db.entities.MeasurementAttribute</class>
>               
> <class>de.carmedialab.db.entities.MeasurementAttributeType</class>
>               <class>de.carmedialab.db.entities.Fleet</class>
> 
>               <properties>
>                       <property name="openjpa.jdbc.SynchronizeMappings" 
> value="validate" />
>                       <property
>                               
> name="openjpa.Compatibility.CheckDatabaseForCascadePersistToDetachedEntity"
>                               value="true" />
>                         <!--<property name="openjpa.Log"
>                               value="DefaultLevel=WARN, Runtime=INFO, 
> Tool=INFO, SQL=TRACE" />-->
>               </properties>
>       </persistence-unit>
> 
> 
> TestDaoImpl.java:
> 
> 
> package de.carmedialab.db.dao;
> 
> import java.util.Calendar;
> 
> import javax.ejb.Remote;
> import javax.ejb.Stateless;
> import javax.ejb.TransactionAttribute;
> import javax.ejb.TransactionAttributeType;
> import javax.persistence.EntityManager;
> import javax.persistence.PersistenceContext;
> import javax.persistence.PersistenceContextType;
> import javax.persistence.Query;
> 
> import de.carmedialab.db.entities.ApplicationItem;
> import de.carmedialab.db.entities.ItemType;
> 
> @Stateless
> @Remote(TestDao.class)
> public class TestDaoImpl implements TestDao{
>       
>       @PersistenceContext(type=PersistenceContextType.TRANSACTION)
>       private EntityManager em;
> 
>       @Override
>       @TransactionAttribute(TransactionAttributeType.REQUIRED)
>       public void save() {
> 
>               try{                    
>                       Query query = em.createQuery("select t from ItemType t 
> where t.ittTypeName = :name");
>                       query.setParameter("name", "Passenger car");
>                       ItemType type = (ItemType)query.getSingleResult(); 
>                       
>                       ApplicationItem itm = new ApplicationItem();
>                       itm.setItemType(type);
>                       itm.setItmIsActive("Y");
>                       itm.setItmItemIdentifier("TEST");
>                       itm.setItmItemDescription("DESCRIPTION");
>                       itm.setItmItemName("NAME");
>                       itm.setItmInsertDate(Calendar.getInstance().getTime());
>                       itm.setItmInsertUser("SYSTEM");
>                       
>                       em.persist(itm);
>                       
>                       System.out.println("Item Persisted");
>                       
>               }catch(Exception ex){
>                       ex.printStackTrace();
>               } 
>       }
> 
>       @Override
>       @TransactionAttribute(TransactionAttributeType.REQUIRED)
>       public void delete() {
>               try{
>                       Query query = em.createQuery("select i from 
> ApplicationItem i where i.itmItemName = :itmName");
>                       query.setParameter("itmName", "NAME");
>                       ApplicationItem itm = 
> (ApplicationItem)query.getSingleResult();
>                       em.remove(itm); 
>                       System.out.println("Item Deleted");  
>               }catch(Exception ex){
>                       ex.printStackTrace(); 
>               }
>       }
> }
> 
> 
> Best regards,
> Ivan Frias

Reply via email to