You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2011/12/07 23:07:30 UTC

svn commit: r1211670 - in /openejb/trunk/openejb: assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ utils/webdeployer/src/main/java/org/apache/tomee/catalina/deployer/

Author: rmannibucau
Date: Wed Dec  7 22:07:30 2011
New Revision: 1211670

URL: http://svn.apache.org/viewvc?rev=1211670&view=rev
Log:
trying to get back the exception which was thrown by OpenEJB when deploying it in TomEE when it was swallowed by Tomcat

Added:
    openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/DeploymentExceptionManager.java
    openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEERuntimeException.java
Modified:
    openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java
    openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
    openejb/trunk/openejb/utils/webdeployer/src/main/java/org/apache/tomee/catalina/deployer/WebappDeployer.java

Added: openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/DeploymentExceptionManager.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/DeploymentExceptionManager.java?rev=1211670&view=auto
==============================================================================
--- openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/DeploymentExceptionManager.java (added)
+++ openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/DeploymentExceptionManager.java Wed Dec  7 22:07:30 2011
@@ -0,0 +1,39 @@
+package org.apache.tomee.catalina;
+
+import org.apache.openejb.assembler.classic.AppInfo;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * Tomcat swallows some exception when trying to deploy a war.
+ * To be able to get it back (from our Deployers for instance)
+ * we need a way to store it.
+ *
+ * @author rmannibucau
+ */
+public class DeploymentExceptionManager {
+    private static final int MAX_SIZE = Integer.getInteger("tomee.deployement-exception-max-size", 10);
+    private final Map<AppInfo, Exception> deploymentException = new LinkedHashMap<AppInfo, Exception>() {
+        @Override // just to avoid potential memory leak
+        protected boolean removeEldestEntry(Map.Entry<AppInfo, Exception> eldest) {
+            return size() > MAX_SIZE;
+        }
+    };
+
+    public synchronized boolean hasDelpoyementFailed(AppInfo appInfo) {
+        return deploymentException.containsKey(appInfo);
+    }
+
+    public synchronized Exception getDelpoyementException(AppInfo appInfo) {
+        return deploymentException.get(appInfo);
+    }
+
+    public synchronized Exception saveDelpoyementException(AppInfo appInfo, Exception exception) {
+        return deploymentException.put(appInfo, exception);
+    }
+
+    public synchronized void clearDelpoyementException(AppInfo info) {
+        deploymentException.remove(info);
+    }
+}

Added: openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEERuntimeException.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEERuntimeException.java?rev=1211670&view=auto
==============================================================================
--- openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEERuntimeException.java (added)
+++ openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEERuntimeException.java Wed Dec  7 22:07:30 2011
@@ -0,0 +1,10 @@
+package org.apache.tomee.catalina;
+
+/**
+ * @author rmannibucau
+ */
+public class TomEERuntimeException extends RuntimeException {
+    public TomEERuntimeException(Throwable cause) {
+        super(cause);
+    }
+}

Modified: openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java?rev=1211670&r1=1211669&r2=1211670&view=diff
==============================================================================
--- openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java (original)
+++ openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java Wed Dec  7 22:07:30 2011
@@ -74,7 +74,7 @@ import java.util.Properties;
  * <li/>
  * </ul>
  * <p/>
- * See {@link org.apache.openejb.config.ServiceUtils#defaultProviderURL}
+ * See {@link org.apache.openejb.config.ServiceUtils#DEFAULT_PROVIDER_URL}
  *
  * @version $Revision: 617255 $ $Date: 2008-01-31 13:58:36 -0800 (Thu, 31 Jan 2008) $
  */
@@ -185,6 +185,7 @@ public class TomcatLoader implements Loa
             tomcatWebAppBuilder.start();
             SystemInstance.get().setComponent(WebAppBuilder.class, tomcatWebAppBuilder);
         }
+        SystemInstance.get().setComponent(DeploymentExceptionManager.class, new DeploymentExceptionManager());
 
         // Web Services will be installed into the WebDeploymentListeners list
         SystemInstance.get().setComponent(WebDeploymentListeners.class, new WebDeploymentListeners());

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=1211670&r1=1211669&r2=1211670&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 Dec  7 22:07:30 2011
@@ -123,6 +123,7 @@ public class TomcatWebAppBuilder impleme
 
     private static final Digester CONTEXT_DIGESTER = createDigester();
     public static final String OPENEJB_WEBAPP_MODULE_ID = "openejb.webapp.moduleId";
+    public static final String TOMEE_EAT_EXCEPTION_PROP = "tomee.eat-exception";
 
     /**
      * Context information for web applications
@@ -573,6 +574,13 @@ public class TomcatWebAppBuilder impleme
                 } catch (Exception e) {
                     undeploy(standardContext, contextInfo);
                     logger.error("Unable to deploy collapsed ear in war " + standardContext.getPath() + ": Exception: " + e.getMessage(), e);
+                    // just to force tomee to start without EE part
+                    if (System.getProperty(TOMEE_EAT_EXCEPTION_PROP) == null) {
+                        final TomEERuntimeException tre = new TomEERuntimeException(e);
+                        DeploymentExceptionManager dem = SystemInstance.get().getComponent(DeploymentExceptionManager.class);
+                        dem.saveDelpoyementException(contextInfo.appInfo, tre);
+                        throw tre;
+                    }
                     return;
                 }
             }

Modified: openejb/trunk/openejb/utils/webdeployer/src/main/java/org/apache/tomee/catalina/deployer/WebappDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/utils/webdeployer/src/main/java/org/apache/tomee/catalina/deployer/WebappDeployer.java?rev=1211670&r1=1211669&r2=1211670&view=diff
==============================================================================
--- openejb/trunk/openejb/utils/webdeployer/src/main/java/org/apache/tomee/catalina/deployer/WebappDeployer.java (original)
+++ openejb/trunk/openejb/utils/webdeployer/src/main/java/org/apache/tomee/catalina/deployer/WebappDeployer.java Wed Dec  7 22:07:30 2011
@@ -45,6 +45,7 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.loader.FileUtils;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.tomcat.util.modeler.Registry;
+import org.apache.tomee.catalina.DeploymentExceptionManager;
 import org.apache.tomee.catalina.TomcatWebAppBuilder;
 import org.apache.tomee.loader.TomcatHelper;
 
@@ -111,7 +112,20 @@ public class WebappDeployer implements D
 				check();
 			}
 
-			return findAppInfo(new String[] { destination.getAbsolutePath(), destinationWithoutExtension });
+			final AppInfo info = findAppInfo(new String[] { destination.getAbsolutePath(), destinationWithoutExtension });
+            if (info == null) {
+                throw new NullPointerException("appinfo not found");
+            }
+
+            final DeploymentExceptionManager dem = SystemInstance.get().getComponent(DeploymentExceptionManager.class);
+            if (dem.hasDelpoyementFailed(info)) {
+                Exception tre = dem.getDelpoyementException(info);
+                // we don't need this exceptino anymore
+                dem.clearDelpoyementException(info);
+                throw tre;
+            }
+
+            return info;
 		} catch (Exception e) {
 			throw new OpenEJBException(e);
 		}
@@ -122,7 +136,7 @@ public class WebappDeployer implements D
 
 		Iterator<AppInfo> iterator = deployedApps.iterator();
 		while (iterator.hasNext()) {
-			AppInfo appInfo = (AppInfo) iterator.next();
+			AppInfo appInfo = iterator.next();
 			for (String path : paths) {
 				if (appInfo.path.equals(path)) {
 					return appInfo;
@@ -144,7 +158,7 @@ public class WebappDeployer implements D
 						webappBuilder.checkHost(host);
 					}
 				}
-			}
+            }
 		}
 	}