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 2013/12/29 22:06:13 UTC
svn commit: r1554067 - in /tomee/tomee/trunk/arquillian:
arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/
arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/
arquillian-openejb-embedded-4/s...
Author: rmannibucau
Date: Sun Dec 29 21:06:12 2013
New Revision: 1554067
URL: http://svn.apache.org/r1554067
Log:
TOMEE-1101 support enrichment of test method params
Added:
tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/MethodParameterEnrichmentTest.java
- copied, changed from r1553518, tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/AdapterArquillianStandaloneTest.java
Modified:
tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java
tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEInjectionEnricher.java
Modified: tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java?rev=1554067&r1=1554066&r2=1554067&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java Sun Dec 29 21:06:12 2013
@@ -26,17 +26,26 @@ import org.apache.openejb.core.Operation
import org.apache.openejb.core.ThreadContext;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.spi.ContainerSystem;
-import org.apache.openejb.util.LogCategory;
-import org.apache.openejb.util.Logger;
+import org.apache.webbeans.annotation.AnnotationManager;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.inject.OWBInjector;
+import org.apache.webbeans.portable.AnnotatedElementFactory;
import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedParameter;
import javax.enterprise.inject.spi.Bean;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
public final class OpenEJBEnricher {
+ private static final Logger LOGGER = Logger.getLogger(OpenEJBEnricher.class.getName());
+
private OpenEJBEnricher() {
// no-op
}
@@ -59,7 +68,7 @@ public final class OpenEJBEnricher {
}
OWBInjector.inject(bm, testInstance, cc);
} catch (Throwable t) {
- Logger.getInstance(LogCategory.OPENEJB, OpenEJBEnricher.class).error("Can't inject in " + testInstance.getClass(), t);
+ LOGGER.log(Level.SEVERE, "Can't inject in " + testInstance.getClass(), t);
if (t instanceof RuntimeException) {
throw (RuntimeException) t;
}
@@ -98,4 +107,41 @@ public final class OpenEJBEnricher {
return null;
}
+ public static Object[] resolve(final AppContext appContext, final Method method) { // suppose all is a CDI bean...
+ final Object[] values = new Object[method.getParameterTypes().length];
+
+ if (appContext == null) {
+ return values;
+ }
+
+ final BeanManagerImpl beanManager = findBeanManager(appContext);
+ if (beanManager == null) {
+ return values;
+ }
+
+ final Class<?>[] parameterTypes = method.getParameterTypes();
+ for (int i = 0; i < parameterTypes.length; i++) {
+ try {
+ values[i] = getParamInstance(beanManager, i, method);
+ } catch (final Exception e) {
+ LOGGER.log(Level.WARNING, e.getMessage(), e);
+ }
+ }
+ return values;
+ }
+
+ private static <T> T getParamInstance(final BeanManagerImpl manager, final int position, final Method method) {
+ final AnnotatedElementFactory factory = manager.getWebBeansContext().getAnnotatedElementFactory();
+ final AnnotationManager annotationManager = manager.getWebBeansContext().getAnnotationManager();
+
+ final AnnotatedMethod<?> am = factory.newAnnotatedMethod(method, factory.newAnnotatedType(method.getDeclaringClass()));
+ final AnnotatedParameter<?> ap = am.getParameters().get(position);
+
+ final Type baseType = ap.getBaseType();
+ final Bean<?> bean = manager.resolve(manager.getBeans(baseType, annotationManager.getInterceptorBindingMetaAnnotations(ap.getAnnotations())));
+
+ // note: without a scope it can leak but that's what the user asked!
+ final CreationalContextImpl<?> creational = manager.createCreationalContext(null); // null since we don't want the test class be the owner
+ return (T) manager.getReference(bean, baseType, creational);
+ }
}
Modified: tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java?rev=1554067&r1=1554066&r2=1554067&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java Sun Dec 29 21:06:12 2013
@@ -39,12 +39,12 @@ public class OpenEJBInjectionEnricher im
@Override
public void enrich(final Object testInstance) {
+ new MockitoEnricher().enrich(testInstance);
+
final AppContext context = appContext.get();
if (context != null) {
OpenEJBEnricher.enrich(testInstance, context);
} else { // try to enrich with all for deployment at startup feature - only once context can be used in a class
- new MockitoEnricher().enrich(testInstance);
-
final List<AppContext> appContexts = SystemInstance.get().getComponent(ContainerSystem.class).getAppContexts();
final Class<?> clazz = testInstance.getClass();
for (final AppContext appContext : appContexts) {
@@ -64,6 +64,6 @@ public class OpenEJBInjectionEnricher im
@Override
public Object[] resolve(final Method method) {
- return new Object[method.getParameterTypes().length];
+ return OpenEJBEnricher.resolve(appContext.get(), method);
}
}
Copied: tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/MethodParameterEnrichmentTest.java (from r1553518, tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/AdapterArquillianStandaloneTest.java)
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/MethodParameterEnrichmentTest.java?p2=tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/MethodParameterEnrichmentTest.java&p1=tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/AdapterArquillianStandaloneTest.java&r1=1553518&r2=1554067&rev=1554067&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/AdapterArquillianStandaloneTest.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/MethodParameterEnrichmentTest.java Sun Dec 29 21:06:12 2013
@@ -16,7 +16,6 @@
*/
package org.apache.openejb.arquillian.openejb;
-import org.apache.openejb.loader.SystemInstance;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ArchivePaths;
@@ -26,18 +25,23 @@ import org.jboss.shrinkwrap.api.spec.Jav
import org.junit.Test;
import org.junit.runner.RunWith;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotNull;
@RunWith(Arquillian.class)
-public class AdapterArquillianStandaloneTest {
+public class MethodParameterEnrichmentTest {
@Deployment
public static JavaArchive archive() {
- return ShrinkWrap.create(JavaArchive.class, AdapterArquillianStandaloneTest.class.getSimpleName().concat(".jar"))
- .addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"));
+ return ShrinkWrap.create(JavaArchive.class, MethodParameterEnrichmentTest.class.getSimpleName().concat(".jar"))
+ .addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"))
+ .addClass(Foo.class);
}
@Test
- public void checkItIsStarted() {
- assertTrue(SystemInstance.isInitialized());
+ public void check(final Foo foo) {
+ assertNotNull(foo);
+ }
+
+ public static class Foo {
+
}
}
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=1554067&r1=1554066&r2=1554067&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 Sun Dec 29 21:06:12 2013
@@ -41,6 +41,6 @@ public class TomEEInjectionEnricher impl
@Override
public Object[] resolve(final Method method) {
- return new Object[method.getParameterTypes().length];
+ return OpenEJBEnricher.resolve(getAppContext(method.getDeclaringClass().getName()), method);
}
}