[jboss-cvs] JBossAS SVN: r73217 - in projects/ejb3/trunk/interceptors/src: test/java/org/jboss/ejb3/test/interceptors/exclude/unit and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri May 9 12:22:46 EDT 2008
Author: kabir.khan at jboss.com
Date: 2008-05-09 12:22:46 -0400 (Fri, 09 May 2008)
New Revision: 73217
Modified:
projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/metadata/BeanInterceptorMetaDataBridge.java
projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/exclude/unit/ExcludeInterceptorsTestCase.java
Log:
[EJBTHREE-1350] exclude-default-interceptors on a method level binding is ignored
Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/metadata/BeanInterceptorMetaDataBridge.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/metadata/BeanInterceptorMetaDataBridge.java 2008-05-09 16:09:54 UTC (rev 73216)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/metadata/BeanInterceptorMetaDataBridge.java 2008-05-09 16:22:46 UTC (rev 73217)
@@ -34,6 +34,7 @@
import javax.ejb.PostActivate;
import javax.ejb.PrePassivate;
import javax.interceptor.AroundInvoke;
+import javax.interceptor.ExcludeClassInterceptors;
import javax.interceptor.ExcludeDefaultInterceptors;
import javax.interceptor.Interceptors;
import javax.interceptor.InvocationContext;
@@ -85,6 +86,7 @@
//Method-level things
private Map<Signature, Interceptors> methodInterceptors = new HashMap<Signature, Interceptors>();
private Map<Signature, InterceptorOrder> methodInterceptorOrders = new HashMap<Signature, InterceptorOrder>();
+ private Map<Signature, ExcludeDefaultInterceptors> methodExcludeDefaultInterceptors = new HashMap<Signature, ExcludeDefaultInterceptors>();
//Bean class methods
@@ -293,7 +295,7 @@
for (InterceptorBindingMetaData binding : bindings)
{
add(interceptors, classLoader, binding);
- checkExcludeDefaultInterceptors(binding);
+ checkClassLevelExcludeDefaultInterceptors(binding);
}
if(!interceptors.isEmpty())
this.interceptors = interceptors;
@@ -308,26 +310,45 @@
for (InterceptorBindingMetaData binding : bindings)
{
add(interceptors, classLoader, binding);
- checkExcludeDefaultInterceptors(binding);
+ checkClassLevelExcludeDefaultInterceptors(binding);
}
if(!interceptors.isEmpty())
this.interceptorOrder = interceptors;
}
}
- private void checkExcludeDefaultInterceptors(InterceptorBindingMetaData binding)
+ private void checkClassLevelExcludeDefaultInterceptors(InterceptorBindingMetaData binding)
{
+ ExcludeDefaultInterceptors exDefaultInterceptors = checkExcludeDefaultInterceptors(binding);
+ if (exDefaultInterceptors != null)
+ {
+ excludeDefaultInterceptors = exDefaultInterceptors;
+ }
+ }
+
+ private ExcludeDefaultInterceptors checkExcludeDefaultInterceptors(InterceptorBindingMetaData binding)
+ {
if (binding.isExcludeDefaultInterceptors())
{
- excludeDefaultInterceptors = new ExcludeDefaultInterceptors() {
+ return new ExcludeDefaultInterceptors() {
public Class<? extends Annotation> annotationType()
{
return ExcludeDefaultInterceptors.class;
}};
}
+ return null;
}
+ private void addMethodLevelExclusions(Signature sig, InterceptorBindingMetaData binding)
+ {
+ ExcludeDefaultInterceptors exDefaultInterceptors = checkExcludeDefaultInterceptors(binding);
+ if (exDefaultInterceptors != null)
+ {
+ methodExcludeDefaultInterceptors.put(sig, exDefaultInterceptors);
+ }
+ }
+
private void initialiseMethodInterceptors(Map<String, List<Method>> methodMap, MethodSignatures methodSignatures, List<InterceptorBindingMetaData> bindings)
{
if (bindings != null && bindings.size() > 0)
@@ -360,6 +381,7 @@
methodInterceptors.put(signature, interceptors);
}
add(interceptors, classLoader, binding);
+ addMethodLevelExclusions(signature, binding);
}
}
}
@@ -541,6 +563,11 @@
}
return annotationClass.cast(methodInterceptors.get(signature));
}
+ else if (annotationClass == ExcludeDefaultInterceptors.class)
+ {
+ MethodSignature signature = new MethodSignature(methodName, parameterNames);
+ return annotationClass.cast(methodExcludeDefaultInterceptors.get(signature));
+ }
else if(annotationClass == PostActivate.class)
{
if(beanMetaData instanceof JBossSessionBeanMetaData && parameterNames.length == 0 && postActivates != null)
Modified: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/exclude/unit/ExcludeInterceptorsTestCase.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/exclude/unit/ExcludeInterceptorsTestCase.java 2008-05-09 16:09:54 UTC (rev 73216)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/exclude/unit/ExcludeInterceptorsTestCase.java 2008-05-09 16:22:46 UTC (rev 73217)
@@ -535,55 +535,55 @@
log.info("======= Done");
}
-// public void testXmlExcludeDefaultInterceptorsForMethod() throws Throwable
-// {
-// AspectManager.verbose = true;
-//
-// // To make surefire happy
-// Thread.currentThread().setContextClassLoader(XmlExcludeDefaultForMethodBean.class.getClassLoader());
-//
-// // Bootstrap metadata
-// UnmarshallerFactory unmarshallerFactory = UnmarshallerFactory.newInstance();
-// Unmarshaller unmarshaller = unmarshallerFactory.newUnmarshaller();
-// URL url = Thread.currentThread().getContextClassLoader().getResource("exclude/META-INF/ejb-jar.xml");
-// EjbJar30MetaData metaData = (EjbJar30MetaData) unmarshaller.unmarshal(url.toString(), schemaResolverForClass(EjbJar30MetaData.class));
-// JBoss50MetaData jbossMetaData = new JBoss50MetaData();
-// jbossMetaData.merge(null, metaData);
-//
-// JBossEnterpriseBeanMetaData beanMetaData = jbossMetaData.getEnterpriseBean("XmlExcludeDefaultForMethodBean");
-// assertNotNull(beanMetaData);
-// MyContainer<XmlExcludeDefaultForMethodBean> container = new MyContainer<XmlExcludeDefaultForMethodBean>("XmlExcludeDefaultForMethodBean", "Test", XmlExcludeDefaultForMethodBean.class, beanMetaData);
-// container.testAdvisor();
-//
-// Interceptions.clear();
-// ArrayList<Class<?>> interceptions = Interceptions.getInterceptions();
-// assertEquals(0, interceptions.size());
-// BeanContext<XmlExcludeDefaultForMethodBean> bean = container.construct();
-// assertEquals(3, interceptions.size());
-// assertEquals(DefaultInterceptor.class, interceptions.get(0));
-// assertEquals(ClassInterceptor.class, interceptions.get(1));
-// assertEquals(XmlExcludeDefaultForMethodBean.class, interceptions.get(2));
-//
-// Interceptions.clear();
-// interceptions = Interceptions.getInterceptions();
-// assertEquals(0, interceptions.size());
-//
-// String ret = container.invoke(bean, "method");
-// assertEquals(XmlExcludeDefaultForMethodBean.class.getName(), ret);
-// assertEquals(3, interceptions.size());
-// assertEquals(ClassInterceptor.class, interceptions.get(0));
-// assertEquals(MethodInterceptor.class, interceptions.get(1));
-// assertEquals(XmlExcludeDefaultForMethodBean.class, interceptions.get(2));
-//
-// Interceptions.clear();
-// assertEquals(0, interceptions.size());
-// container.destroy(bean);
-// assertEquals(3, interceptions.size());
-// assertEquals(DefaultInterceptor.class, interceptions.get(0));
-// assertEquals(ClassInterceptor.class, interceptions.get(1));
-// assertEquals(XmlExcludeDefaultForMethodBean.class, interceptions.get(2));
-//
-// log.info("======= Done");
-// }
+ public void testXmlExcludeDefaultInterceptorsForMethod() throws Throwable
+ {
+ AspectManager.verbose = true;
+
+ // To make surefire happy
+ Thread.currentThread().setContextClassLoader(XmlExcludeDefaultForMethodBean.class.getClassLoader());
+
+ // Bootstrap metadata
+ UnmarshallerFactory unmarshallerFactory = UnmarshallerFactory.newInstance();
+ Unmarshaller unmarshaller = unmarshallerFactory.newUnmarshaller();
+ URL url = Thread.currentThread().getContextClassLoader().getResource("exclude/META-INF/ejb-jar.xml");
+ EjbJar30MetaData metaData = (EjbJar30MetaData) unmarshaller.unmarshal(url.toString(), schemaResolverForClass(EjbJar30MetaData.class));
+ JBoss50MetaData jbossMetaData = new JBoss50MetaData();
+ jbossMetaData.merge(null, metaData);
+
+ JBossEnterpriseBeanMetaData beanMetaData = jbossMetaData.getEnterpriseBean("XmlExcludeDefaultForMethodBean");
+ assertNotNull(beanMetaData);
+ MyContainer<XmlExcludeDefaultForMethodBean> container = new MyContainer<XmlExcludeDefaultForMethodBean>("XmlExcludeDefaultForMethodBean", "Test", XmlExcludeDefaultForMethodBean.class, beanMetaData);
+ container.testAdvisor();
+
+ Interceptions.clear();
+ ArrayList<Class<?>> interceptions = Interceptions.getInterceptions();
+ assertEquals(0, interceptions.size());
+ BeanContext<XmlExcludeDefaultForMethodBean> bean = container.construct();
+ assertEquals(3, interceptions.size());
+ assertEquals(DefaultInterceptor.class, interceptions.get(0));
+ assertEquals(ClassInterceptor.class, interceptions.get(1));
+ assertEquals(XmlExcludeDefaultForMethodBean.class, interceptions.get(2));
+
+ Interceptions.clear();
+ interceptions = Interceptions.getInterceptions();
+ assertEquals(0, interceptions.size());
+
+ String ret = container.invoke(bean, "method");
+ assertEquals(XmlExcludeDefaultForMethodBean.class.getName(), ret);
+ assertEquals(3, interceptions.size());
+ assertEquals(ClassInterceptor.class, interceptions.get(0));
+ assertEquals(MethodInterceptor.class, interceptions.get(1));
+ assertEquals(XmlExcludeDefaultForMethodBean.class, interceptions.get(2));
+
+ Interceptions.clear();
+ assertEquals(0, interceptions.size());
+ container.destroy(bean);
+ assertEquals(3, interceptions.size());
+ assertEquals(DefaultInterceptor.class, interceptions.get(0));
+ assertEquals(ClassInterceptor.class, interceptions.get(1));
+ assertEquals(XmlExcludeDefaultForMethodBean.class, interceptions.get(2));
+
+ log.info("======= Done");
+ }
}
More information about the jboss-cvs-commits
mailing list