You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by xu...@apache.org on 2011/06/21 10:32:25 UTC
svn commit: r1137906 - in /openejb/trunk/openejb3/container:
openejb-core/src/main/java/org/apache/openejb/assembler/classic/
openejb-core/src/main/java/org/apache/openejb/config/
openejb-jee/src/main/java/org/apache/openejb/jee/
Author: xuhaihong
Date: Tue Jun 21 08:32:24 2011
New Revision: 1137906
URL: http://svn.apache.org/viewvc?rev=1137906&view=rev
Log:
OPENEJB-1602 Add two extra level ANNOTATION_CLASS and ANNOTATION_METHOD
a. The interceptors from DD will be invoked after the ones from annotation
b. The interceptor-ordering with overloaded style will override the configurations from annotation
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InterceptorBindingBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InterceptorBindingInfo.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/InterceptorBinding.java
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InterceptorBindingBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InterceptorBindingBuilder.java?rev=1137906&r1=1137905&r2=1137906&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InterceptorBindingBuilder.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InterceptorBindingBuilder.java Tue Jun 21 08:32:24 2011
@@ -21,7 +21,6 @@ import org.apache.openejb.core.intercept
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.SetAccessible;
-import org.apache.openejb.util.Classes;
import org.apache.openejb.OpenEJBException;
import javax.interceptor.InvocationContext;
@@ -45,7 +44,7 @@ public class InterceptorBindingBuilder {
private final List<InterceptorBindingInfo> packageAndClassBindings;
public static enum Level {
- PACKAGE, CLASS, OVERLOADED_METHOD, EXACT_METHOD
+ PACKAGE, ANNOTATION_CLASS, CLASS, ANNOTATION_METHOD, OVERLOADED_METHOD, EXACT_METHOD
}
public static enum Type {
@@ -65,7 +64,7 @@ public class InterceptorBindingBuilder {
packageAndClassBindings = new ArrayList<InterceptorBindingInfo>();
for (InterceptorBindingInfo binding : bindings) {
Level level = level(binding);
- if (level == Level.PACKAGE || level == Level.CLASS){
+ if (level == Level.PACKAGE || level == Level.CLASS || level == Level.ANNOTATION_CLASS){
packageAndClassBindings.add(binding);
}
}
@@ -193,7 +192,9 @@ public class InterceptorBindingBuilder {
// (highest/first)
// - Method-level bindings with params
// - Method-level with no params
+ // - Method-level bindings with params from annotations
// - Class-level
+ // - Class-level from annotation
// - Package-level (aka. default level)
// (lowest/last)
//
@@ -215,6 +216,7 @@ public class InterceptorBindingBuilder {
Type type = type(level, info);
if (type == Type.EXPLICIT_ORDERING && !excludes.contains(level)){
+
methodBindings.add(info);
// An explicit ordering trumps all other bindings of the same level or below
// (even other explicit order bindings). Any bindings that were higher than
@@ -237,7 +239,10 @@ public class InterceptorBindingBuilder {
if (!excludes.contains(level)) methodBindings.add(info);
- if (info.excludeClassInterceptors) excludes.add(Level.CLASS);
+ if (info.excludeClassInterceptors) {
+ excludes.add(Level.CLASS);
+ excludes.add(Level.ANNOTATION_CLASS);
+ }
if (info.excludeDefaultInterceptors) excludes.add(Level.PACKAGE);
}
return methodBindings;
@@ -246,7 +251,7 @@ public class InterceptorBindingBuilder {
private boolean implies(Method method, String ejbName, Level level, InterceptorBindingInfo info) {
if (level == Level.PACKAGE) return true;
if (!ejbName.equals(info.ejbName)) return false;
- if (level == Level.CLASS) return true;
+ if (level == Level.CLASS || level == Level.ANNOTATION_CLASS) return true;
NamedMethodInfo methodInfo = info.method;
return MethodInfoUtil.matches(method, methodInfo);
@@ -273,7 +278,6 @@ public class InterceptorBindingBuilder {
for (CallbackInfo callbackInfo : callbackInfos) {
try {
Method method = getMethod(clazz, callbackInfo.method, InvocationContext.class);
- SetAccessible.on(method);
if (callbackInfo.className == null && method.getDeclaringClass().equals(clazz) && !methods.contains(method)){
methods.add(method);
}
@@ -416,14 +420,14 @@ public class InterceptorBindingBuilder {
}
if (info.method == null) {
- return Level.CLASS;
+ return info.className == null ? Level.CLASS : Level.ANNOTATION_CLASS;
}
if (info.method.methodParams == null) {
return Level.OVERLOADED_METHOD;
}
- return Level.EXACT_METHOD;
+ return info.className == null ? Level.EXACT_METHOD : Level.ANNOTATION_METHOD;
}
private static Type type(Level level, InterceptorBindingInfo info) {
@@ -431,11 +435,11 @@ public class InterceptorBindingBuilder {
return Type.EXPLICIT_ORDERING;
}
- if (level == Level.CLASS && info.excludeClassInterceptors && info.excludeDefaultInterceptors) {
+ if ((level == Level.CLASS || level == Level.ANNOTATION_CLASS) && info.excludeClassInterceptors && info.excludeDefaultInterceptors) {
return Type.SAME_AND_LOWER_EXCLUSION;
}
- if (level == Level.CLASS && info.excludeClassInterceptors) {
+ if ((level == Level.CLASS || level == Level.ANNOTATION_CLASS) && info.excludeClassInterceptors) {
return Type.SAME_LEVEL_EXCLUSION;
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InterceptorBindingInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InterceptorBindingInfo.java?rev=1137906&r1=1137905&r2=1137906&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InterceptorBindingInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InterceptorBindingInfo.java Tue Jun 21 08:32:24 2011
@@ -24,6 +24,7 @@ import java.util.ArrayList;
*/
public class InterceptorBindingInfo extends InfoObject {
public String ejbName;
+ public String className;
public final List<String> interceptors = new ArrayList<String>();
public final List<String> interceptorOrder = new ArrayList<String>();
public boolean excludeDefaultInterceptors;
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1137906&r1=1137905&r2=1137906&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Tue Jun 21 08:32:24 2011
@@ -1767,12 +1767,6 @@ public class AnnotationDeployer implemen
binding.setMethod(new NamedMethod(method.get()));
}
- final ExcludeClassInterceptors excludeClassInterceptors = clazz.getAnnotation(ExcludeClassInterceptors.class);
- if (excludeClassInterceptors != null) {
- InterceptorBinding binding = assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(bean));
- binding.setExcludeClassInterceptors(true);
- }
-
for (Annotated<Method> method : sortMethods(annotationFinder.findMetaAnnotatedMethods(ExcludeClassInterceptors.class))) {
InterceptorBinding binding = assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(bean));
binding.setExcludeClassInterceptors(true);
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java?rev=1137906&r1=1137905&r2=1137906&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java Tue Jun 21 08:32:24 2011
@@ -328,6 +328,7 @@ public class EjbJarInfoBuilder {
}
info.method = toInfo(binding.getMethod());
+ info.className = binding.getClassName();
ejbJar.interceptorBindings.add(info);
}
}
Modified: openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/InterceptorBinding.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/InterceptorBinding.java?rev=1137906&r1=1137905&r2=1137906&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/InterceptorBinding.java (original)
+++ openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/InterceptorBinding.java Tue Jun 21 08:32:24 2011
@@ -91,16 +91,20 @@ public class InterceptorBinding {
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlID
protected String id;
+
+ @XmlTransient
+ protected String className;
public InterceptorBinding() {
}
public InterceptorBinding(EnterpriseBean bean, Interceptor... interceptors) {
this(bean.getEjbName(), interceptors);
+ this.className = bean.getEjbClass();
}
public InterceptorBinding(String ejbName, Interceptor... interceptors) {
- this.ejbName = ejbName;
+ this.ejbName = ejbName;
List<String> interceptorClasses = this.getInterceptorClass();
for (Interceptor interceptor : interceptors) {
interceptorClasses.add(interceptor.getInterceptorClass());
@@ -113,7 +117,7 @@ public class InterceptorBinding {
}
public InterceptorBinding(String ejbName) {
- this.ejbName = ejbName;
+ this.ejbName = ejbName;
}
@XmlElement(name = "description", required = true)
@@ -185,4 +189,7 @@ public class InterceptorBinding {
this.id = value;
}
+ public String getClassName() {
+ return className;
+ }
}