dev@glassfish.java.net

Re: Problems with REMOTE session bean and LOCAL session bean

From: Jagadish Prasath Ramu <Jagadish.Ramu_at_Sun.COM>
Date: Wed, 28 Jun 2006 20:57:39 +0530

Hi Dyego,
My guess is,
Within a transaction both the resources are used (resource from "group",
resource from "user").
When more than one resource-type is used, it has to be a distributed
transaction.
In a distributed transaction 1 local resource, 1 or more XA resources
can participate.

>>From your conn. pool settings, datasource classnames are not of XA
datasource type.

It has to be "com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"

Thanks,
-Jagadish


On Wed, 2006-06-28 at 12:15 -0300, Dyego Souza Dantas Leal wrote:

> I have two Enterprise Applications , the files are : user.ear and group.ear
>
>
> the group.ear call a Bean inside user.ear ( an entity )
>
> in group.ear
>
> User us = getUser(IdOfUser);
>
> group.setUser(us);
>
> em.persist(group);
>
> my annotations in class User and Group is:
>
>
> @Stateless
> @TransactionManagement(TransactionManagementType.CONTAINER)
> @TransactionAttribute(TransactionAttributeType.REQUIRED)
>
>
> After this... i get an expcetion:
>
>
> PS: My Database is MySQL and resourceconf is:
>
> group.ear
>
> <?xml version="1.0" encoding="UTF-8"?>
> <resources>
> <jdbc-connection-pool allow-non-component-callers="false"
> connection-validation-method="auto-commit"
> datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"
> fail-all-connections="false" idle-timeout-in-seconds="300"
> is-connection-validation-required="false"
> is-isolation-level-guaranteed="true" max-pool-size="32"
> max-wait-time-in-millis="60000" name="document5Connection"
> non-transactional-connections="false" pool-resize-quantity="2"
> res-type="javax.sql.DataSource" steady-pool-size="8">
> <property name="URL" value="jdbc:mysql://192.168.0.89/group"/>
> <property name="User" value="root"/>
> <property name="Password" value=""/>
> </jdbc-connection-pool>
> </resources>
>
> user.ear
>
> <?xml version="1.0" encoding="UTF-8"?>
> <resources>
>
> <jdbc-connection-pool allow-non-component-callers="false"
> connection-validation-method="auto-commit"
> datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"
> fail-all-connections="false" idle-timeout-in-seconds="300"
> is-connection-validation-required="false"
> is-isolation-level-guaranteed="true" max-pool-size="32"
> max-wait-time-in-millis="60000" name="escribaUserConnection"
> non-transactional-connections="false" pool-resize-quantity="2"
> res-type="javax.sql.DataSource" steady-pool-size="8">
> <property name="URL" value="jdbc:mysql://192.168.0.89:3306/user"/>
> <property name="User" value="root"/>
> <property name="Password" value=""/>
> </jdbc-connection-pool>
> </resources>
>
>
>
> [#|2006-06-28T12:10:40.143-0300|SEVERE|sun-appserver-pe9.1|javax.enterprise.resource.resourceadapter|_ThreadID=18;_ThreadName=p:
> thread-pool-1; w:
> 6;_RequestID=0c7dd8fb-ee9a-435c-aba4-02077fe1655a;|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
> org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:69)
> at
> org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:417)
> at
> org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
> at
> org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
> at
> org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1561)
> at org.hibernate.loader.Loader.doQuery(Loader.java:661)
> at
> org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
> at org.hibernate.loader.Loader.loadEntity(Loader.java:1785)
> at
> org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
> at
> org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
> at
> org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:2821)
> at
> org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:370)
> at
> org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:351)
> at
> org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:122)
> at
> org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:178)
> at
> org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:86)
> at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:871)
> at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808)
> at
> org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:208)
> at
> org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:99)
> at
> org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:51)
> at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:679)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:663)
> at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:667)
> at
> org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:201)
> at
> com.sun.enterprise.util.EntityManagerWrapper.merge(EntityManagerWrapper.java:224)
> at
> br.com.escriba.document5.session.TabelaCustaSessionBean.verificaCadastroTabela(TabelaCustaSessionBean.java:400)
> at
> br.com.escriba.document5.session.TabelaCustaSessionBean.addTabela(TabelaCustaSessionBean.java:67)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:585)
> at
> com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1050)
> at
> com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:165)
> at
> com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2766)
> at
> com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:3847)
> at
> com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:190)
> at
> com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:67)
> at $Proxy81.addTabela(Unknown Source)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:585)
> at
> com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:121)
> at
> com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:650)
> at
> com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:193)
> at
> com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1705)
> at
> com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1565)
> at
> com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:947)
> at
> com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:178)
> at
> com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:717)
> at
> com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.dispatch(SocketOrChannelConnectionImpl.java:473)
> at
> com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.doWork(SocketOrChannelConnectionImpl.java:1270)
> at
> com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:479)
> |#]
>
> [#|2006-06-28T12:10:40.177-0300|WARNING|sun-appserver-pe9.1|javax.enterprise.resource.resourceadapter|_ThreadID=18;_ThreadName=p:
> thread-pool-1; w:
> 6;_RequestID=0c7dd8fb-ee9a-435c-aba4-02077fe1655a;|poolmgr.err_enlisting_res_in_getconn|#]
>
> [#|2006-06-28T12:10:40.180-0300|WARNING|sun-appserver-pe9.1|javax.enterprise.resource.resourceadapter|_ThreadID=18;_ThreadName=p:
> thread-pool-1; w: 6;java.lang.IllegalStateException: Local transaction
> already has 1 non-XA Resource: cannot add more resources.
> ;_RequestID=0c7dd8fb-ee9a-435c-aba4-02077fe1655a;|RAR5117 : Failed to
> obtain/create connection. Reason : java.lang.IllegalStateException:
> Local transaction already has 1 non-XA Resource: cannot add more
> resources. |#]
>
> [#|2006-06-28T12:10:40.184-0300|WARNING|sun-appserver-pe9.1|javax.enterprise.resource.resourceadapter|_ThreadID=18;_ThreadName=p:
> thread-pool-1; w: 6;Error in allocating a connection. Cause:
> java.lang.IllegalStateException: Local transaction already has 1 non-XA
> Resource: cannot add more resources.
> ;_RequestID=0c7dd8fb-ee9a-435c-aba4-02077fe1655a;|RAR5114 : Error
> allocating connection : [Error in allocating a connection. Cause:
> java.lang.IllegalStateException: Local transaction already has 1 non-XA
> Resource: cannot add more resources. ]|#]
>
>
>
>