This is an automated email from the ASF dual-hosted git repository.

mattrpav pushed a commit to branch activemq-5.19.x
in repository https://gitbox.apache.org/repos/asf/activemq.git


The following commit(s) were added to refs/heads/activemq-5.19.x by this push:
     new c2dced4b30 [AMQ-9820]: closed connections leaking into the pool when 
reconnectOnException is used
c2dced4b30 is described below

commit c2dced4b307ca74f0784339a106261d0469be2b0
Author: Jean-Louis Monteiro <[email protected]>
AuthorDate: Wed Dec 17 15:10:41 2025 +0100

    [AMQ-9820]: closed connections leaking into the pool when 
reconnectOnException is used
    
    (cherry picked from commit 5c4ef81c95e753ae0e5f886d955aa5f783ef09aa)
---
 .../activemq/jms/pool/PooledConnectionFactory.java      |  7 ++++++-
 .../jms/pool/PooledConnectionSecurityExceptionTest.java | 17 +++++++++++++----
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git 
a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnectionFactory.java
 
b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnectionFactory.java
index 264303791c..01932075b2 100644
--- 
a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnectionFactory.java
+++ 
b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnectionFactory.java
@@ -129,7 +129,12 @@ public class PooledConnectionFactory implements 
ConnectionFactory, QueueConnecti
                     @Override
                     public boolean validateObject(ConnectionKey connectionKey, 
PooledObject<ConnectionPool> pooledObject) {
                         ConnectionPool connection = pooledObject.getObject();
-                        if (connection != null && connection.expiredCheck()) {
+                        if (connection == null || connection.getConnection() 
== null) {
+                            LOG.trace("Connection has been closed and will be 
destroyed: {}", connection);
+                            return false;
+                        }
+
+                        if (connection.expiredCheck()) {
                             LOG.trace("Connection has expired: {} and will be 
destroyed", connection);
                             return false;
                         }
diff --git 
a/activemq-jms-pool/src/test/java/org/apache/activemq/jms/pool/PooledConnectionSecurityExceptionTest.java
 
b/activemq-jms-pool/src/test/java/org/apache/activemq/jms/pool/PooledConnectionSecurityExceptionTest.java
index c543b4b50a..c0a3a7b6b5 100644
--- 
a/activemq-jms-pool/src/test/java/org/apache/activemq/jms/pool/PooledConnectionSecurityExceptionTest.java
+++ 
b/activemq-jms-pool/src/test/java/org/apache/activemq/jms/pool/PooledConnectionSecurityExceptionTest.java
@@ -50,6 +50,13 @@ import org.junit.rules.TestName;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 /**
  * Test Pooled connections ability to handle security exceptions
  */
@@ -134,8 +141,9 @@ public class PooledConnectionSecurityExceptionTest {
 
             @Override
             public boolean isSatisified() throws Exception {
-                return connection1.getConnection() !=
-                    ((PooledConnection) 
pooledConnFact.createConnection("invalid", "credentials")).getConnection();
+                try (final PooledConnection newConnection = (PooledConnection) 
pooledConnFact.createConnection("invalid", "credentials")) {
+                    return connection1.getConnection() != 
newConnection.getConnection();
+                }
             }
         }));
 
@@ -232,8 +240,9 @@ public class PooledConnectionSecurityExceptionTest {
 
             @Override
             public boolean isSatisified() throws Exception {
-                return connection1.getConnection() !=
-                          ((PooledConnection) 
pooledConnFact.createConnection("invalid", "credentials")).getConnection();
+                try (final PooledConnection newConnection = (PooledConnection) 
pooledConnFact.createConnection("invalid", "credentials")) {
+                    return connection1.getConnection() != 
newConnection.getConnection();
+                }
             }
         }));
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact


Reply via email to