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 + } + } + } + }); + } }