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/04/24 14:28:37 UTC

svn commit: r1471383 - in /tomee/tomee/trunk: container/openejb-core/src/main/java/org/apache/openejb/ container/openejb-core/src/main/java/org/apache/openejb/cdi/ container/openejb-core/src/main/java/org/apache/openejb/config/ container/openejb-core/s...

Author: rmannibucau
Date: Wed Apr 24 12:28:36 2013
New Revision: 1471383

URL: http://svn.apache.org/r1471383
Log:
TOMEE-909 getting rid of CdiInterceptor

Removed:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiInterceptor.java
Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java
    tomee/tomee/trunk/container/openejb-core/src/main/resources/META-INF/scan.xml
    tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulConstructorInjectionTest.java
    tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessConstructorInjectionTest.java
    tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java Wed Apr 24 12:28:36 2013
@@ -49,8 +49,10 @@ import org.apache.webbeans.config.WebBea
 import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.inject.OWBInjector;
+import org.apache.webbeans.intercept.DecoratorHandler;
 import org.apache.webbeans.intercept.InterceptorResolutionService;
 import org.apache.webbeans.portable.InjectionTargetImpl;
+import org.apache.webbeans.proxy.InterceptorDecoratorProxyFactory;
 import org.apache.xbean.recipe.ConstructionException;
 
 import javax.ejb.EJBHome;
@@ -63,8 +65,8 @@ import javax.ejb.MessageDrivenBean;
 import javax.ejb.TimedObject;
 import javax.ejb.Timer;
 import javax.enterprise.context.ConversationScoped;
-import javax.enterprise.context.Dependent;
 import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Decorator;
 import javax.enterprise.inject.spi.Interceptor;
 import javax.naming.Context;
 import javax.naming.Name;
@@ -1412,27 +1414,32 @@ public class BeanContext extends Deploym
         }
 
         try {
-            final Context ctx = this.getJndiEnc();
-            final Class beanClass = this.getBeanClass();
+            final Context ctx = getJndiEnc();
+            final Class beanClass = getBeanClass();
 
             final CurrentCreationalContext<Object> currentCreationalContext = get(CurrentCreationalContext.class);
             CreationalContext<Object> creationalContext = (currentCreationalContext != null) ? currentCreationalContext.get() : null;
 
-            final ConstructorInjectionBean<Object> beanDefinition = createConstructorInjectionBean(webBeansContext);
-            if (creationalContext == null) {
-                creationalContext = webBeansContext.getBeanManagerImpl().createCreationalContext(beanDefinition);
+            final CdiEjbBean cdiEjbBean = get(CdiEjbBean.class);
+
+            if (!CreationalContextImpl.class.isInstance(creationalContext)) {
+                if (creationalContext == null) {
+                    creationalContext = webBeansContext.getCreationalContextFactory().getCreationalContext(cdiEjbBean);
+                } else {
+                    creationalContext = webBeansContext.getCreationalContextFactory().wrappedCreationalContext(creationalContext, cdiEjbBean);
+                }
             }
 
-            final Object rootInstance;
-            final CdiEjbBean cdiEjbBean = get(CdiEjbBean.class);
+            Object rootInstance;
             if (cdiEjbBean != null && CdiEjbBean.EjbInjectionTargetImpl.class.isInstance(cdiEjbBean.getInjectionTarget())) {
                 rootInstance = CdiEjbBean.EjbInjectionTargetImpl.class.cast(cdiEjbBean.getInjectionTarget()).createNewPojo(creationalContext);
-            } else {
-                rootInstance = beanDefinition.create(creationalContext);
+            } else { // not a cdi bean
+                rootInstance = getManagedClass().newInstance();
             }
 
             // Create bean instance
-            final Object beanInstance;
+            Object beanInstance;
+
             final InjectionProcessor injectionProcessor;
             if (!isDynamicallyImplemented()) {
                 injectionProcessor = new InjectionProcessor(rootInstance, getInjections(), InjectionProcessor.unwrap(ctx));
@@ -1443,7 +1450,7 @@ public class BeanContext extends Deploym
                 final List<Injection> newInjections = new ArrayList<Injection>();
                 for (final Injection injection : getInjections()) {
                     if (beanClass.equals(injection.getTarget())) {
-                        final Injection updated = new Injection(injection.getJndiName(), injection.getName(), beanDefinition.getBeanClass());
+                        final Injection updated = new Injection(injection.getJndiName(), injection.getName(), proxyClass);
                         newInjections.add(updated);
                     } else {
                         newInjections.add(injection);
@@ -1452,7 +1459,7 @@ public class BeanContext extends Deploym
                 injections.clear();
                 injections.addAll(newInjections);
 
-                injectionProcessor = new InjectionProcessor(beanDefinition.create(creationalContext), injections, InjectionProcessor.unwrap(ctx));
+                injectionProcessor = new InjectionProcessor(rootInstance, injections, InjectionProcessor.unwrap(ctx));
                 final InvocationHandler handler = (InvocationHandler) injectionProcessor.createInstance();
                 beanInstance = DynamicProxyImplFactory.newProxy(this, handler);
                 inject(handler, creationalContext);
@@ -1480,7 +1487,7 @@ public class BeanContext extends Deploym
                     final Object interceptorInstance = interceptorInjector.createInstance();
                     try {
                         OWBInjector.inject(webBeansContext.getBeanManagerImpl(), interceptorInstance, creationalContext);
-                    } catch (Throwable t) {
+                    } catch (final Throwable t) {
                         // TODO handle this differently
                         // this is temporary till the injector can be rewritten
                     }
@@ -1525,6 +1532,29 @@ public class BeanContext extends Deploym
                 EjbTransactionUtil.afterInvoke(transactionPolicy, callContext);
             }
 
+            // handle cdi decorators
+            if (cdiEjbBean != null) {
+                final Class<?> proxyClass = Class.class.cast(Reflections.get(cdiEjbBean.getInjectionTarget(), "proxyClass"));
+                if (proxyClass != null) { // means interception
+                    final InterceptorResolutionService.BeanInterceptorInfo interceptorInfo = cdiEjbBean.getBeanContext().get(InterceptorResolutionService.BeanInterceptorInfo.class);
+                    if (interceptorInfo.getDecorators() != null && !interceptorInfo.getDecorators().isEmpty()) {
+                        final InterceptorDecoratorProxyFactory pf = webBeansContext.getInterceptorDecoratorProxyFactory();
+
+                        // decorators
+                        final Object instance = beanInstance;
+                        final List<Decorator<?>> decorators = interceptorInfo.getDecorators();
+                        final Map<Decorator<?>, Object> instances = new HashMap<Decorator<?>, Object>();
+                        for (int i = decorators.size(); i > 0; i--) {
+                            final Decorator<?> decorator = decorators.get(i - 1);
+                            CreationalContextImpl.class.cast(creationalContext).putDelegate(beanInstance);
+                            final Object decoratorInstance = decorator.create(CreationalContext.class.cast(creationalContext));
+                            instances.put(decorator, decoratorInstance);
+                            beanInstance = pf.createProxyInstance(proxyClass, instance, new DecoratorHandler(interceptorInfo, instances, i - 1, instance));
+                        }
+                    }
+                }
+            }
+
             return new InstanceContext(this, beanInstance, interceptorInstances, creationalContext);
         } finally {
             ThreadContext.exit(oldContext);

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java Wed Apr 24 12:28:36 2013
@@ -345,7 +345,7 @@ public class CdiEjbBean<T> extends BaseE
         }
 
         public T createNewPojo(final CreationalContext<T> creationalContext) {
-            return super.produce(creationalContext);
+            return super.newInstance(CreationalContextImpl.class.cast(creationalContext));
         }
     }
 }

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java Wed Apr 24 12:28:36 2013
@@ -282,7 +282,6 @@ public class CdiPlugin extends AbstractO
 
         bc.set(CdiEjbBean.class, bean);
         bc.set(CurrentCreationalContext.class, new CurrentCreationalContext());
-        bc.addSystemInterceptor(new CdiInterceptor<T>(bean));
 
         validateDisposeMethods(bean);
         validateScope(bean);

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java Wed Apr 24 12:28:36 2013
@@ -186,6 +186,14 @@ public class EjbModule extends Module im
         this.webapp = webapp;
     }
 
+    // just a helper method to activate cdi
+    public EjbModule withCdi() {
+        if (beans == null) {
+            beans = new Beans();
+        }
+        return this;
+    }
+
     @Override
     public String toString() {
         return "EjbModule{" +

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java Wed Apr 24 12:28:36 2013
@@ -468,9 +468,12 @@ public class StatefulContainer implement
         if (primKey == null)
             throw new NullPointerException("primKey is null");
 
-        final Class scope = beanContext.get(CdiEjbBean.class).getScope();
-        if (callMethod.getDeclaringClass() != BeanContext.Removable.class && scope != Dependent.class) {
-            throw new UnsupportedOperationException("Can not call EJB Stateful Bean Remove Method without scoped @Dependent.  Found scope: @" + scope.getSimpleName());
+        final CdiEjbBean cdiEjbBean = beanContext.get(CdiEjbBean.class);
+        if (cdiEjbBean != null) {
+            final Class scope = cdiEjbBean.getScope();
+            if (callMethod.getDeclaringClass() != BeanContext.Removable.class && scope != Dependent.class) {
+                throw new UnsupportedOperationException("Can not call EJB Stateful Bean Remove Method without scoped @Dependent.  Found scope: @" + scope.getSimpleName());
+            }
         }
 
         final boolean internalRemove = BeanContext.Removable.class == callMethod.getDeclaringClass();

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java Wed Apr 24 12:28:36 2013
@@ -38,9 +38,9 @@ public class DynamicProxyImplFactory {
     }
 
     public static Object newProxy(BeanContext context, java.lang.reflect.InvocationHandler invocationHandler) {
-        if (invocationHandler instanceof QueryProxy) {
+        if (QueryProxy.class.isInstance(invocationHandler)) {
             EntityManager em = null;
-            for (Injection injection : context.getInjections()) {
+            for (final Injection injection : context.getInjections()) {
                 if (QueryProxy.class.equals(injection.getTarget())) {
                     try {
                         em = (EntityManager) context.getJndiEnc().lookup(injection.getJndiName());
@@ -52,7 +52,7 @@ public class DynamicProxyImplFactory {
             if (em == null) {
                 throw new OpenEJBRuntimeException("can't find the entity manager to use for the dynamic bean " + context.getEjbName());
             }
-            ((QueryProxy) invocationHandler).setEntityManager(em);
+            QueryProxy.class.cast(invocationHandler).setEntityManager(em);
         }
 
         try {

Modified: tomee/tomee/trunk/container/openejb-core/src/main/resources/META-INF/scan.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/resources/META-INF/scan.xml?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/resources/META-INF/scan.xml (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/resources/META-INF/scan.xml Wed Apr 24 12:28:36 2013
@@ -22,7 +22,6 @@
     <class>org.apache.openejb.assembler.monitoring.JMXDeployer</class>
     <class>org.apache.openejb.assembler.classic.cmd.ConfigurationInfoEjb</class>
     <class>org.apache.openejb.bval.BeanValidationAppendixInterceptor</class>
-    <class>org.apache.openejb.cdi.CdiInterceptor</class>
     <class>org.apache.openejb.mgmt.MEJBBean</class>
     <class>org.apache.openejb.monitoring.StatsInterceptor</class>
   </classes>

Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulConstructorInjectionTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulConstructorInjectionTest.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulConstructorInjectionTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulConstructorInjectionTest.java Wed Apr 24 12:28:36 2013
@@ -21,7 +21,9 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.assembler.classic.SecurityServiceInfo;
 import org.apache.openejb.assembler.classic.TransactionServiceInfo;
 import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.config.EjbModule;
 import org.apache.openejb.core.ivm.naming.InitContextFactory;
+import org.apache.openejb.jee.Beans;
 import org.apache.openejb.jee.EjbJar;
 import org.apache.openejb.jee.EnvEntry;
 import org.apache.openejb.jee.StatefulBean;
@@ -69,8 +71,10 @@ public class StatefulConstructorInjectio
         StatefulBean bean = ejbJar.addEnterpriseBean(new StatefulBean(WidgetBean.class));
         bean.getEnvEntry().add(new EnvEntry("count", Integer.class.getName(), "10"));
 
+        final EjbModule module = new EjbModule(ejbJar);
+        module.setBeans(new Beans());
 
-        assembler.createApplication(config.configureApplication(ejbJar));
+        assembler.createApplication(config.configureApplication(module));
 
     }
 

Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessConstructorInjectionTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessConstructorInjectionTest.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessConstructorInjectionTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessConstructorInjectionTest.java Wed Apr 24 12:28:36 2013
@@ -28,6 +28,7 @@ import java.util.List;
 import java.util.Arrays;
 import java.util.Stack;
 
+import org.apache.openejb.config.EjbModule;
 import org.apache.openejb.core.ivm.naming.InitContextFactory;
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.assembler.classic.Assembler;
@@ -80,8 +81,7 @@ public class StatelessConstructorInjecti
         StatelessBean bean = ejbJar.addEnterpriseBean(new StatelessBean(WidgetBean.class));
         bean.getEnvEntry().add(new EnvEntry("count", Integer.class.getName(), "10"));
 
-
-        assembler.createApplication(config.configureApplication(ejbJar));
+        assembler.createApplication(config.configureApplication(new EjbModule(ejbJar).withCdi()));
 
     }
 

Modified: tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml (original)
+++ tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml Wed Apr 24 12:28:36 2013
@@ -18,7 +18,7 @@
 <suite name="CDI TCK" verbose="0">
   <test name="CDI TCK">
     <classes>
-      <class name="org.jboss.jsr299.tck.tests.event.observer.enterprise.EnterpriseEventInheritenceTest"/>
+      <class name="org.jboss.jsr299.tck.tests.decorators.invocation.EJBDecoratorInvocationTest"/>
     </classes>
   </test>
 </suite>