Message listener containers only call Session.recover() in client acknowledge mode

Issue: SPR-13052
(cherry picked from commit fee63fd)
This commit is contained in:
Juergen Hoeller
2015-05-22 17:24:26 +02:00
parent 1177f5c0a3
commit c111bd7547

View File

@@ -69,7 +69,7 @@ import org.springframework.util.ReflectionUtils;
* consider setting "sessionTransacted" to "true" instead.
* <li>"sessionAcknowledgeMode" set to "CLIENT_ACKNOWLEDGE":
* Automatic message acknowledgment <i>after</i> successful listener execution;
* no redelivery in case of exception thrown.
* best-effort redelivery in case of exception thrown.
* <li>"sessionAcknowledgeMode" set to "DUPS_OK_ACKNOWLEDGE":
* <i>Lazy</i> message acknowledgment during or after listener execution;
* <i>potential redelivery</i> 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();
}
}