activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From clebertsuco...@apache.org
Subject [2/2] activemq-artemis git commit: ARTEMIS-1305 Server frozen during shutdown on Resource Adapter
Date Fri, 28 Jul 2017 14:33:48 GMT
ARTEMIS-1305 Server frozen during shutdown on Resource Adapter

this is a better fix than the previous one


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/54d220ed
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/54d220ed
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/54d220ed

Branch: refs/heads/master
Commit: 54d220edf309647d3f9e17854ebbda7a984dfedf
Parents: 40534b2
Author: Clebert Suconic <clebertsuconic@apache.org>
Authored: Fri Jul 28 09:38:19 2017 -0400
Committer: Clebert Suconic <clebertsuconic@apache.org>
Committed: Fri Jul 28 10:33:40 2017 -0400

----------------------------------------------------------------------
 .../artemis/ra/ActiveMQRAManagedConnection.java | 41 ++++++++++++++++++--
 1 file changed, 37 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/54d220ed/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQRAManagedConnection.java
----------------------------------------------------------------------
diff --git a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQRAManagedConnection.java
b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQRAManagedConnection.java
index e53c3fd..eee41cc 100644
--- a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQRAManagedConnection.java
+++ b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQRAManagedConnection.java
@@ -221,6 +221,14 @@ public final class ActiveMQRAManagedConnection implements ManagedConnection,
Exc
          ActiveMQRALogger.LOGGER.trace("destroyHandles()");
       }
 
+      try {
+         if (connection != null) {
+            connection.stop();
+         }
+      } catch (Throwable t) {
+         logger.trace("Ignored error stopping connection", t);
+      }
+
       for (ActiveMQRASession session : handles) {
          session.destroy();
       }
@@ -255,7 +263,10 @@ public final class ActiveMQRAManagedConnection implements ManagedConnection,
Exc
       }
 
       try {
-         connectionFactory.close();
+         // we must close the ActiveMQConnectionFactory because it contains a ServerLocator
+         if (connectionFactory != null) {
+            ra.closeConnectionFactory(mcf.getProperties());
+         }
       } catch (Exception e) {
          logger.debug(e.getMessage(), e);
       }
@@ -263,10 +274,32 @@ public final class ActiveMQRAManagedConnection implements ManagedConnection,
Exc
       destroyHandles();
 
       try {
-         // we must close the ActiveMQConnectionFactory because it contains a ServerLocator
-         if (connectionFactory != null) {
-            ra.closeConnectionFactory(mcf.getProperties());
+         // The following calls should not be necessary, as the connection should close the
+         // ClientSessionFactory, which will close the sessions.
+         try {
+            /**
+             * (xa|nonXA)Session.close() may NOT be called BEFORE connection.close()
+             * <p>
+             * If the ClientSessionFactory is trying to fail-over or reconnect with -1 attempts,
and
+             * one calls session.close() it may effectively dead-lock.
+             * <p>
+             * connection close will close the ClientSessionFactory which will close all
sessions.
+             */
+            if (connection != null) {
+               connection.close();
+            }
+
+            if (nonXAsession != null) {
+               nonXAsession.close();
+            }
+
+            if (xaSession != null) {
+               xaSession.close();
+            }
+         } catch (JMSException e) {
+            ActiveMQRALogger.LOGGER.debug("Error closing session " + this, e);
          }
+
       } catch (Throwable e) {
          throw new ResourceException("Could not properly close the session and connection",
e);
       }


Mime
View raw message