ensure we dont reference/modify the initial environment map, create our own copy and use that
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/3c27692b Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/3c27692b Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/3c27692b Branch: refs/heads/master Commit: 3c27692b4038cf651dfca1a8892c09c3ba9985a2 Parents: 0a10bab Author: Robert Gemmell <[email protected]> Authored: Tue Jan 20 12:23:01 2015 +0000 Committer: Robert Gemmell <[email protected]> Committed: Tue Jan 20 12:40:08 2015 +0000 ---------------------------------------------------------------------- .../qpid/jms/jndi/JmsInitialContextFactory.java | 43 ++++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/3c27692b/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 27c238e..22dfc62 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 @@ -54,26 +54,17 @@ public class JmsInitialContextFactory implements InitialContextFactory { private String queuePrefix = "queue."; private String topicPrefix = "topic."; + @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public Context getInitialContext(Hashtable environment) throws NamingException { - // lets create a factory - Map<String, Object> data = new ConcurrentHashMap<String, Object>(); - String[] names = getConnectionFactoryNames(environment); - for (int i = 0; i < names.length; i++) { - JmsConnectionFactory factory = null; - String name = names[i]; + // Copy the environment to ensure we don't modify/reference it, it belongs to the caller. + Hashtable<Object, Object> environmentCopy = new Hashtable<Object, Object>(); + environmentCopy.putAll(environment); - try { - factory = createConnectionFactory(name, environment); - } catch (Exception e) { - throw new NamingException("Invalid broker URL"); - } - - data.put(name, factory); - } - - createQueues(data, environment); - createTopics(data, environment); + Map<String, Object> data = new ConcurrentHashMap<String, Object>(); + createConnectionFactories(environmentCopy, data); + createQueues(data, environmentCopy); + createTopics(data, environmentCopy); // Add sub-contexts for dynamic creation on lookup. // "dynamicQueues/<queue-name>" @@ -96,7 +87,23 @@ public class JmsInitialContextFactory implements InitialContextFactory { } }); - return createContext(environment, data); + return createContext(environmentCopy, data); + } + + private void createConnectionFactories(Hashtable<Object, Object> environment, Map<String, Object> data) throws NamingException { + String[] names = getConnectionFactoryNames(environment); + for (int i = 0; i < names.length; i++) { + JmsConnectionFactory factory = null; + String name = names[i]; + + try { + factory = createConnectionFactory(name, environment); + } catch (Exception e) { + throw new NamingException("Invalid broker URL"); + } + + data.put(name, factory); + } } // Implementation methods --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
