[CAMEL-9388] Provide properties-based AMQP connection discovery.

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/975e8808
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/975e8808
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/975e8808

Branch: refs/heads/camel-2.16.x
Commit: 975e8808410a7e2c2bdd8f0ab5982ea88fae0b28
Parents: 4d169c9
Author: Henryk Konsek <hekon...@gmail.com>
Authored: Thu Dec 3 16:04:36 2015 +0100
Committer: Andrea Cosentino <anco...@gmail.com>
Committed: Mon Feb 29 09:30:14 2016 +0100

----------------------------------------------------------------------
 .../component/amqp/AMQPConnectionDetails.java   | 38 ++++++++++++++++++++
 .../camel/component/amqp/AMQPRouteTest.java     |  8 ++++-
 2 files changed, 45 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/975e8808/components/camel-amqp/src/main/java/org/apache/camel/component/amqp/AMQPConnectionDetails.java
----------------------------------------------------------------------
diff --git 
a/components/camel-amqp/src/main/java/org/apache/camel/component/amqp/AMQPConnectionDetails.java
 
b/components/camel-amqp/src/main/java/org/apache/camel/component/amqp/AMQPConnectionDetails.java
index 545bd27..fa06b5b 100644
--- 
a/components/camel-amqp/src/main/java/org/apache/camel/component/amqp/AMQPConnectionDetails.java
+++ 
b/components/camel-amqp/src/main/java/org/apache/camel/component/amqp/AMQPConnectionDetails.java
@@ -16,8 +16,19 @@
  */
 package org.apache.camel.component.amqp;
 
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.properties.PropertiesComponent;
+
 public class AMQPConnectionDetails {
 
+    public static final String AMQP_HOST = "AMQP_SERVICE_HOST";
+
+    public static final String AMQP_PORT = "AMQP_SERVICE_PORT";
+
+    public static final String AMQP_USERNAME = "AMQP_SERVICE_USERNAME";
+
+    public static final String AMQP_PASSWORD = "AMQP_SERVICE_PASSWORD";
+
     private final String uri;
 
     private final String username;
@@ -34,6 +45,21 @@ public class AMQPConnectionDetails {
         this(uri, null, null);
     }
 
+    public static AMQPConnectionDetails discoverAMQP(CamelContext 
camelContext) {
+        try {
+            PropertiesComponent propertiesComponent = 
camelContext.getComponent("properties", PropertiesComponent.class);
+
+            String host = property(propertiesComponent, AMQP_HOST, 
"localhost");
+            int port = Integer.parseInt(property(propertiesComponent, 
AMQP_PORT , "5672"));
+            String username = property(propertiesComponent, AMQP_USERNAME, 
null);
+            String password = property(propertiesComponent, AMQP_PASSWORD, 
null);
+
+            return new AMQPConnectionDetails("amqp://" + host + ":" + port, 
username, password);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     public String uri() {
         return uri;
     }
@@ -46,4 +72,16 @@ public class AMQPConnectionDetails {
         return password;
     }
 
+    // Helpers
+
+    private static String property(PropertiesComponent propertiesComponent, 
String key, String defaultValue) {
+        try {
+            return 
propertiesComponent.parseUri(propertiesComponent.getPrefixToken() + key + 
propertiesComponent.getSuffixToken());
+        } catch (IllegalArgumentException e) {
+            return defaultValue;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/975e8808/components/camel-amqp/src/test/java/org/apache/camel/component/amqp/AMQPRouteTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-amqp/src/test/java/org/apache/camel/component/amqp/AMQPRouteTest.java
 
b/components/camel-amqp/src/test/java/org/apache/camel/component/amqp/AMQPRouteTest.java
index fa7319d..e7303fc 100644
--- 
a/components/camel-amqp/src/test/java/org/apache/camel/component/amqp/AMQPRouteTest.java
+++ 
b/components/camel-amqp/src/test/java/org/apache/camel/component/amqp/AMQPRouteTest.java
@@ -22,6 +22,7 @@ import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.impl.PropertyPlaceholderDelegateRegistry;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.AfterClass;
@@ -29,6 +30,8 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 import static org.apache.camel.component.amqp.AMQPComponent.amqpComponent;
+import static org.apache.camel.component.amqp.AMQPConnectionDetails.AMQP_PORT;
+import static 
org.apache.camel.component.amqp.AMQPConnectionDetails.discoverAMQP;
 
 public class AMQPRouteTest extends CamelTestSupport {
 
@@ -47,6 +50,8 @@ public class AMQPRouteTest extends CamelTestSupport {
         broker.setPersistent(false);
         broker.addConnector("amqp://0.0.0.0:" + amqpPort);
         broker.start();
+
+        System.setProperty(AMQP_PORT, amqpPort + "");
     }
 
     @AfterClass
@@ -97,12 +102,13 @@ public class AMQPRouteTest extends CamelTestSupport {
     @Override
     protected JndiRegistry createRegistry() throws Exception {
         JndiRegistry registry = super.createRegistry();
-        registry.bind("amqpConnection", new 
AMQPConnectionDetails("amqp://localhost:" + amqpPort));
         return registry;
     }
 
     protected CamelContext createCamelContext() throws Exception {
         CamelContext camelContext = super.createCamelContext();
+        JndiRegistry registry = 
(JndiRegistry)((PropertyPlaceholderDelegateRegistry)camelContext.getRegistry()).getRegistry();
+        registry.bind("amqpConnection", discoverAMQP(camelContext));
         camelContext.addComponent("amqp-customized", 
amqpComponent("amqp://localhost:" + amqpPort));
         return camelContext;
     }

Reply via email to