Author: struberg
Date: Sat Jan 12 11:33:59 2013
New Revision: 1432409

URL: http://svn.apache.org/viewvc?rev=1432409&view=rev
Log:
OWB-344 add support for EJB interceptors

Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java?rev=1432409&r1=1432408&r2=1432409&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
 Sat Jan 12 11:33:59 2013
@@ -26,7 +26,9 @@ import javax.enterprise.inject.spi.Annot
 import javax.enterprise.inject.spi.AnnotatedParameter;
 import javax.enterprise.inject.spi.InterceptionType;
 import javax.interceptor.AroundInvoke;
+import javax.interceptor.AroundTimeout;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -35,6 +37,7 @@ import java.util.Set;
 
 import org.apache.webbeans.component.InterceptorBean;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
+import org.apache.webbeans.plugins.OpenWebBeansEjbLCAPlugin;
 
 
 /**
@@ -44,10 +47,25 @@ public abstract class InterceptorBeanBui
 {
     private final InterceptorBean<T> bean;
 
+    private final OpenWebBeansEjbLCAPlugin ejbPlugin;
+    private final Class<? extends Annotation> prePassivateClass;
+    private final Class<? extends Annotation> postActivateClass;
+
     protected InterceptorBeanBuilder(InterceptorBean<T> bean)
     {
         super(bean, Dependent.class);
         this.bean = bean;
+        ejbPlugin = webBeansContext.getPluginLoader().getEjbLCAPlugin();
+        if (ejbPlugin != null)
+        {
+            prePassivateClass = ejbPlugin.getPrePassivateClass();
+            postActivateClass = ejbPlugin.getPostActivateClass();
+        }
+        else
+        {
+            prePassivateClass = null;
+            postActivateClass = null;
+        }
     }
 
     /**
@@ -106,6 +124,11 @@ public abstract class InterceptorBeanBui
         AnnotatedMethod aroundInvokeMethod = null;
         List<AnnotatedMethod> postConstructMethods = new 
ArrayList<AnnotatedMethod>();
         List<AnnotatedMethod> preDestroyMethods = new 
ArrayList<AnnotatedMethod>();
+        List<AnnotatedMethod> aroundTimeoutMethods = new 
ArrayList<AnnotatedMethod>();
+
+        // EJB related interceptors
+        List<AnnotatedMethod> prePassivateMethods = new 
ArrayList<AnnotatedMethod>();
+        List<AnnotatedMethod> postActivateMethods = new 
ArrayList<AnnotatedMethod>();
 
         Set<AnnotatedMethod<? super T>> methods = getAnnotated().getMethods();
 
@@ -143,6 +166,33 @@ public abstract class InterceptorBeanBui
                     }
                     removeOverriddenMethod(preDestroyMethods, m);
 
+                    // AroundTimeout
+                    if (m.getAnnotation(AroundTimeout.class) != null)
+                    {
+                        checkSameClassInterceptors(aroundTimeoutMethods, m);
+                        aroundTimeoutMethods.add(m); // add at last position
+                    }
+                    removeOverriddenMethod(aroundTimeoutMethods, m);
+
+                    // and now the EJB related interceptors
+                    if (ejbPlugin != null)
+                    {
+                        // AroundTimeout
+                        if (m.getAnnotation(prePassivateClass) != null)
+                        {
+                            checkSameClassInterceptors(prePassivateMethods, m);
+                            prePassivateMethods.add(m); // add at last position
+                        }
+                        removeOverriddenMethod(prePassivateMethods, m);
+
+                        // AroundTimeout
+                        if (m.getAnnotation(AroundTimeout.class) != null)
+                        {
+                            checkSameClassInterceptors(postActivateMethods, m);
+                            postActivateMethods.add(m); // add at last position
+                        }
+                        removeOverriddenMethod(postActivateMethods, m);
+                    }
                 }
             }
         }
@@ -157,7 +207,6 @@ public abstract class InterceptorBeanBui
             intercepts.add(InterceptionType.AROUND_INVOKE);
         }
 
-
         bean.setIntercepts(intercepts);
     }
 


Reply via email to