AbstractMessageListenerContainer calls "Session.recover()" in case of rollback attempt on non-transacted Session
Issue: SPR-12015
This commit is contained in:
parent
5e2fbe7355
commit
c082220b34
|
@ -711,11 +711,16 @@ 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)) {
|
||||
if (session.getTransacted()) {
|
||||
if (isSessionLocallyTransacted(session)) {
|
||||
// Transacted session created by this container -> rollback.
|
||||
JmsUtils.rollbackIfNecessary(session);
|
||||
}
|
||||
}
|
||||
else {
|
||||
session.recover();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform a rollback, handling rollback exceptions properly.
|
||||
|
@ -725,7 +730,8 @@ public abstract class AbstractMessageListenerContainer
|
|||
*/
|
||||
protected void rollbackOnExceptionIfNecessary(Session session, Throwable ex) throws JMSException {
|
||||
try {
|
||||
if (session.getTransacted() && isSessionLocallyTransacted(session)) {
|
||||
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);
|
||||
|
@ -733,6 +739,10 @@ public abstract class AbstractMessageListenerContainer
|
|||
JmsUtils.rollbackIfNecessary(session);
|
||||
}
|
||||
}
|
||||
else {
|
||||
session.recover();
|
||||
}
|
||||
}
|
||||
catch (IllegalStateException ex2) {
|
||||
logger.debug("Could not roll back because Session already closed", ex2);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue