Message listener containers only call Session.recover() in client acknowledge mode
Issue: SPR-13056
This commit is contained in:
@@ -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.
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user