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 2021/06/28 14:39:52 UTC
[qpid-jms] branch main updated: QPIDJMS-542: allow setting URI used
for default connection factories via the context provider url property.
This is an automated email from the ASF dual-hosted git repository.
robbie pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-jms.git
The following commit(s) were added to refs/heads/main by this push:
new 531a48e QPIDJMS-542: allow setting URI used for default connection factories via the context provider url property.
531a48e is described below
commit 531a48eb4edfb609df6a054d999296e6b65ce53f
Author: Robbie Gemmell <ro...@apache.org>
AuthorDate: Mon Jun 28 14:36:02 2021 +0100
QPIDJMS-542: allow setting URI used for default connection factories via the context provider url property.
Alternative impl with tests based in part on those from Michael Andre Pearce <mi...@me.com> in PR.
This closes #41.
---
.../qpid/jms/jndi/JmsInitialContextFactory.java | 23 ++++++++++-
.../jms/jndi/JmsInitialContextFactoryTest.java | 47 ++++++++++++++++++++++
2 files changed, 68 insertions(+), 2 deletions(-)
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 e55970c..a5d4e83 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
@@ -16,10 +16,13 @@
*/
package org.apache.qpid.jms.jndi;
+import static org.apache.qpid.jms.JmsConnectionFactory.REMOTE_URI_PROP;
+
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
+import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Collections;
@@ -40,6 +43,7 @@ import javax.naming.spi.InitialContextFactory;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.apache.qpid.jms.JmsQueue;
import org.apache.qpid.jms.JmsTopic;
+import org.apache.qpid.jms.provider.ProviderFactory;
import org.apache.qpid.jms.util.VariableExpansion;
public class JmsInitialContextFactory implements InitialContextFactory {
@@ -61,7 +65,6 @@ public class JmsInitialContextFactory implements InitialContextFactory {
Hashtable<Object, Object> environmentCopy = new Hashtable<Object, Object>();
environmentCopy.putAll(environment);
- // Check for an *optional* properties file use to augment the environment
String location = null;
if (environmentCopy.containsKey(Context.PROVIDER_URL)) {
location = (String) environment.get(Context.PROVIDER_URL);
@@ -69,8 +72,24 @@ public class JmsInitialContextFactory implements InitialContextFactory {
location = System.getProperty(Context.PROVIDER_URL);
}
+ // If present, check if PROVIDER_URL is a client URI, by seeing if we find a factory for it.
+ // If we do, set it as the URI to be used for the default connection factories.
+ boolean providerUri = false;
+ if (location != null) {
+ try {
+ String expanded = expand(location, environmentCopy);
+ if (ProviderFactory.findProviderFactory(new URI(expanded)) != null) {
+ environmentCopy.put(CONNECTION_FACTORY_DEFAULT_KEY_PREFIX + REMOTE_URI_PROP, expanded);
+ providerUri = true;
+ }
+ } catch (IOException | URISyntaxException e) {
+ // Not a valid URI or didnt find a client factory for it.
+ }
+ }
+
try {
- if (location != null) {
+ // If it wasnt a client URI, check for *optional* properties file to augment given environment
+ if (!providerUri && location != null) {
BufferedInputStream inputStream;
try {
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 ee7bf74..e67a284 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
@@ -616,4 +616,51 @@ public class JmsInitialContextFactoryTest extends QpidJmsTestCase {
assertEquals("Unexpected name for returned queue", variableValue, ((JmsTopic) o).getTopicName());
}
+
+ @Test
+ public void testVariableExpansionWhenDefaultFactoryUriSetViaProviderURL() throws NamingException {
+ String variable = "myTestHostnameVariable";
+ String hostValue = "myTestHostnameValue";
+
+ setTestSystemProperty(variable, hostValue);
+
+ doSetDefaultFactoryUriViaProviderURLTestImpl("amqp://${"+ variable +"}:5672", "amqp://"+ hostValue +":5672");
+ doSetDefaultFactoryUriViaProviderURLTestImpl("amqps://${" + variable +"}:5672", "amqps://" + hostValue +":5672");
+ doSetDefaultFactoryUriViaProviderURLTestImpl("failover:(amqp://${"+ variable +"}1:5672,amqp://${"+ variable +"}2:5672)",
+ "failover:(amqp://"+ hostValue +"1:5672,amqp://"+ hostValue +"2:5672)");
+ doSetDefaultFactoryUriViaProviderURLTestImpl("failover:(amqps://${"+ variable +"}1:5672,amqps://${"+ variable +"}2:5672)",
+ "failover:(amqps://"+ hostValue +"1:5672,amqps://"+ hostValue +"2:5672)");
+ }
+
+ private void doSetDefaultFactoryUriViaProviderURLTestImpl(String providerUrl, String expectedUrl) throws NamingException {
+ Properties env = new Properties();
+ env.setProperty(Context.INITIAL_CONTEXT_FACTORY, JmsInitialContextFactory.class.getName());
+ env.setProperty(Context.PROVIDER_URL, providerUrl);
+
+ Context context = createInitialContext(env);
+
+ ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
+ ConnectionFactory queueConnectionFactory = (ConnectionFactory) context.lookup("QueueConnectionFactory");
+ ConnectionFactory topicConnectionFactory = (ConnectionFactory) context.lookup("TopicConnectionFactory");
+
+ assertTrue(connectionFactory instanceof JmsConnectionFactory);
+ assertTrue(queueConnectionFactory instanceof JmsConnectionFactory);
+ assertTrue(topicConnectionFactory instanceof JmsConnectionFactory);
+
+ assertEquals(expectedUrl, ((JmsConnectionFactory) connectionFactory).getRemoteURI());
+ assertEquals(expectedUrl, ((JmsConnectionFactory) queueConnectionFactory).getRemoteURI());
+ assertEquals(expectedUrl, ((JmsConnectionFactory) topicConnectionFactory).getRemoteURI());
+ }
+
+ private void doSetDefaultFactoryUriViaProviderURLTestImpl(String providerUrl) throws NamingException {
+ doSetDefaultFactoryUriViaProviderURLTestImpl(providerUrl, providerUrl);
+ }
+
+ @Test
+ public void testProvidingDefaultFactoryRemoteUriViaProviderURL() throws NamingException {
+ doSetDefaultFactoryUriViaProviderURLTestImpl("amqp://host1:5672");
+ doSetDefaultFactoryUriViaProviderURLTestImpl("amqps://host1:5672");
+ doSetDefaultFactoryUriViaProviderURLTestImpl("failover:(amqp://host1:5672,amqp://host2:5672)");
+ doSetDefaultFactoryUriViaProviderURLTestImpl("failover:(amqps://host1:5672,amqps://host2:5672)");
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org