Repository: tomee
Updated Branches:
  refs/heads/master 4fbe1614e -> e4536b70f


trying to propagate cdi exception in DeployerEjb as it is done for webapps


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/e4536b70
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/e4536b70
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/e4536b70

Branch: refs/heads/master
Commit: e4536b70ff0e72cd932405226e962b35ce438e28
Parents: 4fbe161
Author: Romain Manni-Bucau <[email protected]>
Authored: Fri Mar 20 17:56:38 2015 +0100
Committer: Romain Manni-Bucau <[email protected]>
Committed: Fri Mar 20 17:56:38 2015 +0100

----------------------------------------------------------------------
 .../apache/openejb/assembler/DeployerEjb.java   | 26 ++++++++++++---
 tck/cdi-tomee/src/test/resources/failing.xml    | 35 ++++++++++----------
 .../tomee/catalina/TomcatWebAppBuilder.java     | 15 +++++++++
 3 files changed, 54 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/e4536b70/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
----------------------------------------------------------------------
diff --git 
a/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
 
b/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
index e83c383..908d14b 100644
--- 
a/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
+++ 
b/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
@@ -24,6 +24,7 @@ import org.apache.openejb.OpenEJBRuntimeException;
 import org.apache.openejb.UndeployException;
 import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.DeploymentExceptionManager;
 import org.apache.openejb.config.AppModule;
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.config.DeploymentLoader;
@@ -263,13 +264,28 @@ public class DeployerEjb implements Deployer {
                 throw (ValidationException) e;
             }
 
-            if (e instanceof OpenEJBException) {
-                if (e.getCause() instanceof ValidationException) {
-                    throw (ValidationException) e.getCause();
+            final Throwable ex;
+            final DeploymentExceptionManager dem = 
SystemInstance.get().getComponent(DeploymentExceptionManager.class);
+            if (dem != null) {
+                if (dem.hasDeploymentFailed()) {
+                    ex = dem.getLastException();
+                } else {
+                    ex = e;
                 }
-                throw (OpenEJBException) e;
+                if (appInfo != null) {
+                    dem.clearLastException(appInfo);
+                }
+            } else {
+                ex = e;
             }
-            throw new OpenEJBException(e);
+
+            if (ex instanceof OpenEJBException) {
+                if (ex.getCause() instanceof ValidationException) {
+                    throw (ValidationException) ex.getCause();
+                }
+                throw (OpenEJBException) ex;
+            }
+            throw new OpenEJBException(ex);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/e4536b70/tck/cdi-tomee/src/test/resources/failing.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-tomee/src/test/resources/failing.xml 
b/tck/cdi-tomee/src/test/resources/failing.xml
index 18bcd2f..ccad1ed 100644
--- a/tck/cdi-tomee/src/test/resources/failing.xml
+++ b/tck/cdi-tomee/src/test/resources/failing.xml
@@ -24,23 +24,24 @@
   <test name="CDI TCK">
     <classes>
       <!--
-  ConversationFilterTest>Arquillian.run:164->testConversationBusy:133 expected 
[BusyConversationException] but found [500]
-  
EnterpriseBeanDiscoveryTest>Arquillian.run:164->testExplicitBeanArchiveEmptyDescriptor:133->assertDiscoveredAndAvailable:172
 expected [true] but found [false]
-  
EnterpriseBeanDiscoveryTest>Arquillian.run:164->testExplicitBeanArchiveLegacyDescriptor:140->assertDiscoveredAndAvailable:172
 expected [true] but found [false]
-  
EnterpriseBeanDiscoveryTest>Arquillian.run:164->testExplicitBeanArchiveModeAll:126->assertDiscoveredAndAvailable:172
 expected [true] but found [false]
-  
EnterpriseBeanDiscoveryTest>Arquillian.run:164->testImplicitBeanArchiveModeAnnotated:154->assertDiscoveredAndAvailable:172
 expected [true] but found [false]
-  
EnterpriseBeanDiscoveryTest>Arquillian.run:164->testImplicitBeanArchiveNoDescriptor:147->assertDiscoveredAndAvailable:170->AbstractTest.getContextualReference:157
 » UnsatisfiedResolution
-  
EnterpriseBeanDiscoveryTest>Arquillian.run:164->testNoBeanArchiveModeNone:160->assertNotDiscoveredAndNotAvailable:178
 expected [true] but found [false]
-  InstalledLibraryWarTest>Arquillian.arquillianBeforeClass:109 » Deployment 
Unab...
-  ResourceDefinitionWithDifferentTypeTest>Arquillian.arquillianBeforeClass:109 
» Runtime
-  ResourceDefinitionWithDifferentTypeTest>Arquillian.arquillianBeforeClass:109 
» Runtime
-  ResourceDefinitionWithDifferentTypeTest>Arquillian.arquillianBeforeClass:109 
» Runtime
-  
InterModuleELResolutionTest>Arquillian.run:164->testEnabledManagedBeanAvailableForELResolution:62
 » PropertyNotFound
-  
DisabledProducerFieldInjectionNotAvailableTest>Arquillian.arquillianBeforeClass:109
 » Runtime
-  
DisabledProducerMethodInjectionNotAvailableTest>Arquillian.arquillianBeforeClass:109
 » Runtime
-  
DisabledSessionBeanInjectionNotAvailableTest>Arquillian.arquillianBeforeClass:109
 » Runtime
-  -->
-      <class 
name="org.jboss.cdi.tck.tests.extensions.lifecycle.bbd.DeploymentTest" />
+      ConversationFilterTest>Arquillian.run:164->testConversationBusy:133 
expected [BusyConversationException] but found [500]
+      
EnterpriseBeanDiscoveryTest>Arquillian.run:164->testExplicitBeanArchiveEmptyDescriptor:133->assertDiscoveredAndAvailable:172
 expected [true] but found [false]
+      
EnterpriseBeanDiscoveryTest>Arquillian.run:164->testExplicitBeanArchiveLegacyDescriptor:140->assertDiscoveredAndAvailable:172
 expected [true] but found [false]
+      
EnterpriseBeanDiscoveryTest>Arquillian.run:164->testExplicitBeanArchiveModeAll:126->assertDiscoveredAndAvailable:172
 expected [true] but found [false]
+      
EnterpriseBeanDiscoveryTest>Arquillian.run:164->testImplicitBeanArchiveModeAnnotated:154->assertDiscoveredAndAvailable:172
 expected [true] but found [false]
+      
EnterpriseBeanDiscoveryTest>Arquillian.run:164->testImplicitBeanArchiveNoDescriptor:147->assertDiscoveredAndAvailable:170->AbstractTest.getContextualReference:157
 » UnsatisfiedResolution
+      
EnterpriseBeanDiscoveryTest>Arquillian.run:164->testNoBeanArchiveModeNone:160->assertNotDiscoveredAndNotAvailable:178
 expected [true] but found [false]
+      MultiWebModuleWithExtensionTest>Arquillian.run:164 » IllegalState Error 
launch...
+      InstalledLibraryWarTest>Arquillian.arquillianBeforeClass:109 » 
Deployment Unab...
+      DeploymentTest>Arquillian.arquillianBeforeClass:109 » Deployment Unable 
to dep...
+      
ResourceDefinitionWithDifferentTypeTest>Arquillian.arquillianBeforeClass:109 » 
Runtime
+      
ResourceDefinitionWithDifferentTypeTest>Arquillian.arquillianBeforeClass:109 » 
Runtime
+      
ResourceDefinitionWithDifferentTypeTest>Arquillian.arquillianBeforeClass:109 » 
Runtime
+      
InterModuleELResolutionTest>Arquillian.run:164->testEnabledManagedBeanAvailableForELResolution:62
 » PropertyNotFound
+      
DisabledProducerMethodInjectionNotAvailableTest>Arquillian.arquillianBeforeClass:109
 » Runtime
+      
DisabledSessionBeanInjectionNotAvailableTest>Arquillian.arquillianBeforeClass:109
 » Runtime
+      -->
+      <class 
name="org.jboss.cdi.tck.tests.lookup.modules.broken.DisabledProducerFieldInjectionNotAvailableTest"
 />
     </classes>
   </test>
 </suite>

http://git-wip-us.apache.org/repos/asf/tomee/blob/e4536b70/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
----------------------------------------------------------------------
diff --git 
a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
 
b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
index a5dd170..3052617 100644
--- 
a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
+++ 
b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
@@ -1297,6 +1297,12 @@ public class TomcatWebAppBuilder implements 
WebAppBuilder, ContextListener, Pare
                     OpenEJBLifecycle.CURRENT_APP_INFO.set(contextInfo.appInfo);
                     try {
                         new CdiBuilder().build(contextInfo.appInfo, 
appContext, beanContexts, webContext);
+                    } catch (final Exception e) {
+                        final DeploymentExceptionManager dem = 
SystemInstance.get().getComponent(DeploymentExceptionManager.class);
+                        if (dem != null) {
+                            dem.saveDeploymentException(contextInfo.appInfo, 
e);
+                        }
+                        throw e;
                     } finally {
                         OpenEJBLifecycle.CURRENT_APP_INFO.remove();
                     }
@@ -1318,6 +1324,15 @@ public class TomcatWebAppBuilder implements 
WebAppBuilder, ContextListener, Pare
 
             } catch (final Exception e) {
                 logger.error("Error merging Java EE JNDI entries in to war " + 
standardContext.getPath() + ": Exception: " + e.getMessage(), e);
+                if (System.getProperty(TOMEE_EAT_EXCEPTION_PROP) == null) {
+                    final DeploymentExceptionManager dem = 
SystemInstance.get().getComponent(DeploymentExceptionManager.class);
+                    if (dem != null && 
dem.getDeploymentException(contextInfo.appInfo) != null) {
+                        if (RuntimeException.class.isInstance(e)) {
+                            throw RuntimeException.class.cast(e);
+                        }
+                        throw new TomEERuntimeException(e);
+                    }
+                }
             }
 
             final JspFactory factory = JspFactory.getDefaultFactory();

Reply via email to