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 {