[ 
https://issues.apache.org/activemq/browse/AMQ-2761?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=61124#action_61124
 ] 

Timothy Bish commented on AMQ-2761:
-----------------------------------

Your client should be catching all exceptions in the onMessage method.

>From the JMS 1.1 spec...

4.5.2 Asynchronous Delivery

A client can register an object that implements the JMS MessageListener 
interface with a MessageConsumer. As messages arrive for the consumer, the 
provider delivers them by calling the listener's onMessage method.

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.

The result of a listener throwing a RuntimeException depends on the session's 
acknowledgment mode.

    * AUTO_ACKNOWLEDGE or DUPS_OK_ACKNOWLEDGE - the message will be immediately 
redelivered. The number of times a JMS provider will redeliver the same message 
before giving up is provider-dependent. The JMSRedelivered message header field 
will be set for a message redelivered under these circumstances.
    * CLIENT_ACKNOWLEDGE - the next message for the listener is delivered. If a 
client wishes to have the previous unacknowledged message redelivered, it must 
manually recover the session.
    * Transacted Session - the next message for the listener is delivered. The 
client can either commit or roll back the session (in other words, a 
RuntimeException does not automatically rollback the session).

JMS providers should flag clients with message listeners that are throwing 
RuntimeExceptions as possibly malfunctioning.


> Uncaught exception in subscriber ends subscription
> --------------------------------------------------
>
>                 Key: AMQ-2761
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2761
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.3.0, 5.3.2
>            Reporter: ffffff ffffff
>             Fix For: 5.4.1
>
>         Attachments: TestMessageSenderer.java
>
>
> We are seeing an issue with ActiveMQ Topic subscription when there is an 
> uncaught exception.
> It appears to be related to an old report (but who knows) :
> http://mail-archives.apache.org/mod_mbox/activemq-users/200805.mbox/<[email protected]>
>  
> Basically, what happens is our Consumer (onMessage) was throwing an NPE. 
> After that happens, the consumer no longer receives any more messages.
> Following it through in the debugger - when the exception is thrown, what we 
> see is the the "ActiveMQ Session Task" thread completes... 
> After that, it never seems to execute again. Seems some state in the 
> PooledTaskRunner gets borked? Investigating further - but at first glance it 
> appears it thinks the connection is shutting down...

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to