Author: rmannibucau
Date: Thu May  9 21:29:32 2013
New Revision: 1480785

URL: http://svn.apache.org/r1480785
Log:
caching constructorInjectionBean in WebContext

Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java?rev=1480785&r1=1480784&r2=1480785&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
 Thu May  9 21:29:32 2013
@@ -16,17 +16,6 @@
  */
 package org.apache.openejb.core;
 
-import java.lang.annotation.Annotation;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import javax.enterprise.context.Dependent;
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
 import org.apache.openejb.AppContext;
 import org.apache.openejb.Injection;
 import org.apache.openejb.InjectionProcessor;
@@ -34,7 +23,17 @@ import org.apache.openejb.OpenEJBExcepti
 import org.apache.openejb.cdi.ConstructorInjectionBean;
 import org.apache.webbeans.component.InjectionTargetBean;
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.inject.AbstractInjectable;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 public class WebContext {
     private String id;
@@ -48,6 +47,7 @@ public class WebContext {
     private String contextRoot;
     private String host;
     private Context initialContext;
+    private final Map<Class<?>, ConstructorInjectionBean<Object>> 
constructorInjectionBeanCache = new ConcurrentHashMap<Class<?>, 
ConstructorInjectionBean<Object>>();
 
     public Context getInitialContext() {
         if (initialContext != null) return initialContext;
@@ -110,9 +110,7 @@ public class WebContext {
     public Object newInstance(Class beanClass) throws OpenEJBException {
 
         final WebBeansContext webBeansContext = getWebBeansContext();
-
-        final ConstructorInjectionBean<Object> beanDefinition = new 
ConstructorInjectionBean<Object>(webBeansContext, beanClass, 
webBeansContext.getAnnotatedElementFactory().newAnnotatedType(beanClass));
-
+        final ConstructorInjectionBean<Object> beanDefinition = 
getConstructorInjectionBean(beanClass, webBeansContext);
         final CreationalContext<Object> creationalContext = 
webBeansContext.getBeanManagerImpl().createCreationalContext(beanDefinition);
 
         // Create bean instance
@@ -129,6 +127,20 @@ public class WebContext {
         return beanInstance;
     }
 
+    private ConstructorInjectionBean<Object> getConstructorInjectionBean(final 
Class beanClass, final WebBeansContext webBeansContext) {
+        ConstructorInjectionBean<Object> beanDefinition = 
constructorInjectionBeanCache.get(beanClass);
+        if (beanDefinition == null) {
+            synchronized (this) {
+                beanDefinition = constructorInjectionBeanCache.get(beanClass);
+                if (beanDefinition == null) {
+                    beanDefinition = new 
ConstructorInjectionBean<Object>(webBeansContext, beanClass, 
webBeansContext.getAnnotatedElementFactory().newAnnotatedType(beanClass));
+                    constructorInjectionBeanCache.put(beanClass, 
beanDefinition);
+                }
+            }
+        }
+        return beanDefinition;
+    }
+
     private WebBeansContext getWebBeansContext() {
         if (webbeansContext == null) {
             return getAppContext().getWebBeansContext();
@@ -140,9 +152,7 @@ public class WebContext {
 
         try {
             final WebBeansContext webBeansContext = getWebBeansContext();
-
-            final ConstructorInjectionBean<Object> beanDefinition = new 
ConstructorInjectionBean(webBeansContext, o.getClass(), 
webBeansContext.getAnnotatedElementFactory().newAnnotatedType(o.getClass()));
-
+            final ConstructorInjectionBean<Object> beanDefinition = 
getConstructorInjectionBean(o.getClass(), webBeansContext);
             final CreationalContext<Object> creationalContext = 
webBeansContext.getBeanManagerImpl().createCreationalContext(beanDefinition);
 
             // Create bean instance


Reply via email to