Browse Source

AbstractMessageListenerContainer calls "Session.recover()" in case of rollback attempt on non-transacted Session

Issue: SPR-12015
pull/600/merge
Juergen Hoeller 12 years ago
parent
commit
c082220b34
  1. 26
      spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java

26
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 * @throws javax.jms.JMSException in case of a rollback error
*/ */
protected void rollbackIfNecessary(Session session) throws JMSException { protected void rollbackIfNecessary(Session session) throws JMSException {
if (session.getTransacted() && isSessionLocallyTransacted(session)) { if (session.getTransacted()) {
// Transacted session created by this container -> rollback. if (isSessionLocallyTransacted(session)) {
JmsUtils.rollbackIfNecessary(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 { protected void rollbackOnExceptionIfNecessary(Session session, Throwable ex) throws JMSException {
try { try {
if (session.getTransacted() && isSessionLocallyTransacted(session)) { if (session.getTransacted()) {
// Transacted session created by this container -> rollback. if (isSessionLocallyTransacted(session)) {
if (logger.isDebugEnabled()) { // Transacted session created by this container -> rollback.
logger.debug("Initiating transaction rollback on application exception", ex); if (logger.isDebugEnabled()) {
logger.debug("Initiating transaction rollback on application exception", ex);
}
JmsUtils.rollbackIfNecessary(session);
} }
JmsUtils.rollbackIfNecessary(session); }
else {
session.recover();
} }
} }
catch (IllegalStateException ex2) { catch (IllegalStateException ex2) {

Loading…
Cancel
Save