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 2012/10/24 15:46:25 UTC

svn commit: r1401678 - in /openejb/trunk/openejb/arquillian: arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/ arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/

Author: rmannibucau
Date: Wed Oct 24 13:46:25 2012
New Revision: 1401678

URL: http://svn.apache.org/viewvc?rev=1401678&view=rev
Log:
OPENEJB-1924 release of test class creational context

Modified:
    openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java
    openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java

Modified: openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java?rev=1401678&r1=1401677&r2=1401678&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java Wed Oct 24 13:46:25 2012
@@ -26,8 +26,10 @@ import org.apache.openejb.core.ThreadCon
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.spi.ContainerSystem;
 import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.inject.AbstractInjectable;
 import org.apache.webbeans.inject.OWBInjector;
 
+import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 import java.util.Set;
 
@@ -44,19 +46,29 @@ public final class OpenEJBEnricher {
         // don't rely on arquillian since this enrichment should absolutely be done before the following ones
         new MockitoEnricher().enrich(testInstance);
 
+        final BeanContext context = SystemInstance.get().getComponent(ContainerSystem.class)
+                .getBeanContext(testInstance.getClass().getName());
+
         final BeanManagerImpl bm = ctx.getWebBeansContext().getBeanManagerImpl();
         if (bm.isInUse()) {
             try {
                 final Set<Bean<?>> beans = bm.getBeans(testInstance.getClass());
                 final Bean<?> bean = bm.resolve(beans);
-                OWBInjector.inject(bm, testInstance, bm.createCreationalContext(bean));
+                final CreationalContext<?> cc = bm.createCreationalContext(bean);
+                if (context != null) {
+                    context.set(CreationalContext.class, cc);
+                }
+                AbstractInjectable.instanceUnderInjection.set(testInstance);
+                try {
+                    OWBInjector.inject(bm, testInstance, cc);
+                } finally {
+                    AbstractInjectable.instanceUnderInjection.remove();
+                }
             } catch (Throwable t) {
                 // ignored
             }
         }
 
-        final BeanContext context = SystemInstance.get().getComponent(ContainerSystem.class)
-                                            .getBeanContext(testInstance.getClass().getName());
         if (context != null) {
             ThreadContext callContext = new ThreadContext(context, null, Operation.INJECTION);
             ThreadContext oldContext = ThreadContext.enter(callContext);

Modified: openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java?rev=1401678&r1=1401677&r2=1401678&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java Wed Oct 24 13:46:25 2012
@@ -20,6 +20,7 @@ import org.apache.openejb.BeanContext;
 import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.spi.ContainerSystem;
+import org.jboss.arquillian.container.spi.event.container.BeforeUnDeploy;
 import org.jboss.arquillian.core.api.Instance;
 import org.jboss.arquillian.core.api.annotation.Inject;
 import org.jboss.arquillian.core.api.annotation.Observes;
@@ -27,6 +28,8 @@ import org.jboss.arquillian.core.spi.Eve
 import org.jboss.arquillian.test.spi.TestClass;
 import org.jboss.arquillian.test.spi.event.suite.ClassEvent;
 
+import javax.enterprise.context.spi.CreationalContext;
+
 public class TestObserver {
     @Inject
     private Instance<ClassLoader> classLoader;
@@ -35,8 +38,7 @@ public class TestObserver {
     private Instance<TestClass> testClass;
 
     public void observes(@Observes final EventContext<ClassEvent> event) {
-        final BeanContext context = SystemInstance.get().getComponent(ContainerSystem.class)
-                .getBeanContext(testClass.get().getName());
+        final BeanContext context = beanContext();
         ThreadContext oldCtx = null;
         ClassLoader oldCl = null;
 
@@ -63,4 +65,23 @@ public class TestObserver {
     private void setTCCL(final ClassLoader cl) {
         Thread.currentThread().setContextClassLoader(cl);
     }
+
+    public void release(@Observes final EventContext<BeforeUnDeploy> event) {
+        try {
+            event.proceed();
+        } finally {
+            final BeanContext bc = beanContext();
+            if (bc != null) { // can be null if deployment exception
+                final CreationalContext<?> cc = bc.get(CreationalContext.class);
+                if (cc != null) {
+                    cc.release();
+                }
+            }
+        }
+    }
+
+    private BeanContext beanContext() {
+        return SystemInstance.get().getComponent(ContainerSystem.class)
+                .getBeanContext(testClass.get().getName());
+    }
 }