Author: dblevins
Date: Sun Nov  4 16:33:02 2012
New Revision: 1405582

URL: http://svn.apache.org/viewvc?rev=1405582&view=rev
Log:
TOMEE-518 - TomEE shutdown in tools done via Tomcat stop command
Use simple process.waitFor to wait for shutdown when possible
Install shutdown hook to still clean up process if VM exists before stop is 
reached

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=1405582&r1=1405581&r2=1405582&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
 Sun Nov  4 16:33:02 2012
@@ -301,9 +301,14 @@ public class RemoteServer {
 
                 // kill3UNIXDebug();
 
-                server = Runtime.getRuntime().exec(args);
+                final Process process = Runtime.getRuntime().exec(args);
+                Pipe.pipe(process);
 
-                Pipe.pipe(server);
+                if ("start".equals(cmd)) {
+                    server = process;
+                } else if ("stop".equals(cmd)) {
+                    server.waitFor();
+                }
 
             } catch (Exception e) {
                 throw (RuntimeException) new OpenEJBRuntimeException("Cannot 
start the server.  Exception: "+e.getClass().getName()+": 
"+e.getMessage()).initCause(e);
@@ -428,7 +433,7 @@ public class RemoteServer {
     public void stop() {
         if (!serverHasAlreadyBeenStarted) {
             try {
-                forceStop();
+                shutdown();
             } catch (Exception e) {
                 e.printStackTrace(System.err);
             }
@@ -526,4 +531,30 @@ public class RemoteServer {
     public void setAdditionalClasspath(final String additionalClasspath) {
         this.additionalClasspath = additionalClasspath;
     }
+
+    public void killOnExit() {
+        if (!serverHasAlreadyBeenStarted && kill.contains(this.server)) return;
+        kill.add(this.server);
+    }
+
+    // Shutdown hook for recursive delete on tmp directories
+    static final List<Process> kill = new ArrayList<Process>();
+
+    static {
+        Runtime.getRuntime().addShutdownHook(new Thread() {
+            @Override
+            public void run() {
+                for (Process server : kill) {
+                    try {
+                        if (server != null) {
+                            server.destroy();
+                            server.waitFor();
+                        }
+                    } catch (Throwable e) {
+                        //Ignore
+                    }
+                }
+            }
+        });
+    }
 }


Reply via email to