You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2013/02/21 11:36:25 UTC

svn commit: r1448569 - in /tomee/tomee/trunk: container/openejb-core/src/main/java/org/apache/openejb/config/ container/openejb-core/src/main/java/org/apache/openejb/util/ maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/

Author: rmannibucau
Date: Thu Feb 21 10:36:24 2013
New Revision: 1448569

URL: http://svn.apache.org/r1448569
Log:
TOMEE-778 basic commands for tomee maven plugin

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Pipe.java
    tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
    tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java?rev=1448569&r1=1448568&r2=1448569&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java Thu Feb 21 10:36:24 2013
@@ -315,7 +315,11 @@ public class RemoteServer {
                 // kill3UNIXDebug();
 
                 final Process process = Runtime.getRuntime().exec(args);
-                Pipe.pipe(process);
+                if (tomcat) {
+                    Pipe.pipeOut(process); // why would we need to redirect System.in to the process, TomEE doesn't use it
+                } else {
+                    Pipe.pipe(process);
+                }
 
                 if ("start".equals(cmd)) {
                     server = process;

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Pipe.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Pipe.java?rev=1448569&r1=1448568&r2=1448569&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Pipe.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Pipe.java Thu Feb 21 10:36:24 2013
@@ -33,9 +33,13 @@ public final class Pipe implements Runna
         this.out = out;
     }
 
-    public static void pipe(Process process) {
+    public static void pipeOut(final Process process) {
         pipe(process.getInputStream(), System.out);
         pipe(process.getErrorStream(), System.err);
+    }
+
+    public static void pipe(final Process process) {
+        pipeOut(process);
         pipe(System.in, process.getOutputStream());
     }
 

Modified: tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java?rev=1448569&r1=1448568&r2=1448569&view=diff
==============================================================================
--- tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java (original)
+++ tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java Thu Feb 21 10:36:24 2013
@@ -57,6 +57,7 @@ import java.util.Enumeration;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Scanner;
 import java.util.concurrent.CountDownLatch;
 import java.util.logging.SimpleFormatter;
 import java.util.zip.ZipEntry;
@@ -78,6 +79,8 @@ public abstract class AbstractTomEEMojo 
     private static final String NAME_STR = "?name=";
     private static final String UNZIP_PREFIX = "unzip:";
     private static final String REMOVE_PREFIX = "remove:";
+    public static final String QUIT_CMD = "quit";
+    public static final String EXIT_CMD = "exit";
 
     @Component
     protected ArtifactFactory factory;
@@ -217,6 +220,9 @@ public abstract class AbstractTomEEMojo 
     @Parameter(property = "tomee-plugin.check-started", defaultValue = "false")
     protected boolean checkStarted;
 
+    @Parameter(property = "tomee-plugin.use-console", defaultValue = "true")
+    protected boolean useConsole;
+
     /**
      * The current user system settings for use in Maven.
      */
@@ -224,6 +230,8 @@ public abstract class AbstractTomEEMojo 
     protected Settings settings;
 
     protected File deployedFile = null;
+    protected Thread shutdownHook = null;
+    protected RemoteServer server = null;
     private String additionalCp = null;
 
     @Override
@@ -647,34 +655,13 @@ public abstract class AbstractTomEEMojo 
         }
         System.setProperty("server.shutdown.port", Integer.toString(tomeeShutdownPort));
 
-        final RemoteServer server = new RemoteServer(getConnectAttempts(), false);
+        server = new RemoteServer(getConnectAttempts(), false);
         if (additionalCp != null) {
             server.setAdditionalClasspath(additionalCp);
         }
         addShutdownHooks(server); // some shutdown hooks are always added (see UpdatableTomEEMojo)
 
-        final CountDownLatch stopCondition;
-        if (getWaitTomEE()) {
-            stopCondition = new CountDownLatch(1);
-            Runtime.getRuntime().addShutdownHook(new Thread() {
-                @Override
-                public void run() {
-                    try {
-                        server.stop();
-                    } catch (Exception e) {
-                        // no-op
-                    }
-                    try {
-                        server.getServer().waitFor();
-                        getLog().info("TomEE stopped");
-                        stopCondition.countDown();
-                    } catch (Exception e) {
-                        getLog().error("Can't stop TomEE", e);
-                    }
-                }
-            });
-        } else {
-            stopCondition = null;
+        if (!getWaitTomEE()) {
             strings.add("-Dtomee.noshutdownhook=true");
         }
 
@@ -682,17 +669,71 @@ public abstract class AbstractTomEEMojo 
                 + "'. Configured TomEE in plugin is " + tomeeHost + ":" + tomeeHttpPort
                 + " (plugin shutdown port is " + tomeeShutdownPort + ")");
 
+        final InputStream originalIn = System.in; // piped when starting resmote server so saving it
+
         serverCmd(server, strings);
 
-        if (stopCondition != null) {
-            try {
-                stopCondition.await();
-            } catch (InterruptedException e) {
-                // no-op
+        if (getWaitTomEE()) {
+            if (!useConsole) {
+                final CountDownLatch stopCondition = new CountDownLatch(1);
+                shutdownHook = new Thread() {
+                    @Override
+                    public void run() {
+                        stopServer();
+                        stopCondition.countDown();
+                    }
+                };
+                Runtime.getRuntime().addShutdownHook(shutdownHook);
+
+                try {
+                    stopCondition.await();
+                } catch (InterruptedException e) {
+                    // no-op
+                }
+            } else {
+                final Scanner reader = new Scanner(originalIn);
+
+                getLog().warn("Waiting for command: " + availableCommands());
+
+                String line;
+                while ((line = reader.nextLine()) != null) {
+                    if (QUIT_CMD.equalsIgnoreCase(line) || EXIT_CMD.equalsIgnoreCase(line)) {
+                        break;
+                    }
+
+                    if (!handleLine(line.trim())) {
+                        getLog().warn("Command '" + line + "' not understood. Use one of " + availableCommands());
+                    }
+                }
+
+                reader.close();
+                stopServer();
             }
         }
     }
 
+    protected Collection<String> availableCommands() {
+        return Arrays.asList(QUIT_CMD, EXIT_CMD);
+    }
+
+    protected void stopServer() {
+        try {
+            server.stop();
+        } catch (Exception e) {
+            // no-op
+        }
+        try {
+            server.getServer().waitFor();
+            getLog().info("TomEE stopped");
+        } catch (Exception e) {
+            getLog().error("Can't stop TomEE", e);
+        }
+    }
+
+    protected boolean handleLine(final String line) {
+        return false;
+    }
+
     protected void serverCmd(final RemoteServer server, final List<String> strings) {
         server.start(strings, getCmd(), checkStarted);
     }

Modified: tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java?rev=1448569&r1=1448568&r2=1448569&view=diff
==============================================================================
--- tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java (original)
+++ tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java Thu Feb 21 10:36:24 2013
@@ -44,6 +44,7 @@ import java.util.regex.Pattern;
 
 public abstract class UpdatableTomEEMojo extends AbstractTomEEMojo {
     public static final int INITIAL_DELAY = 5000;
+    public static final String RELOAD_CMD = "reload";
 
     @Parameter
     private Synchronization synchronization;
@@ -161,6 +162,34 @@ public abstract class UpdatableTomEEMojo
         return false;
     }
 
+    @Override
+    protected Collection<String> availableCommands() {
+        final Collection<String> cmds = new ArrayList<String>();
+        cmds.addAll(super.availableCommands());
+        cmds.add(RELOAD_CMD);
+        return cmds;
+    }
+
+    @Override
+    protected boolean handleLine(final String line) {
+        if (super.handleLine(line)) {
+            return true;
+        } else if (RELOAD_CMD.equalsIgnoreCase(line)) {
+            reload();
+            return true;
+        }
+        return false;
+    }
+
+    protected synchronized void reload() {
+        String path = deployedFile.getAbsolutePath();
+        if (path.endsWith(".war") || path.endsWith(".ear")) {
+            path = path.substring(0, path.length() - ".war".length());
+        }
+        getLog().info("Reloading " + path);
+        deployer().reload(path);
+    }
+
     private class SynchronizerRedeployer extends TimerTask {
         private final Collection<Synchronizer> delegates;
 
@@ -181,12 +210,7 @@ public abstract class UpdatableTomEEMojo
 
             if (updated > 0 && reloadOnUpdate) {
                 if (deployedFile != null && deployedFile.exists()) {
-                    String path = deployedFile.getAbsolutePath();
-                    if (path.endsWith(".war") || path.endsWith(".ear")) {
-                        path = path.substring(0, path.length() - ".war".length());
-                    }
-                    getLog().info("Reloading " + path);
-                    deployer().reload(path);
+                    reload();
                 }
             }
         }