TOMEE-716 force reloadable feature + setting it up in tomee maven plugin
git-svn-id: https://svn.apache.org/repos/asf/openejb/trunk@1430860 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java b/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
index 06d9e63..edcef19 100644
--- a/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
+++ b/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
@@ -166,6 +166,9 @@
@Parameter(property = "tomee-plugin.quick-session", defaultValue = "true")
private boolean quickSession;
+ @Parameter(property = "tomee-plugin.force-reloadable", defaultValue = "false")
+ protected boolean forceReloadable;
+
/**
* supported formats:
* --> groupId:artifactId:version...
@@ -554,6 +557,10 @@
strings.addAll(Arrays.asList(args.split(" ")));
}
+ if (forceReloadable) {
+ strings.add("-Dtomee.force-reloadable=true");
+ }
+
// init env for RemoteServer
System.setProperty("openejb.home", catalinaBase.getAbsolutePath());
if (debug) {
diff --git a/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java b/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
index ecad27d..ffb0d13 100644
--- a/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
+++ b/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
@@ -63,10 +63,10 @@
private boolean reloadOnUpdate;
private Timer timer;
+ private SynchronizerRedeployer task;
@Override
protected void run() {
- int sync = 0;
if (synchronization != null) {
initSynchronization(synchronization);
}
@@ -76,7 +76,9 @@
}
}
- startSynchronizers();
+ if (startSynchronizers()) {
+ forceReloadable = true;
+ }
super.run();
}
@@ -108,10 +110,11 @@
@Override
protected void addShutdownHooks(final RemoteServer server) {
- if (synchronization != null) {
+ if (synchronization != null || synchronizations != null) {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
+ task.cancel();
timer.cancel();
}
});
@@ -119,7 +122,7 @@
super.addShutdownHooks(server);
}
- protected void startSynchronizers() {
+ protected boolean startSynchronizers() {
timer = new Timer("tomee-maven-plugin-synchronizer");
final Collection<Synchronizer> synchronizers = new ArrayList<Synchronizer>();
@@ -143,14 +146,16 @@
// serialazing synchronizers to avoid multiple updates at the same time and reload a single time the app
if (!synchronizers.isEmpty()) {
- final SynchronizerRedeployer task = new SynchronizerRedeployer(synchronizers);
+ task = new SynchronizerRedeployer(synchronizers);
getLog().info("Starting synchronizer with an update interval of " + interval);
if (interval > INITIAL_DELAY) {
timer.scheduleAtFixedRate(task, interval, interval);
} else {
timer.scheduleAtFixedRate(task, INITIAL_DELAY, interval);
}
+ return true;
}
+ return false;
}
private class SynchronizerRedeployer extends TimerTask {
diff --git a/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java b/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
index b329ee9..08e50fb 100644
--- a/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
+++ b/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
@@ -175,6 +175,8 @@
public static final String TOMEE_EAT_EXCEPTION_PROP = "tomee.eat-exception";
public static final String TOMEE_INIT_J2EE_INFO = "tomee.init-J2EE-info";
+ private static final boolean FORCE_RELOADABLE = SystemInstance.get().getOptions().get("tomee.force-reloadable", false);
+
/**
* Context information for web applications
*/
@@ -698,6 +700,10 @@
// just adding a carriage return to get logs more readable
logger.info("-------------------------\nTomcatWebAppBuilder.init " + finalName(standardContext.getPath()));
+ if (FORCE_RELOADABLE) {
+ standardContext.setReloadable(true);
+ }
+
final String name = standardContext.getName();
initJ2EEInfo(standardContext);