You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Aidan Skinner (JIRA)" <qp...@incubator.apache.org> on 2009/03/09 18:14:50 UTC

[jira] Assigned: (QPID-1670) runtime exceptions from onMessage can kill the dispatcher

     [ https://issues.apache.org/jira/browse/QPID-1670?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Aidan Skinner reassigned QPID-1670:
-----------------------------------

    Assignee: Aidan Skinner

> runtime exceptions 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: M5
>            Reporter: Aidan Skinner
>            Assignee: Aidan Skinner
>            Priority: Blocker
>             Fix For: M5
>
>
> BasicMessageConsumer.notifyMessage catches Exception and handles it, but unchecked exceptions (eg. RuntimeException) 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.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org