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