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/02/12 16:37:32 UTC

svn commit: r1243265 - in /openejb/trunk/openejb/container/openejb-core/src: main/java/org/apache/openejb/ main/java/org/apache/openejb/cdi/ test/java/org/apache/openejb/interceptors/

Author: rmannibucau
Date: Sun Feb 12 15:37:32 2012
New Revision: 1243265

URL: http://svn.apache.org/viewvc?rev=1243265&view=rev
Log:
OPENEJB-1771 cdi interceptors are not all class level interceptor, someones sould be managed at method level

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/MethodContext.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/interceptors/InterceptorBindingEjbTest.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1243265&r1=1243264&r2=1243265&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java Sun Feb 12 15:37:32 2012
@@ -883,6 +883,11 @@ public class BeanContext extends Deploym
         return datas;
     }
 
+    public void addCdiMethodInterceptor(final Method method, final InterceptorData interceptor) {
+        getMethodContext(method).addCdiInterceptor(interceptor);
+        instanceScopedInterceptors.add(interceptor);
+    }
+
     public void setMethodInterceptors(Method method, List<InterceptorData> interceptors) {
         getMethodContext(method).setInterceptors(interceptors);
         this.instanceScopedInterceptors.addAll(interceptors);

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/MethodContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/MethodContext.java?rev=1243265&r1=1243264&r2=1243265&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/MethodContext.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/MethodContext.java Sun Feb 12 15:37:32 2012
@@ -24,7 +24,9 @@ import org.apache.openejb.util.Duration;
 import javax.ejb.LockType;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @version $Rev$ $Date$
@@ -34,6 +36,7 @@ public class MethodContext {
     private final Method beanMethod;
     private final List<ScheduleData> schedules = new ArrayList<ScheduleData>();
     private final List<InterceptorData> interceptors = new ArrayList<InterceptorData>();
+    private final Set<InterceptorData> cdiInterceptors = new LinkedHashSet<InterceptorData>();
     private LockType lockType;
     private TransactionType transactionType;
     private Duration accessTimeout;
@@ -60,6 +63,10 @@ public class MethodContext {
         return beanMethod;
     }
 
+    public void addCdiInterceptor(final InterceptorData data) {
+        cdiInterceptors.add(data);
+    }
+
     public void setInterceptors(List<InterceptorData> interceptors) {
         this.interceptors.clear();
         this.interceptors.addAll(interceptors);
@@ -69,6 +76,7 @@ public class MethodContext {
         List<InterceptorData> datas = beanContext.getInterceptorData();
         datas.addAll(interceptors);
         datas.addAll(beanContext.getCdiInterceptors());
+        datas.addAll(cdiInterceptors);
         return datas;
     }
 

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java?rev=1243265&r1=1243264&r2=1243265&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java Sun Feb 12 15:37:32 2012
@@ -315,7 +315,13 @@ public class OpenEJBLifecycle implements
                 final List<org.apache.openejb.core.interceptor.InterceptorData> converted = new ArrayList<org.apache.openejb.core.interceptor.InterceptorData>();
                 for (InterceptorData data : datas) {
                     // todo this needs to use the code in InterceptorBindingBuilder that respects override rules and private methods
-                    converted.add(org.apache.openejb.core.interceptor.InterceptorData.scan(data.getInterceptorClass()));
+                    final org.apache.openejb.core.interceptor.InterceptorData openejbData = org.apache.openejb.core.interceptor.InterceptorData.scan(data.getInterceptorClass());
+                    if (data.isDefinedInMethod()) {
+                        final Method method = data.getInterceptorBindingMethod();
+                        beanContext.addCdiMethodInterceptor(method, openejbData);
+                    } else {
+                        converted.add(openejbData);
+                    }
                 }
 
                 beanContext.setCdiInterceptors(converted);

Modified: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/interceptors/InterceptorBindingEjbTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/interceptors/InterceptorBindingEjbTest.java?rev=1243265&r1=1243264&r2=1243265&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/interceptors/InterceptorBindingEjbTest.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/interceptors/InterceptorBindingEjbTest.java Sun Feb 12 15:37:32 2012
@@ -3,11 +3,9 @@ package org.apache.openejb.interceptors;
 import org.apache.openejb.config.EjbModule;
 import org.apache.openejb.jee.Beans;
 import org.apache.openejb.jee.EjbJar;
-import org.apache.openejb.jee.Interceptor;
 import org.apache.openejb.jee.StatelessBean;
 import org.apache.openejb.junit.ApplicationComposer;
 import org.apache.openejb.junit.Module;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -31,23 +29,28 @@ public class InterceptorBindingEjbTest {
     @EJB
     private EJB2 ejb2;
 
-    @Test @Ignore("doesn't pass today")
+    @Test
     public void test() {
         ejb2.foo();
         assertEquals(1, MarkedInterceptor.CLASSES.size());
         assertTrue(MarkedInterceptor.CLASSES.contains(EJB1.class.getSimpleName()));
     }
 
+    /**
+     * aims to test that method level cdi interceptors are well managed (and not all merged in class level interceptors).
+     *
+     * @return the needed module
+     */
     @Module
     public EjbModule ejbJar() {
         final EjbJar ejbJar = new EjbJar();
-        ejbJar.addInterceptor(new Interceptor(MarkedInterceptor.class));
         ejbJar.addEnterpriseBean(new StatelessBean("ejb1", EJB1.class));
         ejbJar.addEnterpriseBean(new StatelessBean("ejb2", EJB2.class));
 
-        final EjbModule module = new EjbModule(ejbJar);
         final Beans beans = new Beans();
         beans.addInterceptor(MarkedInterceptor.class);
+
+        final EjbModule module = new EjbModule(ejbJar);
         module.setBeans(beans);
         return module;
     }