Author: rmannibucau
Date: Fri Jan  4 11:51:03 2013
New Revision: 1428812

URL: http://svn.apache.org/viewvc?rev=1428812&view=rev
Log:
TOMEE-700 better tomee maven plugin wait/run-and-forget impl + using socket to 
stop tomcat as before since it was better regarding java process management 
(mea culpa)

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
    
openejb/trunk/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.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=1428812&r1=1428811&r2=1428812&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
 Fri Jan  4 11:51:03 2013
@@ -17,11 +17,13 @@
 package org.apache.openejb.config;
 
 import org.apache.openejb.OpenEJBRuntimeException;
+import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.Options;
 import org.apache.openejb.util.Join;
 import org.apache.openejb.util.Pipe;
 
 import java.io.File;
+import java.io.IOException;
 import java.io.OutputStream;
 import java.lang.reflect.Field;
 import java.net.InetSocketAddress;
@@ -466,32 +468,30 @@ public class RemoteServer {
         }
     }
 
-    private void forceShutdown() throws Exception {
-        final String fcommand = command + Character.toString((char) 0); // 
SHUTDOWN + EOF
-
+    // same as catalina.sh stop {@see 
org.apache.catalina.startup.Catalina#stopServer}
+    private void shutdown() throws Exception {
         Socket socket = null;
+        OutputStream stream = null;
         try {
-            socket= new Socket(host, shutdownPort);
-            final OutputStream out = socket.getOutputStream();
-            out.write(fcommand.getBytes());
-            out.flush();
+            socket = new Socket(host, shutdownPort);
+            stream = socket.getOutputStream();
+            String shutdown = command + Character.toString((char) 0);
+            for (int i = 0; i < shutdown.length(); i++) {
+                stream.write(shutdown.charAt(i));
+            }
+            stream.flush();
         } finally {
+            IO.close(stream);
             if (socket != null) {
-                socket.close();
+                try {
+                    socket.close();
+                } catch (IOException e) {
+                    // Ignore
+                }
             }
         }
     }
 
-    private void shutdown() throws Exception {
-        final boolean originalDebug = debug;
-        debug = false; // make sure we don't debug the stop command otherwise 
in debug mode we will not stop
-        try {
-            cmd(Collections.EMPTY_LIST, "stop", false);
-        } finally {
-            debug = originalDebug;
-        }
-    }
-
     private boolean connect() {
         return connect(1);
     }

Modified: 
openejb/trunk/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java?rev=1428812&r1=1428811&r2=1428812&view=diff
==============================================================================
--- 
openejb/trunk/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
 (original)
+++ 
openejb/trunk/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
 Fri Jan  4 11:51:03 2013
@@ -35,15 +35,34 @@ import org.apache.openejb.loader.Zips;
 import org.apache.openejb.util.OpenEjbVersion;
 import org.apache.tomee.util.QuickServerXmlParser;
 
-import java.io.*;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.CountDownLatch;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
 import static org.apache.maven.artifact.Artifact.SCOPE_COMPILE;
-import static org.apache.maven.artifact.repository.ArtifactRepositoryPolicy.*;
+import static 
org.apache.maven.artifact.repository.ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN;
+import static 
org.apache.maven.artifact.repository.ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY;
+import static 
org.apache.maven.artifact.repository.ArtifactRepositoryPolicy.UPDATE_POLICY_NEVER;
 import static 
org.apache.maven.artifact.versioning.VersionRange.createFromVersion;
 import static org.apache.openejb.util.JarExtractor.delete;
 import static org.codehaus.plexus.util.FileUtils.deleteDirectory;
@@ -503,12 +522,6 @@ public abstract class AbstractTomEEMojo 
     }
 
     protected void run() {
-        System.setProperty("openejb.home", catalinaBase.getAbsolutePath());
-        if (debug) {
-            System.setProperty("openejb.server.debug", "true");
-            System.setProperty("server.debug.port", 
Integer.toString(debugPort));
-        }
-
         final String deployOpenEjbAppKey = "openejb.system.apps";
 
         final List<String> strings = new ArrayList<String>();
@@ -526,12 +539,6 @@ public abstract class AbstractTomEEMojo 
                 }
             }
         }
-        if (args != null) {
-            strings.addAll(Arrays.asList(args.split(" ")));
-        }
-        if (!getWaitTomEE()) {
-            strings.add("-Dtomee.noshutdownhook=true");
-        }
         if (quickSession) {
             
strings.add("-Dopenejb.session.manager=org.apache.tomee.catalina.session.QuickSessionManager");
         }
@@ -540,18 +547,40 @@ public abstract class AbstractTomEEMojo 
                 strings.add("-D" + deployOpenEjbAppKey + "=false");
             }
         }
+        if (args != null) {
+            strings.addAll(Arrays.asList(args.split(" ")));
+        }
 
+        // init env for RemoteServer
+        System.setProperty("openejb.home", catalinaBase.getAbsolutePath());
+        if (debug) {
+            System.setProperty("openejb.server.debug", "true");
+            System.setProperty("server.debug.port", 
Integer.toString(debugPort));
+        }
         System.setProperty("server.shutdown.port", 
Integer.toString(tomeeShutdownPort));
+
         final RemoteServer server = new RemoteServer(getConnectAttempts(), 
false);
         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() {
-                    server.stop();
+                    try {
+                        server.stop();
+                        server.getServer().waitFor();
+                        getLog().info("TomEE stopped");
+                        stopCondition.countDown();
+                    } catch (Exception e) {
+                        getLog().error("Error stopping TomEE", e);
+                    }
                 }
             });
+        } else {
+            stopCondition = null;
+            strings.add("-Dtomee.noshutdownhook=true");
         }
 
         getLog().info("Running '" + 
getClass().getSimpleName().replace("TomEEMojo", "").toLowerCase(Locale.ENGLISH)
@@ -560,11 +589,11 @@ public abstract class AbstractTomEEMojo 
 
         serverCmd(server, strings);
 
-        if (getWaitTomEE()) {
+        if (stopCondition != null) {
             try {
-                server.getServer().waitFor(); // connect attempts = 0
+                stopCondition.await();
             } catch (InterruptedException e) {
-                // ignored
+                // no-op
             }
         }
     }
@@ -581,10 +610,6 @@ public abstract class AbstractTomEEMojo 
         return Integer.MAX_VALUE;
     }
 
-    protected static String java() {
-        return new File(System.getProperty("java.home"), 
"/bin/java").getAbsolutePath();
-    }
-
     protected boolean getWaitTomEE() {
         return true;
     }


Reply via email to