You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by an...@apache.org on 2014/09/26 14:51:55 UTC

svn commit: r1627762 - /tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java

Author: andygumbrecht
Date: Fri Sep 26 12:51:55 2014
New Revision: 1627762

URL: http://svn.apache.org/r1627762
Log:
TOMEE-1364 - Check for disconnect.

Modified:
    tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java

Modified: tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java?rev=1627762&r1=1627761&r2=1627762&view=diff
==============================================================================
--- tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java (original)
+++ tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java Fri Sep 26 12:51:55 2014
@@ -24,6 +24,7 @@ import org.apache.openejb.util.Join;
 import org.apache.openejb.util.Pipe;
 
 import java.io.File;
+import java.io.IOException;
 import java.io.OutputStream;
 import java.lang.reflect.Field;
 import java.net.InetSocketAddress;
@@ -517,13 +518,13 @@ public class RemoteServer {
             System.out.print("Waiting for TomEE shutdown.");
         }
 
-        final boolean b = connect(portShutdown, tries);
+        final boolean b = disconnect(portShutdown, tries);
 
         if (verbose) {
             System.out.println();
         }
 
-        if (b) {
+        if (!b) {
             //We need to know about this
             System.out.println("SEVERE: Failed to shutdown TomEE running on port " + portStartup + " using shutdown port: " + portShutdown);
         }
@@ -587,14 +588,14 @@ public class RemoteServer {
         } catch (final Exception e) {
             if (tries < 2) {
                 if (verbose) {
-                    System.out.println("[] CONNECT ATTEMPTS FAILED ( " + (this.tries - tries) + " tries)");
+                    System.out.println("[] CONNECT ATTEMPTS FAILED ( " + (this.tries - tries) + " ATTEMPTS)");
                 }
                 return false;
             } else {
                 try {
                     Thread.sleep(1000);
                 } catch (final Exception e2) {
-                    e.printStackTrace();
+                    e2.printStackTrace();
                 }
                 return connect(port, --tries);
             }
@@ -611,6 +612,49 @@ public class RemoteServer {
         return true;
     }
 
+    private boolean disconnect(final int port, int tries) {
+        if (verbose) {
+            System.out.println("[] DISCONNECT ATTEMPT " + (this.tries - tries) + " on port: " + port);
+        }
+
+        Socket s = null;
+        try {
+            s = new Socket();
+            s.connect(new InetSocketAddress(this.host, port), 500);
+            s.getOutputStream().close();
+
+            if (verbose) {
+                System.out.println("[] NOT DISCONNECTED AFTER ( " + (this.tries - tries) + " ATTEMPTS)");
+            }
+
+            if (tries < 2) {
+                //Give up
+                return false;
+            } else {
+                try {
+                    Thread.sleep(1000);
+                } catch (final Exception e2) {
+                    e2.printStackTrace();
+                }
+
+                return disconnect(port, --tries);
+            }
+
+        } catch (final IOException e) {
+            //This is what we want
+        } finally {
+            if (s != null) {
+                try {
+                    s.close();
+                } catch (final Exception ignored) {
+                    // no-op
+                }
+            }
+        }
+
+        return true;
+    }
+
     public void setAdditionalClasspath(final String additionalClasspath) {
         this.additionalClasspath = additionalClasspath;
     }