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);
