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