You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2012/03/15 04:00:41 UTC

svn commit: r1300805 - in /camel/trunk/components/camel-cometd/src: main/java/org/apache/camel/component/cometd/CometdComponent.java test/java/org/apache/camel/component/cometd/MultipCometdProducerConsumerTest.java

Author: ningjiang
Date: Thu Mar 15 03:00:40 2012
New Revision: 1300805

URL: http://svn.apache.org/viewvc?rev=1300805&view=rev
Log:
CAMEL-5087 Let camel-cometd componnet supports multiple endpoints with different ports

Added:
    camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/MultipCometdProducerConsumerTest.java
Modified:
    camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java

Modified: camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java?rev=1300805&r1=1300804&r2=1300805&view=diff
==============================================================================
--- camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java (original)
+++ camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java Thu Mar 15 03:00:40 2012
@@ -54,8 +54,7 @@ public class CometdComponent extends Def
     private static final transient Logger LOG = LoggerFactory.getLogger(CometdComponent.class);
 
     private final Map<String, ConnectorRef> connectors = new LinkedHashMap<String, ConnectorRef>();
-
-    private Server server;
+   
     private String sslKeyPassword;
     private String sslPassword;
     private String sslKeystore;
@@ -66,11 +65,13 @@ public class CometdComponent extends Def
     class ConnectorRef {
         Connector connector;
         CometdServlet servlet;
+        Server server;
         int refCount;
 
-        public ConnectorRef(Connector connector, CometdServlet servlet) {
+        public ConnectorRef(Connector connector, CometdServlet servlet, Server server) {
             this.connector = connector;
             this.servlet = servlet;
+            this.server = server;
             increment();
         }
 
@@ -115,11 +116,12 @@ public class CometdComponent extends Def
                     LOG.warn("You use localhost interface! It means that no external connections will be available."
                             + " Don't you want to use 0.0.0.0 instead (all network interfaces)?");
                 }
-                getServer().addConnector(connector);
+                Server server = createServer();
+                server.addConnector(connector);
 
-                CometdServlet servlet = createServletForConnector(connector, endpoint);
-                connectorRef = new ConnectorRef(connector, servlet);
-                getServer().start();
+                CometdServlet servlet = createServletForConnector(server, connector, endpoint);
+                connectorRef = new ConnectorRef(connector, servlet, server);
+                server.start();
 
                 connectors.put(connectorKey, connectorRef);
             } else {
@@ -153,15 +155,16 @@ public class CometdComponent extends Def
             ConnectorRef connectorRef = connectors.get(connectorKey);
             if (connectorRef != null) {
                 if (connectorRef.decrement() == 0) {
-                    getServer().removeConnector(connectorRef.connector);
+                    connectorRef.server.removeConnector(connectorRef.connector);
                     connectorRef.connector.stop();
+                    connectorRef.server.stop();
                     connectors.remove(connectorKey);
                 }
             }
         }
     }
 
-    protected CometdServlet createServletForConnector(Connector connector, CometdEndpoint endpoint) throws Exception {
+    protected CometdServlet createServletForConnector(Server server, Connector connector, CometdEndpoint endpoint) throws Exception {
         CometdServlet servlet = new CometdServlet();
 
         ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.NO_SECURITY | ServletContextHandler.NO_SESSIONS);
@@ -228,17 +231,6 @@ public class CometdComponent extends Def
         return sslSocketConnector;
     }
 
-    public Server getServer() throws Exception {
-        if (server == null) {
-            server = createServer();
-        }
-        return server;
-    }
-
-    public void setServer(Server server) {
-        this.server = server;
-    }
-
     public String getSslKeyPassword() {
         return sslKeyPassword;
     }
@@ -307,10 +299,7 @@ public class CometdComponent extends Def
             connectorRef.connector.stop();
         }
         connectors.clear();
-
-        if (server != null) {
-            server.stop();
-        }
+       
         super.doStop();
     }
 

Added: camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/MultipCometdProducerConsumerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/MultipCometdProducerConsumerTest.java?rev=1300805&view=auto
==============================================================================
--- camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/MultipCometdProducerConsumerTest.java (added)
+++ camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/MultipCometdProducerConsumerTest.java Thu Mar 15 03:00:40 2012
@@ -0,0 +1,115 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cometd;
+
+import java.util.List;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit testing for using a CometdProducer and a CometdConsumer
+ */
+public class MultipCometdProducerConsumerTest extends CamelTestSupport {
+
+    private int port1;
+    private String uri1;
+    private int port2;
+    private String uri2;
+
+    @Test
+    public void testProducer() throws Exception {
+        Person person = new Person("David", "Greco");
+        
+        getMockEndpoint("mock:test1").expectedBodiesReceived(person);
+        getMockEndpoint("mock:test1").expectedBodiesReceived(person);
+        
+        //act
+        template.requestBodyAndHeader("direct:input1", person, "testHeading", "value");
+        template.requestBodyAndHeader("direct:input2", person, "testHeading", "value");
+       
+        assertMockEndpointsSatisfied();
+    }
+
+   
+    
+   
+
+    @Override
+    @Before
+    public void setUp() throws Exception {
+        port1 = AvailablePortFinder.getNextAvailable(23500);
+        port2 = AvailablePortFinder.getNextAvailable(23510);
+        uri1 = "cometd://127.0.0.1:" + port1 + "/service/test?baseResource=file:./target/test-classes/webapp&"
+                + "timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2";
+
+        uri2 = "cometd://127.0.0.1:" + port2 + "/service/test?baseResource=file:./target/test-classes/webapp&"
+            + "timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2";
+        super.setUp();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:input1").to(uri1);
+
+                from(uri1).to("mock:test1");
+                
+                from("direct:input2").to(uri2);
+                
+                from(uri2).to("mock:test2");
+            }
+        };
+    }
+
+    public static class Person {
+
+        private String name;
+        private String surname;
+
+        Person(String name, String surname) {
+            this.name = name;
+            this.surname = surname;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public String getSurname() {
+            return surname;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public void setSurname(String surname) {
+            this.surname = surname;
+        }
+    }
+}
+