[
https://issues.apache.org/jira/browse/QPID-1670?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Keith Wall updated QPID-1670:
-----------------------------
Attachment: 0001-QPID-1670-Implement-an-UncaughtExceptionHandler-to-l.patch
Patch to implement UncaughtExceptionHandler to write errors causing abrupt
termination of threads to (client) application log.
> Errors thrown from onMessage can kill the dispatcher
> ----------------------------------------------------
>
> Key: QPID-1670
> URL: https://issues.apache.org/jira/browse/QPID-1670
> Project: Qpid
> Issue Type: Bug
> Components: Java Client
> Affects Versions: 0.5, 0.6
> Reporter: Aidan Skinner
> Assignee: Aidan Skinner
> Attachments:
> 0001-QPID-1670-Implement-an-UncaughtExceptionHandler-to-l.patch
>
>
> BasicMessageConsumer.notifyMessage catches Exception and handles it, but
> unchecked throwables will cause the Dispatcher thread in the Session to
> terminate after logging. It does not kill the session.
> The JMS spec has this to say:
> 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.
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]