ivan frias
2014-12-29 15:35:07 UTC
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
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