camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From davscl...@apache.org
Subject [2/3] camel git commit: Improve shutdown of listener for consumer
Date Thu, 14 Jan 2016 14:54:00 GMT
Improve shutdown of listener for consumer


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5b0fbd34
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5b0fbd34
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5b0fbd34

Branch: refs/heads/master
Commit: 5b0fbd344a1f4fff3c848691a38d4faf6029e322
Parents: 15e72ee
Author: Quinn Stevenson <quinn@pronoia-solutions.com>
Authored: Mon Jan 11 14:15:10 2016 -0700
Committer: Claus Ibsen <davsclaus@apache.org>
Committed: Thu Jan 14 14:22:39 2016 +0000

----------------------------------------------------------------------
 .../component/mllp/MllpTcpServerConsumer.java   | 48 +++++++++++++++++++-
 1 file changed, 46 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/5b0fbd34/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpServerConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpServerConsumer.java
b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpServerConsumer.java
index 186a462..33568da 100644
--- a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpServerConsumer.java
+++ b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpServerConsumer.java
@@ -21,6 +21,7 @@ import java.io.InputStream;
 import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
+import java.net.SocketException;
 import java.net.SocketTimeoutException;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
@@ -194,12 +195,33 @@ public class MllpTcpServerConsumer extends DefaultConsumer {
             log.debug("Starting acceptor thread");
 
             while (null != serverSocket && serverSocket.isBound() && !serverSocket.isClosed())
{
-                try {
                     /* ? set this here ? */
                     // serverSocket.setSoTimeout( 10000 );
                     // TODO: Need to check maxConnections and figure out what to do when
exceeded
-                    Socket socket = serverSocket.accept();
+                Socket socket = null;
+                try {
+                    socket = serverSocket.accept();
+                } catch (SocketException socketEx) {
+                    // This should happen if the component is closed while the accept call
is blocking
+                    if (serverSocket.isBound()) {
+                        try {
+                            serverSocket.close();
+                        } catch (Exception ex) {
+                            log.info("Exception encountered closing ServerSocket after SocketException
on accept()", ex);
+                        }
+                    }
+                } catch (IOException ioEx) {
+                    log.error("Exception encountered accepting connection - closing ServerSocket",
ioEx);
+                    if (serverSocket.isBound()) {
+                        try {
+                            serverSocket.close();
+                        } catch (Exception ex) {
+                            log.info("Exception encountered closing ServerSocket after exception
on accept()", ex);
+                        }
+                    }
+                }
 
+                try {
                     /* Wait a bit and then check and see if the socket is really there -
it could be a load balancer
                      pinging the port
                       */
@@ -266,8 +288,30 @@ public class MllpTcpServerConsumer extends DefaultConsumer {
                     log.error("Exception accepting new connection", ex);
                 }
             }
+
+            log.info("ServerSocket.accept loop finished - closing listener");
+            if (null != serverSocket  &&  serverSocket.isBound()  &&  !serverSocket.isClosed())
{
+                try {
+                    serverSocket.close();
+                } catch (Exception ex) {
+                    log.warn("Exception encountered closing ServerSocket after accept loop
had exited", ex);
+                }
+            }
         }
 
+        @Override
+        public void interrupt() {
+            super.interrupt();
+            if (null != serverSocket) {
+                if (serverSocket.isBound()) {
+                    try {
+                        serverSocket.close();
+                    } catch (IOException ioEx ) {
+                        log.warn("Exception encountered closing ServerSocket in interrupt()
method", ioEx);
+                    }
+                }
+            }
+        }
     }
 
     class ClientSocketThread extends Thread {


Mime
View raw message