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);