One curious thing
If I change to
public void addUserGroupAccess(UserGroupAccess userGroupAccess) {
Application app =
this.baseService.getApplicationDAO().find(userGroupAccess.getPk().getApplicationId());
userGroupAccess.setApplication(app);
SecurityLevel seclevel =
this.baseService.getSecurityLevelDAO().find(userGroupAccess.getPk().getSecurityLevelId());
userGroupAccess.setSecurityLevel(seclevel);
User usr =
this.baseService.getUserDAO().find(userGroupAccess.getPk().getUserId());
userGroupAccess.setUser(usr);
this.baseService.getUserGroupAccessDAO().add(userGroupAccess);
}
then it seems to work...
26126 poc TRACE [main] openjpa.Runtime - Found datasource1: datasource
1045888352 from configuration. StoreContext:
org.apache.openjpa.kernel.BrokerImpl@6f29660b
26126 poc TRACE [main] openjpa.Runtime -
org.apache.openjpa.persistence.EntityManagerFactoryImpl@3693dbd1 created
EntityManager org.apache.openjpa.persistence.EntityManagerImpl@6f29660b.
26127 poc TRACE [main] openjpa.jdbc.SQLDiag - getInitializeStateResult:
oid=201 class com.xyz.wwwww.tomee.entity.Application
26128 poc TRACE [main] openjpa.jdbc.SQL - <t 346652520, conn 804578842>
executing prepstmnt 116036913 SELECT t0.active, t0.description FROM
Application t0 WHERE t0.id = ? [params=?]
26131 poc TRACE [main] openjpa.jdbc.SQL - <t 346652520, conn 804578842>
[3 ms] spent
26134 poc TRACE [main] openjpa.jdbc.JDBC - <t 346652520, conn 804578842>
[0 ms] close
26135 poc TRACE [main] openjpa.jdbc.SQLDiag - getInitializeStateResult:
oid=251 class com.xyz.wwwww.tomee.entity.SecurityLevel
26136 poc TRACE [main] openjpa.jdbc.SQL - <t 346652520, conn 804578842>
executing prepstmnt 537118814 SELECT t0.active, t0.description FROM
SecurityLevel t0 WHERE t0.id = ? [params=?]
26139 poc TRACE [main] openjpa.jdbc.SQL - <t 346652520, conn 804578842>
[3 ms] spent
26140 poc TRACE [main] openjpa.jdbc.JDBC - <t 346652520, conn 804578842>
[0 ms] close
26141 poc TRACE [main] openjpa.jdbc.SQLDiag - getInitializeStateResult:
oid=301 class com.xyz.wwwww.tomee.entity.User
26142 poc TRACE [main] openjpa.jdbc.SQL - <t 346652520, conn 804578842>
executing prepstmnt 1482138557 SELECT t0.active, t0.creation,
t0.emailAddress, t0.firstName, t0.lastAccess, t0.lastName,
t0.middleInitial, t0.username FROM APPUSER t0 WHERE t0.id = ? [params=?]
26146 poc TRACE [main] openjpa.jdbc.SQL - <t 346652520, conn 804578842>
[3 ms] spent
26147 poc TRACE [main] openjpa.jdbc.JDBC - <t 346652520, conn 804578842>
[0 ms] close
26165 poc TRACE [main] openjpa.jdbc.JDBC - The batch limit is set to 100.
26169 poc TRACE [main] openjpa.jdbc.SQL - <t 346652520, conn 804578842>
executing prepstmnt 170839542 INSERT INTO UserGroupAccess (applicationId,
securityLevelId, userId, active) VALUES (?, ?, ?, ?) [params=?, ?, ?, ?]
26180 poc TRACE [main] openjpa.jdbc.SQL - <t 346652520, conn 804578842>
[11 ms] spent
26188 poc TRACE [main] openjpa.jdbc.JDBC - <t 346652520, conn 804578842>
[0 ms] close
26189 poc TRACE [main] openjpa.Runtime -
[email protected]() invoked.
...BUT, after some inserts, it just hangs and the method just seems to be
blocked somehow.
[]
Leo
On Thu, Nov 21, 2013 at 7:19 PM, Leonardo K. Shikida <[email protected]>wrote:
> running embedded tomee 1.6.0+ to generate the initial JPA db schema and
> populate with initial data
>
> data source is declared from a properties
>
> private static Properties getOracleDatasource() {
> final Properties p = new Properties();
> p.put("poc1", "new://Resource?type=DataSource");
> p.put("poc1.JdbcDriver", "oracle.jdbc.OracleDriver");
> p.put("poc1.JdbcUrl", "jdbc:oracle:thin:@localhost:1521:XE");
> p.put("poc1.UserName", "xxx");
> p.put("poc1.Password", "xxx");
> return p;
> }
>
> container is instantiated and EJBs are retrieved via JDNI lookup
>
> ejbContainer = EJBContainer.createEJBContainer(p);
> context = ejbContainer.getContext();
> authEJB = (AuthEJB)
> context.lookup("java:global/xyz/"+AuthEJB.class.getSimpleName());
>
> EJBs provide transactional context and perform simple CRUD operations via
> DAO classes
>
> for example
>
> UserGroupAccess userGroupAccessAdmin = new UserGroupAccess();
> userGroupAccessAdmin.setActive(true);
> userGroupAccessAdmin.setPk(new
> UserGroupAccessPK(sessionManager.getId(),administrator.getId(),
> sampleUser.getId()));
> userGroupAccessAdmin.setApplication(sessionManager);
> userGroupAccessAdmin.setSecurityLevel(administrator);
> userGroupAccessAdmin.setUser(sampleUser);
>
>
> this.getAuthEJB().addUserGroupAccess(userGroupAccessAdmin); <=
> exception happens here
>
> where
>
> public void addUserGroupAccess(UserGroupAccess userGroupAccess) {
> this.baseService.getUserGroupAccessDAO().add(userGroupAccess);
> }
>
>
> Several other objects are persisted in the same way, but only for this
> one, that has an embedded composite PK, the exception is raised. In fact,
> I've just disabled the points in the code where these objects are persisted
> to keep working until I find a solution/workaround for this.
>
> My persistence.xml
>
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
> http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
> <persistence-unit name="poc">
> <jta-data-source>poc1</jta-data-source>
> <non-jta-data-source>poc2</non-jta-data-source>
> <properties>
> <property name="openjpa.jdbc.DBDictionary"
> value="org.apache.openjpa.jdbc.sql.OracleDictionary" />
> <property name="openjpa.jdbc.DBDictionary"
> value="oracle(maxEmbeddedBlobSize=-1,maxEmbeddedClobSize=-1)" />
> <property name="openjpa.jdbc.SynchronizeMappings"
> value="buildSchema(ForeignKeys=true)" />
> <!-- <property name="openjpa.Log" value="DefaultLevel=WARN,
> Runtime=INFO, Tool=INFO, SQL=TRACE"/> -->
> </properties>
> </persistence-unit>
> </persistence>
>
> thanks
>
>
> []
>
> Leo
>
>
> On Thu, Nov 21, 2013 at 5:18 PM, Rick Curtis <[email protected]> wrote:
>
>> What is the scenario that you are running when you encounter this problem?
>>
>>
>> On Thu, Nov 21, 2013 at 9:46 AM, Leonardo K. Shikida <[email protected]
>> >wrote:
>>
>> > tomee 1.5.2 = openJPA 2.2.0
>> > tomee 1.6.0 = openJPA 2.3.0-Snapshot
>> >
>> > thanks!
>> >
>> > Leo
>> >
>> > []
>> >
>> > Leo
>> >
>> >
>> > On Thu, Nov 21, 2013 at 1:17 PM, Rick Curtis <[email protected]>
>> wrote:
>> >
>> > > Do you know what version of OpenJPA is in TomeEE 1.5.2?
>> > >
>> > >
>> > > On Wed, Nov 20, 2013 at 6:46 PM, Leonardo K. Shikida <
>> [email protected]
>> > > >wrote:
>> > >
>> > > > Hi
>> > > >
>> > > > My code that was working with tomee 1.5.2 (openEJB 4.5.2 I guess).
>> > > >
>> > > > Now I am trying to use tomee 1.6.0 (openEJB 4.6.0 I guess again).
>> > > >
>> > > > My class uses a primary key following this structure
>> > > >
>> > > > @Entity
>> > > > public class UserGroupAccess implements Serializable{
>> > > >
>> > > > /**
>> > > > *
>> > > > */
>> > > > private static final long serialVersionUID =
>> 7233673815582184369L;
>> > > >
>> > > > @ManyToOne
>> > > > @JoinColumn(name="applicationId")
>> > > > @MapsId("applicationId")
>> > > > private Application application;
>> > > >
>> > > > @ManyToOne
>> > > > @JoinColumn(name="securityLevelId")
>> > > > @MapsId("securityLevelId")
>> > > > private SecurityLevel securityLevel;
>> > > >
>> > > > @ManyToOne
>> > > > @JoinColumn(name="userId")
>> > > > @MapsId("userId")
>> > > > private User user;
>> > > >
>> > > > @EmbeddedId
>> > > > private UserGroupAccessPK pk;
>> > > > (...)
>> > > > }
>> > > >
>> > > > and the primary key
>> > > >
>> > > > @Embeddable
>> > > > public class UserGroupAccessPK implements Serializable{
>> > > >
>> > > > /**
>> > > > *
>> > > > */
>> > > > private static final long serialVersionUID =
>> 7233673815582184369L;
>> > > >
>> > > > public UserGroupAccessPK(long application,
>> > > > long securityLevel, long user) {
>> > > > super();
>> > > > this.applicationId = application;
>> > > > this.securityLevelId = securityLevel;
>> > > > this.userId = user;
>> > > > }
>> > > >
>> > > > public UserGroupAccessPK() {
>> > > > super();
>> > > > }
>> > > >
>> > > > private long applicationId;
>> > > >
>> > > > private long securityLevelId;
>> > > >
>> > > > private long userId;
>> > > > (...)
>> > > > }
>> > > >
>> > > > These classes are enhanced manually with
>> > > > org.apache.openjpa.enhance.PCEnhancer
>> > > >
>> > > > While trying to run some tests, I've got the following exception
>> > > >
>> > > > INFO: Starting OpenJPA 2.3.0-SNAPSHOT
>> > > > Nov 20, 2013 10:31:32 PM null
>> > > > INFO: Connected to Oracle version 11.11 using JDBC driver Oracle
>> JDBC
>> > > > driver version 12.1.0.1.0.
>> > > > Nov 20, 2013 10:31:39 PM
>> > > > org.apache.geronimo.transaction.manager.TransactionImpl
>> > beforeCompletion
>> > > > WARNING: Unexpected exception from beforeCompletion; transaction
>> will
>> > > roll
>> > > > back
>> > > > <openjpa-2.3.0-SNAPSHOT-r422266:1535082 nonfatal general error>
>> > > > org.apache.openjpa.persistence.PersistenceException:
>> > > > org.apache.openjpa.kernel.DetachedStateManager cannot be cast to
>> > > > org.apache.openjpa.kernel.StateManagerImpl
>> > > > at
>> > > >
>> > >
>> >
>> org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:2027)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:527)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:512)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:413)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:262)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:252)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.transaction.JtaTransactionPolicy.completeTransaction(JtaTransactionPolicy.java:328)
>> > > > at
>> > > >
>> >
>> org.apache.openejb.core.transaction.TxRequired.commit(TxRequired.java:75)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke(EjbTransactionUtil.java:76)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:231)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:181)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:272)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:267)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:90)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:306)
>> > > > Caused by: java.lang.ClassCastException:
>> > > > org.apache.openjpa.kernel.DetachedStateManager cannot be cast to
>> > > > org.apache.openjpa.kernel.StateManagerImpl
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.jdbc.meta.FieldMapping.setPKValueFromMappedByIdField(FieldMapping.java:640)
>> > > > at
>> > > >
>> org.apache.openjpa.jdbc.meta.FieldMapping.insert(FieldMapping.java:622)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.insert(AbstractUpdateManager.java:239)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:166)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:110)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:78)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:732)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
>> > > > at
>> org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2203)
>> > > > at
>> > > org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2101)
>> > > > at
>> > > >
>> > >
>> >
>> org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:2019)
>> > > > ... 17 more
>> > > >
>> > > > Exception in thread "main"
>> javax.ejb.EJBTransactionRolledbackException:
>> > > > Transaction was rolled back, presumably because setRollbackOnly was
>> > > called
>> > > > during a synchronization
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:379)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:310)
>> > > > Caused by: javax.transaction.RollbackException: Unable to commit:
>> > > > transaction marked for rollback
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:272)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:252)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.transaction.JtaTransactionPolicy.completeTransaction(JtaTransactionPolicy.java:328)
>> > > > at
>> > > >
>> >
>> org.apache.openejb.core.transaction.TxRequired.commit(TxRequired.java:75)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke(EjbTransactionUtil.java:76)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:231)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:181)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:272)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:267)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:90)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:306)
>> > > > ... 3 more
>> > > > Caused by:
>> > > > org.apache.geronimo.transaction.manager.SetRollbackOnlyException:
>> > > > setRollbackOnly() called. See stacktrace for origin
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.geronimo.transaction.manager.TransactionImpl.setRollbackOnly(TransactionImpl.java:126)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.geronimo.transaction.manager.TransactionManagerImpl.setRollbackOnly(TransactionManagerImpl.java:243)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openejb.core.TransactionSynchronizationRegistryWrapper.setRollbackOnly(TransactionSynchronizationRegistryWrapper.java:71)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.ee.RegistryManagedRuntime$TransactionManagerRegistryFacade.setRollbackOnly(RegistryManagedRuntime.java:128)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.ee.RegistryManagedRuntime.setRollbackOnly(RegistryManagedRuntime.java:74)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.ee.AutomaticManagedRuntime.setRollbackOnly(AutomaticManagedRuntime.java:274)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.kernel.BrokerImpl.setRollbackOnlyInternal(BrokerImpl.java:1670)
>> > > > at
>> > > >
>> > >
>> >
>> org.apache.openjpa.kernel.BrokerImpl.setRollbackOnly(BrokerImpl.java:1650)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.kernel.DelegatingBroker.setRollbackOnly(DelegatingBroker.java:981)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.persistence.EntityManagerImpl.setRollbackOnly(EntityManagerImpl.java:631)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.persistence.PersistenceExceptions$2.translate(PersistenceExceptions.java:77)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.openjpa.kernel.BrokerImpl.translateManagedCompletionException(BrokerImpl.java:2089)
>> > > > at
>> > > >
>> > >
>> >
>> org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:2027)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:527)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:512)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:413)
>> > > > at
>> > > >
>> > > >
>> > >
>> >
>> org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:262)
>> > > > ... 13 more
>> > > >
>> > > > Any help is welcome.
>> > > >
>> > > > Thanks in advance.
>> > > >
>> > > > Leo
>> > > >
>> > >
>> > >
>> > >
>> > > --
>> > > *Rick Curtis*
>> > >
>> >
>>
>>
>>
>> --
>> *Rick Curtis*
>>
>
>