4 Replies Latest reply on May 30, 2003 12:44 PM by adrian.brock

    Unable to call setRollbackOnly within MDB for 3.2.1

    mboulatian

      I am using message driven beans with sonic mq. My deployment descriptor specifies transaction attribute required for onMessage method but I am not able to call setRollbackOnly method on messagedriven context. System throws: "14:03:29,636 ERROR [LogInterceptor] RuntimeException:
      java.lang.IllegalStateException: setRollbackOnly must only be called in the cont
      ext of a transaction (EJB 2.0 - 15.5.1)
      at org.jboss.ejb.MessageDrivenEnterpriseContext$MessageDrivenContextImpl
      .setRollbackOnly(MessageDrivenEnterpriseContext.java:214)
      at com.vantra.volts.core.messagedriven.execution.ExecutionMessageDrivenB
      ean.onMessage(ExecutionMessageDrivenBean.java:159)
      at sun.reflect.GeneratedMethodAccessor129.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
      sorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.jboss.ejb.MessageDrivenContainer$ContainerInterceptor.invoke(Mess
      ageDrivenContainer.java:434)
      at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invo
      ke(CachedConnectionInterceptor.java:186)
      at org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor.invoke(Message
      DrivenInstanceInterceptor.java:62)
      at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInte
      rceptor.java:84)
      at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxIntercep
      torCMT.java:216)
      at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:1
      04)
      at org.jboss.ejb.plugins.RunAsSecurityInterceptor.invoke(RunAsSecurityIn
      terceptor.java:90)
      at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:191)
      at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFacto
      ryFinderInterceptor.java:122)
      at org.jboss.ejb.MessageDrivenContainer.internalInvoke(MessageDrivenCont
      ainer.java:348)
      at org.jboss.ejb.Container.invoke(Container.java:674)
      at org.jboss.ejb.plugins.jms.JMSContainerInvoker.invoke(JMSContainerInvo
      ker.java:732)
      at org.jboss.ejb.plugins.jms.JMSContainerInvoker$MessageListenerImpl.onM
      essage(JMSContainerInvoker.java:1020)
      at com.sonicsw.pso.jboss.SonicMQServerSession.handleMessage(SonicMQServe
      rSession.java:240)
      at com.sonicsw.pso.jboss.SonicMQServerSession.onMessage(SonicMQServerSes
      sion.java:163)
      at progress.message.jimpl.Session.nbB_(Unknown Source)
      at progress.message.jimpl.Session.run(Unknown Source)
      at progress.message.jimpl.QueueSession.run(Unknown Source)
      at com.sonicsw.pso.jboss.SonicMQServerSession.start(SonicMQServerSession
      .java:283)
      at progress.message.jimpl.aspi.cm.handleMessage(Unknown Source)
      at progress.message.zclient.MessageHandler.doNextWorkItem(Unknown Source
      )
      at progress.message.zclient.xk.threadMain(Unknown Source)
      at progress.message.zclient.DebugThread.run(Unknown Source)
      14:03:30,177 ERROR [JMSContainerInvoker] Exception in JMSCI message listener
      javax.ejb.EJBException: RuntimeException; CausedByException is:
      setRollbackOnly must only be called in the context of a transaction (EJB
      2.0 - 15.5.1)
      at org.jboss.ejb.plugins.LogInterceptor.handleException(LogInterceptor.j
      ava:356)
      at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:195)
      at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFacto
      ryFinderInterceptor.java:122)
      at org.jboss.ejb.MessageDrivenContainer.internalInvoke(MessageDrivenCont
      ainer.java:348)
      at org.jboss.ejb.Container.invoke(Container.java:674)
      at org.jboss.ejb.plugins.jms.JMSContainerInvoker.invoke(JMSContainerInvo
      ker.java:732)
      at org.jboss.ejb.plugins.jms.JMSContainerInvoker$MessageListenerImpl.onM
      essage(JMSContainerInvoker.java:1020)
      at com.sonicsw.pso.jboss.SonicMQServerSession.handleMessage(SonicMQServe
      rSession.java:240)
      at com.sonicsw.pso.jboss.SonicMQServerSession.onMessage(SonicMQServerSes
      sion.java:163)
      at progress.message.jimpl.Session.nbB_(Unknown Source)
      at progress.message.jimpl.Session.run(Unknown Source)
      at progress.message.jimpl.QueueSession.run(Unknown Source)
      at com.sonicsw.pso.jboss.SonicMQServerSession.start(SonicMQServerSession
      .java:283)
      at progress.message.jimpl.aspi.cm.handleMessage(Unknown Source)
      at progress.message.zclient.MessageHandler.doNextWorkItem(Unknown Source
      )
      at progress.message.zclient.xk.threadMain(Unknown Source)
      at progress.message.zclient.DebugThread.run(Unknown Source)
      java.lang.IllegalStateException: setRollbackOnly must only be called in the cont
      ext of a transaction (EJB 2.0 - 15.5.1)
      at org.jboss.ejb.MessageDrivenEnterpriseContext$MessageDrivenContextImpl
      .setRollbackOnly(MessageDrivenEnterpriseContext.java:214)
      at com.vantra.volts.core.messagedriven.execution.ExecutionMessageDrivenB
      ean.onMessage(ExecutionMessageDrivenBean.java:159)
      at sun.reflect.GeneratedMethodAccessor129.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
      sorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.jboss.ejb.MessageDrivenContainer$ContainerInterceptor.invoke(Mess
      ageDrivenContainer.java:434)
      at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invo
      ke(CachedConnectionInterceptor.java:186)
      at org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor.invoke(Message
      DrivenInstanceInterceptor.java:62)
      at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInte
      rceptor.java:84)
      at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxIntercep
      torCMT.java:216)
      at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:1
      04)
      at org.jboss.ejb.plugins.RunAsSecurityInterceptor.invoke(RunAsSecurityIn
      terceptor.java:90)
      at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:191)
      at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFacto
      ryFinderInterceptor.java:122)
      at org.jboss.ejb.MessageDrivenContainer.internalInvoke(MessageDrivenCont
      ainer.java:348)
      at org.jboss.ejb.Container.invoke(Container.java:674)
      at org.jboss.ejb.plugins.jms.JMSContainerInvoker.invoke(JMSContainerInvo
      ker.java:732)
      at org.jboss.ejb.plugins.jms.JMSContainerInvoker$MessageListenerImpl.onM
      essage(JMSContainerInvoker.java:1020)
      at com.sonicsw.pso.jboss.SonicMQServerSession.handleMessage(SonicMQServe
      rSession.java:240)
      at com.sonicsw.pso.jboss.SonicMQServerSession.onMessage(SonicMQServerSes
      sion.java:163)
      at progress.message.jimpl.Session.nbB_(Unknown Source)
      at progress.message.jimpl.Session.run(Unknown Source)
      at progress.message.jimpl.QueueSession.run(Unknown Source)
      at com.sonicsw.pso.jboss.SonicMQServerSession.start(SonicMQServerSession
      .java:283)
      at progress.message.jimpl.aspi.cm.handleMessage(Unknown Source)
      at progress.message.zclient.MessageHandler.doNextWorkItem(Unknown Source
      )
      at progress.message.zclient.xk.threadMain(Unknown Source)
      at progress.message.zclient.DebugThread.run(Unknown Source)".

      My context is transactional. Please let me know if I am doing something wrong.
      Thanks,
      Misak

        • 1. Re: Unable to call setRollbackOnly within MDB for 3.2.1

          No it isn't.

          Post your deployment descriptors.

          NOTE: I recently fixed a bug where it
          didn't recognise the transaction attribute
          if you specified the javax.jms.Message parameter.

          Regards,
          Adrian

          • 2. Re: Unable to call setRollbackOnly within MDB for 3.2.1
            mboulatian

            Hi Adrian,

            Sorry for late response. I was sick. Here are my deployment descriptors.

            ejb-jar.xml
            jboss.xml
            sonicmq-loader.xml - goes into conf directory
            sonicmq-ds.xml - goes into deploy directory
            standardjboss.xml also has changes to include sonic mq.

            In sonicmq-loader.xml entity section' property=queueName attribute must be the name of the actual queue in your sonic mq installation.

            Let me know if you have any other questions.

            • 3. Re: Unable to call setRollbackOnly within MDB for 3.2.1
              mboulatian

              Here is the actual provider jar that goes into lib directory. I could not attach more than 5 so here you go. Also put the following files from your sonic mq installation into the lib:

              sonic_ASPI.jar
              sonic_Client.jar
              sonic_Crypto.jar
              sonic_XA.jar

              • 4. Re: Unable to call setRollbackOnly within MDB for 3.2.1

                As I said above there is a bug if you specify
                the parameter in the transaction declaration.
                It is fixed in the latest (unreleased) versions
                of jboss.

                You can workaround the problem for now
                using the equivalent declaration:

                <assembly-descriptor>
                <container-transaction>

                <ejb-name>Blah</ejb-name>
                <method-name>onMessage</method-name>

                </container-transaction>
                </assembly-descriptor>

                Regards,
                Adrian