Author: rmannibucau
Date: Wed Oct 19 21:42:39 2011
New Revision: 1186510
URL: http://svn.apache.org/viewvc?rev=1186510&view=rev
Log:
TOMEE-36 trying to undeploy app when deployment fails
Modified:
openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
Modified:
openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1186510&r1=1186509&r2=1186510&view=diff
==============================================================================
---
openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
(original)
+++
openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
Wed Oct 19 21:42:39 2011
@@ -59,14 +59,14 @@ import org.apache.openejb.core.ivm.namin
import org.apache.openejb.jee.EnvEntry;
import org.apache.openejb.jee.WebApp;
import org.apache.openejb.loader.SystemInstance;
-import org.apache.tomee.common.LegacyAnnotationProcessor;
-import org.apache.tomee.common.TomcatVersion;
-import org.apache.tomee.common.UserTransactionFactory;
-import org.apache.tomee.loader.TomcatHelper;
import org.apache.openejb.util.LinkResolver;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.tomcat.InstanceManager;
+import org.apache.tomee.common.LegacyAnnotationProcessor;
+import org.apache.tomee.common.TomcatVersion;
+import org.apache.tomee.common.UserTransactionFactory;
+import org.apache.tomee.loader.TomcatHelper;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.spi.adaptor.ELAdaptor;
import org.omg.CORBA.ORB;
@@ -231,16 +231,7 @@ public class TomcatWebAppBuilder impleme
// TODO: instead of storing deployers, we could just lookup
the right hostconfig for the server.
final HostConfig deployer = deployers.get(host);
- boolean isReady = false;
- if (deployer != null) {
- // TODO: find something more sexy
- try {
- isReady =
deployer.getClass().getDeclaredField("host").get(deployer) != null;
- } catch (Exception e) {
- // no-op
- }
- }
- if (deployer != null && isReady) { // if not ready using
directly host to avoid a NPE
+ if (isReady(deployer)) { // if not ready using directly host
to avoid a NPE
// host isn't set until we call deployer.manageApp, so
pass it
// ?? host is set through an event and it can be null here
:(
ContextInfo contextInfo = addContextInfo(host,
standardContext);
@@ -260,6 +251,18 @@ public class TomcatWebAppBuilder impleme
}
}
+ private static boolean isReady(HostConfig deployer) {
+ if (deployer != null) {
+ // TODO: find something more sexy
+ try {
+ return
deployer.getClass().getDeclaredField("host").get(deployer) != null;
+ } catch (Exception e) {
+ // no-op
+ }
+ }
+ return false;
+ }
+
/**
* just to avoid a lot of log lines which are often useless.
*
@@ -451,6 +454,7 @@ public class TomcatWebAppBuilder impleme
appContext = a.createApplication(contextInfo.appInfo,
classLoader);
// todo add watched resources to context
} catch (Exception e) {
+ undeploy(standardContext, contextInfo);
logger.error("Unable to deploy collapsed ear in war " +
standardContext.getPath() + ": Exception: " + e.getMessage(), e);
}
}
@@ -532,6 +536,14 @@ public class TomcatWebAppBuilder impleme
}
}
+ private static void undeploy(StandardContext standardContext, ContextInfo
contextInfo) {
+ if (isReady(contextInfo.deployer)) {
+ contextInfo.deployer.unmanageApp(standardContext.getName());
+ } else if (contextInfo.host != null) {
+ contextInfo.host.removeChild(standardContext);
+ }
+ }
+
private JndiEncBuilder getJndiBuilder(ClassLoader classLoader, WebAppInfo
webAppInfo, Set<Injection> injections) throws OpenEJBException {
return new JndiEncBuilder(webAppInfo.jndiEnc, injections,
webAppInfo.moduleId, "Bean", null, webAppInfo.uniqueId, classLoader);
}