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