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 2014/10/08 17:47:20 UTC

svn commit: r1630151 - in /tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb: cdi/CdiScanner.java testing/ApplicationComposers.java

Author: rmannibucau
Date: Wed Oct  8 15:47:20 2014
New Revision: 1630151

URL: http://svn.apache.org/r1630151
Log:
TOMEE-1389 better CDI integration for app composer and tets enrichment

Modified:
    tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
    tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java

Modified: tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
URL: http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java?rev=1630151&r1=1630150&r2=1630151&view=diff
==============================================================================
--- tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java (original)
+++ tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java Wed Oct  8 15:47:20 2014
@@ -94,8 +94,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/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
URL: http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java?rev=1630151&r1=1630150&r2=1630151&view=diff
==============================================================================
--- tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java (original)
+++ tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java Wed Oct  8 15:47:20 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,6 +335,7 @@ 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()
@@ -752,22 +754,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());
 
@@ -798,6 +785,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;