Browse Source

DefaultMessageListenerContainer triggers Session commit even if no message has been received (SPR-7366)

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3486 50f2f4bb-b051-0410-bef5-90022cba6387
pull/1/head
Juergen Hoeller 16 years ago
parent
commit
a552eed0c7
  1. 2
      org.springframework.jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java
  2. 10
      org.springframework.jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java

2
org.springframework.jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java

@ -575,7 +575,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen @@ -575,7 +575,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
JmsUtils.commitIfNecessary(session);
}
}
else if (isClientAcknowledge(session)) {
else if (message != null && isClientAcknowledge(session)) {
message.acknowledge();
}
}

10
org.springframework.jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java

@ -341,6 +341,7 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe @@ -341,6 +341,7 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe
TransactionSynchronizationManager.unbindResource(getConnectionFactory());
}
}
// Indicate that a message has been received.
return true;
}
else {
@ -349,6 +350,9 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe @@ -349,6 +350,9 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe
"session [" + sessionToUse + "] did not receive a message");
}
noMessageReceived(invoker, sessionToUse);
// Nevertheless call commit, in order to reset the transaction timeout (if any).
commitIfNecessary(session, message);
// Indicate that no message has been received.
return false;
}
}
@ -416,9 +420,9 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe @@ -416,9 +420,9 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe
}
/**
* Template method that gets called right <i>no</i> message has been received,
* before attempting to process it. Allows subclasses to react to the event
* of an actual incoming message, for example marking .
* Template method that gets called when <i>no</i> message has been received,
* before returning to the receive loop again. Allows subclasses to react to
* the event of no incoming message, for example marking the invoker as idle.
* @param invoker the invoker object (passed through)
* @param session the receiving JMS Session
*/

Loading…
Cancel
Save