You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/07/19 09:09:26 UTC

svn commit: r965369 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/impl/ components/camel-jetty/src/main/java/org/apache/camel/component/jetty/ components/camel-jetty/src/test/java/org/apache/camel/component/jetty/

Author: davsclaus
Date: Mon Jul 19 07:09:25 2010
New Revision: 965369

URL: http://svn.apache.org/viewvc?rev=965369&view=rev
Log:
CAMEL-2956: jetty component has more options to set server thread pool settings. Also setting general HTTP/SSL connector properties is easier.

Added:
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitJettyRouteTest.java
      - copied, changed from r965352, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteAddSslConnectorPropertiesTest.java   (contents, props changed)
      - copied, changed from r965352, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteWithSslConnectorPropertiesTest.java   (with props)
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyMinMaxThreadPoolTest.java
      - copied, changed from r964698, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithSocketPropertiesTest.java   (with props)
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSocketPropertiesTest.java   (with props)
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSslSocketPropertiesTest.java   (with props)
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ExpressionAdapter.java
    camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteSetupWithSystemPropsTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ExpressionAdapter.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ExpressionAdapter.java?rev=965369&r1=965368&r2=965369&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ExpressionAdapter.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ExpressionAdapter.java Mon Jul 19 07:09:25 2010
@@ -22,7 +22,7 @@ import org.apache.camel.Exchange;
  * A helper class for developers wishing to implement an {@link org.apache.camel.Expression}
  * using Java code with a minimum amount of code to write so that the developer only needs
  * to implement one of the {@link #evaluate(org.apache.camel.Exchange, Class)} or
- * {@link #evaluate(org.apache.camel.Exchange, Class)} methods.
+ * {@link #evaluate(org.apache.camel.Exchange)} methods.
  *
  * @version $Revision$
  */

Modified: camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java?rev=965369&r1=965368&r2=965369&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java (original)
+++ camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java Mon Jul 19 07:09:25 2010
@@ -21,11 +21,11 @@ import java.net.URI;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import javax.management.MBeanServer;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
+import org.apache.camel.ResolveEndpointFailedException;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.http.CamelServlet;
 import org.apache.camel.component.http.HttpBinding;
@@ -73,15 +73,23 @@ public class JettyHttpComponent extends 
    
     private static final transient Log LOG = LogFactory.getLog(JettyHttpComponent.class);
     private static final String JETTY_SSL_KEYSTORE = "org.eclipse.jetty.ssl.keystore";
-    
+    private static final String JETTY_SSL_KEYPASSWORD = "org.eclipse.jetty.ssl.keypassword";
+    private static final String JETTY_SSL_PASSWORD = "org.eclipse.jetty.ssl.password";
+
     protected String sslKeyPassword;
     protected String sslPassword;
     protected String sslKeystore;
     protected Map<Integer, SslSocketConnector> sslSocketConnectors;
+    protected Map<Integer, SelectChannelConnector> socketConnectors;
+    protected Map<String, Object> sslSocketConnectorProperties;
+    protected Map<String, Object> socketConnectorProperties;
     protected HttpClient httpClient;
     protected ThreadPool httpClientThreadPool;
     protected Integer httpClientMinThreads;
     protected Integer httpClientMaxThreads;
+    protected Integer minThreads;
+    protected Integer maxThreads;
+    protected ThreadPool threadPool;
     protected MBeanContainer mbContainer;
     protected boolean enableJmx;
 
@@ -196,7 +204,7 @@ public class JettyHttpComponent extends 
                 if ("https".equals(endpoint.getProtocol())) {
                     connector = getSslSocketConnector(endpoint.getPort());
                 } else {
-                    connector = new SelectChannelConnector();
+                    connector = getSocketConnector(endpoint.getPort());
                 }
                 connector.setPort(endpoint.getPort());
                 connector.setHost(endpoint.getHttpUri().getHost());
@@ -314,49 +322,96 @@ public class JettyHttpComponent extends 
         return sslKeystore;
     }
 
-    public SslSocketConnector getSslSocketConnector(int port) {
+    protected SslSocketConnector getSslSocketConnector(int port) throws Exception {
         SslSocketConnector answer = null;
         if (sslSocketConnectors != null) {
             answer = sslSocketConnectors.get(port);
         }
         if (answer == null) {
             answer = createSslSocketConnector();
-        } else {
-            // try the keystore system property as a backup, jetty doesn't seem
-            // to read this property anymore
-            String keystoreProperty = System.getProperty(JETTY_SSL_KEYSTORE);
-            if (keystoreProperty != null) {
-                answer.setKeystore(keystoreProperty);
-            }
-
         }
         return answer;
     }
     
-    public SslSocketConnector createSslSocketConnector() {
+    protected SslSocketConnector createSslSocketConnector() throws Exception {
         SslSocketConnector answer = new SslSocketConnector();
         // with default null values, jetty ssl system properties
         // and console will be read by jetty implementation
-        answer.setPassword(sslPassword);
-        answer.setKeyPassword(sslKeyPassword);
-        if (sslKeystore != null) {
+
+        String keystoreProperty = System.getProperty(JETTY_SSL_KEYSTORE);
+        if (keystoreProperty != null) {
+            answer.setKeystore(keystoreProperty);
+        } else if (sslKeystore != null) {
             answer.setKeystore(sslKeystore);
-        } else {
-            // try the keystore system property as a backup, jetty doesn't seem
-            // to read this property anymore
-            String keystoreProperty = System.getProperty(JETTY_SSL_KEYSTORE);
-            if (keystoreProperty != null) {
-                answer.setKeystore(keystoreProperty);
+        }
+
+        String keystorePassword = System.getProperty(JETTY_SSL_KEYPASSWORD);
+        if (keystorePassword != null) {
+            answer.setKeyPassword(keystorePassword);
+        } else if (sslKeyPassword != null) {
+            answer.setKeyPassword(sslKeyPassword);
+        }
+
+        String password = System.getProperty(JETTY_SSL_PASSWORD);
+        if (password != null) {
+            answer.setPassword(password);
+        } else if (sslPassword != null) {
+            answer.setPassword(sslPassword);
+        }
+
+        if (getSslSocketConnectorProperties() != null) {
+            // must copy the map otherwise it will be deleted
+            Map<String, Object> properties = new HashMap<String, Object>(getSslSocketConnectorProperties());
+            IntrospectionSupport.setProperties(answer, properties);
+            if (properties.size() > 0) {
+                throw new IllegalArgumentException("There are " + properties.size()
+                    + " parameters that couldn't be set on the SslSocketConnector."
+                    + " Check the uri if the parameters are spelt correctly and that they are properties of the SslSocketConnector."
+                    + " Unknown parameters=[" + properties + "]");
             }
         }
-        
         return answer;
     }
 
+    public Map<Integer, SslSocketConnector> getSslSocketConnectors() {
+        return sslSocketConnectors;
+    }
+
     public void setSslSocketConnectors(Map <Integer, SslSocketConnector> connectors) {
         sslSocketConnectors = connectors;
     }
 
+    public SelectChannelConnector getSocketConnector(int port) throws Exception {
+        SelectChannelConnector answer = null;
+        if (socketConnectors != null) {
+            answer = socketConnectors.get(port);
+        }
+        if (answer == null) {
+            answer = createSocketConnector();
+        }
+        return answer;
+    }
+
+    protected SelectChannelConnector createSocketConnector() throws Exception {
+        SelectChannelConnector answer = new SelectChannelConnector();
+        if (getSocketConnectorProperties() != null) {
+            // must copy the map otherwise it will be deleted
+            Map<String, Object> properties = new HashMap<String, Object>(getSocketConnectorProperties());
+            IntrospectionSupport.setProperties(answer, properties);
+            if (properties.size() > 0) {
+                throw new IllegalArgumentException("There are " + properties.size()
+                    + " parameters that couldn't be set on the SocketConnector."
+                    + " Check the uri if the parameters are spelt correctly and that they are properties of the SelectChannelConnector."
+                    + " Unknown parameters=[" + properties + "]");
+            }
+        }
+        return answer;
+    }
+
+    public void setSocketConnectors(Map<Integer, SelectChannelConnector> socketConnectors) {
+        this.socketConnectors = socketConnectors;
+    }
+
     public synchronized HttpClient getHttpClient() {
         if (httpClient == null) {
             httpClient = new HttpClient();
@@ -421,6 +476,30 @@ public class JettyHttpComponent extends 
         this.httpClientMaxThreads = httpClientMaxThreads;
     }
 
+    public Integer getMinThreads() {
+        return minThreads;
+    }
+
+    public void setMinThreads(Integer minThreads) {
+        this.minThreads = minThreads;
+    }
+
+    public Integer getMaxThreads() {
+        return maxThreads;
+    }
+
+    public void setMaxThreads(Integer maxThreads) {
+        this.maxThreads = maxThreads;
+    }
+
+    public ThreadPool getThreadPool() {
+        return threadPool;
+    }
+
+    public void setThreadPool(ThreadPool threadPool) {
+        this.threadPool = threadPool;
+    }
+
     public void setEnableJmx(boolean enableJmx) {
         this.enableJmx = enableJmx;
     }
@@ -455,6 +534,36 @@ public class JettyHttpComponent extends 
         this.mbContainer = mbContainer;
     }
 
+    public Map<String, Object> getSslSocketConnectorProperties() {
+        return sslSocketConnectorProperties;
+    }
+
+    public void setSslSocketConnectorProperties(Map<String, Object> sslSocketConnectorProperties) {
+        this.sslSocketConnectorProperties = sslSocketConnectorProperties;
+    }
+
+    public Map<String, Object> getSocketConnectorProperties() {
+        return socketConnectorProperties;
+    }
+
+    public void setSocketConnectorProperties(Map<String, Object> socketConnectorProperties) {
+        this.socketConnectorProperties = socketConnectorProperties;
+    }
+
+    public void addSocketConnectorProperty(String key, Object value) {
+        if (socketConnectorProperties == null) {
+            socketConnectorProperties = new HashMap<String, Object>();
+        }
+        socketConnectorProperties.put(key, value);
+    }
+
+    public void addSslSocketConnectorProperty(String key, Object value) {
+        if (sslSocketConnectorProperties == null) {
+            sslSocketConnectorProperties = new HashMap<String, Object>();
+        }
+        sslSocketConnectorProperties.put(key, value);
+    }
+
     // Implementation methods
     // -------------------------------------------------------------------------
     protected CamelServlet createServletForConnector(Server server, Connector connector, List<Handler> handlers) throws Exception {
@@ -502,6 +611,31 @@ public class JettyHttpComponent extends 
         Server server = new Server();
         ContextHandlerCollection collection = new ContextHandlerCollection();
         server.setHandler(collection);
+
+        // configure thread pool if min/max given
+        if (minThreads != null || maxThreads != null) {
+            if (getThreadPool() != null) {
+                throw new IllegalArgumentException("You cannot configure both minThreads/maxThreads and a custom threadPool on JettyHttpComponent: " + this);
+            }
+            QueuedThreadPool qtp = new QueuedThreadPool();
+            if (minThreads != null) {
+                qtp.setMinThreads(minThreads.intValue());
+            }
+            if (maxThreads != null) {
+                qtp.setMaxThreads(maxThreads.intValue());
+            }
+            try {
+                qtp.start();
+            } catch (Exception e) {
+                throw new RuntimeCamelException("Error starting JettyServer thread pool: " + qtp, e);
+            }
+            server.setThreadPool(qtp);
+        }
+
+        if (getThreadPool() != null) {
+            server.setThreadPool(getThreadPool());
+        }
+
         return server;
     }
     

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java?rev=965369&r1=965368&r2=965369&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java Mon Jul 19 07:09:25 2010
@@ -27,7 +27,8 @@ import org.apache.camel.builder.RouteBui
 import org.eclipse.jetty.server.ssl.SslSocketConnector;
 
 public class ExplicitHttpsRouteTest extends HttpsRouteTest {
-    
+
+    // START SNIPPET: e2
     private SslSocketConnector createSslSocketConnector() throws URISyntaxException {
         SslSocketConnector sslSocketConnector = new SslSocketConnector();
         sslSocketConnector.setKeyPassword(pwd);
@@ -37,19 +38,26 @@ public class ExplicitHttpsRouteTest exte
         sslSocketConnector.setTruststoreType("JKS");
         return sslSocketConnector;
     }
+    // END SNIPPET: e2
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws URISyntaxException {
-                
-                JettyHttpComponent componentJetty = (JettyHttpComponent) context.getComponent("jetty");
+                // START SNIPPET: e1
+                // create SSL socket connectors for port 9080 and 9090
                 Map<Integer, SslSocketConnector> connectors = new HashMap<Integer, SslSocketConnector>();
                 connectors.put(9080, createSslSocketConnector());
                 connectors.put(9090, createSslSocketConnector());
-                
-                componentJetty.setSslSocketConnectors(connectors);
-                
+
+                // create jetty component
+                JettyHttpComponent jetty = new JettyHttpComponent();
+                // add connectors
+                jetty.setSslSocketConnectors(connectors);
+                // add jetty to camel context
+                context.addComponent("jetty", jetty);
+                // END SNIPPET: e1
+
                 from("jetty:https://localhost:9080/test").to("mock:a");
 
                 Processor proc = new Processor() {

Copied: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitJettyRouteTest.java (from r965352, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitJettyRouteTest.java?p2=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitJettyRouteTest.java&p1=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteTest.java&r1=965352&r2=965369&rev=965369&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitJettyRouteTest.java Mon Jul 19 07:09:25 2010
@@ -16,18 +16,21 @@
  */
 package org.apache.camel.component.jetty;
 
+import java.util.HashMap;
+import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
+import org.eclipse.jetty.server.nio.SelectChannelConnector;
 import org.junit.Test;
 
 /**
  * Unit test for wiki demonstration.
  */
-public class JettyRouteTest extends CamelTestSupport {
+public class ExplicitJettyRouteTest extends CamelTestSupport {
 
     @Test
     public void testSendToJetty() throws Exception {
@@ -37,18 +40,36 @@ public class JettyRouteTest extends Came
         assertEquals("<html><body>Book 123 is Camel in Action</body></html>", body);
     }
 
+    private SelectChannelConnector createSocketConnector() {
+        SelectChannelConnector answer = new SelectChannelConnector();
+        answer.setAcceptors(2);
+        answer.setStatsOn(false);
+        answer.setSoLingerTime(5000);
+        return answer;
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
                 // START SNIPPET: e1
-                from("jetty:http://localhost:9080/myapp/myservice").process(new MyBookService());
+                // create socket connectors for port 9080
+                Map<Integer, SelectChannelConnector> connectors = new HashMap<Integer, SelectChannelConnector>();
+                connectors.put(9080, createSocketConnector());
+
+                // create jetty component
+                JettyHttpComponent jetty = new JettyHttpComponent();
+                // add connectors
+                jetty.setSocketConnectors(connectors);
+                // add jetty to camel context
+                context.addComponent("jetty", jetty);
                 // END SNIPPET: e1
+
+                from("jetty:http://localhost:9080/myapp/myservice").process(new MyBookService());
             }
         };
     }
 
-    // START SNIPPET: e2
     public class MyBookService implements Processor {
         public void process(Exchange exchange) throws Exception {
             // just get the body as a string
@@ -65,6 +86,5 @@ public class JettyRouteTest extends Came
             exchange.getOut().setBody("<html><body>Book 123 is Camel in Action</body></html>");
         }
     }
-    // END SNIPPET: e2
 
-}
+}
\ No newline at end of file

Copied: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteAddSslConnectorPropertiesTest.java (from r965352, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteAddSslConnectorPropertiesTest.java?p2=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteAddSslConnectorPropertiesTest.java&p1=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java&r1=965352&r2=965369&rev=965369&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteAddSslConnectorPropertiesTest.java Mon Jul 19 07:09:25 2010
@@ -18,38 +18,35 @@ package org.apache.camel.component.jetty
 
 import java.net.URISyntaxException;
 import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.eclipse.jetty.server.ssl.SslSocketConnector;
 
-public class ExplicitHttpsRouteTest extends HttpsRouteTest {
-    
-    private SslSocketConnector createSslSocketConnector() throws URISyntaxException {
-        SslSocketConnector sslSocketConnector = new SslSocketConnector();
-        sslSocketConnector.setKeyPassword(pwd);
-        sslSocketConnector.setPassword(pwd);
-        URL keyStoreUrl = this.getClass().getClassLoader().getResource("jsse/localhost.ks");
-        sslSocketConnector.setKeystore(keyStoreUrl.toURI().getPath());
-        sslSocketConnector.setTruststoreType("JKS");
-        return sslSocketConnector;
-    }
+public class HttpsRouteAddSslConnectorPropertiesTest extends HttpsRouteTest {
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws URISyntaxException {
-                
-                JettyHttpComponent componentJetty = (JettyHttpComponent) context.getComponent("jetty");
-                Map<Integer, SslSocketConnector> connectors = new HashMap<Integer, SslSocketConnector>();
-                connectors.put(9080, createSslSocketConnector());
-                connectors.put(9090, createSslSocketConnector());
-                
-                componentJetty.setSslSocketConnectors(connectors);
-                
+                // START SNIPPET: e1
+                // keystore path
+                URL keyStoreUrl = this.getClass().getClassLoader().getResource("jsse/localhost.ks");
+                String path = keyStoreUrl.toURI().getPath();
+
+                // create jetty component
+                JettyHttpComponent jetty = new JettyHttpComponent();
+
+                // add SSL properties
+                jetty.addSslSocketConnectorProperty("keyPassword", pwd);
+                jetty.addSslSocketConnectorProperty("password", pwd);
+                jetty.addSslSocketConnectorProperty("keystore", path);
+                jetty.addSslSocketConnectorProperty("truststoreType", "JKS");
+
+                // add jetty to camel context
+                context.addComponent("jetty", jetty);
+                // END SNIPPET: e1
+
                 from("jetty:https://localhost:9080/test").to("mock:a");
 
                 Processor proc = new Processor() {
@@ -58,7 +55,7 @@ public class ExplicitHttpsRouteTest exte
                     }
                 };
                 from("jetty:https://localhost:9080/hello").process(proc);
-                
+
                 from("jetty:https://localhost:9090/test").to("mock:b");
             }
         };

Propchange: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteAddSslConnectorPropertiesTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteAddSslConnectorPropertiesTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteSetupWithSystemPropsTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteSetupWithSystemPropsTest.java?rev=965369&r1=965368&r2=965369&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteSetupWithSystemPropsTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteSetupWithSystemPropsTest.java Mon Jul 19 07:09:25 2010
@@ -27,16 +27,18 @@ public class HttpsRouteSetupWithSystemPr
     
     @Override
     @Before
-    public void setUp() throws Exception {   
-        // ensure jsse clients can validate the self signed dummy localhost cert, 
+    public void setUp() throws Exception {
+        // ensure jsse clients can validate the self signed dummy localhost cert,
         // use the server keystore as the trust store for these tests
         URL trustStoreUrl = this.getClass().getClassLoader().getResource("jsse/localhost.ks");
         setSystemProp("javax.net.ssl.trustStore", trustStoreUrl.getPath());
         
+        // START SNIPPET: e1
         // setup SSL using system properties
         setSystemProp("org.eclipse.jetty.ssl.keystore", trustStoreUrl.getPath());
         setSystemProp("org.eclipse.jetty.ssl.keypassword", pwd);
         setSystemProp("org.eclipse.jetty.ssl.password", pwd);
+        // END SNIPPET: e1
 
         super.setUp();     
     }

Added: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteWithSslConnectorPropertiesTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteWithSslConnectorPropertiesTest.java?rev=965369&view=auto
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteWithSslConnectorPropertiesTest.java (added)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteWithSslConnectorPropertiesTest.java Mon Jul 19 07:09:25 2010
@@ -0,0 +1,67 @@
+/**
+ * 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.jetty;
+
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+
+public class HttpsRouteWithSslConnectorPropertiesTest extends HttpsRouteTest {
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws URISyntaxException {
+                // START SNIPPET: e1
+                // keystore path
+                URL keyStoreUrl = this.getClass().getClassLoader().getResource("jsse/localhost.ks");
+                String path = keyStoreUrl.toURI().getPath();
+
+                // map with properties
+                Map<String, Object> properties = new HashMap<String, Object>();
+                properties.put("keyPassword", pwd);
+                properties.put("password", pwd);
+                properties.put("keystore", path);
+                properties.put("truststoreType", "JKS");
+
+                // create jetty component
+                JettyHttpComponent jetty = new JettyHttpComponent();
+                jetty.setSslSocketConnectorProperties(properties);
+
+                // add jetty to camel context
+                context.addComponent("jetty", jetty);
+                // END SNIPPET: e1
+
+                from("jetty:https://localhost:9080/test").to("mock:a");
+
+                Processor proc = new Processor() {
+                    public void process(Exchange exchange) throws Exception {
+                        exchange.getOut().setBody("<b>Hello World</b>");
+                    }
+                };
+                from("jetty:https://localhost:9080/hello").process(proc);
+
+                from("jetty:https://localhost:9090/test").to("mock:b");
+            }
+        };
+    }
+}
\ No newline at end of file

Propchange: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteWithSslConnectorPropertiesTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteWithSslConnectorPropertiesTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyMinMaxThreadPoolTest.java (from r964698, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyMinMaxThreadPoolTest.java?p2=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyMinMaxThreadPoolTest.java&p1=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteTest.java&r1=964698&r2=965369&rev=965369&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyMinMaxThreadPoolTest.java Mon Jul 19 07:09:25 2010
@@ -16,55 +16,74 @@
  */
 package org.apache.camel.component.jetty;
 
-import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.SynchronizationAdapter;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-/**
- * Unit test for wiki demonstration.
- */
-public class JettyRouteTest extends CamelTestSupport {
+public class JettyMinMaxThreadPoolTest extends CamelTestSupport {
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+
+        JettyHttpComponent jetty = context.getComponent("jetty", JettyHttpComponent.class);
+        jetty.setMinThreads(1);
+        jetty.setMaxThreads(5);
+
+        return context;
+    }
 
     @Test
-    public void testSendToJetty() throws Exception {
-        Object response = template.requestBody("http://localhost:9080/myapp/myservice", "bookid=123");
-        // convert the response to a String
-        String body = context.getTypeConverter().convertTo(String.class, response);
-        assertEquals("<html><body>Book 123 is Camel in Action</body></html>", body);
+    public void testJettyMinMax() throws Exception {
+        final List<String> replies = new ArrayList<String>();
+
+        final CountDownLatch latch = new CountDownLatch(10);
+
+        log.info("Sending 10 messages");
+        for (int i = 0; i < 10; i++) {
+            template.asyncCallbackRequestBody("http://localhost:9080/myapp/myservice", "" + i, new SynchronizationAdapter() {
+                @Override
+                public void onDone(Exchange exchange) {
+                    String body = exchange.getOut().getBody(String.class);
+                    replies.add(body);
+                    latch.countDown();
+                }
+            });
+        }
+
+        log.info("Waiting for all messages to be done");
+        latch.await(30, TimeUnit.SECONDS);
+        log.info("All messages done");
+
+        // sort replies
+        Collections.sort(replies);
+
+        for (int i = 0; i < 10; i++) {
+            assertEquals("Bye " + i, replies.get(i));
+        }
     }
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                // START SNIPPET: e1
-                from("jetty:http://localhost:9080/myapp/myservice").process(new MyBookService());
-                // END SNIPPET: e1
+                from("jetty:http://localhost:9080/myapp/myservice")
+                        .to("log:input")
+                        .delay(1000)
+                        .transform(body().prepend("Bye "))
+                        .to("log:output");
             }
         };
     }
 
-    // START SNIPPET: e2
-    public class MyBookService implements Processor {
-        public void process(Exchange exchange) throws Exception {
-            // just get the body as a string
-            String body = exchange.getIn().getBody(String.class);
-
-            // we have access to the HttpServletRequest here and we can grab it if we need it
-            HttpServletRequest req = exchange.getIn().getBody(HttpServletRequest.class);
-            assertNotNull(req);
-
-            // for unit testing
-            assertEquals("bookid=123", body);
-
-            // send a html response
-            exchange.getOut().setBody("<html><body>Book 123 is Camel in Action</body></html>");
-        }
-    }
-    // END SNIPPET: e2
 
-}
+}
\ No newline at end of file

Added: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithSocketPropertiesTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithSocketPropertiesTest.java?rev=965369&view=auto
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithSocketPropertiesTest.java (added)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithSocketPropertiesTest.java Mon Jul 19 07:09:25 2010
@@ -0,0 +1,83 @@
+/**
+ * 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.jetty;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ * Unit test for wiki demonstration.
+ */
+public class JettyRouteWithSocketPropertiesTest extends CamelTestSupport {
+
+    @Test
+    public void testSendToJetty() throws Exception {
+        Object response = template.requestBody("http://localhost:9080/myapp/myservice", "bookid=123");
+        // convert the response to a String
+        String body = context.getTypeConverter().convertTo(String.class, response);
+        assertEquals("<html><body>Book 123 is Camel in Action</body></html>", body);
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                // START SNIPPET: e1
+                // define socket connector properties
+                Map<String, Object> properties = new HashMap<String, Object>();
+                properties.put("acceptors", 4);
+                properties.put("statsOn", "false");
+                properties.put("soLingerTime", "5000");
+
+                // create jetty component
+                JettyHttpComponent jetty = new JettyHttpComponent();
+                // set properties
+                jetty.setSocketConnectorProperties(properties);
+                // add jetty to camel context
+                context.addComponent("jetty", jetty);
+                // END SNIPPET: e1
+
+                from("jetty:http://localhost:9080/myapp/myservice").process(new MyBookService());
+            }
+        };
+    }
+
+    public class MyBookService implements Processor {
+        public void process(Exchange exchange) throws Exception {
+            // just get the body as a string
+            String body = exchange.getIn().getBody(String.class);
+
+            // we have access to the HttpServletRequest here and we can grab it if we need it
+            HttpServletRequest req = exchange.getIn().getBody(HttpServletRequest.class);
+            assertNotNull(req);
+
+            // for unit testing
+            assertEquals("bookid=123", body);
+
+            // send a html response
+            exchange.getOut().setBody("<html><body>Book 123 is Camel in Action</body></html>");
+        }
+    }
+
+}
\ No newline at end of file

Propchange: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithSocketPropertiesTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithSocketPropertiesTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSocketPropertiesTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSocketPropertiesTest.java?rev=965369&view=auto
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSocketPropertiesTest.java (added)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSocketPropertiesTest.java Mon Jul 19 07:09:25 2010
@@ -0,0 +1,63 @@
+/**
+ * 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.jetty;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class JettyRouteWithUnknownSocketPropertiesTest extends CamelTestSupport {
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    @Test
+    public void testUnknownProperty() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                // define socket connector properties
+                Map<String, Object> properties = new HashMap<String, Object>();
+                properties.put("acceptors", 4);
+                properties.put("statsOn", "false");
+                properties.put("soLingerTime", "5000");
+                properties.put("doesNotExist", 2000);
+
+                // create jetty component
+                JettyHttpComponent jetty = new JettyHttpComponent();
+                // set properties
+                jetty.setSocketConnectorProperties(properties);
+                // add jetty to camel context
+                context.addComponent("jetty", jetty);
+
+                from("jetty:http://localhost:9080/myapp/myservice").to("log:foo");
+            }
+        });
+        try {
+            context.start();
+            fail("Should have thrown exception");
+        } catch (IllegalArgumentException e) {
+            assertTrue(e.getMessage().endsWith("Unknown parameters=[{doesNotExist=2000}]"));
+        }
+    }
+
+}
\ No newline at end of file

Propchange: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSocketPropertiesTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSocketPropertiesTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSslSocketPropertiesTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSslSocketPropertiesTest.java?rev=965369&view=auto
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSslSocketPropertiesTest.java (added)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSslSocketPropertiesTest.java Mon Jul 19 07:09:25 2010
@@ -0,0 +1,63 @@
+/**
+ * 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.jetty;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class JettyRouteWithUnknownSslSocketPropertiesTest extends CamelTestSupport {
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    @Test
+    public void testUnknownProperty() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                // define socket connector properties
+                Map<String, Object> properties = new HashMap<String, Object>();
+                properties.put("acceptors", 4);
+                properties.put("statsOn", "false");
+                properties.put("soLingerTime", "5000");
+                properties.put("doesNotExist", 2000);
+
+                // create jetty component
+                JettyHttpComponent jetty = new JettyHttpComponent();
+                // set properties
+                jetty.setSslSocketConnectorProperties(properties);
+                // add jetty to camel context
+                context.addComponent("jetty", jetty);
+
+                from("jetty:https://localhost:9080/myapp/myservice").to("log:foo");
+            }
+        });
+        try {
+            context.start();
+            fail("Should have thrown exception");
+        } catch (IllegalArgumentException e) {
+            assertTrue(e.getMessage().endsWith("Unknown parameters=[{doesNotExist=2000}]"));
+        }
+    }
+
+}
\ No newline at end of file

Propchange: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSslSocketPropertiesTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteWithUnknownSslSocketPropertiesTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date