add ability to specify factory specific properties outwith the potentially-defaulted URI
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/4bf63bdf Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/4bf63bdf Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/4bf63bdf Branch: refs/heads/master Commit: 4bf63bdf3934ea2defda1d0a2b41515b9d2c14b0 Parents: 4ad313d Author: Robert Gemmell <[email protected]> Authored: Fri Jan 30 15:25:34 2015 +0000 Committer: Robert Gemmell <[email protected]> Committed: Fri Jan 30 15:28:55 2015 +0000 ---------------------------------------------------------------------- .../qpid/jms/jndi/JmsInitialContextFactory.java | 21 +++++++++++++++++++- .../jms/jndi/JmsInitialContextFactoryTest.java | 18 +++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/4bf63bdf/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 dbb222b..42c4e32 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 @@ -58,6 +58,7 @@ public class JmsInitialContextFactory implements InitialContextFactory { static final String QUEUE_KEY_PREFIX = "queue."; 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; @SuppressWarnings("unchecked") @Override @@ -134,7 +135,8 @@ public class JmsInitialContextFactory implements InitialContextFactory { } } - //TODO: support gathering up any other per-factory properties from the environment + // Add any factory-specific additional properties + props.putAll(getConnectionFactoryProperties(name, environment)); return createConnectionFactory(props); } @@ -174,6 +176,23 @@ public class JmsInitialContextFactory implements InitialContextFactory { return Collections.unmodifiableMap(map); } + 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 + "."; + + 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())); + } + } + + return map; + } + protected void createQueues(Hashtable<Object, Object> environment, Map<String, Object> bindings) { for (Iterator<Entry<Object, Object>> iter = environment.entrySet().iterator(); iter.hasNext();) { Map.Entry<Object, Object> entry = iter.next(); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/4bf63bdf/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 3f1a63e..f22bf2e 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 @@ -76,6 +76,24 @@ 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; + + Hashtable<Object, Object> env = new Hashtable<Object, Object>(); + env.put(propertyPrefix + factoryName + "." + "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 URI for returned factory", updatedClientID, ((JmsConnectionFactory) o).getClientID()); + } + + @Test public void testDefaultConnectionFactoriesNotPresentWhenOneIsExplicitlyDefined() throws Exception { Hashtable<Object, Object> env = new Hashtable<Object, Object>(); env.put(JmsInitialContextFactory.CONNECTION_FACTORY_KEY_PREFIX + "myNewFactory", "amqp://example.com:1234"); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
