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