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;
+ }
+ }
+}
+