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