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;
}