Author: rmannibucau
Date: Mon Oct 29 12:20:42 2012
New Revision: 1403263

URL: http://svn.apache.org/viewvc?rev=1403263&view=rev
Log:
waiting for tomee shutdown in stop method

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java?rev=1403263&r1=1403262&r2=1403263&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
 Mon Oct 29 12:20:42 2012
@@ -24,13 +24,9 @@ import org.apache.openejb.util.Pipe;
 import java.io.File;
 import java.io.OutputStream;
 import java.lang.reflect.Field;
+import java.net.InetSocketAddress;
 import java.net.Socket;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
 
 /**
  * @version $Rev$ $Date$
@@ -428,12 +424,32 @@ public class RemoteServer {
         if (!serverHasAlreadyBeenStarted) {
             try {
                 shutdown();
+
+                // check tomcat was effectively shutted down
+                // we can have some concurrent shutdown commands (catalina 
shutdown hook for instance)
+                // so we can have to wait here since it is important to be 
synchronous in this method
+                waitForServerShutdown();
             } catch (Exception e) {
                 e.printStackTrace(System.err);
             }
         }
     }
 
+    private void waitForServerShutdown() throws InterruptedException {
+        if (verbose) {
+            System.out.print("Waiting for TomEE shutdown.");
+        }
+        while (connect()) {
+            Thread.sleep(1000);
+            if (verbose) {
+                System.out.print(".");
+            }
+        }
+        if (verbose) {
+            System.out.println();
+        }
+    }
+
     private void forceShutdown() throws Exception {
         String fcommand = command + Character.toString((char) 0); // SHUTDOWN 
+ EOF
 
@@ -463,7 +479,8 @@ public class RemoteServer {
 
         Socket socket = null;
         try {
-            socket = new Socket(host, shutdownPort);
+            socket = new Socket(); // wee need a timeout here
+            socket.connect(new InetSocketAddress(host, shutdownPort), 1000);
             socket.getOutputStream().close();
             if (verbose) System.out.println("[] CONNECTED IN " + (this.tries - 
tries));
         } catch (Exception e) {


Reply via email to