From c111bd75471719a21086ffd336929baa4c474f3e Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 22 May 2015 17:24:26 +0200 Subject: [PATCH] Message listener containers only call Session.recover() in client acknowledge mode Issue: SPR-13052 (cherry picked from commit fee63fd) --- .../jms/listener/AbstractMessageListenerContainer.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java index 58c0c13380e..514c12be156 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java @@ -69,7 +69,7 @@ import org.springframework.util.ReflectionUtils; * consider setting "sessionTransacted" to "true" instead. *
  • "sessionAcknowledgeMode" set to "CLIENT_ACKNOWLEDGE": * Automatic message acknowledgment after successful listener execution; - * no redelivery in case of exception thrown. + * best-effort redelivery in case of exception thrown. *
  • "sessionAcknowledgeMode" set to "DUPS_OK_ACKNOWLEDGE": * Lazy message acknowledgment during or after listener execution; * potential redelivery in case of exception thrown. @@ -601,6 +601,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen rollbackIfNecessary(session); throw new MessageRejectedWhileStoppingException(); } + try { invokeListener(session, message); } @@ -630,6 +631,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen @SuppressWarnings("rawtypes") protected void invokeListener(Session session, Message message) throws JMSException { Object listener = getMessageListener(); + if (listener instanceof SessionAwareMessageListener) { doInvokeListener((SessionAwareMessageListener) listener, session, message); } @@ -731,7 +733,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen JmsUtils.rollbackIfNecessary(session); } } - else { + else if (isClientAcknowledge(session)) { session.recover(); } } @@ -753,7 +755,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen JmsUtils.rollbackIfNecessary(session); } } - else { + else if (isClientAcknowledge(session)) { session.recover(); } }