You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2018/08/13 22:27:48 UTC
activemq-artemis git commit: ARTEMIS-2024 Enable SharedClientID on
ConnectionFactory
Repository: activemq-artemis
Updated Branches:
refs/heads/2.6.x 80f12e7f6 -> cd9ac5e9f
ARTEMIS-2024 Enable SharedClientID on ConnectionFactory
(cherry picked from commit ad6db747010774ec55592b4304ad45c169a7209f)
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/cd9ac5e9
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/cd9ac5e9
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/cd9ac5e9
Branch: refs/heads/2.6.x
Commit: cd9ac5e9f3de946d3478855c5a7f583b9d99c003
Parents: 80f12e7
Author: Martyn Taylor <mt...@redhat.com>
Authored: Fri Aug 10 12:25:14 2018 +0100
Committer: Clebert Suconic <cl...@apache.org>
Committed: Mon Aug 13 18:27:42 2018 -0400
----------------------------------------------------------------------
.../artemis/api/core/client/ActiveMQClient.java | 2 ++
.../artemis/jms/client/ActiveMQConnection.java | 11 +++++++++-
.../jms/client/ActiveMQConnectionFactory.java | 14 ++++++++++++-
.../config/ConnectionFactoryConfiguration.java | 4 ++++
.../ConnectionFactoryConfigurationImpl.java | 22 +++++++++++++++++++-
.../jms/server/impl/JMSServerManagerImpl.java | 1 +
.../artemis/ra/ActiveMQResourceAdapter.java | 2 ++
.../artemis/ra/ConnectionFactoryProperties.java | 17 +++++++++++++++
.../artemis/ra/inflow/ActiveMQActivation.java | 2 ++
.../activemq/ActiveMQConnectionFactory.java | 1 +
.../jms/ActiveMQConnectionFactoryTest.java | 3 ++-
.../integration/jms/client/ConnectionTest.java | 21 +++++++++++++++++++
.../ra/ConnectionFactoryPropertiesTest.java | 1 +
13 files changed, 97 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/cd9ac5e9/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ActiveMQClient.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ActiveMQClient.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ActiveMQClient.java
index d24efff..ab647a3 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ActiveMQClient.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ActiveMQClient.java
@@ -95,6 +95,8 @@ public final class ActiveMQClient {
public static final boolean DEFAULT_PRE_ACKNOWLEDGE = false;
+ public static final boolean DEFAULT_ENABLED_SHARED_CLIENT_ID = false;
+
public static final long DEFAULT_DISCOVERY_INITIAL_WAIT_TIMEOUT = 10000;
public static final long DEFAULT_DISCOVERY_REFRESH_TIMEOUT = 10000;
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/cd9ac5e9/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 48cf306..7164a2c 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
@@ -676,11 +676,19 @@ public class ActiveMQConnection extends ActiveMQConnectionForContextImpl impleme
}
public void authorize() throws JMSException {
+ authorize(true);
+ }
+
+ public void authorize(boolean validateClientId) throws JMSException {
try {
initialSession = sessionFactory.createSession(username, password, false, false, false, false, 0);
if (clientID != null) {
- validateClientID(initialSession, clientID);
+ if (validateClientId) {
+ validateClientID(initialSession, clientID);
+ } else {
+ initialSession.addMetaData(ClientSession.JMS_SESSION_CLIENT_ID_PROPERTY, clientID);
+ }
}
addSessionMetaData(initialSession);
@@ -715,6 +723,7 @@ public class ActiveMQConnection extends ActiveMQConnectionForContextImpl impleme
return this.factoryReference.getDeserializationWhiteList();
}
+
// Inner classes --------------------------------------------------------------------------------
private static class JMSFailureListener implements SessionFailureListener {
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/cd9ac5e9/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java
----------------------------------------------------------------------
diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java
index db1fc78..17ee6fe 100644
--- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java
+++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java
@@ -70,6 +70,8 @@ public class ActiveMQConnectionFactory extends JNDIStorable implements Connectio
private String clientID;
+ private boolean enableSharedClientID = ActiveMQClient.DEFAULT_ENABLED_SHARED_CLIENT_ID;
+
private int dupsOKBatchSize = ActiveMQClient.DEFAULT_ACK_BATCH_SIZE;
private int transactionBatchSize = ActiveMQClient.DEFAULT_ACK_BATCH_SIZE;
@@ -452,6 +454,14 @@ public class ActiveMQConnectionFactory extends JNDIStorable implements Connectio
this.clientID = clientID;
}
+ public boolean isEnableSharedClientID() {
+ return enableSharedClientID;
+ }
+
+ public void setEnableSharedClientID(boolean enableSharedClientID) {
+ this.enableSharedClientID = enableSharedClientID;
+ }
+
public synchronized int getDupsOKBatchSize() {
return dupsOKBatchSize;
}
@@ -857,7 +867,7 @@ public class ActiveMQConnectionFactory extends JNDIStorable implements Connectio
connection.setReference(this);
try {
- connection.authorize();
+ connection.authorize(!isEnableSharedClientID());
} catch (JMSException e) {
try {
connection.close();
@@ -882,6 +892,8 @@ public class ActiveMQConnectionFactory extends JNDIStorable implements Connectio
transactionBatchSize +
", readOnly=" +
readOnly +
+ "EnableSharedClientID=" +
+ enableSharedClientID +
"]";
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/cd9ac5e9/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/ConnectionFactoryConfiguration.java
----------------------------------------------------------------------
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/ConnectionFactoryConfiguration.java b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/ConnectionFactoryConfiguration.java
index 43b9904..eee7431 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/ConnectionFactoryConfiguration.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/ConnectionFactoryConfiguration.java
@@ -193,4 +193,8 @@ public interface ConnectionFactoryConfiguration extends EncodingSupport {
boolean isEnable1xPrefixes();
ConnectionFactoryConfiguration setEnable1xPrefixes(boolean enable1xPrefixes);
+
+ boolean isEnableSharedClientID();
+
+ ConnectionFactoryConfiguration setEnableSharedClientID(boolean enabled);
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/cd9ac5e9/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java
----------------------------------------------------------------------
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java
index 2f546ec..ae71eca 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java
@@ -126,6 +126,9 @@ public class ConnectionFactoryConfigurationImpl implements ConnectionFactoryConf
private boolean enable1xPrefixes = ActiveMQClient.DEFAULT_ENABLE_1X_PREFIXES;
+ private boolean enableSharedClientID = ActiveMQClient.DEFAULT_ENABLED_SHARED_CLIENT_ID;
+
+
// Static --------------------------------------------------------
// Constructors --------------------------------------------------
@@ -638,6 +641,9 @@ public class ConnectionFactoryConfigurationImpl implements ConnectionFactoryConf
deserializationWhiteList = BufferHelper.readNullableSimpleStringAsString(buffer);
enable1xPrefixes = buffer.readableBytes() > 0 ? buffer.readBoolean() : null;
+
+ enableSharedClientID = buffer.readableBytes() > 0 ? buffer.readBoolean() : ActiveMQClient.DEFAULT_ENABLED_SHARED_CLIENT_ID;
+
}
@Override
@@ -729,6 +735,8 @@ public class ConnectionFactoryConfigurationImpl implements ConnectionFactoryConf
BufferHelper.writeAsNullableSimpleString(buffer, deserializationWhiteList);
buffer.writeBoolean(enable1xPrefixes);
+
+ BufferHelper.writeNullableBoolean(buffer, enableSharedClientID);
}
@Override
@@ -844,9 +852,11 @@ public class ConnectionFactoryConfigurationImpl implements ConnectionFactoryConf
BufferHelper.sizeOfNullableSimpleString(deserializationWhiteList) +
- DataConstants.SIZE_BOOLEAN;
+ DataConstants.SIZE_BOOLEAN +
// enable1xPrefixes;
+ BufferHelper.sizeOfNullableBoolean(enableSharedClientID);
+
return size;
}
@@ -914,6 +924,16 @@ public class ConnectionFactoryConfigurationImpl implements ConnectionFactoryConf
return this;
}
+ @Override
+ public ConnectionFactoryConfiguration setEnableSharedClientID(boolean enabled) {
+ this.enableSharedClientID = enabled;
+ return this;
+ }
+
+ @Override
+ public boolean isEnableSharedClientID() {
+ return enableSharedClientID;
+ }
// Public --------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/cd9ac5e9/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
----------------------------------------------------------------------
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
index 58acbbc..27abbbe 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
@@ -1221,6 +1221,7 @@ public class JMSServerManagerImpl implements JMSServerManager, ActivateCallback
cf.setDeserializationWhiteList(cfConfig.getDeserializationWhiteList());
cf.setInitialMessagePacketSize(cfConfig.getInitialMessagePacketSize());
cf.setEnable1xPrefixes(cfConfig.isEnable1xPrefixes());
+ cf.setEnableSharedClientID(cfConfig.isEnableSharedClientID());
return cf;
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/cd9ac5e9/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQResourceAdapter.java
----------------------------------------------------------------------
diff --git a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQResourceAdapter.java b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQResourceAdapter.java
index 8c31c2a..f3e4614 100644
--- a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQResourceAdapter.java
+++ b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQResourceAdapter.java
@@ -1792,6 +1792,7 @@ public class ActiveMQResourceAdapter implements ResourceAdapter, Serializable {
throw new IllegalArgumentException("must provide either TransportType or DiscoveryGroupAddress and DiscoveryGroupPort for ResourceAdapter Connection Factory");
}
+ cf.setEnableSharedClientID(true);
setParams(cf, overrideProperties);
return cf;
}
@@ -1858,6 +1859,7 @@ public class ActiveMQResourceAdapter implements ResourceAdapter, Serializable {
cf.setReconnectAttempts(0);
cf.setInitialConnectAttempts(0);
+ cf.setEnableSharedClientID(true);
return cf;
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/cd9ac5e9/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ConnectionFactoryProperties.java
----------------------------------------------------------------------
diff --git a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ConnectionFactoryProperties.java b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ConnectionFactoryProperties.java
index cda5afc..c0a7702 100644
--- a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ConnectionFactoryProperties.java
+++ b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ConnectionFactoryProperties.java
@@ -130,6 +130,8 @@ public class ConnectionFactoryProperties implements ConnectionFactoryOptions {
private String deserializationWhiteList;
+ private Boolean enableSharedClientID;
+
/**
* @return the transportType
*/
@@ -755,6 +757,14 @@ public class ConnectionFactoryProperties implements ConnectionFactoryOptions {
return hasBeenUpdated;
}
+ public void setEnableSharedClientID(boolean enable) {
+ this.enableSharedClientID = enable;
+ }
+
+ public boolean isEnableSharedClientID() {
+ return enableSharedClientID;
+ }
+
@Override
public boolean equals(Object obj) {
if (this == obj)
@@ -999,6 +1009,12 @@ public class ConnectionFactoryProperties implements ConnectionFactoryOptions {
} else if (!this.enable1xPrefixes.equals(other.enable1xPrefixes))
return false;
+ if (enableSharedClientID == null) {
+ if (other.enableSharedClientID != null)
+ return false;
+ } else if (!enableSharedClientID == other.enableSharedClientID)
+ return false;
+
return true;
}
@@ -1052,6 +1068,7 @@ public class ConnectionFactoryProperties implements ConnectionFactoryOptions {
result = prime * result + ((deserializationBlackList == null) ? 0 : deserializationBlackList.hashCode());
result = prime * result + ((deserializationWhiteList == null) ? 0 : deserializationWhiteList.hashCode());
result = prime * result + ((enable1xPrefixes == null) ? 0 : enable1xPrefixes.hashCode());
+ result = prime * result + ((enableSharedClientID == null) ? 0 : enableSharedClientID.hashCode());
return result;
}
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/cd9ac5e9/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/inflow/ActiveMQActivation.java
----------------------------------------------------------------------
diff --git a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/inflow/ActiveMQActivation.java b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/inflow/ActiveMQActivation.java
index 3a89369..204d5d0 100644
--- a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/inflow/ActiveMQActivation.java
+++ b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/inflow/ActiveMQActivation.java
@@ -454,12 +454,14 @@ public class ActiveMQActivation {
// This will clone the connection factory
// to make sure we won't close anyone's connection factory when we stop the MDB
factory = ActiveMQJMSClient.createConnectionFactory(((ActiveMQConnectionFactory) fac).toURI().toString(), "internalConnection");
+ factory.setEnableSharedClientID(true);
} else {
factory = ra.newConnectionFactory(spec);
}
} else {
factory = ra.newConnectionFactory(spec);
}
+
}
/**
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/cd9ac5e9/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java
----------------------------------------------------------------------
diff --git a/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java
index 0b1453a..823c761 100644
--- a/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java
+++ b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java
@@ -217,6 +217,7 @@ public class ActiveMQConnectionFactory extends JNDIBaseStorable implements Conne
}
public ActiveMQConnectionFactory(URI brokerURL) {
+
setBrokerURL(brokerURL.toString());
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/cd9ac5e9/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/ActiveMQConnectionFactoryTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/ActiveMQConnectionFactoryTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/ActiveMQConnectionFactoryTest.java
index f44e317..c235c5c 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/ActiveMQConnectionFactoryTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/ActiveMQConnectionFactoryTest.java
@@ -35,6 +35,7 @@ import java.util.Map;
import org.apache.activemq.artemis.api.core.BroadcastGroupConfiguration;
import org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration;
+import org.apache.activemq.artemis.api.core.RoutingType;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.api.core.UDPBroadcastEndpointFactory;
@@ -45,7 +46,6 @@ import org.apache.activemq.artemis.core.config.Configuration;
import org.apache.activemq.artemis.core.config.ha.SharedStoreMasterPolicyConfiguration;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.core.server.ActiveMQServers;
-import org.apache.activemq.artemis.api.core.RoutingType;
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
import org.apache.activemq.artemis.tests.integration.IntegrationTestLogger;
import org.apache.activemq.artemis.tests.integration.jms.serializables.TestClass1;
@@ -444,6 +444,7 @@ public class ActiveMQConnectionFactoryTest extends ActiveMQTestBase {
long retryInterval = RandomUtil.randomPositiveLong();
double retryIntervalMultiplier = RandomUtil.randomDouble();
int reconnectAttempts = RandomUtil.randomPositiveInt();
+ boolean enableSharedClientID = true;
try {
cf.setClientID(clientID);
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/cd9ac5e9/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/ConnectionTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/ConnectionTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/ConnectionTest.java
index 8ea65db..f53de93 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/ConnectionTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/ConnectionTest.java
@@ -131,6 +131,27 @@ public class ConnectionTest extends JMSTestBase {
session2.close();
}
+ @Test
+ public void testTwoConnectionsSameIDThroughCFWithShareClientIDEnabeld() throws Exception {
+ ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616?clientID=myid;enableSharedClientID=true");
+
+ conn = connectionFactory.createConnection();
+ try {
+ conn2 = connectionFactory.createConnection();
+ } catch (InvalidClientIDException expected) {
+ Assert.fail("Should allow sharing of client IDs among the same CF");
+ }
+
+ Session session1 = conn.createSession();
+ Session session2 = conn.createSession();
+ Session session3 = conn2.createSession();
+ Session session4 = conn2.createSession();
+
+ session1.close();
+ session2.close();
+ session3.close();
+ session4.close();
+ }
@Test
public void testGetSetConnectionFactory() throws Exception {
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/cd9ac5e9/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/ra/ConnectionFactoryPropertiesTest.java
----------------------------------------------------------------------
diff --git a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/ra/ConnectionFactoryPropertiesTest.java b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/ra/ConnectionFactoryPropertiesTest.java
index 3901e1b..b463e30 100644
--- a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/ra/ConnectionFactoryPropertiesTest.java
+++ b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/ra/ConnectionFactoryPropertiesTest.java
@@ -46,6 +46,7 @@ public class ConnectionFactoryPropertiesTest extends ActiveMQTestBase {
UNSUPPORTED_CF_PROPERTIES.add("user");
UNSUPPORTED_CF_PROPERTIES.add("userName");
UNSUPPORTED_CF_PROPERTIES.add("password");
+ UNSUPPORTED_CF_PROPERTIES.add("enableSharedClientID");
UNSUPPORTED_RA_PROPERTIES = new TreeSet<>();
UNSUPPORTED_RA_PROPERTIES.add("HA");