Skip to content

Commit c082220

Browse files
committed
AbstractMessageListenerContainer calls "Session.recover()" in case of rollback attempt on non-transacted Session
Issue: SPR-12015
1 parent 5e2fbe7 commit c082220

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -711,9 +711,14 @@ else if (message != null && isClientAcknowledge(session)) {
711711
* @throws javax.jms.JMSException in case of a rollback error
712712
*/
713713
protected void rollbackIfNecessary(Session session) throws JMSException {
714-
if (session.getTransacted() && isSessionLocallyTransacted(session)) {
715-
// Transacted session created by this container -> rollback.
716-
JmsUtils.rollbackIfNecessary(session);
714+
if (session.getTransacted()) {
715+
if (isSessionLocallyTransacted(session)) {
716+
// Transacted session created by this container -> rollback.
717+
JmsUtils.rollbackIfNecessary(session);
718+
}
719+
}
720+
else {
721+
session.recover();
717722
}
718723
}
719724

@@ -725,12 +730,17 @@ protected void rollbackIfNecessary(Session session) throws JMSException {
725730
*/
726731
protected void rollbackOnExceptionIfNecessary(Session session, Throwable ex) throws JMSException {
727732
try {
728-
if (session.getTransacted() && isSessionLocallyTransacted(session)) {
729-
// Transacted session created by this container -> rollback.
730-
if (logger.isDebugEnabled()) {
731-
logger.debug("Initiating transaction rollback on application exception", ex);
733+
if (session.getTransacted()) {
734+
if (isSessionLocallyTransacted(session)) {
735+
// Transacted session created by this container -> rollback.
736+
if (logger.isDebugEnabled()) {
737+
logger.debug("Initiating transaction rollback on application exception", ex);
738+
}
739+
JmsUtils.rollbackIfNecessary(session);
732740
}
733-
JmsUtils.rollbackIfNecessary(session);
741+
}
742+
else {
743+
session.recover();
734744
}
735745
}
736746
catch (IllegalStateException ex2) {

0 commit comments

Comments
 (0)