Author: rmannibucau Date: Wed Oct 8 15:47:12 2014 New Revision: 1630150 URL: http://svn.apache.org/r1630150 Log: TOMEE-1389 better CDI integration for app composer and tets enrichment
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java?rev=1630150&r1=1630149&r2=1630150&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java Wed Oct 8 15:47:12 2014 @@ -102,7 +102,7 @@ public class CdiScanner implements Scann for (final EjbJarInfo ejbJar : appInfo.ejbJars) { final BeansInfo beans = ejbJar.beans; - if (beans == null) { + if (beans == null || "false".equalsIgnoreCase(ejbJar.properties.getProperty("openejb.cdi.activated"))) { continue; } Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java?rev=1630150&r1=1630149&r2=1630150&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java Wed Oct 8 15:47:12 2014 @@ -45,6 +45,7 @@ import org.apache.openejb.config.sys.Ope import org.apache.openejb.core.LocalInitialContextFactory; import org.apache.openejb.core.Operation; import org.apache.openejb.core.ThreadContext; +import org.apache.openejb.core.WebContext; import org.apache.openejb.core.ivm.naming.InitContextFactory; import org.apache.openejb.injection.FallbackPropertyInjector; import org.apache.openejb.jee.Application; @@ -334,10 +335,11 @@ public final class ApplicationComposers ejbDeployment.setDeploymentId(testClass.getName()); final EjbModule ejbModule = new EjbModule(ejbJar, openejbJar); + ejbModule.getProperties().setProperty("openejb.cdi.activated", "false"); final FinderFactory.OpenEJBAnnotationFinder finder = new FinderFactory.OpenEJBAnnotationFinder(new ClassesArchive(ancestors(testClass))); ejbModule.setFinder(finder); if (finder.findMetaAnnotatedFields(Inject.class).size() - + finder.findMetaAnnotatedMethods(Inject.class).size() > 0) { // activate cdi to avoid WARNINGs + + finder.findMetaAnnotatedMethods(Inject.class).size() > 0) { // "activate" cdi to avoid WARNINGs ejbModule.setBeans(new Beans()); } appModule.getEjbModules().add(ejbModule); @@ -759,22 +761,7 @@ public final class ApplicationComposers final BeanContext context = containerSystem.getBeanContext(testClass.getName()); - final ThreadContext callContext = new ThreadContext(context, null, Operation.INJECTION); - final ThreadContext oldContext = ThreadContext.enter(callContext); - try { - final InjectionProcessor processor = new InjectionProcessor(inputTestInstance, context.getInjections(), context.getJndiContext()); - - processor.createInstance(); - try { - OWBInjector.inject(appContext.getBeanManager(), inputTestInstance, null); - } catch (final Throwable t) { - // TODO handle this differently - // this is temporary till the injector can be rewritten - t.printStackTrace(); - } - } finally { - ThreadContext.exit(oldContext); - } + enrich(inputTestInstance, context); System.setProperty(Context.INITIAL_CONTEXT_FACTORY, InitContextFactory.class.getName()); @@ -805,6 +792,39 @@ public final class ApplicationComposers testClassFinders.put(this, testClassFinder); } + private void enrich(final Object inputTestInstance, final BeanContext context) throws org.apache.openejb.OpenEJBException { + final ThreadContext callContext = new ThreadContext(context, null, Operation.INJECTION); + final ThreadContext oldContext = ThreadContext.enter(callContext); + try { + final InjectionProcessor processor = new InjectionProcessor(inputTestInstance, context.getInjections(), context.getJndiContext()); + processor.createInstance(); + + Throwable error = null; + try { + OWBInjector.inject(appContext.getBeanManager(), inputTestInstance, null); + } catch (final Throwable t) { + error = t; + } + for (final WebContext web : appContext.getWebContexts()) { + try { + OWBInjector.inject(web.getWebBeansContext().getBeanManagerImpl(), inputTestInstance, null); + // hourra, we enriched correctly the test then cleanup error state and quit + error = null; + break; + } catch (final Throwable t) { + if (error == null) { + error = t; + } // else keep original one + } + } + if (error != null) { + error.printStackTrace(); + } + } finally { + ThreadContext.exit(oldContext); + } + } + private Collection<File> findFiles(final Jars jarsAnnotation) { if (jarsAnnotation == null) { return null;