1 Reply Latest reply on Apr 19, 2010 3:35 PM by andreas_back

    Exception in GlobalTxEntityMap of JBoss 4.2.3

    andreas_back

      Hello!

       

      In an early stage of a migration project from JBoss 3.2.4 to JBoss 4.2.3 (and from EJB 1.x to EJB 2.1) we see the following exception:

       

      2010-04-14 23:52:54,733 ERROR [org.jboss.ejb.plugins.LogInterceptor] TransactionRolledbackLocalException in method: public abstract java.util.Collection de.intermoves.pbseasyzds.sortimente.SortimentLocalHome.findMediaSortimenteOfTeilnehmer(int) throws javax.ejb.FinderException, causedBy:
      java.lang.UnsupportedOperationException
          at org.jboss.ejb.GlobalTxEntityMap$1.invokeEjbStore(GlobalTxEntityMap.java:113)
          at org.jboss.ejb.GlobalTxEntityMap$GlobalTxSynchronization.synchronize(GlobalTxEntityMap.java:300)
          at org.jboss.ejb.GlobalTxEntityMap.synchronizeEntities(GlobalTxEntityMap.java:227)
          at org.jboss.ejb.EntityContainer.synchronizeEntitiesWithinTransaction(EntityContainer.java:136)
          at org.jboss.ejb.EntityContainer.findLocal(EntityContainer.java:658)
          at sun.reflect.GeneratedMethodAccessor90.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.jboss.invocation.Invocation.performCall(Invocation.java:359)
          at org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContainer.java:1126)
          at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(EntitySynchronizationInterceptor.java:203)
          at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invokeHome(CachedConnectionInterceptor.java:189)
          at org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.java:105)
          at org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInstanceInterceptor.java:136)
          at org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(EntityLockInterceptor.java:76)
          at org.jboss.ejb.plugins.EntityCreationInterceptor.invokeHome(EntityCreationInterceptor.java:45)
          at org.jboss.ejb.plugins.CallValidationInterceptor.invokeHome(CallValidationInterceptor.java:56)
          at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:125)
          at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:350)
          at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:161)
          at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:145)
          at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:132)
          at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invokeHome(ProxyFactoryFinderInterceptor.java:107)
          at org.jboss.ejb.EntityContainer.internalInvokeHome(EntityContainer.java:521)
          at org.jboss.ejb.Container.invoke(Container.java:981)
          at org.jboss.ejb.plugins.local.BaseLocalProxyFactory.invokeHome(BaseLocalProxyFactory.java:359)
          at org.jboss.ejb.plugins.local.LocalHomeProxy.invoke(LocalHomeProxy.java:133)
          at $Proxy81.findMediaSortimenteOfTeilnehmer(Unknown Source)
          at de.intermoves.pbseasyzds.control.ResponseMsgBean.handleResponse(ResponseMsgBean.java:1646)
          at de.intermoves.pbseasyzds.control.ResponseMsgBean.onMessage(ResponseMsgBean.java:1928)
          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:597)
          at org.jboss.invocation.Invocation.performCall(Invocation.java:359)
          at org.jboss.ejb.MessageDrivenContainer$ContainerInterceptor.invoke(MessageDrivenContainer.java:495)
          at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:158)
          at org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor.invoke(MessageDrivenInstanceInterceptor.java:116)
          at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:63)
          at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:121)
          at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:350)
          at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:181)
          at org.jboss.ejb.plugins.RunAsSecurityInterceptor.invoke(RunAsSecurityInterceptor.java:109)
          at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:205)
          at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:138)
          at org.jboss.ejb.MessageDrivenContainer.internalInvoke(MessageDrivenContainer.java:402)
          at org.jboss.ejb.Container.invoke(Container.java:960)
          at org.jboss.ejb.plugins.jms.JMSContainerInvoker.invoke(JMSContainerInvoker.java:1092)
          at org.jboss.ejb.plugins.jms.JMSContainerInvoker$MessageListenerImpl.onMessage(JMSContainerInvoker.java:1392)
          at org.jboss.jms.asf.StdServerSession.onMessage(StdServerSession.java:266)
          at org.jboss.mq.SpyMessageConsumer.sessionConsumerProcessMessage(SpyMessageConsumer.java:906)
          at org.jboss.mq.SpyMessageConsumer.addMessage(SpyMessageConsumer.java:170)
          at org.jboss.mq.SpySession.run(SpySession.java:323)
          at org.jboss.jms.asf.StdServerSession.run(StdServerSession.java:194)
          at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:756)
          at java.lang.Thread.run(Thread.java:619)
      

       

      This first 4 entries in the stack trace are identical to the lines posted in the stack trace in the discussion thread http://community.jboss.org/message/230012#230012 .

       

      The execption is thrown when the method invokeEjbStore of the object NONE in the following code of the class GlobalTxEntityMap is called:

       

      public static final TxAssociation NONE = new TxAssociation()
         {
            public void scheduleSync(Transaction tx, EntityEnterpriseContext instance)
               throws SystemException, RollbackException
            {
               EntityContainer.getGlobalTxEntityMap().associate(tx, instance);
               instance.setTxAssociation(SYNC_SCHEDULED);
            }
      
            public void synchronize(Thread thread, Transaction tx, EntityEnterpriseContext instance)
            {
               throw new UnsupportedOperationException();
            }
      
            public void invokeEjbStore(Thread thread, EntityEnterpriseContext instance)
            {
               throw new UnsupportedOperationException();
            }
         };
      

       

      The execption occurs whithin a message driven bean "ResponseMsgBean" with the following specification in the ejb-jar.xml:

       

       

      <container-transaction >
            <method >
               <ejb-name>ResponseMsgBean</ejb-name>
                <method-name>*</method-name>
             </method>
             <trans-attribute>Required</trans-attribute>
          </container-transaction>
      

       

      Question:      What can be changed to prevent this exception?

       

      Any help is appreciated!

       

      Greetings

       

      Andreas

        • 1. Re: Exception in GlobalTxEntityMap of JBoss 4.2.3
          andreas_back

          Hello,

           

          in the spirit of https://jira.jboss.com/jira/browse/JBAS-4304

           

          one can use

           

               <sync-on-commit-only/>.

           

          This definitely prevents the original problem, as code analysis of the class EntityContainer does show:

           

          else if(!metaData.getContainerConfiguration().getSyncOnCommitOnly())
                {
                   EntityContainer.synchronizeEntitiesWithinTransaction(tx);
                }
          

           

          But unfortunately this has led us to some NestedSQLExceptions:

           

               org.jboss.util.NestedSQLException: Transaction is not active: : JDBC  JAVA

           

          see for example http://objectmix.com/jdbc-java/41896-jboss-find-failed-org-jboss-util-nestedsqlexception-transaction-not-active.html.

          And it introduces changes to the application logic!

           

          The classes that are involved in the original exception have seen some changes by Bill Burke at 21.12.2006, that are not part of 4.2.3 but are present in JBoss 5.1.0. The comment to this changes is:

           

          "Revamp java:comp processing EJB 2.1 containers now push/pop ENC ID into ENCFactory ThreadLocal stack.

           

          This has motivated us deploy to JBoss 5.1.0 and the unchanged application code does not show the original exception.

           

          Greetings,

           

          Andreas