persistence@glassfish.java.net

Re: Use multiple entitymanagers

From: Jagadish Prasath Ramu <Jagadish.Ramu_at_Sun.COM>
Date: Mon, 06 Nov 2006 20:38:19 +0530

Hi Benjamin,

Can you please post the connection pool configurations of both
entitymanagers.

You will get this exception when more than one non-xa resource is being
used in a transaction.

eg:
ConnectionPool-1
resource-type : javax.sql.DataSource (non-xa resource )

ConnectionPool-2
resource-type : javax.sql.DataSource (non-xa resource)

You need to use resource of type javax.sql.XADataSource when more than
one resource is used. [It can be 1 non-xa & many xa also, but not more
than one non-xa resource]

eg for non-xa resource : org.apache.derby.client.ClientDataSource
eg for xa resource : org.apache.derby.client.ClientXADataSource


Thanks,
-Jagadish

On Mon, 2006-11-06 at 15:39 +0100, Benjamin Graf wrote:
> Hi everybody,
>
> I have a big problem with using two entitymanagers in the same ejb. Everytime I got a lot of exceptions in my glassfish log-file. It's strating with:
> RAR5027:Unexpected exception in resource pooling
> java.lang.IllegalStateException: Local transaction already has 1 non-XA Resource: cannot add more resources.
> at com.sun.enterprise.distributedtx.J2EETransactionManagerOpt.enlistResource(J2EETransactionManagerOpt.java:111)
> at com.sun.enterprise.resource.SystemResourceManagerImpl.enlistResource(SystemResourceManagerImpl.java:87)
> at com.sun.enterprise.resource.PoolManagerImpl.getResource(PoolManagerImpl.java:214)
> at com.sun.enterprise.connectors.ConnectionManagerImpl.internalGetConnection(ConnectionManagerImpl.java:312)
> at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:176)
> at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:152)
> at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:145)
> at com.sun.gjc.spi.DataSource.getConnection(DataSource.java:93)
> at oracle.toplink.essentials.jndi.JNDIConnector.connect(JNDIConnector.java:130)
> at oracle.toplink.essentials.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:170)
> at oracle.toplink.essentials.internal.databaseaccess.DatasourceAccessor.connect(DatasourceAccessor.java:218)
> at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.connect(DatabaseAccessor.java:227)
> at oracle.toplink.essentials.internal.databaseaccess.DatasourceAccessor.connect(DatasourceAccessor.java:294)
> at oracle.toplink.essentials.threetier.ConnectionPool.buildConnection(ConnectionPool.java:102)
> at oracle.toplink.essentials.threetier.ExternalConnectionPool.startUp(ExternalConnectionPool.java:120)
> at oracle.toplink.essentials.threetier.ServerSession.connect(ServerSession.java:448)
> at oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:558)
> at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:180)
> at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:230)
> at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:78)
> at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:113)
> at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:84)
> at com.sun.enterprise.util.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:331)
> at com.sun.enterprise.util.EntityManagerWrapper.persist(EntityManagerWrapper.java:433)
>
> I hope anyone can help me. Maybe it's just an configuration error.
>
> THX Benjamin
>