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;


Reply via email to