You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2012/01/17 18:07:17 UTC

svn commit: r1232484 - in /sling/trunk/testing/tools/src/main/java/org/apache/sling/testing/tools: jarexec/JarExecutor.java serversetup/StartRunnableJarPhase.java

Author: bdelacretaz
Date: Tue Jan 17 17:07:17 2012
New Revision: 1232484

URL: http://svn.apache.org/viewvc?rev=1232484&view=rev
Log:
SLING-2368 - provide a SetupPhase that kills the started process

Modified:
    sling/trunk/testing/tools/src/main/java/org/apache/sling/testing/tools/jarexec/JarExecutor.java
    sling/trunk/testing/tools/src/main/java/org/apache/sling/testing/tools/serversetup/StartRunnableJarPhase.java

Modified: sling/trunk/testing/tools/src/main/java/org/apache/sling/testing/tools/jarexec/JarExecutor.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/tools/src/main/java/org/apache/sling/testing/tools/jarexec/JarExecutor.java?rev=1232484&r1=1232483&r2=1232484&view=diff
==============================================================================
--- sling/trunk/testing/tools/src/main/java/org/apache/sling/testing/tools/jarexec/JarExecutor.java (original)
+++ sling/trunk/testing/tools/src/main/java/org/apache/sling/testing/tools/jarexec/JarExecutor.java Tue Jan 17 17:07:17 2012
@@ -41,6 +41,7 @@ public class JarExecutor {
     private final String javaExecutable;
     private final int serverPort;
     private final Properties config;
+    private Executor executor;
     
     private final Logger log = LoggerFactory.getLogger(getClass());
 
@@ -132,7 +133,7 @@ public class JarExecutor {
         };
         
         final String vmOptions = config.getProperty(PROP_VM_OPTIONS);
-        final Executor e = new DefaultExecutor();
+        executor = new DefaultExecutor();
         final CommandLine cl = new CommandLine(javaExecutable);
         if (vmOptions != null && vmOptions.length() > 0) {
             cl.addArguments(vmOptions);
@@ -157,17 +158,31 @@ public class JarExecutor {
                         + workFolder.getAbsolutePath());
             }
             log.info("Setting working directory for executable jar: {}", workFolder.getAbsolutePath());
-            e.setWorkingDirectory(workFolder);
+            executor.setWorkingDirectory(workFolder);
         }
 
         log.info("Executing " + cl);
-        e.setStreamHandler(new PumpStreamHandler());
-        e.setProcessDestroyer(getProcessDestroyer());
-        e.execute(cl, h);
+        executor.setStreamHandler(new PumpStreamHandler());
+        executor.setProcessDestroyer(getProcessDestroyer());
+        executor.execute(cl, h);
     }
     
     /** Can be overridden to return a custom ProcessDestroyer */
     protected ProcessDestroyer getProcessDestroyer() {
         return new ShutdownHookProcessDestroyer();
     }
+    
+    /** Stop the process that we started, if any */
+    public void stop() {
+        if(executor == null) {
+            throw new IllegalStateException("Process not started, no Executor set");
+        }
+        final Object d = executor.getProcessDestroyer();
+        if(d instanceof Runnable) {
+            ((Runnable)d).run();
+            log.info("Process destroyed");
+        } else {
+            throw new IllegalStateException(d + " is not a Runnable, cannot destroy process");
+        }
+    }
 }

Modified: sling/trunk/testing/tools/src/main/java/org/apache/sling/testing/tools/serversetup/StartRunnableJarPhase.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/tools/src/main/java/org/apache/sling/testing/tools/serversetup/StartRunnableJarPhase.java?rev=1232484&r1=1232483&r2=1232484&view=diff
==============================================================================
--- sling/trunk/testing/tools/src/main/java/org/apache/sling/testing/tools/serversetup/StartRunnableJarPhase.java (original)
+++ sling/trunk/testing/tools/src/main/java/org/apache/sling/testing/tools/serversetup/StartRunnableJarPhase.java Tue Jan 17 17:07:17 2012
@@ -87,4 +87,27 @@ public class StartRunnableJarPhase imple
     public String getId() {
         return id;
     }
+    
+    /** Return a SetupPhase that kills the process started by this phase */
+    public SetupPhase getKillPhase(final String id) {
+        return new SetupPhase() {
+            public void run(ServerSetup owner) throws Exception {
+                executor.stop();
+            }
+
+            public boolean isStartupPhase() {
+                // This is not a shutdown phase, it's meant to
+                // use during startup to forcibly kill an instance
+                return true;
+            }
+
+            public String getDescription() {
+                return "Kill the process started by " + StartRunnableJarPhase.this.getDescription();
+            }
+
+            public String getId() {
+                return id;
+            }
+        };
+    }
 }