You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2010/03/16 21:12:01 UTC

svn commit: r923960 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: container/ intercept/ logger/ util/

Author: struberg
Date: Tue Mar 16 20:12:01 2010
New Revision: 923960

URL: http://svn.apache.org/viewvc?rev=923960&view=rev
Log:
OWB-313 OWB-328 fix EL beans caching + improve logging


Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/logger/WebBeansLogger.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/SortedListHelper.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java?rev=923960&r1=923959&r2=923960&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java Tue Mar 16 20:12:01 2010
@@ -17,6 +17,7 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
@@ -268,17 +269,19 @@ public class InjectionResolver
      * @param name bean name
      * @return set of beans for given bean name
      */
+    @SuppressWarnings("unchecked")
     public Set<Bean<?>> implResolveByName(String name)
     {
         Asserts.assertNotNull(name, "name parameter can not be null");
 
         String cacheKey = name;
-        if (resolvedBeansByName.containsKey(cacheKey))
+        Set<Bean<?>> resolvedComponents = resolvedBeansByName.get(cacheKey);
+        if (resolvedComponents != null)
         {
-            return resolvedBeansByName.get(cacheKey); 
+            return resolvedComponents; 
         }
 
-        Set<Bean<?>> resolvedComponents = new HashSet<Bean<?>>();        
+        resolvedComponents = new HashSet<Bean<?>>();        
         Set<Bean<?>> deployedComponents = this.manager.getBeans();
         
         Iterator<Bean<?>> it = deployedComponents.iterator();
@@ -302,15 +305,23 @@ public class InjectionResolver
         if(resolvedComponents.size() > 1)
         {
             //Check for specialization
-            Set<Bean<?>> specializedComponents = findSpecializedForNameResolution(resolvedComponents);        
+            Set<Bean<?>> specializedComponents = findSpecializedForNameResolution(resolvedComponents);
             if(specializedComponents.size() > 0)
             {
-                return specializedComponents;
+                resolvedComponents =  specializedComponents;
             }            
         }
         
-        resolvedBeansByType.put(cacheKey, resolvedComponents);
-        logger.debug("DEBUG_ADD_BYNYME_CACHE_BEANS", cacheKey);
+        if (resolvedComponents.isEmpty()) 
+        {
+            // maintain negative cache but use standard empty set so we can garbage collect
+            resolvedBeansByName.put(cacheKey, Collections.EMPTY_SET);
+        }
+        else 
+        {
+            resolvedBeansByName.put(cacheKey, resolvedComponents);
+        }
+        logger.debug("DEBUG_ADD_BYNAME_CACHE_BEANS", cacheKey);
 
         return resolvedComponents;
     }
@@ -376,12 +387,13 @@ public class InjectionResolver
         String cacheKey = getBeanCacheKey(injectionPointType, qualifiers);
 
         
-        if (resolvedBeansByType.containsKey(cacheKey))
+        Set<Bean<?>> resolvedComponents = resolvedBeansByType.get(cacheKey);
+        if (resolvedComponents != null)
         {
-            return resolvedBeansByType.get(cacheKey); 
+            return resolvedComponents; 
         }
         
-        Set<Bean<?>> results = new HashSet<Bean<?>>();
+        resolvedComponents = new HashSet<Bean<?>>();
         
         Set<Bean<?>> deployedComponents = this.manager.getBeans();
 
@@ -417,7 +429,7 @@ public class InjectionResolver
 
             if (returnAll)
             {
-                results.add((Bean<?>) component);
+                resolvedComponents.add(component);
                 continue;
             }
 
@@ -429,31 +441,30 @@ public class InjectionResolver
                 
                 if(ClassUtil.isAssignable(componentApiType, injectionPointType))
                 {
-                    results.add((Bean<?>) component);
+                    resolvedComponents.add(component);
                     break;
                 }
             }
         }
  
-        //Look for qualifiers
-        results = findByQualifier(results, qualifiers);
+        // Look for qualifiers
+        resolvedComponents = findByQualifier(resolvedComponents, qualifiers);
         
-        //Look for alternative
-        results = findByAlternatives(results);
+        // Look for alternative
+        resolvedComponents = findByAlternatives(resolvedComponents);
 
         
-        //Ambigious resulotion, check for specialization
-        if(results.size() > 1)
+        // Ambigious resolution, check for specialization
+        if(resolvedComponents.size() > 1)
         {
             //Look for specialization
-            results = findBySpecialization(results);
-
+            resolvedComponents = findBySpecialization(resolvedComponents);
         }
         
-        resolvedBeansByType.put(cacheKey, results);
+        resolvedBeansByType.put(cacheKey, resolvedComponents);
         logger.debug("DEBUG_ADD_BYTYPE_CACHE_BEANS", cacheKey);
         
-        return results;
+        return resolvedComponents;
     }
     
     private String getBeanCacheKey(Type injectionPointType, Annotation... qualifiers)

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java?rev=923960&r1=923959&r2=923960&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java Tue Mar 16 20:12:01 2010
@@ -53,5 +53,4 @@ public class DependentScopedBeanIntercep
         impl.setCreationalContext(creationalContext);
         return impl.proceed();
     }
-    
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java?rev=923960&r1=923959&r2=923960&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java Tue Mar 16 20:12:01 2010
@@ -16,7 +16,6 @@ package org.apache.webbeans.intercept;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import javax.decorator.Decorator;
 import javax.interceptor.Interceptor;
 
 import org.apache.webbeans.config.WebBeansFinder;

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/logger/WebBeansLogger.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/logger/WebBeansLogger.java?rev=923960&r1=923959&r2=923960&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/logger/WebBeansLogger.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/logger/WebBeansLogger.java Tue Mar 16 20:12:01 2010
@@ -74,29 +74,37 @@ public final class WebBeansLogger
         return wbLogger;
     }
 
-    private void wblLog(Level log_level, String messageKey)
+    private void wblLog(Level level, String messageKey)
     {
-        checkNullLogger();
-        logger.logp(log_level, this.caller.getName(), Thread.currentThread().getStackTrace()[4].getMethodName(), messageKey);
+        if (logger.isLoggable(level))
+        {
+            logger.logp(level, this.caller.getName(), Thread.currentThread().getStackTrace()[4].getMethodName(), messageKey);
+        }
     }
 
-    private void wblLog(Level log_level, String messageKey, Object... args)
+    private void wblLog(Level level, String messageKey, Object... args)
     {
-        checkNullLogger();
-        logger.logp(log_level, this.caller.getName(), Thread.currentThread().getStackTrace()[4].getMethodName(), messageKey, args);
+        if (logger.isLoggable(level))
+        {
+            logger.logp(level, this.caller.getName(), Thread.currentThread().getStackTrace()[4].getMethodName(), messageKey, args);
+        }
     }
 
-    private void wblLog(Level log_level, String messageKey, Throwable e)
+    private void wblLog(Level level, Throwable e, String messageKey)
     {
-        checkNullLogger();
-        logger.logp(log_level, this.caller.getName(), Thread.currentThread().getStackTrace()[4].getMethodName(), messageKey, e);
+        if (logger.isLoggable(level))
+        {
+            logger.logp(level, this.caller.getName(), Thread.currentThread().getStackTrace()[4].getMethodName(), messageKey, e);
+        }
     }
 
-    private void wblLog(Level log_level, Throwable e, String messageKey, Object... args)
+    private void wblLog(Level level, Throwable e, String messageKey, Object... args)
     {
-        checkNullLogger();
-        logger.logp(log_level, this.caller.getName(), Thread.currentThread().getStackTrace()[3].getMethodName(), constructMessage(messageKey, args), e);
-    }    
+        if (logger.isLoggable(level))
+        {
+            logger.logp(level, this.caller.getName(), Thread.currentThread().getStackTrace()[3].getMethodName(), constructMessage(messageKey, args), e);
+        }
+    }
     
     public void fatal(String messageKey)
     {
@@ -110,12 +118,12 @@ public final class WebBeansLogger
 
     public void fatal(String messageKey, Throwable e)
     {
-        this.wblLog(WebBeansLogger.WBL_FATAL, messageKey, e);
+        this.wblLog(WebBeansLogger.WBL_FATAL, e, messageKey);
     }
 
     public void error(Throwable e)
     {
-        this.wblLog(WebBeansLogger.WBL_ERROR, "", e);
+        this.wblLog(WebBeansLogger.WBL_ERROR, e, "");
     }
 
     public void error(String messageKey)
@@ -130,12 +138,12 @@ public final class WebBeansLogger
     
     public void error(String messageKey, Throwable e)
     {
-        this.wblLog(WebBeansLogger.WBL_ERROR, messageKey, e);
+        this.wblLog(WebBeansLogger.WBL_ERROR, e, messageKey);
     }
 
     public void error(String messageKey, Throwable e, Object... args)
     {
-        this.wblLog(WebBeansLogger.WBL_ERROR, messageKey, args, e);
+        this.wblLog(WebBeansLogger.WBL_ERROR, e, messageKey, args);
     }
 
     public void warn(String messageKey)
@@ -150,7 +158,7 @@ public final class WebBeansLogger
 
     public void warn(String messageKey, Throwable e)
     {
-        this.wblLog(WebBeansLogger.WBL_WARN, messageKey, e);
+        this.wblLog(WebBeansLogger.WBL_WARN, e, messageKey);
     }
 
     public void info(String messageKey)
@@ -165,7 +173,7 @@ public final class WebBeansLogger
     
     public void info(String messageKey, Throwable e)
     {
-        this.wblLog(WebBeansLogger.WBL_INFO, messageKey, e);
+        this.wblLog(WebBeansLogger.WBL_INFO, e, messageKey);
     }
 
     public void debug(String messageKey)
@@ -173,14 +181,14 @@ public final class WebBeansLogger
         this.wblLog(WebBeansLogger.WBL_DEBUG, messageKey);
     }
 
-    public void debug(String messageKey, Object... args)
+    public void debug(String messageKey, Throwable e)
     {
-        this.wblLog(WebBeansLogger.WBL_DEBUG, messageKey, args);
+        this.wblLog(WebBeansLogger.WBL_DEBUG, e, messageKey);
     }
 
-    public void debug(String messageKey, Throwable e)
+    public void debug(String messageKey, Object... args)
     {
-        this.wblLog(WebBeansLogger.WBL_DEBUG, messageKey, e);
+        this.wblLog(WebBeansLogger.WBL_DEBUG, messageKey, args);
     }
 
     public void trace(String messageKey)
@@ -195,7 +203,7 @@ public final class WebBeansLogger
 
     public void trace(String messageKey, Throwable e)
     {
-        this.wblLog(WebBeansLogger.WBL_TRACE, messageKey, e);
+        this.wblLog(WebBeansLogger.WBL_TRACE, e, messageKey);
     }
 
     private String constructMessage(String messageKey, Object... args)
@@ -229,10 +237,8 @@ public final class WebBeansLogger
         {
             return messageKey;
         }
-        else
-        {
-            return strVal;
-        }
+
+        return strVal;
     }
 
     /**
@@ -245,11 +251,4 @@ public final class WebBeansLogger
         this.logger = logger;
     }
 
-    private void checkNullLogger()
-    {
-        if (this.logger == null)
-        {
-            throw new NullPointerException("Logger can not be null");
-        }
-    }        
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/SortedListHelper.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/SortedListHelper.java?rev=923960&r1=923959&r2=923960&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/SortedListHelper.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/SortedListHelper.java Tue Mar 16 20:12:01 2010
@@ -18,44 +18,44 @@ import java.util.Comparator;
 
 public class SortedListHelper<E>  {
 
-	List<E> list;
-	Comparator<E> comparator;
-	
-	public SortedListHelper(List<E>list, Comparator<E> comparator) 
-	{
-		this.list = list;
-		this.comparator = comparator;
-	}
-	
-	public List<E> getList() 
-	{
-		return list;
-	}
-	
-	public boolean add(E object) {
-		if (list.isEmpty())
-		{
-			list.add(object);
-			return true;
-		}
-		for(int i=0; i<list.size(); i++) {
-			E obj = list.get(i);
-			if (comparator.compare(object, obj) < 0) 
-			{
-				list.add(i, object);
-				return true;
-			}
-		}
-		return list.add(object);
-	}
-	
-	public void clear() 
-	{
-		list.clear();
-	}
-	
-	public E get(int location) 
-	{
-		return list.get(location);
-	}
+    List<E> list;
+    Comparator<E> comparator;
+
+    public SortedListHelper(List<E>list, Comparator<E> comparator) 
+    {
+        this.list = list;
+        this.comparator = comparator;
+    }
+
+    public List<E> getList() 
+    {
+        return list;
+    }
+
+    public boolean add(E object) {
+        if (list.isEmpty())
+        {
+            list.add(object);
+            return true;
+        }
+        for(int i=0; i<list.size(); i++) {
+            E obj = list.get(i);
+            if (comparator.compare(object, obj) < 0) 
+            {
+                list.add(i, object);
+                return true;
+            }
+        }
+        return list.add(object);
+    }
+
+    public void clear() 
+    {
+        list.clear();
+    }
+
+    public E get(int location) 
+    {
+        return list.get(location);
+    }
 }