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 2009/02/20 16:02:50 UTC

svn commit: r746269 - in /camel/trunk/components/camel-mina/src: main/java/org/apache/camel/component/mina/MinaConsumer.java test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java

Author: davsclaus
Date: Fri Feb 20 15:02:50 2009
New Revision: 746269

URL: http://svn.apache.org/viewvc?rev=746269&view=rev
Log:
CAMEL-1362: added special header to indicate mina session should be closed when its complete, to eg by used when sending a BYE message.

Added:
    camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java
      - copied, changed from r746234, camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutRouteTest.java
Modified:
    camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java

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=746269&r1=746268&r2=746269&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 Fri Feb 20 15:02:50 2009
@@ -36,6 +36,8 @@
  * @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;
@@ -109,6 +111,7 @@
                 } else {
                     body = MinaPayloadHelper.getIn(endpoint, exchange);
                 }
+
                 boolean failed = exchange.isFailed();
                 if (failed && !endpoint.getConfiguration().isTransferExchange()) {
                     if (exchange.getException() != null) {
@@ -129,8 +132,22 @@
                         LOG.debug("Writing body: " + body);
                     }
                     MinaHelper.writeBody(session, body, exchange);
+
                 }
             }
+
+            // should session be closed after complete?
+            Boolean close;
+            if (ExchangeHelper.isOutCapable(exchange)) {
+                close = exchange.getOut().getHeader(HEADER_CLOSE_SESSION_WHEN_COMPLETE, Boolean.class);
+            } else {
+                close = exchange.getIn().getHeader(HEADER_CLOSE_SESSION_WHEN_COMPLETE, Boolean.class);
+            }
+
+            if (close != null && close) {
+                LOG.debug("Closing session when complete");
+                session.close();
+            }
         }
 
     }

Copied: camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java (from r746234, camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutRouteTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java?p2=camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java&p1=camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutRouteTest.java&r1=746234&r2=746269&rev=746269&view=diff
==============================================================================
--- camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutRouteTest.java (original)
+++ camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaInOutCloseSessionWhenCompleteTest.java Fri Feb 20 15:02:50 2009
@@ -20,24 +20,14 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
 
 /**
- * Unit test to verify that MINA can be used with an InOut MEP but still use sync to send and receive data
- * from a remote server.
+ * Unit test for close session when complete test.
  */
-public class MinaInOutRouteTest extends ContextTestSupport {
+public class MinaInOutCloseSessionWhenCompleteTest extends ContextTestSupport {
 
-    public void testInOutUsingMina() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedBodiesReceived("Bye Claus");
-        // we should preserve headers
-        mock.expectedHeaderReceived("city", "Copenhagen");
-        mock.setResultWaitTime(5000);
-
-        Object out = template.requestBodyAndHeader("direct:in", "Claus", "city", "Copenhagen");
-
-        assertMockEndpointsSatisfied();
+    public void testCloseSessionWhenComplete() throws Exception {
+        Object out = template.sendBody("mina:tcp://localhost:8080?sync=true&textline=true", "Claus");
         assertEquals("Bye Claus", out);
     }
 
@@ -45,16 +35,13 @@
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from("mina:tcp://localhost:8080?sync=true").process(new Processor() {
+                from("mina:tcp://localhost:8080?sync=true&textline=true").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);
                     }
                 });
-
-                from("direct:in")
-                        .to("mina:tcp://localhost:8080?sync=true")
-                        .to("mock:result");
             }
         };
     }