Andrew,
I've reworked DefaultMessageListenerContainer's exception handling for 2.0
RC1. There is an explicit "handleListenerSetupFailure" callback now, a
sibling of "handleListenerException" that will be invoked for
Session/MessageConsumer failures. DefaultMessageListenerContainer also
invokes a specified JMS ExceptionListener for listener setup failures as
well now.
Juergen
-----Original Message-----
From: spr...@li...
[mailto:spr...@li...] On Behalf
Of Andrew Smallbone
Sent: Tuesday, June 13, 2006 7:39 PM
To: spr...@li...
Subject: [Springframework-developer] Spring
2.0-M5DefaultMessageListenerContainer.executeListener() infinite loop
I'm exploring the jms features in spring 2.0-M5 - In particular the
listener/containers.
I think I've found a bug (or a feature when using TIB EMS) I'm trying to
write an ExceptionListener which will be able to recover from JMS server
connection failures.
If I kill the network connection from my application to the JMS server, TIB
throws an exception when MessageConsumer.receive() is next called.
DefaultMessageListenerContainer.executeListener() treats this as a listener
exception, logs it, and calls receive again, resulting in an infinite loop
(trace below).
Is this the correct behaviour or should the ExceptionListener be called for
this kind of error?
Any other approaches to recovering from connection failures?
regards
Andrew
[ERROR] 13:19:27,661
springframework.jms.listener.DefaultMessageListenerContainer - Execution of
JMS message listener failed
javax.jms.IllegalStateException: Consumer is closed
at
com.tibco.tibjms.TibjmsMessageConsumer._receive(TibjmsMessageConsumer.java:2
06)
at
com.tibco.tibjms.TibjmsMessageConsumer.receive(TibjmsMessageConsumer.java:35
5)
at
org.springframework.jms.listener.DefaultMessageListenerContainer.doExecuteLi
stener(DefaultMessageListenerContainer.java:301)
at
org.springframework.jms.listener.DefaultMessageListenerContainer.executeList
ener(DefaultMessageListenerContainer.java:292)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessag
eListenerInvoker.run(DefaultMessageListenerContainer.java:369)
at
org.springframework.core.task.SimpleAsyncTaskExecutor$ConcurrencyThrottlingR
unnable.run(SimpleAsyncTaskExecutor.java:203)
at java.lang.Thread.run(Thread.java:595)
Java Result: 1
--
Andrew Smallbone <an...@ro...>
_______________________________________________
Springframework-developer mailing list
Spr...@li...
https://lists.sourceforge.net/lists/listinfo/springframework-developer
|