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