CMP with OpenJPA on Apache Geronimo 3.0.1

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

CMP with OpenJPA on Apache Geronimo 3.0.1

ivanfrias
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 | Threaded
Open this post in threaded view
|

Re: CMP with OpenJPA on Apache Geronimo 3.0.1

David Jencks
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 <[hidden email]> 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 | Threaded
Open this post in threaded view
|

Re: CMP with OpenJPA on Apache Geronimo 3.0.1

ivanfrias
Hi,

Do you have any example of the steps involved in correctly configuring a datasource for this case ?

Best regards,
Ivan Frias

 
2014-12-29 16:03 GMT+00:00 David Jencks <[hidden email]>:
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 <[hidden email]> 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




--
Ivan Frias