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]

Reply via email to