From c082220b34f31ca573ecda5b6f09af5821c45e7a Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 22 Jul 2014 16:50:41 +0200 Subject: [PATCH] AbstractMessageListenerContainer calls "Session.recover()" in case of rollback attempt on non-transacted Session Issue: SPR-12015 --- .../AbstractMessageListenerContainer.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 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 c20da82856..ea187a787d 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 @@ -711,9 +711,14 @@ public abstract class AbstractMessageListenerContainer * @throws javax.jms.JMSException in case of a rollback error */ protected void rollbackIfNecessary(Session session) throws JMSException { - if (session.getTransacted() && isSessionLocallyTransacted(session)) { - // Transacted session created by this container -> rollback. - JmsUtils.rollbackIfNecessary(session); + if (session.getTransacted()) { + if (isSessionLocallyTransacted(session)) { + // Transacted session created by this container -> rollback. + JmsUtils.rollbackIfNecessary(session); + } + } + else { + session.recover(); } } @@ -725,12 +730,17 @@ public abstract class AbstractMessageListenerContainer */ protected void rollbackOnExceptionIfNecessary(Session session, Throwable ex) throws JMSException { try { - if (session.getTransacted() && isSessionLocallyTransacted(session)) { - // Transacted session created by this container -> rollback. - if (logger.isDebugEnabled()) { - logger.debug("Initiating transaction rollback on application exception", ex); + if (session.getTransacted()) { + if (isSessionLocallyTransacted(session)) { + // Transacted session created by this container -> rollback. + if (logger.isDebugEnabled()) { + logger.debug("Initiating transaction rollback on application exception", ex); + } + JmsUtils.rollbackIfNecessary(session); } - JmsUtils.rollbackIfNecessary(session); + } + else { + session.recover(); } } catch (IllegalStateException ex2) {