Repository: activemq-artemis Updated Branches: refs/heads/master 29d59e970 -> 9687c4003
ARTEMIS-103 Changed JGroupsBroadcastEndpoint to not close its JChannel since its externally managed. Added javadocs to impacted areas to clarify that the JChannel is not closed by these implementations. Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/3710b3aa Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/3710b3aa Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/3710b3aa Branch: refs/heads/master Commit: 3710b3aa3c81d3628b3ba4d209cd06d393becf65 Parents: 29d59e9 Author: John D. Ament <[email protected]> Authored: Sun Jun 14 19:59:28 2015 -0400 Committer: John D. Ament <[email protected]> Committed: Sun Jun 14 19:59:28 2015 -0400 ---------------------------------------------------------------------- .../api/core/ChannelBroadcastEndpointFactory.java | 5 +++++ .../artemis/api/core/JGroupsBroadcastEndpoint.java | 9 +++++++++ .../api/core/JGroupsChannelBroadcastEndpoint.java | 11 +++++++++++ .../ConnectionFactoryWithJGroupsSerializationTest.java | 7 +++++++ 4 files changed, 32 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/3710b3aa/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/ChannelBroadcastEndpointFactory.java ---------------------------------------------------------------------- diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/ChannelBroadcastEndpointFactory.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/ChannelBroadcastEndpointFactory.java index a5cfee0..69f22de 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/ChannelBroadcastEndpointFactory.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/ChannelBroadcastEndpointFactory.java @@ -18,6 +18,11 @@ package org.apache.activemq.artemis.api.core; import org.jgroups.JChannel; +/** + * An implementation of BroadcastEndpointFactory that uses an externally managed JChannel for JGroups clustering. + * + * Note - the underlying JChannel is not closed in this implementation. + */ public class ChannelBroadcastEndpointFactory implements BroadcastEndpointFactory { private final JChannel channel; http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/3710b3aa/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/JGroupsBroadcastEndpoint.java ---------------------------------------------------------------------- diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/JGroupsBroadcastEndpoint.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/JGroupsBroadcastEndpoint.java index d1af492..8693095 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/JGroupsBroadcastEndpoint.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/JGroupsBroadcastEndpoint.java @@ -126,6 +126,15 @@ public abstract class JGroupsBroadcastEndpoint implements BroadcastEndpoint channel.removeReceiver(receiver); clientOpened = false; } + internalCloseChannel(); + } + + /** + * Closes the channel used in this JGroups Broadcast. + * Can be overridden by implementations that use an externally managed channel. + */ + protected synchronized void internalCloseChannel() + { channel.close(); } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/3710b3aa/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/JGroupsChannelBroadcastEndpoint.java ---------------------------------------------------------------------- diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/JGroupsChannelBroadcastEndpoint.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/JGroupsChannelBroadcastEndpoint.java index 5f517d3..cb85b8d 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/JGroupsChannelBroadcastEndpoint.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/JGroupsChannelBroadcastEndpoint.java @@ -18,6 +18,11 @@ package org.apache.activemq.artemis.api.core; import org.jgroups.JChannel; +/** + * An implementation of JGroupsBroadcastEndpoint that uses an externally managed JChannel for its operations. + * + * Note - this implementation does not close the JChannel, since its externally created. + */ public class JGroupsChannelBroadcastEndpoint extends JGroupsBroadcastEndpoint { private final JChannel jChannel; @@ -33,4 +38,10 @@ public class JGroupsChannelBroadcastEndpoint extends JGroupsBroadcastEndpoint { return jChannel; } + + @Override + protected synchronized void internalCloseChannel() + { + // no-op, this version takes an externally managed channel. + } } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/3710b3aa/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/connection/ConnectionFactoryWithJGroupsSerializationTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/connection/ConnectionFactoryWithJGroupsSerializationTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/connection/ConnectionFactoryWithJGroupsSerializationTest.java index be8452f..4b58ee1 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/connection/ConnectionFactoryWithJGroupsSerializationTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/connection/ConnectionFactoryWithJGroupsSerializationTest.java @@ -25,6 +25,7 @@ import java.io.Serializable; import javax.jms.Queue; +import org.apache.activemq.artemis.api.core.BroadcastEndpoint; import org.apache.activemq.artemis.api.core.BroadcastEndpointFactory; import org.apache.activemq.artemis.api.core.ChannelBroadcastEndpointFactory; import org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration; @@ -171,8 +172,14 @@ public class ConnectionFactoryWithJGroupsSerializationTest extends JMSTestBase @After public void tearDown() throws Exception { + // small hack, the channel here is cached, so checking that it's not closed by any endpoint + BroadcastEndpoint broadcastEndpoint = jmsServer.getActiveMQServer().getConfiguration() + .getDiscoveryGroupConfigurations().get("dg1") + .getBroadcastEndpointFactory().createBroadcastEndpoint(); + broadcastEndpoint.close(true); if (channel != null) { + assertFalse(channel.isClosed()); channel.close(); }
