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


Reply via email to