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