From b6ecfcf9ecf263e9226493e26abbe632f3b838f6 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 2 Feb 2018 11:33:10 +0100 Subject: [PATCH] CachingConnectionFactory makes its Session caching inactive during reset Issue: SPR-16450 --- .../jms/connection/CachingConnectionFactory.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java b/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java index f8f8930622c..ff2b550b8a3 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java @@ -175,6 +175,7 @@ public class CachingConnectionFactory extends SingleConnectionFactory { @Override public void resetConnection() { this.active = false; + synchronized (this.cachedSessions) { for (LinkedList sessionList : this.cachedSessions.values()) { synchronized (sessionList) { @@ -190,10 +191,11 @@ public class CachingConnectionFactory extends SingleConnectionFactory { } this.cachedSessions.clear(); } - this.active = true; // Now proceed with actual closing of the shared Connection... super.resetConnection(); + + this.active = true; } /** @@ -201,6 +203,10 @@ public class CachingConnectionFactory extends SingleConnectionFactory { */ @Override protected Session getSession(Connection con, Integer mode) throws JMSException { + if (!this.active) { + return null; + } + LinkedList sessionList; synchronized (this.cachedSessions) { sessionList = this.cachedSessions.get(mode); @@ -264,11 +270,9 @@ public class CachingConnectionFactory extends SingleConnectionFactory { private final LinkedList sessionList; - private final Map cachedProducers = - new HashMap<>(); + private final Map cachedProducers = new HashMap<>(); - private final Map cachedConsumers = - new HashMap<>(); + private final Map cachedConsumers = new HashMap<>(); private boolean transactionOpen = false;