Author: rmannibucau
Date: Mon Aug  6 15:49:12 2012
New Revision: 1369869

URL: http://svn.apache.org/viewvc?rev=1369869&view=rev
Log:
TOMEE-349 StandardContext.reload() was no more useable

Modified:
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappLoader.java
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java

Modified: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java?rev=1369869&r1=1369868&r2=1369869&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
 Mon Aug  6 15:49:12 2012
@@ -16,7 +16,9 @@
  */
 package org.apache.tomee.catalina;
 
+import org.apache.catalina.Context;
 import org.apache.catalina.LifecycleException;
+import org.apache.catalina.core.StandardContext;
 import org.apache.catalina.loader.WebappClassLoader;
 import org.apache.openejb.loader.SystemInstance;
 
@@ -27,7 +29,8 @@ import java.net.URL;
 public class LazyStopWebappClassLoader extends WebappClassLoader {
     public static final String TOMEE_WEBAPP_FIRST = "tomee.webapp-first";
 
-    private boolean restarting;
+    private boolean restarting = false;
+    private volatile Context relatedContext;
 
     public LazyStopWebappClassLoader() {
         setDelegate(!SystemInstance.get().getOptions().get(TOMEE_WEBAPP_FIRST, 
true));
@@ -41,11 +44,15 @@ public class LazyStopWebappClassLoader e
     public void stop() throws LifecycleException {
         // in our destroyapplication method we need a valid classloader to 
TomcatWebAppBuilder.afterStop()
         // exception: restarting we really stop it for the moment
-        if (restarting) {
+        if (restarting || isPaused()) {
             internalStop();
         }
     }
 
+    private boolean isPaused() {
+        return relatedContext != null && relatedContext.getPaused();
+    }
+
     public void internalStop() throws LifecycleException {
         if (isStarted()) {
             super.stop();
@@ -84,4 +91,8 @@ public class LazyStopWebappClassLoader e
         }
         return TomEEClassLoaderHelper.validateJarFile(file);
     }
+
+    public void setRelatedContext(final Context standardContext) {
+        relatedContext = standardContext;
+    }
 }

Modified: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappLoader.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappLoader.java?rev=1369869&r1=1369868&r2=1369869&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappLoader.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappLoader.java
 Mon Aug  6 15:49:12 2012
@@ -16,11 +16,16 @@
  */
 package org.apache.tomee.catalina;
 
+import org.apache.catalina.Context;
+import org.apache.catalina.LifecycleException;
 import org.apache.catalina.loader.WebappLoader;
 
 public class LazyStopWebappLoader extends WebappLoader {
-    public LazyStopWebappLoader(final ClassLoader parentClassLoader) {
-        super(parentClassLoader);
+    private Context standardContext = null;
+
+    public LazyStopWebappLoader(final Context ctx) {
+        super(ctx.getParentClassLoader());
+        standardContext = ctx;
     }
 
     public LazyStopWebappLoader() {
@@ -42,4 +47,12 @@ public class LazyStopWebappLoader extend
             super.backgroundProcess();
         }
     }
+
+    @Override
+    protected void startInternal() throws LifecycleException {
+        super.startInternal();
+        if (getClassLoader() instanceof LazyStopWebappClassLoader) {
+            ((LazyStopWebappClassLoader) 
getClassLoader()).setRelatedContext(standardContext);
+        }
+    }
 }

Modified: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1369869&r1=1369868&r2=1369869&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
 Mon Aug  6 15:49:12 2012
@@ -72,9 +72,9 @@ import org.apache.openejb.config.Deploym
 import org.apache.openejb.config.WebModule;
 import org.apache.openejb.config.event.BeforeDeploymentEvent;
 import org.apache.openejb.core.CoreContainerSystem;
+import org.apache.openejb.core.ParentClassLoaderFinder;
 import org.apache.openejb.core.WebContext;
 import org.apache.openejb.core.ivm.naming.SystemComponentReference;
-import org.apache.openejb.core.ParentClassLoaderFinder;
 import org.apache.openejb.jee.EnvEntry;
 import org.apache.openejb.jee.WebApp;
 import org.apache.openejb.loader.IO;
@@ -689,7 +689,7 @@ public class TomcatWebAppBuilder impleme
         // to avoid classnotfound in @PreDestoy or destroyApplication()
         Loader loader = standardContext.getLoader();
         if (!(loader instanceof TomEEWebappLoader)) {
-            loader = new 
LazyStopWebappLoader(standardContext.getParentClassLoader());
+            loader = new LazyStopWebappLoader(standardContext);
             loader.setDelegate(standardContext.getDelegate());
             ((WebappLoader) 
loader).setLoaderClass(LazyStopWebappClassLoader.class.getName());
         }
@@ -908,9 +908,15 @@ public class TomcatWebAppBuilder impleme
 
     private static boolean undeploy(final StandardContext standardContext, 
final Container host) {
         final Container child = host.findChild(standardContext.getName());
-        final LazyStopWebappClassLoader lazyStopWebappClassLoader = 
lazyClassLoader(child);
 
-        if (lazyStopWebappClassLoader != null && 
lazyStopWebappClassLoader.isRestarting()) { // skip undeployment
+        // skip undeployment if redeploying (StandardContext.redeploy())
+        if (child instanceof org.apache.catalina.Context && 
((org.apache.catalina.Context) child).getPaused()) {
+            return true;
+        }
+
+        // skip undeployment if restarting
+        final LazyStopWebappClassLoader lazyStopWebappClassLoader = 
lazyClassLoader(child);
+        if (lazyStopWebappClassLoader != null && 
lazyStopWebappClassLoader.isRestarting()) {
             return true;
         }
 
@@ -1243,7 +1249,7 @@ public class TomcatWebAppBuilder impleme
             for (Iterator<Map.Entry<String, DeployedApplication>> iterator = 
deployedApps.entrySet().iterator(); iterator.hasNext(); ) {
                 final Map.Entry<String, DeployedApplication> entry = 
iterator.next();
                 final DeployedApplication deployedApplication = 
entry.getValue();
-                if (deployedApplication.isModified()) {
+                if (deployedApplication.isModified()) { // TODO: for war use 
StandardContext.redeploy()
                     if (deployedApplication.appInfo != null) { // can happen 
with badly formed config
                         try {
                             
getAssembler().destroyApplication(deployedApplication.appInfo.path);


Reply via email to