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/02/09 11:42:18 UTC
svn commit: r907996 - in /camel/trunk/components/camel-mina/src:
main/java/org/apache/camel/component/mina/
test/java/org/apache/camel/component/mina/
Author: davsclaus
Date: Tue Feb 9 10:42:18 2010
New Revision: 907996
URL: http://svn.apache.org/viewvc?rev=907996&view=rev
Log:
CAMEL-2455: Added disconnect option to close the mina session right after use.
Added:
camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaDisconnectTest.java
- copied, changed from r907986, camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java
Modified:
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java
camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java
Modified: camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java?rev=907996&r1=907995&r2=907996&view=diff
==============================================================================
--- camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java (original)
+++ camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java Tue Feb 9 10:42:18 2010
@@ -43,6 +43,7 @@
private int decoderMaxLineLength = -1;
private List<IoFilter> filters;
private boolean allowDefaultCodec = true;
+ private boolean disconnect;
/**
* Returns a copy of this configuration
@@ -198,4 +199,12 @@
public boolean isAllowDefaultCodec() {
return allowDefaultCodec;
}
+
+ public boolean isDisconnect() {
+ return disconnect;
+ }
+
+ public void setDisconnect(boolean disconnect) {
+ this.disconnect = disconnect;
+ }
}
Modified: camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java?rev=907996&r1=907995&r2=907996&view=diff
==============================================================================
--- camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java (original)
+++ camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java Tue Feb 9 10:42:18 2010
@@ -36,8 +36,6 @@
* @version $Revision$
*/
public class MinaConsumer extends DefaultConsumer {
- public static final transient String HEADER_CLOSE_SESSION_WHEN_COMPLETE = "CamelMinaCloseSessionWhenComplete";
-
private static final transient Log LOG = LogFactory.getLog(MinaConsumer.class);
private final MinaEndpoint endpoint;
@@ -145,15 +143,24 @@
// should session be closed after complete?
Boolean close;
if (ExchangeHelper.isOutCapable(exchange)) {
- close = exchange.getOut().getHeader(HEADER_CLOSE_SESSION_WHEN_COMPLETE, Boolean.class);
+ close = exchange.getOut().getHeader(MinaConstants.MINA_CLOSE_SESSION_WHEN_COMPLETE, Boolean.class);
} else {
- close = exchange.getIn().getHeader(HEADER_CLOSE_SESSION_WHEN_COMPLETE, Boolean.class);
+ close = exchange.getIn().getHeader(MinaConstants.MINA_CLOSE_SESSION_WHEN_COMPLETE, Boolean.class);
}
- if (close != null && close) {
- LOG.debug("Closing session when complete");
+ // should we disconnect, the header can override the configuration
+ boolean disconnect = endpoint.getConfiguration().isDisconnect();
+ if (close != null) {
+ disconnect = close;
+ }
+ if (disconnect) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Closing session when complete at address: " + address);
+ }
session.close();
}
}
}
+
}
+
Modified: camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java?rev=907996&r1=907995&r2=907996&view=diff
==============================================================================
--- camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java (original)
+++ camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java Tue Feb 9 10:42:18 2010
@@ -129,6 +129,26 @@
}
}
}
+
+ // should session be closed after complete?
+ Boolean close;
+ if (ExchangeHelper.isOutCapable(exchange)) {
+ close = exchange.getOut().getHeader(MinaConstants.MINA_CLOSE_SESSION_WHEN_COMPLETE, Boolean.class);
+ } else {
+ close = exchange.getIn().getHeader(MinaConstants.MINA_CLOSE_SESSION_WHEN_COMPLETE, Boolean.class);
+ }
+
+ // should we disconnect, the header can override the configuration
+ boolean disconnect = endpoint.getConfiguration().isDisconnect();
+ if (close != null) {
+ disconnect = close;
+ }
+ if (disconnect) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Closing session when complete at address: " + endpoint.getAddress());
+ }
+ session.close();
+ }
}
@Override
@@ -144,13 +164,17 @@
if (LOG.isDebugEnabled()) {
LOG.debug("Stopping connector: " + connector + " at address: " + endpoint.getAddress());
}
+ closeConnection();
+ super.doStop();
+ }
+ private void closeConnection() {
if (connector instanceof SocketConnector) {
// Change the worker timeout to 0 second to make the I/O thread quit soon when there's no connection to manage.
// Default worker timeout is 60 sec and therefore the client using MinaProducer cannot terminate the JVM
- // asap but must wait for the timeout to happend, so to speed this up we set the timeout to 0.
- if (LOG.isDebugEnabled()) {
- LOG.debug("Setting SocketConnector WorkerTimeout=0 to force MINA stopping its resources faster");
+ // asap but must wait for the timeout to happen, so to speed this up we set the timeout to 0.
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Setting SocketConnector WorkerTimeout=0 to force MINA stopping its resources faster");
}
((SocketConnector) connector).setWorkerTimeout(0);
}
@@ -158,8 +182,6 @@
if (session != null) {
session.close();
}
-
- super.doStop();
}
private void openConnection() {
Copied: camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaDisconnectTest.java (from r907986, camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaDisconnectTest.java?p2=camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaDisconnectTest.java&p1=camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java&r1=907986&r2=907996&rev=907996&view=diff
==============================================================================
--- camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java (original)
+++ camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaDisconnectTest.java Tue Feb 9 10:42:18 2010
@@ -24,10 +24,12 @@
/**
* Unit test for close session when complete test.
*/
-public class MinaInOutCloseSessionWhenCompleteTest extends ContextTestSupport {
+public class MinaDisconnectTest extends ContextTestSupport {
+
+ private String uri = "mina:tcp://localhost:8080?sync=true&textline=true&disconnect=true";
public void testCloseSessionWhenComplete() throws Exception {
- Object out = template.requestBody("mina:tcp://localhost:8080?sync=true&textline=true", "Claus");
+ Object out = template.requestBody(uri, "Claus");
assertEquals("Bye Claus", out);
}
@@ -35,11 +37,10 @@
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() throws Exception {
- from("mina:tcp://localhost:8080?sync=true&textline=true").process(new Processor() {
+ from(uri).process(new Processor() {
public void process(Exchange exchange) throws Exception {
String body = exchange.getIn().getBody(String.class);
exchange.getOut().setBody("Bye " + body);
- exchange.getOut().setHeader(MinaConsumer.HEADER_CLOSE_SESSION_WHEN_COMPLETE, true);
}
});
}
Modified: camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java?rev=907996&r1=907995&r2=907996&view=diff
==============================================================================
--- camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java (original)
+++ camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java Tue Feb 9 10:42:18 2010
@@ -39,7 +39,7 @@
public void process(Exchange exchange) throws Exception {
String body = exchange.getIn().getBody(String.class);
exchange.getOut().setBody("Bye " + body);
- exchange.getOut().setHeader(MinaConsumer.HEADER_CLOSE_SESSION_WHEN_COMPLETE, true);
+ exchange.getOut().setHeader(MinaConstants.MINA_CLOSE_SESSION_WHEN_COMPLETE, true);
}
});
}