[jboss-cvs] JBossAS SVN: r68805 - projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jan 10 04:26:21 EST 2008


Author: wolfc
Date: 2008-01-10 04:26:21 -0500 (Thu, 10 Jan 2008)
New Revision: 68805

Modified:
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java
Log:
Instantiate interceptors once

Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java	2008-01-10 09:25:46 UTC (rev 68804)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java	2008-01-10 09:26:21 UTC (rev 68805)
@@ -23,7 +23,9 @@
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.annotation.PostConstruct;
 import javax.interceptor.AroundInvoke;
@@ -61,11 +63,18 @@
          
          Interceptors interceptorsAnnotation = (Interceptors) advisor.resolveAnnotation(Interceptors.class);
          assert interceptorsAnnotation != null : "interceptors annotation not found"; // FIXME: not correct, bean can be without interceptors
+         Map<Class<?>, Object> interceptors = new HashMap<Class<?>, Object>();
          List<Interceptor> postConstructs = new ArrayList<Interceptor>();
          List<Interceptor> classInterceptors = new ArrayList<Interceptor>();
          for(Class<?> interceptorClass : interceptorsAnnotation.value())
          {
-            Object interceptor = interceptorClass.newInstance();
+            // TODO: what if I've specified the same interceptor twice? (throw an Exception?)
+            Object interceptor = interceptors.get(interceptorClass);
+            if(interceptor == null)
+            {
+               interceptor = interceptorClass.newInstance();
+               interceptors.put(interceptorClass, interceptor);
+            }
             //Advisor interceptorAdvisor = ((Advised) interceptor)._getAdvisor();
             //Advisor interceptorAdvisor = advisor.getManager().getAdvisor(interceptorClass);
             AnnotationAdvisor interceptorAdvisor = AnnotationAdvisorHelper.getAnnotationAdvisor(advisor, interceptor);
@@ -99,8 +108,12 @@
                // TODO: use visitors?
                for(Class<?> interceptorClass : interceptorsAnnotation.value())
                {
-                  // FIXME: do not create perse, we might already have done that
-                  Object interceptor = interceptorClass.newInstance();
+                  Object interceptor = interceptors.get(interceptorClass);
+                  if(interceptor == null)
+                  {
+                     interceptor = interceptorClass.newInstance();
+                     interceptors.put(interceptorClass, interceptor);
+                  }
                   //Advisor interceptorAdvisor = ((Advised) interceptor)._getAdvisor();
                   //Advisor interceptorAdvisor = advisor.getManager().getAdvisor(interceptorClass);
                   AnnotationAdvisor interceptorAdvisor = AnnotationAdvisorHelper.getAnnotationAdvisor(advisor, interceptor);




More information about the jboss-cvs-commits mailing list