You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2016/09/30 11:37:06 UTC
[3/4] qpid-jms git commit: QPIDJMS-211: make the JNDI connection
factory property handling a little more flexible
QPIDJMS-211: make the JNDI connection factory property handling a little more flexible
(cherry picked from commit 5f46af2c1a2c48c0c9c8fcc8a1733a991e542ac8)
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/c730c531
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/c730c531
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/c730c531
Branch: refs/heads/0.11.x
Commit: c730c5319247a2c2f88f8e67976de6a92412d7dc
Parents: 5d93bff
Author: Robert Gemmell <ro...@apache.org>
Authored: Wed Sep 28 17:49:17 2016 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Sep 30 12:25:14 2016 +0100
----------------------------------------------------------------------
.../qpid/jms/jndi/JmsInitialContextFactory.java | 75 +++++++++-----------
.../jms/jndi/JmsInitialContextFactoryTest.java | 48 +++++++++++--
2 files changed, 78 insertions(+), 45 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/c730c531/qpid-jms-client/src/main/java/org/apache/qpid/jms/jndi/JmsInitialContextFactory.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/jndi/JmsInitialContextFactory.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/jndi/JmsInitialContextFactory.java
index 61482de..f70017c 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/jndi/JmsInitialContextFactory.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/jndi/JmsInitialContextFactory.java
@@ -22,13 +22,10 @@ import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashMap;
-import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
@@ -44,15 +41,6 @@ import org.apache.qpid.jms.JmsConnectionFactory;
import org.apache.qpid.jms.JmsQueue;
import org.apache.qpid.jms.JmsTopic;
-/**
- * A factory of the StompJms InitialContext which contains
- * {@link javax.jms.ConnectionFactory} instances as well as a child context
- * called <i>destinations</i> which contain all of the current active
- * destinations, in child context depending on the QoS such as transient or
- * durable and queue or topic.
- *
- * @since 1.0
- */
public class JmsInitialContextFactory implements InitialContextFactory {
static final String[] DEFAULT_CONNECTION_FACTORY_NAMES = {
@@ -63,6 +51,8 @@ public class JmsInitialContextFactory implements InitialContextFactory {
static final String TOPIC_KEY_PREFIX = "topic.";
static final String CONNECTION_FACTORY_DEFAULT_KEY_PREFIX = "default." + CONNECTION_FACTORY_KEY_PREFIX;
static final String CONNECTION_FACTORY_PROPERTY_KEY_PREFIX = "property." + CONNECTION_FACTORY_KEY_PREFIX;
+ static final String DYNAMIC_QUEUES = "dynamicQueues";
+ static final String DYNAMIC_TOPICS = "dynamicTopics";
@SuppressWarnings("unchecked")
@Override
@@ -117,7 +107,7 @@ public class JmsInitialContextFactory implements InitialContextFactory {
// Add sub-contexts for dynamic creation on lookup.
// "dynamicQueues/<queue-name>"
- bindings.put("dynamicQueues", new LazyCreateContext() {
+ bindings.put(DYNAMIC_QUEUES, new LazyCreateContext() {
private static final long serialVersionUID = 6503881346214855588L;
@Override
@@ -127,7 +117,7 @@ public class JmsInitialContextFactory implements InitialContextFactory {
});
// "dynamicTopics/<topic-name>"
- bindings.put("dynamicTopics", new LazyCreateContext() {
+ bindings.put(DYNAMIC_TOPICS, new LazyCreateContext() {
private static final long serialVersionUID = 2019166796234979615L;
@Override
@@ -140,13 +130,15 @@ public class JmsInitialContextFactory implements InitialContextFactory {
}
private void createConnectionFactories(Hashtable<Object, Object> environment, Map<String, Object> bindings) throws NamingException {
- List<String> names = getConnectionFactoryNames(environment);
+ Map<String, String> factories = getConnectionFactoryNamesAndURIs(environment);
Map<String, String> defaults = getConnectionFactoryDefaults(environment);
- for (String name : names) {
- JmsConnectionFactory factory = null;
+ for (Entry<String, String> entry : factories.entrySet()) {
+ String name = entry.getKey();
+ String uri = entry.getValue();
+ JmsConnectionFactory factory = null;
try {
- factory = createConnectionFactory(name, defaults, environment);
+ factory = createConnectionFactory(name, uri, defaults, environment);
} catch (Exception e) {
NamingException ne = new NamingException("Exception while creating ConnectionFactory '" + name + "'.");
ne.initCause(e);
@@ -164,20 +156,15 @@ public class JmsInitialContextFactory implements InitialContextFactory {
return new ReadOnlyContext(environment, bindings);
}
- protected JmsConnectionFactory createConnectionFactory(String name, Map<String, String> defaults, Hashtable<Object, Object> environment) throws URISyntaxException {
- String cfNameKey = CONNECTION_FACTORY_KEY_PREFIX + name;
+ protected JmsConnectionFactory createConnectionFactory(String name, String uri, Map<String, String> defaults, Hashtable<Object, Object> environment) throws URISyntaxException {
Map<String, String> props = new LinkedHashMap<String, String>();
// Add the defaults which apply to all connection factories
props.putAll(defaults);
// Add any URI entry for this specific factory name
- Object o = environment.get(cfNameKey);
- if (o != null) {
- String value = String.valueOf(o);
- if (value.trim().length() != 0) {
- props.put(JmsConnectionFactory.REMOTE_URI_PROP, value);
- }
+ if (uri != null && !uri.trim().isEmpty()) {
+ props.put(JmsConnectionFactory.REMOTE_URI_PROP, uri);
}
// Add any factory-specific additional properties
@@ -186,23 +173,29 @@ public class JmsInitialContextFactory implements InitialContextFactory {
return createConnectionFactory(props);
}
- protected List<String> getConnectionFactoryNames(Map<Object, Object> environment) {
- List<String> list = new ArrayList<String>();
+ protected Map<String, String> getConnectionFactoryNamesAndURIs(Map<Object, Object> environment) {
+ Map<String, String> factories = new LinkedHashMap<String, String>();
for (Iterator<Entry<Object, Object>> iter = environment.entrySet().iterator(); iter.hasNext();) {
Map.Entry<Object, Object> entry = iter.next();
String key = String.valueOf(entry.getKey());
- if (key.startsWith(CONNECTION_FACTORY_KEY_PREFIX)) {
- String jndiName = key.substring(CONNECTION_FACTORY_KEY_PREFIX.length());
- list.add(jndiName);
+ if (key.toLowerCase().startsWith(CONNECTION_FACTORY_KEY_PREFIX)) {
+ String factoryName = key.substring(CONNECTION_FACTORY_KEY_PREFIX.length());
+ String value = null;
+ if(entry.getValue() != null) {
+ value = String.valueOf(entry.getValue());
+ }
+
+ factories.put(factoryName, value);
}
}
- if(list.isEmpty())
- {
- list.addAll(Arrays.asList(DEFAULT_CONNECTION_FACTORY_NAMES));
+ if (factories.isEmpty()) {
+ for (int i = 0; i < DEFAULT_CONNECTION_FACTORY_NAMES.length; i++) {
+ factories.put(DEFAULT_CONNECTION_FACTORY_NAMES[i], null);
+ }
}
- return list;
+ return factories;
}
protected Map<String, String> getConnectionFactoryDefaults(Map<Object, Object> environment) {
@@ -212,7 +205,7 @@ public class JmsInitialContextFactory implements InitialContextFactory {
for (Iterator<Entry<Object, Object>> iter = environment.entrySet().iterator(); iter.hasNext();) {
Map.Entry<Object, Object> entry = iter.next();
String key = String.valueOf(entry.getKey());
- if (key.startsWith(CONNECTION_FACTORY_DEFAULT_KEY_PREFIX)) {
+ if (key.toLowerCase().startsWith(CONNECTION_FACTORY_DEFAULT_KEY_PREFIX)) {
String jndiName = key.substring(CONNECTION_FACTORY_DEFAULT_KEY_PREFIX.length());
map.put(jndiName, String.valueOf(entry.getValue()));
}
@@ -224,14 +217,16 @@ public class JmsInitialContextFactory implements InitialContextFactory {
protected Map<String, String> getConnectionFactoryProperties(String factoryName, Map<Object, Object> environment) {
Map<String, String> map = new LinkedHashMap<String, String>();
- String factoryPropertiesPrefix = CONNECTION_FACTORY_PROPERTY_KEY_PREFIX + factoryName + ".";
+ final String factoryNameSuffix = factoryName + ".";
for (Iterator<Entry<Object, Object>> iter = environment.entrySet().iterator(); iter.hasNext();) {
Map.Entry<Object, Object> entry = iter.next();
String key = String.valueOf(entry.getKey());
- if (key.startsWith(factoryPropertiesPrefix)) {
- String propertyName = key.substring(factoryPropertiesPrefix.length());
- map.put(propertyName, String.valueOf(entry.getValue()));
+ if (key.toLowerCase().startsWith(CONNECTION_FACTORY_PROPERTY_KEY_PREFIX)) {
+ if(key.substring(CONNECTION_FACTORY_PROPERTY_KEY_PREFIX.length()).startsWith(factoryNameSuffix)) {
+ String propertyName = key.substring(CONNECTION_FACTORY_PROPERTY_KEY_PREFIX.length() + factoryNameSuffix.length());
+ map.put(propertyName, String.valueOf(entry.getValue()));
+ }
}
}
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/c730c531/qpid-jms-client/src/test/java/org/apache/qpid/jms/jndi/JmsInitialContextFactoryTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/jndi/JmsInitialContextFactoryTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/jndi/JmsInitialContextFactoryTest.java
index c1a0652..9400ad5 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/jndi/JmsInitialContextFactoryTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/jndi/JmsInitialContextFactoryTest.java
@@ -87,10 +87,16 @@ public class JmsInitialContextFactoryTest extends QpidJmsTestCase {
@Test
public void testDefaultConnectionFactorySeesFactorySpecificProperty() throws Exception {
- String updatedClientID = _testName.getMethodName();
-
String factoryName = JmsInitialContextFactory.DEFAULT_CONNECTION_FACTORY_NAMES[0];
- String propertyPrefix = JmsInitialContextFactory.CONNECTION_FACTORY_PROPERTY_KEY_PREFIX;
+
+ // lower case prefix
+ doDefaultConnectionFactorySeesFactorySpecificPropertyTestImpl("property.connectionfactory.", factoryName);
+ // camelCase prefix
+ doDefaultConnectionFactorySeesFactorySpecificPropertyTestImpl("property.connectionFactory.", factoryName);
+ }
+
+ private void doDefaultConnectionFactorySeesFactorySpecificPropertyTestImpl(String propertyPrefix, String factoryName) throws Exception {
+ String updatedClientID = _testName.getMethodName();
Hashtable<Object, Object> env = new Hashtable<Object, Object>();
env.put(propertyPrefix + factoryName + "." + "clientID", updatedClientID);
@@ -100,7 +106,7 @@ public class JmsInitialContextFactoryTest extends QpidJmsTestCase {
assertNotNull("No object returned", o);
assertEquals("Unexpected class type for returned object", JmsConnectionFactory.class, o.getClass());
- assertEquals("Unexpected URI for returned factory", updatedClientID, ((JmsConnectionFactory) o).getClientID());
+ assertEquals("Unexpected ClientID for returned factory", updatedClientID, ((JmsConnectionFactory) o).getClientID());
}
@Test
@@ -119,13 +125,45 @@ public class JmsInitialContextFactoryTest extends QpidJmsTestCase {
}
}
+
+ @Test
+ public void testDefaultConnectionFactoriesSeeDefaultPropertyUpdate() throws Exception {
+ String factoryName = JmsInitialContextFactory.DEFAULT_CONNECTION_FACTORY_NAMES[0];
+
+ // lower case prefix
+ doDefaultConnectionFactorySeesDefaultPropertyUpdatePropertyTestImpl("default.connectionfactory.", factoryName);
+ // camelCase prefix
+ doDefaultConnectionFactorySeesDefaultPropertyUpdatePropertyTestImpl("default.connectionFactory.", factoryName);
+ }
+
+ private void doDefaultConnectionFactorySeesDefaultPropertyUpdatePropertyTestImpl(String propertyPrefix, String factoryName) throws Exception {
+ String updatedClientID = _testName.getMethodName();
+
+ Hashtable<Object, Object> env = new Hashtable<Object, Object>();
+ env.put(propertyPrefix + "clientID", updatedClientID);
+ Context ctx = createInitialContext(env);
+
+ Object o = ctx.lookup(factoryName);
+
+ assertNotNull("No object returned", o);
+ assertEquals("Unexpected class type for returned object", JmsConnectionFactory.class, o.getClass());
+ assertEquals("Unexpected ClientID for returned factory", updatedClientID, ((JmsConnectionFactory) o).getClientID());
+ }
+
@Test
public void testConnectionFactoryBinding() throws Exception {
String factoryName = "myNewFactory";
+ // lower case prefix
+ doConnectionFactoryBindingTestImpl("connectionfactory." + factoryName, factoryName);
+ // camelCase prefix
+ doConnectionFactoryBindingTestImpl("connectionFactory." + factoryName, factoryName);
+ }
+
+ private void doConnectionFactoryBindingTestImpl(String environmentProperty, String factoryName) throws NamingException {
String uri = "amqp://example.com:1234";
Hashtable<Object, Object> env = new Hashtable<Object, Object>();
- env.put(JmsInitialContextFactory.CONNECTION_FACTORY_KEY_PREFIX + factoryName, uri);
+ env.put(environmentProperty, uri);
Context ctx = createInitialContext(env);
Object o = ctx.lookup(factoryName);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org