You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by srouil <sa...@bluewin.ch> on 2008/04/17 10:42:23 UTC
Messages delivery to JBoss MDB stopped after an exception
Hi all,
I have configured Active MQ 5.0.0 integration in JBoss AS 4.0.5 according to
http://activemq.apache.org/integrating-apache-activemq-with-jboss.html.
I modified also jboss.xml deployment descriptor so that my MDB uses
"Standard Message Inflow Driven Bean" container configuration and
"message-inflow-driven-bean" invoker proxy binding of JBoss:
<message-driven>
<ejb-name>SimpleQueueConsumer</ejb-name>
<resource-adapter-name>activemq-ra.rar</resource-adapter-name>
<configuration-name>Standard Message Inflow Driven
Bean</configuration-name>
</message-driven>
With this setup, everything works fine until I simulate a RuntimeException
exception beeing thrown from MDB onMessage() method. When doing this I see
that:
- Message remains in queue (=> OK)
- No further message is delivered to my MDB
- Subscription to queue for my MDB does not exist anymore (checked using
jconsole / JMX)
JBoss server log contains following error:
2008-04-17 07:03:06,143 ERROR [org.apache.activemq.ActiveMQSession]
(WorkManager(3)-10:) error dispatching message:
javax.ejb.TransactionRolledbackLocalException: bye
at
org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:262)
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:136)
at
org.jboss.ejb.MessageDrivenContainer.internalInvoke(MessageDrivenContainer.java:402)
at org.jboss.ejb.Container.invoke(Container.java:954)
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
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at
org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:169)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:118)
at
org.jboss.invocation.InvokerInterceptor.invokeLocal(InvokerInterceptor.java:209)
at
org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:195)
at
org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
at
org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.delivery(MessageEndpointInterceptor.java:263)
at
org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.invoke(MessageEndpointInterceptor.java:140)
at
org.jboss.proxy.ClientMethodInterceptor.invoke(ClientMethodInterceptor.java:74)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
at $Proxy85.onMessage(Unknown Source)
at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.onMessage(MessageEndpointProxy.java:116)
at
org.apache.activemq.ra.MessageEndpointProxy.onMessage(MessageEndpointProxy.java:59)
at org.apache.activemq.ActiveMQSession.run(ActiveMQSession.java:727)
at org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:164)
at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204)
at
org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:275)
at
EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:743)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.RuntimeException: bye
at
com.acsinc.test.jms.ejb.SimpleQueueConsumerBean.onMessage(SimpleQueueConsumerBean.java:59)
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 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)
... 34 more
2008-04-17 07:03:06,174 INFO [org.apache.activemq.ra.ServerSessionImpl:1]
(WorkManager(3)-10:) Endpoint failed to process message. Reason:
java.lang.RuntimeException: Endpoint after delivery notification failure
2008-04-17 07:03:06,180 WARN [org.jboss.tm.TransactionImpl]
(WorkManager(3)-10:) XAException: tx=TransactionImpl:XidImpl[FormatId=257,
GlobalId=WS007/5, BranchQual=, localId=5] errorCode=XAER_RMFAIL
javax.transaction.xa.XAException: The connection is already closed
at
org.apache.activemq.TransactionContext.toXAException(TransactionContext.java:624)
at
org.apache.activemq.TransactionContext.setXid(TransactionContext.java:559)
at org.apache.activemq.TransactionContext.end(TransactionContext.java:339)
at
org.apache.activemq.ra.LocalAndXATransaction.end(LocalAndXATransaction.java:90)
at
org.jboss.tm.TransactionImpl$Resource.endResource(TransactionImpl.java:2143)
at
org.jboss.tm.TransactionImpl$Resource.endResource(TransactionImpl.java:2118)
at org.jboss.tm.TransactionImpl.endResources(TransactionImpl.java:1462)
at org.jboss.tm.TransactionImpl.rollback(TransactionImpl.java:411)
at org.jboss.tm.TxManager.rollback(TxManager.java:364)
at
org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.endTransaction(MessageEndpointInterceptor.java:430)
at
org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.finish(MessageEndpointInterceptor.java:308)
at
org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.release(MessageEndpointInterceptor.java:166)
at
org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.invoke(MessageEndpointInterceptor.java:126)
at
org.jboss.proxy.ClientMethodInterceptor.invoke(ClientMethodInterceptor.java:74)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
at $Proxy85.release(Unknown Source)
at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointDead.enter(MessageEndpointProxy.java:136)
at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointState.transition(MessageEndpointProxy.java:94)
at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.release(MessageEndpointProxy.java:129)
at
org.apache.activemq.ra.MessageEndpointProxy.release(MessageEndpointProxy.java:67)
at
org.apache.activemq.ra.ServerSessionImpl.close(ServerSessionImpl.java:250)
at
org.apache.activemq.ra.ServerSessionPoolImpl.removeFromPool(ServerSessionPoolImpl.java:181)
at org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:176)
at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204)
at
org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:275)
at
EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:743)
at java.lang.Thread.run(Thread.java:595)
Caused by: org.apache.activemq.ConnectionClosedException: The connection is
already closed
at
org.apache.activemq.ActiveMQConnection.checkClosed(ActiveMQConnection.java:1244)
at
org.apache.activemq.ActiveMQConnection.checkClosedOrFailed(ActiveMQConnection.java:1231)
at
org.apache.activemq.TransactionContext.setXid(TransactionContext.java:556)
... 25 more
2008-04-17 07:03:06,209 WARN [org.jboss.tm.TransactionImpl]
(WorkManager(3)-10:) XAException: tx=TransactionImpl:XidImpl[FormatId=257,
GlobalId=WS007/5, BranchQual=, localId=5] errorCode=XAER_RMFAIL
javax.transaction.xa.XAException: The connection is already closed
at
org.apache.activemq.TransactionContext.toXAException(TransactionContext.java:624)
at
org.apache.activemq.TransactionContext.rollback(TransactionContext.java:423)
at
org.apache.activemq.ra.LocalAndXATransaction.rollback(LocalAndXATransaction.java:128)
at
org.jboss.tm.TransactionImpl$Resource.rollback(TransactionImpl.java:2277)
at
org.jboss.tm.TransactionImpl.rollbackResources(TransactionImpl.java:1837)
at org.jboss.tm.TransactionImpl.rollback(TransactionImpl.java:412)
at org.jboss.tm.TxManager.rollback(TxManager.java:364)
at
org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.endTransaction(MessageEndpointInterceptor.java:430)
at
org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.finish(MessageEndpointInterceptor.java:308)
at
org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.release(MessageEndpointInterceptor.java:166)
at
org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.invoke(MessageEndpointInterceptor.java:126)
at
org.jboss.proxy.ClientMethodInterceptor.invoke(ClientMethodInterceptor.java:74)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
at $Proxy85.release(Unknown Source)
at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointDead.enter(MessageEndpointProxy.java:136)
at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointState.transition(MessageEndpointProxy.java:94)
at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.release(MessageEndpointProxy.java:129)
at
org.apache.activemq.ra.MessageEndpointProxy.release(MessageEndpointProxy.java:67)
at
org.apache.activemq.ra.ServerSessionImpl.close(ServerSessionImpl.java:250)
at
org.apache.activemq.ra.ServerSessionPoolImpl.removeFromPool(ServerSessionPoolImpl.java:181)
at org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:176)
at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204)
at
org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:275)
at
EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:743)
at java.lang.Thread.run(Thread.java:595)
Caused by: org.apache.activemq.ConnectionClosedException: The connection is
already closed
at
org.apache.activemq.ActiveMQConnection.checkClosed(ActiveMQConnection.java:1244)
at
org.apache.activemq.ActiveMQConnection.checkClosedOrFailed(ActiveMQConnection.java:1231)
at
org.apache.activemq.TransactionContext.rollback(TransactionContext.java:407)
... 23 more
Hence my questions:
- Is it correct to integrate Active MQ with MDB deployed in JBoss by using
this container configuration "Standard Message Inflow Driven Bean" and
specify Active MQ RA name? I have tried alternative method where JBoss MQ is
replaced by Active MQ according to JBoss configuration guide. However I
cannot get this working because Active MQ does not implement
Connection.getConnectionConsumer() called by JBoss MDB container.
- What needs to be configured in JBoss AS and Active MQ so that MDB
Container continues to consume messages after an exception in MDB?
Thanks in advance for your help,
Samuel
--
View this message in context: http://www.nabble.com/Messages-delivery-to-JBoss-MDB-stopped-after-an-exception-tp16741417s2354p16741417.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.
Re: Messages delivery to JBoss MDB stopped after an exception
Posted by srouil <sa...@bluewin.ch>.
Hello,
If I look at EJB 2.1 specification, section 18.3.3 it describes behaviour of
container in case the bean listener method throws an exception. Here we
speak about both checked and un-checked exceptions.
Don't you think that it is a bit tough that the whole MDB is killed (does
not receive any message anymore from JMS) in case one bean instance throw an
exception?
For me it makes Active MQ un-usable as JMS provider for my J2EE application
including MDBs. Or did I miss something with the integration with JBoss?
Best regards,
Samuel
--
View this message in context: http://www.nabble.com/Messages-delivery-to-JBoss-MDB-stopped-after-an-exception-tp16741417s2354p16748010.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.
Re: Messages delivery to JBoss MDB stopped after an exception
Posted by Dhruba Bandopadhyay <bd...@gmail.com>.
That's very interesting and good to know for me also. Thanks for
making this known Rob.
I assume it is okay to throw checked exceptions in general then from
consumers without any change in jms behaviour?
On Thu, Apr 17, 2008 at 1:44 PM, Rob Davies <ra...@gmail.com> wrote:
>
>
> On 17 Apr 2008, at 09:42, srouil wrote:
>
>
> >
> > Hi all,
> >
> > I have configured Active MQ 5.0.0 integration in JBoss AS 4.0.5 according
> to
> > http://activemq.apache.org/integrating-apache-activemq-with-jboss.html.
> >
> > I modified also jboss.xml deployment descriptor so that my MDB uses
> > "Standard Message Inflow Driven Bean" container configuration and
> > "message-inflow-driven-bean" invoker proxy binding of JBoss:
> >
> > <message-driven>
> > <ejb-name>SimpleQueueConsumer</ejb-name>
> > <resource-adapter-name>activemq-ra.rar</resource-adapter-name>
> > <configuration-name>Standard Message Inflow Driven
> > Bean</configuration-name>
> > </message-driven>
> >
> > With this setup, everything works fine until I simulate a RuntimeException
> > exception beeing thrown from MDB onMessage() method. When doing this I see
> > that:
> > - Message remains in queue (=> OK)
> > - No further message is delivered to my MDB
> > - Subscription to queue for my MDB does not exist anymore (checked using
> > jconsole / JMX)
> >
> > JBoss server log contains following error:
> >
> > 2008-04-17 07:03:06,143 ERROR [org.apache.activemq.ActiveMQSession]
> > (WorkManager(3)-10:) error dispatching message:
> > javax.ejb.TransactionRolledbackLocalException: bye
> > at
> >
> org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:262)
> > 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:136)
> > at
> >
> org.jboss.ejb.MessageDrivenContainer.internalInvoke(MessageDrivenContainer.java:402)
> > at org.jboss.ejb.Container.invoke(Container.java:954)
> > 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
> >
> org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
> > at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
> > at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
> > at
> >
> org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
> > at
> org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
> > at
> >
> org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:169)
> > at
> org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:118)
> > at
> >
> org.jboss.invocation.InvokerInterceptor.invokeLocal(InvokerInterceptor.java:209)
> > at
> >
> org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:195)
> > at
> >
> org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
> > at
> >
> org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.delivery(MessageEndpointInterceptor.java:263)
> > at
> >
> org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.invoke(MessageEndpointInterceptor.java:140)
> > at
> >
> org.jboss.proxy.ClientMethodInterceptor.invoke(ClientMethodInterceptor.java:74)
> > at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
> > at $Proxy85.onMessage(Unknown Source)
> > at
> >
> org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.onMessage(MessageEndpointProxy.java:116)
> > at
> >
> org.apache.activemq.ra.MessageEndpointProxy.onMessage(MessageEndpointProxy.java:59)
> > at
> org.apache.activemq.ActiveMQSession.run(ActiveMQSession.java:727)
> > at
> org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:164)
> > at
> org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204)
> > at
> > org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:275)
> > at
> >
> EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:743)
> > at java.lang.Thread.run(Thread.java:595)
> > Caused by: java.lang.RuntimeException: bye
> > at
> >
> com.acsinc.test.jms.ejb.SimpleQueueConsumerBean.onMessage(SimpleQueueConsumerBean.java:59)
> > 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 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)
> > ... 34 more
> > 2008-04-17 07:03:06,174 INFO [org.apache.activemq.ra.ServerSessionImpl:1]
> > (WorkManager(3)-10:) Endpoint failed to process message. Reason:
> > java.lang.RuntimeException: Endpoint after delivery notification failure
> > 2008-04-17 07:03:06,180 WARN [org.jboss.tm.TransactionImpl]
> > (WorkManager(3)-10:) XAException: tx=TransactionImpl:XidImpl[FormatId=257,
> > GlobalId=WS007/5, BranchQual=, localId=5] errorCode=XAER_RMFAIL
> > javax.transaction.xa.XAException: The connection is already closed
> > at
> >
> org.apache.activemq.TransactionContext.toXAException(TransactionContext.java:624)
> > at
> > org.apache.activemq.TransactionContext.setXid(TransactionContext.java:559)
> > at
> org.apache.activemq.TransactionContext.end(TransactionContext.java:339)
> > at
> >
> org.apache.activemq.ra.LocalAndXATransaction.end(LocalAndXATransaction.java:90)
> > at
> >
> org.jboss.tm.TransactionImpl$Resource.endResource(TransactionImpl.java:2143)
> > at
> >
> org.jboss.tm.TransactionImpl$Resource.endResource(TransactionImpl.java:2118)
> > at
> org.jboss.tm.TransactionImpl.endResources(TransactionImpl.java:1462)
> > at org.jboss.tm.TransactionImpl.rollback(TransactionImpl.java:411)
> > at org.jboss.tm.TxManager.rollback(TxManager.java:364)
> > at
> >
> org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.endTransaction(MessageEndpointInterceptor.java:430)
> > at
> >
> org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.finish(MessageEndpointInterceptor.java:308)
> > at
> >
> org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.release(MessageEndpointInterceptor.java:166)
> > at
> >
> org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.invoke(MessageEndpointInterceptor.java:126)
> > at
> >
> org.jboss.proxy.ClientMethodInterceptor.invoke(ClientMethodInterceptor.java:74)
> > at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
> > at $Proxy85.release(Unknown Source)
> > at
> >
> org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointDead.enter(MessageEndpointProxy.java:136)
> > at
> >
> org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointState.transition(MessageEndpointProxy.java:94)
> > at
> >
> org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.release(MessageEndpointProxy.java:129)
> > at
> >
> org.apache.activemq.ra.MessageEndpointProxy.release(MessageEndpointProxy.java:67)
> > at
> > org.apache.activemq.ra.ServerSessionImpl.close(ServerSessionImpl.java:250)
> > at
> >
> org.apache.activemq.ra.ServerSessionPoolImpl.removeFromPool(ServerSessionPoolImpl.java:181)
> > at
> org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:176)
> > at
> org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204)
> > at
> > org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:275)
> > at
> >
> EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:743)
> > at java.lang.Thread.run(Thread.java:595)
> > Caused by: org.apache.activemq.ConnectionClosedException: The connection
> is
> > already closed
> > at
> >
> org.apache.activemq.ActiveMQConnection.checkClosed(ActiveMQConnection.java:1244)
> > at
> >
> org.apache.activemq.ActiveMQConnection.checkClosedOrFailed(ActiveMQConnection.java:1231)
> > at
> > org.apache.activemq.TransactionContext.setXid(TransactionContext.java:556)
> > ... 25 more
> > 2008-04-17 07:03:06,209 WARN [org.jboss.tm.TransactionImpl]
> > (WorkManager(3)-10:) XAException: tx=TransactionImpl:XidImpl[FormatId=257,
> > GlobalId=WS007/5, BranchQual=, localId=5] errorCode=XAER_RMFAIL
> > javax.transaction.xa.XAException: The connection is already closed
> > at
> >
> org.apache.activemq.TransactionContext.toXAException(TransactionContext.java:624)
> > at
> >
> org.apache.activemq.TransactionContext.rollback(TransactionContext.java:423)
> > at
> >
> org.apache.activemq.ra.LocalAndXATransaction.rollback(LocalAndXATransaction.java:128)
> > at
> > org.jboss.tm.TransactionImpl$Resource.rollback(TransactionImpl.java:2277)
> > at
> > org.jboss.tm.TransactionImpl.rollbackResources(TransactionImpl.java:1837)
> > at org.jboss.tm.TransactionImpl.rollback(TransactionImpl.java:412)
> > at org.jboss.tm.TxManager.rollback(TxManager.java:364)
> > at
> >
> org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.endTransaction(MessageEndpointInterceptor.java:430)
> > at
> >
> org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.finish(MessageEndpointInterceptor.java:308)
> > at
> >
> org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.release(MessageEndpointInterceptor.java:166)
> > at
> >
> org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor.invoke(MessageEndpointInterceptor.java:126)
> > at
> >
> org.jboss.proxy.ClientMethodInterceptor.invoke(ClientMethodInterceptor.java:74)
> > at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
> > at $Proxy85.release(Unknown Source)
> > at
> >
> org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointDead.enter(MessageEndpointProxy.java:136)
> > at
> >
> org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointState.transition(MessageEndpointProxy.java:94)
> > at
> >
> org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.release(MessageEndpointProxy.java:129)
> > at
> >
> org.apache.activemq.ra.MessageEndpointProxy.release(MessageEndpointProxy.java:67)
> > at
> > org.apache.activemq.ra.ServerSessionImpl.close(ServerSessionImpl.java:250)
> > at
> >
> org.apache.activemq.ra.ServerSessionPoolImpl.removeFromPool(ServerSessionPoolImpl.java:181)
> > at
> org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:176)
> > at
> org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204)
> > at
> > org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:275)
> > at
> >
> EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:743)
> > at java.lang.Thread.run(Thread.java:595)
> > Caused by: org.apache.activemq.ConnectionClosedException: The connection
> is
> > already closed
> > at
> >
> org.apache.activemq.ActiveMQConnection.checkClosed(ActiveMQConnection.java:1244)
> > at
> >
> org.apache.activemq.ActiveMQConnection.checkClosedOrFailed(ActiveMQConnection.java:1231)
> > at
> >
> org.apache.activemq.TransactionContext.rollback(TransactionContext.java:407)
> > ... 23 more
> >
> > Hence my questions:
> > - Is it correct to integrate Active MQ with MDB deployed in JBoss by using
> > this container configuration "Standard Message Inflow Driven Bean" and
> > specify Active MQ RA name? I have tried alternative method where JBoss MQ
> is
> > replaced by Active MQ according to JBoss configuration guide. However I
> > cannot get this working because Active MQ does not implement
> > Connection.getConnectionConsumer() called by JBoss MDB container.
> > - What needs to be configured in JBoss AS and Active MQ so that MDB
> > Container continues to consume messages after an exception in MDB?
> >
> > Thanks in advance for your help,
> > Samuel
> > --
> > View this message in context:
> http://www.nabble.com/Messages-delivery-to-JBoss-MDB-stopped-after-an-exception-tp16741417s2354p16741417.html
> > Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> >
> >
>
>
> According to JMS specfication v1.1, section 4.5.2 "Asynchronous Delivery",
> an application throws a RuntimeException from within a message listener is
> considered as a programming error. The following is quoted from section
> 4.5.2:
>
> "It is possible for a listener to throw a RuntimeException; however, this
> is
> considered a client programming error. Well-behaved listeners should catch
> such exceptions and attempt to divert messages causing them to some form of
> application-specific unprocessable message destination.
>
> cheers,
>
> Rob
>
> http://open.iona.com/ -Enterprise Open Integration
> http://rajdavies.blogspot.com/
>
>
>
>
Re: Messages delivery to JBoss MDB stopped after an exception
Posted by Rob Davies <ra...@gmail.com>.
On 17 Apr 2008, at 09:42, srouil wrote:
>
> Hi all,
>
> I have configured Active MQ 5.0.0 integration in JBoss AS 4.0.5
> according to
> http://activemq.apache.org/integrating-apache-activemq-with-
> jboss.html.
>
> I modified also jboss.xml deployment descriptor so that my MDB uses
> "Standard Message Inflow Driven Bean" container configuration and
> "message-inflow-driven-bean" invoker proxy binding of JBoss:
>
> <message-driven>
> <ejb-name>SimpleQueueConsumer</ejb-name>
> <resource-adapter-name>activemq-ra.rar</resource-adapter-name>
> <configuration-name>Standard Message Inflow Driven
> Bean</configuration-name>
> </message-driven>
>
> With this setup, everything works fine until I simulate a
> RuntimeException
> exception beeing thrown from MDB onMessage() method. When doing this
> I see
> that:
> - Message remains in queue (=> OK)
> - No further message is delivered to my MDB
> - Subscription to queue for my MDB does not exist anymore (checked
> using
> jconsole / JMX)
>
> JBoss server log contains following error:
>
> 2008-04-17 07:03:06,143 ERROR [org.apache.activemq.ActiveMQSession]
> (WorkManager(3)-10:) error dispatching message:
> javax.ejb.TransactionRolledbackLocalException: bye
> at
> org
> .jboss
> .ejb
> .plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:
> 262)
> 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:136)
> at
> org
> .jboss
> .ejb
> .MessageDrivenContainer.internalInvoke(MessageDrivenContainer.java:
> 402)
> at org.jboss.ejb.Container.invoke(Container.java:954)
> 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
> org
> .jboss
> .mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:
> 155)
> at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
> at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
> at
> org
> .jboss
> .mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
> at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:
> 659)
> at
> org.jboss.invocation.local.LocalInvoker
> $MBeanServerAction.invoke(LocalInvoker.java:169)
> at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:
> 118)
> at
> org
> .jboss
> .invocation.InvokerInterceptor.invokeLocal(InvokerInterceptor.java:
> 209)
> at
> org
> .jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:
> 195)
> at
> org
> .jboss
> .proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
> at
> org
> .jboss
> .ejb
> .plugins
> .inflow
> .MessageEndpointInterceptor.delivery(MessageEndpointInterceptor.java:
> 263)
> at
> org
> .jboss
> .ejb
> .plugins
> .inflow
> .MessageEndpointInterceptor.invoke(MessageEndpointInterceptor.java:
> 140)
> at
> org
> .jboss
> .proxy.ClientMethodInterceptor.invoke(ClientMethodInterceptor.java:74)
> at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
> at $Proxy85.onMessage(Unknown Source)
> at
> org.apache.activemq.ra.MessageEndpointProxy
> $MessageEndpointAlive.onMessage(MessageEndpointProxy.java:116)
> at
> org
> .apache
> .activemq
> .ra.MessageEndpointProxy.onMessage(MessageEndpointProxy.java:59)
> at org.apache.activemq.ActiveMQSession.run(ActiveMQSession.java:727)
> at
> org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:
> 164)
> at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204)
> at
> org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:
> 275)
> at
> EDU.oswego.cs.dl.util.concurrent.PooledExecutor
> $Worker.run(PooledExecutor.java:743)
> at java.lang.Thread.run(Thread.java:595)
> Caused by: java.lang.RuntimeException: bye
> at
> com
> .acsinc
> .test
> .jms
> .ejb.SimpleQueueConsumerBean.onMessage(SimpleQueueConsumerBean.java:
> 59)
> 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 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)
> ... 34 more
> 2008-04-17 07:03:06,174 INFO
> [org.apache.activemq.ra.ServerSessionImpl:1]
> (WorkManager(3)-10:) Endpoint failed to process message. Reason:
> java.lang.RuntimeException: Endpoint after delivery notification
> failure
> 2008-04-17 07:03:06,180 WARN [org.jboss.tm.TransactionImpl]
> (WorkManager(3)-10:) XAException:
> tx=TransactionImpl:XidImpl[FormatId=257,
> GlobalId=WS007/5, BranchQual=, localId=5] errorCode=XAER_RMFAIL
> javax.transaction.xa.XAException: The connection is already closed
> at
> org
> .apache
> .activemq.TransactionContext.toXAException(TransactionContext.java:
> 624)
> at
> org
> .apache.activemq.TransactionContext.setXid(TransactionContext.java:
> 559)
> at
> org.apache.activemq.TransactionContext.end(TransactionContext.java:
> 339)
> at
> org
> .apache
> .activemq.ra.LocalAndXATransaction.end(LocalAndXATransaction.java:90)
> at
> org.jboss.tm.TransactionImpl
> $Resource.endResource(TransactionImpl.java:2143)
> at
> org.jboss.tm.TransactionImpl
> $Resource.endResource(TransactionImpl.java:2118)
> at org.jboss.tm.TransactionImpl.endResources(TransactionImpl.java:
> 1462)
> at org.jboss.tm.TransactionImpl.rollback(TransactionImpl.java:411)
> at org.jboss.tm.TxManager.rollback(TxManager.java:364)
> at
> org
> .jboss
> .ejb
> .plugins
> .inflow
> .MessageEndpointInterceptor
> .endTransaction(MessageEndpointInterceptor.java:430)
> at
> org
> .jboss
> .ejb
> .plugins
> .inflow
> .MessageEndpointInterceptor.finish(MessageEndpointInterceptor.java:
> 308)
> at
> org
> .jboss
> .ejb
> .plugins
> .inflow
> .MessageEndpointInterceptor.release(MessageEndpointInterceptor.java:
> 166)
> at
> org
> .jboss
> .ejb
> .plugins
> .inflow
> .MessageEndpointInterceptor.invoke(MessageEndpointInterceptor.java:
> 126)
> at
> org
> .jboss
> .proxy.ClientMethodInterceptor.invoke(ClientMethodInterceptor.java:74)
> at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
> at $Proxy85.release(Unknown Source)
> at
> org.apache.activemq.ra.MessageEndpointProxy
> $MessageEndpointDead.enter(MessageEndpointProxy.java:136)
> at
> org.apache.activemq.ra.MessageEndpointProxy
> $MessageEndpointState.transition(MessageEndpointProxy.java:94)
> at
> org.apache.activemq.ra.MessageEndpointProxy
> $MessageEndpointAlive.release(MessageEndpointProxy.java:129)
> at
> org
> .apache
> .activemq.ra.MessageEndpointProxy.release(MessageEndpointProxy.java:
> 67)
> at
> org
> .apache.activemq.ra.ServerSessionImpl.close(ServerSessionImpl.java:
> 250)
> at
> org
> .apache
> .activemq
> .ra.ServerSessionPoolImpl.removeFromPool(ServerSessionPoolImpl.java:
> 181)
> at
> org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:
> 176)
> at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204)
> at
> org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:
> 275)
> at
> EDU.oswego.cs.dl.util.concurrent.PooledExecutor
> $Worker.run(PooledExecutor.java:743)
> at java.lang.Thread.run(Thread.java:595)
> Caused by: org.apache.activemq.ConnectionClosedException: The
> connection is
> already closed
> at
> org
> .apache
> .activemq.ActiveMQConnection.checkClosed(ActiveMQConnection.java:1244)
> at
> org
> .apache
> .activemq
> .ActiveMQConnection.checkClosedOrFailed(ActiveMQConnection.java:1231)
> at
> org
> .apache.activemq.TransactionContext.setXid(TransactionContext.java:
> 556)
> ... 25 more
> 2008-04-17 07:03:06,209 WARN [org.jboss.tm.TransactionImpl]
> (WorkManager(3)-10:) XAException:
> tx=TransactionImpl:XidImpl[FormatId=257,
> GlobalId=WS007/5, BranchQual=, localId=5] errorCode=XAER_RMFAIL
> javax.transaction.xa.XAException: The connection is already closed
> at
> org
> .apache
> .activemq.TransactionContext.toXAException(TransactionContext.java:
> 624)
> at
> org
> .apache.activemq.TransactionContext.rollback(TransactionContext.java:
> 423)
> at
> org
> .apache
> .activemq
> .ra.LocalAndXATransaction.rollback(LocalAndXATransaction.java:128)
> at
> org.jboss.tm.TransactionImpl$Resource.rollback(TransactionImpl.java:
> 2277)
> at
> org.jboss.tm.TransactionImpl.rollbackResources(TransactionImpl.java:
> 1837)
> at org.jboss.tm.TransactionImpl.rollback(TransactionImpl.java:412)
> at org.jboss.tm.TxManager.rollback(TxManager.java:364)
> at
> org
> .jboss
> .ejb
> .plugins
> .inflow
> .MessageEndpointInterceptor
> .endTransaction(MessageEndpointInterceptor.java:430)
> at
> org
> .jboss
> .ejb
> .plugins
> .inflow
> .MessageEndpointInterceptor.finish(MessageEndpointInterceptor.java:
> 308)
> at
> org
> .jboss
> .ejb
> .plugins
> .inflow
> .MessageEndpointInterceptor.release(MessageEndpointInterceptor.java:
> 166)
> at
> org
> .jboss
> .ejb
> .plugins
> .inflow
> .MessageEndpointInterceptor.invoke(MessageEndpointInterceptor.java:
> 126)
> at
> org
> .jboss
> .proxy.ClientMethodInterceptor.invoke(ClientMethodInterceptor.java:74)
> at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
> at $Proxy85.release(Unknown Source)
> at
> org.apache.activemq.ra.MessageEndpointProxy
> $MessageEndpointDead.enter(MessageEndpointProxy.java:136)
> at
> org.apache.activemq.ra.MessageEndpointProxy
> $MessageEndpointState.transition(MessageEndpointProxy.java:94)
> at
> org.apache.activemq.ra.MessageEndpointProxy
> $MessageEndpointAlive.release(MessageEndpointProxy.java:129)
> at
> org
> .apache
> .activemq.ra.MessageEndpointProxy.release(MessageEndpointProxy.java:
> 67)
> at
> org
> .apache.activemq.ra.ServerSessionImpl.close(ServerSessionImpl.java:
> 250)
> at
> org
> .apache
> .activemq
> .ra.ServerSessionPoolImpl.removeFromPool(ServerSessionPoolImpl.java:
> 181)
> at
> org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:
> 176)
> at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204)
> at
> org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:
> 275)
> at
> EDU.oswego.cs.dl.util.concurrent.PooledExecutor
> $Worker.run(PooledExecutor.java:743)
> at java.lang.Thread.run(Thread.java:595)
> Caused by: org.apache.activemq.ConnectionClosedException: The
> connection is
> already closed
> at
> org
> .apache
> .activemq.ActiveMQConnection.checkClosed(ActiveMQConnection.java:1244)
> at
> org
> .apache
> .activemq
> .ActiveMQConnection.checkClosedOrFailed(ActiveMQConnection.java:1231)
> at
> org
> .apache.activemq.TransactionContext.rollback(TransactionContext.java:
> 407)
> ... 23 more
>
> Hence my questions:
> - Is it correct to integrate Active MQ with MDB deployed in JBoss by
> using
> this container configuration "Standard Message Inflow Driven Bean" and
> specify Active MQ RA name? I have tried alternative method where
> JBoss MQ is
> replaced by Active MQ according to JBoss configuration guide.
> However I
> cannot get this working because Active MQ does not implement
> Connection.getConnectionConsumer() called by JBoss MDB container.
> - What needs to be configured in JBoss AS and Active MQ so that MDB
> Container continues to consume messages after an exception in MDB?
>
> Thanks in advance for your help,
> Samuel
> --
> View this message in context: http://www.nabble.com/Messages-delivery-to-JBoss-MDB-stopped-after-an-exception-tp16741417s2354p16741417.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
According to JMS specfication v1.1, section 4.5.2 "Asynchronous
Delivery", an application throws a RuntimeException from within a
message listener is considered as a programming error. The following
is quoted from section 4.5.2:
"It is possible for a listener to throw a RuntimeException; however,
this is
considered a client programming error. Well-behaved listeners should
catch
such exceptions and attempt to divert messages causing them to some
form of
application-specific unprocessable message destination.
cheers,
Rob
http://open.iona.com/ -Enterprise Open Integration
http://rajdavies.blogspot.com/