You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2013/05/09 23:19:44 UTC

svn commit: r1480777 - in /tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb: BeanContext.java core/interceptor/InterceptorData.java

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{" +