Author: rmannibucau
Date: Thu May  9 21:19:44 2013
New Revision: 1480777

URL: http://svn.apache.org/r1480777
Log:
caching constructor injection bean for interceptors too

Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorData.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1480777&r1=1480776&r2=1480777&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
 Thu May  9 21:19:44 2013
@@ -1490,7 +1490,17 @@ public class BeanContext extends Deploym
 
                 final Class clazz = interceptorData.getInterceptorClass();
 
-                final ConstructorInjectionBean interceptorConstructor = new 
ConstructorInjectionBean(webBeansContext, clazz, 
webBeansContext.getAnnotatedElementFactory().newAnnotatedType(clazz));
+                ConstructorInjectionBean interceptorConstructor = 
interceptorData.get(ConstructorInjectionBean.class);
+                if (interceptorConstructor == null) {
+                    synchronized (this) {
+                        interceptorConstructor = 
interceptorData.get(ConstructorInjectionBean.class);
+                        if (interceptorConstructor == null) {
+                            interceptorConstructor = new 
ConstructorInjectionBean(webBeansContext, clazz, 
webBeansContext.getAnnotatedElementFactory().newAnnotatedType(clazz));
+                            
interceptorData.set(ConstructorInjectionBean.class, interceptorConstructor);
+                        }
+                    }
+                }
+
                 final InjectionProcessor interceptorInjector = new 
InjectionProcessor(interceptorConstructor.create(creationalContext), 
this.getInjections(), org.apache.openejb.InjectionProcessor.unwrap(ctx));
                 try {
                     final Object interceptorInstance = 
interceptorInjector.createInstance();

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorData.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorData.java?rev=1480777&r1=1480776&r2=1480777&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorData.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorData.java
 Thu May  9 21:19:44 2013
@@ -19,22 +19,21 @@ package org.apache.openejb.core.intercep
 import org.apache.openejb.core.Operation;
 import org.apache.openejb.util.SetAccessible;
 import org.apache.xbean.finder.ClassFinder;
-import serp.bytecode.Annotation;
 
-import javax.interceptor.AroundInvoke;
-import javax.interceptor.AroundTimeout;
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
-import javax.ejb.PostActivate;
-import javax.ejb.PrePassivate;
 import javax.ejb.AfterBegin;
-import javax.ejb.BeforeCompletion;
 import javax.ejb.AfterCompletion;
+import javax.ejb.BeforeCompletion;
+import javax.ejb.PostActivate;
+import javax.ejb.PrePassivate;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.AroundTimeout;
 import java.lang.reflect.Method;
-import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -61,6 +60,8 @@ public class InterceptorData {
 
     private final Set<Method> aroundTimeout = new LinkedHashSet<Method>();
 
+    private final Map<Class<?>, Object> data = new HashMap<Class<?>, Object>();
+
     public InterceptorData(Class clazz) {
         this.clazz = clazz;
     }
@@ -182,6 +183,14 @@ public class InterceptorData {
         }
     }
 
+    public <T> void set(final Class<T> clazz, final T value) {
+        data.put(clazz, value);
+    }
+
+    public <T> T get(final Class<T> clazz) {
+        return clazz.cast(data.get(clazz));
+    }
+
     @Override
     public String toString() {
         return "InterceptorData{" +


Reply via email to