Author: struberg
Date: Sun Mar  6 23:10:24 2011
New Revision: 1078624

URL: http://svn.apache.org/viewvc?rev=1078624&view=rev
Log:
OWB-540 speed up EE injection with a cache

Modified:
    
openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceInjectionService.java

Modified: 
openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceInjectionService.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceInjectionService.java?rev=1078624&r1=1078623&r2=1078624&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceInjectionService.java
 (original)
+++ 
openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceInjectionService.java
 Sun Mar  6 23:10:24 2011
@@ -26,6 +26,8 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.text.MessageFormat;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.annotation.Resource;
 import javax.enterprise.inject.Produces;
@@ -59,6 +61,11 @@ public class StandaloneResourceInjection
 
     private final WebBeansContext webBeansContext;
 
+    /**
+     * Cache the information if a certain class contains any EE resource at all
+     */
+    private final Map<Class<?>, Boolean> classContainsEEResources = new 
ConcurrentHashMap<Class<?>, Boolean>();
+
     public StandaloneResourceInjectionService(WebBeansContext webBeansContext)
     {
         this.webBeansContext = webBeansContext;
@@ -104,6 +111,13 @@ public class StandaloneResourceInjection
     public void injectJavaEEResources(Object managedBeanInstance) throws 
Exception
     {
         Class currentClass = managedBeanInstance.getClass();
+        Boolean containsEeResource = 
classContainsEEResources.get(currentClass);
+        if (containsEeResource != null && containsEeResource.booleanValue() == 
false)
+        {
+            // nothing to do it seems.
+            return;
+        }
+
 
         while (currentClass != null && 
!Object.class.getName().equals(currentClass.getName()))
         {
@@ -126,6 +140,7 @@ public class StandaloneResourceInjection
                                 SecurityUtil.doPrivilegedSetAccessible(field, 
true);
                                 field.set(managedBeanInstance, 
getResourceReference(resourceRef));
 
+                                containsEeResource = Boolean.TRUE;
                             }
                             catch(Exception e)
                             {
@@ -144,6 +159,13 @@ public class StandaloneResourceInjection
 
             currentClass = currentClass.getSuperclass();
         }
+
+        if (containsEeResource == null)
+        {
+            containsEeResource = Boolean.FALSE;
+        }
+
+        classContainsEEResources.put(managedBeanInstance.getClass(), 
containsEeResource);
     }
 
     @Override


Reply via email to