diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java index 6e48188c9c4..913006ed38b 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java @@ -757,10 +757,8 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe } waitCount++; } - // Clear remaining scheduled invokers, possibly left over as paused tasks - for (AsyncMessageListenerInvoker scheduledInvoker : this.scheduledInvokers) { - scheduledInvoker.clearResources(); - } + // Clear remaining scheduled invokers, possibly left over as paused tasks. + clearResourcesInScheduledInvokers(); this.scheduledInvokers.clear(); } catch (InterruptedException ex) { @@ -910,6 +908,15 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe } } + /** + * Clear resources in scheduled invokers, even in case of paused tasks. + */ + private void clearResourcesInScheduledInvokers() { + for (AsyncMessageListenerInvoker scheduledInvoker : this.scheduledInvokers) { + scheduledInvoker.clearResources(); + } + } + /** * Use a shared JMS Connection depending on the "cacheLevel" setting. * @see #setCacheLevel @@ -1431,6 +1438,7 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe if (activeInvokerCount == 0) { if (!isRunning()) { // Proactively release shared Connection when stopped. + clearResourcesInScheduledInvokers(); releaseSharedConnection(); } if (stopCallback != null) {