You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2007/08/23 15:46:15 UTC
svn commit: r568989 - in /activemq/camel/trunk/components/camel-http/src:
main/java/org/apache/camel/component/http/JettyHttpComponent.java
test/java/org/apache/camel/component/http/HttpRouteTest.java
Author: jstrachan
Date: Thu Aug 23 06:46:14 2007
New Revision: 568989
URL: http://svn.apache.org/viewvc?rev=568989&view=rev
Log:
made the creation of the embedded Jetty server lazy, so its only created when you consume from a http endpoint. See http://www.nabble.com/Consuming-from-a-http-endpoint-tf4314211s22882.html#a12283406
Modified:
activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/JettyHttpComponent.java
activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java
Modified: activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/JettyHttpComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/JettyHttpComponent.java?rev=568989&r1=568988&r2=568989&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/JettyHttpComponent.java (original)
+++ activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/JettyHttpComponent.java Thu Aug 23 06:46:14 2007
@@ -16,8 +16,6 @@
*/
package org.apache.camel.component.http;
-import java.util.HashMap;
-
import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.nio.SelectChannelConnector;
@@ -25,15 +23,17 @@
import org.mortbay.jetty.servlet.Context;
import org.mortbay.jetty.servlet.ServletHolder;
+import java.util.HashMap;
+
/**
* An HttpComponent which starts an embedded Jetty for to handle consuming from
* http endpoints.
- *
+ *
* @version $Revision: 525142 $
*/
public class JettyHttpComponent extends HttpComponent {
-
- Server server;
+ private Server server;
+ private final HashMap<String, ConnectorRef> connectors = new HashMap<String, ConnectorRef>();
class ConnectorRef {
Connector connector;
@@ -53,46 +53,11 @@
}
}
- final HashMap<String, ConnectorRef> connectors = new HashMap<String, ConnectorRef>();
-
- @Override
- protected void doStart() throws Exception {
- server = createServer();
- super.doStart();
- }
-
- private Server createServer() throws Exception {
- setCamelServlet(new CamelServlet());
-
- Server server = new Server();
- Context context = new Context(Context.NO_SECURITY | Context.NO_SESSIONS);
-
- context.setContextPath("/");
- ServletHolder holder = new ServletHolder();
- holder.setServlet(getCamelServlet());
- context.addServlet(holder, "/*");
- server.setHandler(context);
-
- server.start();
- return server;
- }
-
- @Override
- protected void doStop() throws Exception {
- for (ConnectorRef connectorRef : connectors.values()) {
- connectorRef.connector.stop();
- }
- connectors.clear();
-
- server.stop();
- super.doStop();
- }
-
@Override
public void connect(HttpConsumer consumer) throws Exception {
// Make sure that there is a connector for the requested endpoint.
- HttpEndpoint endpoint = (HttpEndpoint)consumer.getEndpoint();
+ HttpEndpoint endpoint = (HttpEndpoint) consumer.getEndpoint();
String connectorKey = endpoint.getProtocol() + ":" + endpoint.getPort();
synchronized (connectors) {
@@ -101,14 +66,16 @@
Connector connector;
if ("https".equals(endpoint.getProtocol())) {
connector = new SslSocketConnector();
- } else {
+ }
+ else {
connector = new SelectChannelConnector();
}
connector.setPort(endpoint.getPort());
- server.addConnector(connector);
+ getServer().addConnector(connector);
connector.start();
connectorRef = new ConnectorRef(connector);
- } else {
+ }
+ else {
// ref track the connector
connectorRef.increment();
}
@@ -122,18 +89,64 @@
super.disconnect(consumer);
// If the connector is not needed anymore.. then stop it.
- HttpEndpoint endpoint = (HttpEndpoint)consumer.getEndpoint();
+ HttpEndpoint endpoint = (HttpEndpoint) consumer.getEndpoint();
String connectorKey = endpoint.getProtocol() + ":" + endpoint.getPort();
synchronized (connectors) {
ConnectorRef connectorRef = connectors.get(connectorKey);
if (connectorRef != null) {
if (connectorRef.decrement() == 0) {
- server.removeConnector(connectorRef.connector);
+ getServer().removeConnector(connectorRef.connector);
connectorRef.connector.stop();
connectors.remove(connectorKey);
}
}
}
+ }
+
+ // Properties
+ //-------------------------------------------------------------------------
+
+ public Server getServer() throws Exception {
+ if (server == null) {
+ server = createServer();
+ }
+ return server;
+ }
+
+ public void setServer(Server server) {
+ this.server = server;
+ }
+
+ // Implementation methods
+ //-------------------------------------------------------------------------
+
+ protected Server createServer() throws Exception {
+ setCamelServlet(new CamelServlet());
+
+ Server server = new Server();
+ Context context = new Context(Context.NO_SECURITY | Context.NO_SESSIONS);
+
+ context.setContextPath("/");
+ ServletHolder holder = new ServletHolder();
+ holder.setServlet(getCamelServlet());
+ context.addServlet(holder, "/*");
+ server.setHandler(context);
+
+ server.start();
+ return server;
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ for (ConnectorRef connectorRef : connectors.values()) {
+ connectorRef.connector.stop();
+ }
+ connectors.clear();
+
+ if (server != null) {
+ server.stop();
+ }
+ super.doStop();
}
}
Modified: activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java?rev=568989&r1=568988&r2=568989&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java (original)
+++ activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java Thu Aug 23 06:46:14 2007
@@ -32,7 +32,7 @@
public class HttpRouteTest extends ContextTestSupport {
protected String expectedBody = "<hello>world!</hello>";
- public void testPojoRoutes() throws Exception {
+ public void testEndpoint() throws Exception {
MockEndpoint mockEndpoint = resolveMandatoryEndpoint("mock:a", MockEndpoint.class);
mockEndpoint.expectedBodiesReceived(expectedBody);