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

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


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

commit 5c4ef81c95e753ae0e5f886d955aa5f783ef09aa
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
---
 .../activemq/jms/pool/PooledConnectionFactory.java |  7 +++++-
 .../PooledConnectionSecurityExceptionTest.java     | 25 +++++++++++-----------
 2 files changed, 19 insertions(+), 13 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 d3a64e1934..1b11531b45 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 0c1a20168b..445f40feb3 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
@@ -16,13 +16,6 @@
  */
 package org.apache.activemq.jms.pool;
 
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.ArrayList;
-import java.util.List;
-
 import jakarta.jms.Connection;
 import jakarta.jms.ExceptionListener;
 import jakarta.jms.JMSException;
@@ -30,7 +23,6 @@ import jakarta.jms.JMSSecurityException;
 import jakarta.jms.MessageProducer;
 import jakarta.jms.Queue;
 import jakarta.jms.Session;
-
 import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.activemq.broker.BrokerPlugin;
 import org.apache.activemq.broker.BrokerService;
@@ -50,6 +42,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 +133,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 +232,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