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 <[EMAIL PROTECTED]> 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/
>
>
>
>

Reply via email to