Repository: activemq-artemis
Updated Branches:
  refs/heads/master b5d252af2 -> 4a11a631b


ARTEMIS-538 - [Artemis Testsuite] JMSFailoverListenerTest#testManualFailover 
fails

ActiveMQConnection implements FailoverEventListener which executes client's
FailoverEventListeners in separated threads in background. The old 
implementation
does not guarantee ordering of their executions. The commit improves the
implementation to guarantee it.


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

Branch: refs/heads/master
Commit: fb9d09744df07a4b7a7681e6cabe38af1f675190
Parents: b5d252a
Author: Erich Duda <[email protected]>
Authored: Wed May 25 10:28:38 2016 +0200
Committer: Erich Duda <[email protected]>
Committed: Wed May 25 13:24:08 2016 +0200

----------------------------------------------------------------------
 .../activemq/artemis/jms/client/ActiveMQConnection.java  | 11 +++++++++--
 .../integration/jms/cluster/JMSFailoverListenerTest.java |  3 +--
 2 files changed, 10 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/fb9d0974/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnection.java
----------------------------------------------------------------------
diff --git 
a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnection.java
 
b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnection.java
index e8122d0..80597e3 100644
--- 
a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnection.java
+++ 
b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnection.java
@@ -35,6 +35,8 @@ import javax.jms.TopicSession;
 import java.lang.ref.WeakReference;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 import org.apache.activemq.artemis.api.core.ActiveMQException;
 import org.apache.activemq.artemis.api.core.ActiveMQExceptionType;
@@ -48,6 +50,7 @@ import 
org.apache.activemq.artemis.api.jms.ActiveMQJMSConstants;
 import org.apache.activemq.artemis.core.client.impl.ClientSessionInternal;
 import org.apache.activemq.artemis.core.version.Version;
 import org.apache.activemq.artemis.reader.MessageUtil;
+import org.apache.activemq.artemis.utils.ActiveMQThreadFactory;
 import org.apache.activemq.artemis.utils.ConcurrentHashSet;
 import org.apache.activemq.artemis.utils.UUIDGenerator;
 import org.apache.activemq.artemis.utils.VersionLoader;
@@ -113,6 +116,8 @@ public class ActiveMQConnection extends 
ActiveMQConnectionForContextImpl impleme
 
    private final FailoverEventListener failoverListener = new 
FailoverEventListenerImpl(this);
 
+   private final ExecutorService failoverListenerExecutor = 
Executors.newFixedThreadPool(1, ActiveMQThreadFactory.defaultThreadFactory());
+
    private final Version thisVersion;
 
    private final int dupsOKBatchSize;
@@ -353,6 +358,8 @@ public class ActiveMQConnection extends 
ActiveMQConnectionForContextImpl impleme
             }
          }
 
+         failoverListenerExecutor.shutdown();
+
          closed = true;
       }
       catch (ActiveMQException e) {
@@ -759,12 +766,12 @@ public class ActiveMQConnection extends 
ActiveMQConnectionForContextImpl impleme
 
                if (failoverListener != null) {
 
-                  new Thread(new Runnable() {
+                  conn.failoverListenerExecutor.execute(new Runnable() {
                      @Override
                      public void run() {
                         failoverListener.failoverEvent(eventType);
                      }
-                  }).start();
+                  });
                }
             }
             catch (JMSException e) {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/fb9d0974/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/JMSFailoverListenerTest.java
----------------------------------------------------------------------
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/JMSFailoverListenerTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/JMSFailoverListenerTest.java
index ed5dcae..5cb23b3 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/JMSFailoverListenerTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/JMSFailoverListenerTest.java
@@ -56,7 +56,6 @@ import javax.jms.Queue;
 import javax.jms.Session;
 import javax.jms.TextMessage;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -312,7 +311,7 @@ public class JMSFailoverListenerTest extends 
ActiveMQTestBase {
 
    private static class MyFailoverListener implements FailoverEventListener {
 
-      private List<FailoverEventType> eventTypeList = 
Collections.synchronizedList(new ArrayList<FailoverEventType>());
+      private List<FailoverEventType> eventTypeList = new ArrayList<>();
 
       public FailoverEventType get(int element) {
          waitForElements(element + 1);

Reply via email to