Author: rmannibucau
Date: Wed Sep 24 05:46:33 2014
New Revision: 1627226

URL: http://svn.apache.org/r1627226
Log:
TOMEE-1359 using app scope for enrichment

Modified:
    
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEInjectionEnricher.java
    
tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/MultipleDeploymentsTest.java

Modified: 
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEInjectionEnricher.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEInjectionEnricher.java?rev=1627226&r1=1627225&r2=1627226&view=diff
==============================================================================
--- 
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEInjectionEnricher.java
 (original)
+++ 
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEInjectionEnricher.java
 Wed Sep 24 05:46:33 2014
@@ -22,125 +22,62 @@ import org.apache.openejb.BeanContext;
 import org.apache.openejb.arquillian.common.enrichment.OpenEJBEnricher;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.spi.ContainerSystem;
+import org.jboss.arquillian.container.spi.client.deployment.Deployment;
 import org.jboss.arquillian.core.api.Instance;
 import org.jboss.arquillian.core.api.annotation.Inject;
 import org.jboss.arquillian.test.spi.TestClass;
 import org.jboss.arquillian.test.spi.TestEnricher;
 
 import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 public class TomEEInjectionEnricher implements TestEnricher {
-
     @Inject
     private Instance<TestClass> testClass;
 
+    @Inject
+    private Instance<Deployment> deployment;
+
     @Override
     public void enrich(final Object o) {
         if (!SystemInstance.isInitialized()) {
             return;
         }
-        OpenEJBEnricher.enrich(o, getAppContext(o.getClass().getName()));
+        OpenEJBEnricher.enrich(o, getAppContext(o.getClass()));
     }
 
-    private AppContext getAppContext(final String className) {
+    private AppContext getAppContext(final Class<?> clazz) {
+        final String clazzName = clazz.getName();
         final ContainerSystem containerSystem = 
SystemInstance.get().getComponent(ContainerSystem.class);
-        final List<AppContext> appContexts = containerSystem.getAppContexts();
-
-        final int size = appContexts.size();
-        if (size == 1) {
-            return appContexts.get(0);
-        }
-
-        final List<AppContext> found = new ArrayList<AppContext>(size);
-
-        for (final AppContext app : appContexts) {
-            final BeanContext context = 
containerSystem.getBeanContext(app.getId() + "_" + className);
+        if (deployment != null && deployment.get() != null) {
+            final BeanContext context = 
containerSystem.getBeanContext(deployment.get().getDescription().getName() + 
"_" + clazzName);
             if (context != null) {
-                found.add(app);
+                return context.getModuleContext().getAppContext();
             }
         }
 
-        if (found.size() > 0) {
-
-            Collections.sort(found, new Comparator<AppContext>() {
-
-                /**
-                 * If multiple apps are found that contain the test class then 
a best guess effort needs to be made
-                 * to find the context that best matches the test class 
application.
-                 *
-                 * @param ac1 AppContext
-                 * @param ac2 AppContext
-                 * @return int
-                 */
-                @Override
-                public int compare(final AppContext ac1, final AppContext ac2) 
{
-                    int c = 0;
-
-                    if (isBeanManagerInUse(ac1) && !isBeanManagerInUse(ac2)) {
-                        c--;
-                    } else if (!isBeanManagerInUse(ac1) && 
isBeanManagerInUse(ac2)) {
-                        c++;
-                    }
-
-                    if (ac1.isCdiEnabled() && !ac2.isCdiEnabled()) {
-                        c--;
-                    } else if (!ac1.isCdiEnabled() && ac2.isCdiEnabled()) {
-                        c++;
-                    }
-
-                    int size1 = ac1.getBeanContexts().size();
-                    int size2 = ac2.getBeanContexts().size();
-                    if (size1 > size2) {
-                        c--;
-                    } else if (size2 > size1) {
-                        c++;
-                    }
-
-                    size1 = ac1.getBindings().size();
-                    size2 = ac2.getBindings().size();
-                    if (size1 > size2) {
-                        c--;
-                    } else if (size2 > size1) {
-                        c++;
-                    }
-
-                    size1 = ac1.getWebContexts().size();
-                    size2 = ac2.getWebContexts().size();
-                    if (size1 > size2) {
-                        c--;
-                    } else if (size2 > size1) {
-                        c++;
-                    }
-
-                    return c;
-                }
+        final List<AppContext> appContexts = containerSystem.getAppContexts();
+        final ClassLoader loader = clazz.getClassLoader();
 
-                private boolean isBeanManagerInUse(final AppContext ac) {
-                    try {
-                        return 
ac.getWebBeansContext().getBeanManagerImpl().isInUse();
-                    } catch (final Exception e) {
-                        return false;
-                    }
+        for (final AppContext app : appContexts) {
+            final BeanContext context = 
containerSystem.getBeanContext(app.getId() + "_" + clazzName);
+            if (context != null) {
+                // in embedded mode we have deployment so we dont go here were 
AppLoader would just be everywhere
+                if (context.getBeanClass().getClassLoader() == loader) {
+                    return app;
                 }
-            });
-
-            //Return the most likely candidate
-            return found.get(0);
+            }
         }
 
-        
Logger.getLogger(TomEEInjectionEnricher.class.getName()).log(Level.WARNING, 
"Failed to find AppContext for: " + className);
+        
Logger.getLogger(TomEEInjectionEnricher.class.getName()).log(Level.WARNING, 
"Failed to find AppContext for: " + clazzName);
 
         return null;
     }
 
     @Override
     public Object[] resolve(final Method method) {
-        return 
OpenEJBEnricher.resolve(getAppContext(method.getDeclaringClass().getName()), 
testClass.get(), method);
+        return 
OpenEJBEnricher.resolve(getAppContext(method.getDeclaringClass()), 
testClass.get(), method);
     }
 }

Modified: 
tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/MultipleDeploymentsTest.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/MultipleDeploymentsTest.java?rev=1627226&r1=1627225&r2=1627226&view=diff
==============================================================================
--- 
tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/MultipleDeploymentsTest.java
 (original)
+++ 
tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/MultipleDeploymentsTest.java
 Wed Sep 24 05:46:33 2014
@@ -58,12 +58,9 @@ public class MultipleDeploymentsTest ext
         return ShrinkWrap.create(WebArchive.class, "yellow.war");
     }
 
-    @Inject
-    private TestMe testMe;
-
     @Test
     @OperateOnDeployment("orange")
-    public void testOrange() throws Exception {
+    public void testOrange(final TestMe testMe) throws Exception {
         assertNotNull(testMe);
         assertEquals("Unexpected message", MSG, testMe.getMessage());
     }
@@ -71,11 +68,7 @@ public class MultipleDeploymentsTest ext
     @Test
     @OperateOnDeployment("green")
     public void testMap() throws Exception {
-
-        //TODO - Should this actually work as TestMe.class has not been added 
to 'green'?
-
-        assertNotNull(testMe);
-        assertEquals("Unexpected message", MSG, testMe.getMessage());
+        // no-op
     }
 
     public static class TestMe {


Reply via email to