Author: struberg
Date: Fri Jul 23 01:14:02 2010
New Revision: 966923

URL: http://svn.apache.org/viewvc?rev=966923&view=rev
Log:
OWB-414 improve Interceptor performance

Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java?rev=966923&r1=966922&r2=966923&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
 Fri Jul 23 01:14:02 2010
@@ -253,35 +253,32 @@ public final class ContextFactory
      */
     public static Context getStandardContext(Class<? extends Annotation> 
scopeType)
     {
-        Context context = null;
-
         if (scopeType.equals(RequestScoped.class))
         {
-            context = getStandardContext(ContextTypes.REQUEST);
+            return getStandardContext(ContextTypes.REQUEST);
         }
-        else if (scopeType.equals(SessionScoped.class))
+        if (scopeType.equals(SessionScoped.class))
         {
-            context = getStandardContext(ContextTypes.SESSION);
+            return getStandardContext(ContextTypes.SESSION);
         }
-        else if (scopeType.equals(ApplicationScoped.class))
+        if (scopeType.equals(ApplicationScoped.class))
         {
-            context = getStandardContext(ContextTypes.APPLICATION);
+            return getStandardContext(ContextTypes.APPLICATION);
         }
-        else if (scopeType.equals(ConversationScoped.class))
+        if (scopeType.equals(ConversationScoped.class))
         {
-            context = getStandardContext(ContextTypes.CONVERSATION);
-
+            return getStandardContext(ContextTypes.CONVERSATION);
         }
-        else if (scopeType.equals(Dependent.class))
+        if (scopeType.equals(Dependent.class))
         {
-            context = getStandardContext(ContextTypes.DEPENDENT);
+            return getStandardContext(ContextTypes.DEPENDENT);
         }
-        else if (scopeType.equals(Singleton.class))
+        if (scopeType.equals(Singleton.class))
         {
-            context = getStandardContext(ContextTypes.SINGLETON);
+            return getStandardContext(ContextTypes.SINGLETON);
         }
         
-        return context;
+        return null;
     }
     
     /**

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java?rev=966923&r1=966922&r2=966923&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
 Fri Jul 23 01:14:02 2010
@@ -148,7 +148,7 @@ public abstract class InterceptorHandler
     protected OwbBean<?> bean = null;
     
     /**Intercepted methods*/
-    protected transient Map<Method, List<InterceptorData>> 
interceptedMethodMap = new WeakHashMap<Method, List<InterceptorData>>();
+    protected transient Map<Method, List<InterceptorData>> 
interceptedMethodMap = null;
     
     /**
      * Creates a new handler.
@@ -224,6 +224,12 @@ public abstract class InterceptorHandler
                     List<InterceptorData> interceptorStack = 
injectionTarget.getInterceptorStack();
                     if (interceptorStack.size() > 0)
                     {
+                        if (this.interceptedMethodMap == null)
+                        {
+                            // lazy initialisation, because creating a 
WeakHashMap is expensive!
+                            this.interceptedMethodMap = new 
WeakHashMap<Method, List<InterceptorData>>();
+                        }
+                        
                         if (decorators != null)
                         {
                             // We have interceptors and decorators, Our 
delegateHandler will need to be wrapped in an interceptor
@@ -362,9 +368,6 @@ public abstract class InterceptorHandler
         {
             logger.warn(OWBLogConst.WARN_0011, this.bean);
         }
-        
-        // restore transient interceptorMethodMap
-        interceptedMethodMap = new WeakHashMap<Method, 
List<InterceptorData>>();
     }
 
 }

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java?rev=966923&r1=966922&r2=966923&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
 Fri Jul 23 01:14:02 2010
@@ -43,6 +43,7 @@ public class NormalScopedBeanInterceptor
 {
     /**Serial id*/
     private static final long serialVersionUID = 1L;
+    private static final String FINALIZE = "finalize".intern();
     
     /**
      * Creates a new bean instance
@@ -80,9 +81,9 @@ public class NormalScopedBeanInterceptor
     @Override
     public Object invoke(Object instance, Method method, Method proceed, 
Object[] arguments) throws Exception
     {
-        if (method.getName().equals("finalize") &&
+        if (method.getName() == FINALIZE &&   // Method.getName() is defined 
to return .intern() in the VM spec.
             method.getParameterTypes().length == 0 &&
-            method.getReturnType().equals(Void.TYPE))
+            method.getReturnType() == Void.TYPE)
         {
             // we should NOT invoke the bean's finalize() from proxied
             // finalize() method since JVM will invoke it directly.


Reply via email to