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/



Reply via email to