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