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