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

Keith Wall updated QPID-6461:
-----------------------------
    Description: 
Frameworks such as Spring install a exception listener that responds to all 
exceptions by stopping/closing the connection.  With the changes in 0.32 
(QPID-6374), the task executor is now used for the invocation of the exception 
listener.  If the exception listener calls Connection#close(), it will close 
the sessions, then hang for two seconds awaiting shutdown of the task pool 
hence awaiting its own termination.  This naturally times-out, so the 
TaskExecutor interrupts the task (interrupting the #doClose method just after 
the sessions are closed). Fortunately, the connection itself is closed in a 
finally, so the connection is closed (albeit after a two second delay).



  was:
Frameworks such as Spring install a exception listener that responds to all 
exceptions by stopping/closing the connection.  With the changes in 0.32 
(QPID-6374), the task executor is now used for the invocation of the exception 
listener.  If the exception listener calls Connection#close(), it will close 
the sessions, then hang for two seconds awaiting shutdown of the task pool 
hence awaiting its own termination.  This naturally times-out, so the 
TaskExecutor interrupts the task (interrupting the close after 


The JMS Specification (4.3.8) states that:

bq. A Connection serializes execution of its ExceptionListener.

Currently, as the client uses an unbounded executor task pool, many invocations 
of the application's exception listener may be in flight concurrently. This 
behaviour may break an application.

This is a partly a long standing issue (the message bounces in 0-8..0-91 were 
potentially returned via the exception listener concurrently) and partly as a 
result of a more recent change (QPID-6374 in 0.32).  Here we started to use the 
task pool for redelivery of all asynchronous exceptions.





> Closing a connection in a JMS ExceptionListener logs an InterruptedException
> ----------------------------------------------------------------------------
>
>                 Key: QPID-6461
>                 URL: https://issues.apache.org/jira/browse/QPID-6461
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Client
>    Affects Versions: 0.32
>            Reporter: Keith Wall
>            Assignee: Keith Wall
>
> Frameworks such as Spring install a exception listener that responds to all 
> exceptions by stopping/closing the connection.  With the changes in 0.32 
> (QPID-6374), the task executor is now used for the invocation of the 
> exception listener.  If the exception listener calls Connection#close(), it 
> will close the sessions, then hang for two seconds awaiting shutdown of the 
> task pool hence awaiting its own termination.  This naturally times-out, so 
> the TaskExecutor interrupts the task (interrupting the #doClose method just 
> after the sessions are closed). Fortunately, the connection itself is closed 
> in a finally, so the connection is closed (albeit after a two second delay).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to