From 0ad561d3798309ee397cdb1d96651a25ad8619f9 Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Sat, 9 Dec 2023 19:54:25 +0900 Subject: [PATCH] Ensure that Observation is stopped and scope is closed in doReceiveAndExecute() Closes gh-31798 --- .../AbstractPollingMessageListenerContainer.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java index c652b213fc..ea5d1ac517 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java @@ -315,6 +315,8 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe } Message message = receiveMessage(consumerToUse); if (message != null) { + boolean exposeResource = (!transactional && isExposeListenerSession() && + !TransactionSynchronizationManager.hasResource(obtainConnectionFactory())); Observation observation = createObservation(message).start(); Observation.Scope scope = observation.openScope(); if (logger.isDebugEnabled()) { @@ -322,14 +324,12 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe consumerToUse + "] of " + (transactional ? "transactional " : "") + "session [" + sessionToUse + "]"); } - messageReceived(invoker, sessionToUse); - boolean exposeResource = (!transactional && isExposeListenerSession() && - !TransactionSynchronizationManager.hasResource(obtainConnectionFactory())); - if (exposeResource) { - TransactionSynchronizationManager.bindResource( - obtainConnectionFactory(), new LocallyExposedJmsResourceHolder(sessionToUse)); - } try { + messageReceived(invoker, sessionToUse); + if (exposeResource) { + TransactionSynchronizationManager.bindResource( + obtainConnectionFactory(), new LocallyExposedJmsResourceHolder(sessionToUse)); + } doExecuteListener(sessionToUse, message); } catch (Throwable ex) {