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 60d36bb922..5dece40e8a 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.
@@ -631,6 +631,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
rollbackIfNecessary(session);
throw new MessageRejectedWhileStoppingException();
}
+
try {
invokeListener(session, message);
}
@@ -660,6 +661,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);
}
@@ -761,7 +763,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
JmsUtils.rollbackIfNecessary(session);
}
}
- else {
+ else if (isClientAcknowledge(session)) {
session.recover();
}
}
@@ -783,7 +785,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
JmsUtils.rollbackIfNecessary(session);
}
}
- else {
+ else if (isClientAcknowledge(session)) {
session.recover();
}
}