Author: struberg
Date: Sun Jan 20 04:17:49 2013
New Revision: 1435784

URL: http://svn.apache.org/viewvc?rev=1435784&view=rev
Log:
OWB-733 fix ClassLoader leak in isNormalScope

Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java?rev=1435784&r1=1435783&r2=1435784&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java
 Sun Jan 20 04:17:49 2013
@@ -524,7 +524,7 @@ public abstract class AbstractBeanBuilde
     protected void checkUnproxiableApiType()
     {
         //Unproxiable test for NormalScoped beans
-        if (webBeansContext.getWebBeansUtil().isScopeTypeNormal(scope))
+        if (webBeansContext.getBeanManagerImpl().isNormalScope(scope))
         {
             ViolationMessageBuilder violationMessage = 
ViolationMessageBuilder.newViolation();
 

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=1435784&r1=1435783&r2=1435784&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
 Sun Jan 20 04:17:49 2013
@@ -167,9 +167,6 @@ public class BeanManagerImpl implements 
      */
     private ConcurrentHashMap<String, Bean<?>> passivationBeans = new 
ConcurrentHashMap<String, Bean<?>>(); 
 
-//    private Map<Contextual<?>, Producer<?>> producers =
-//        Collections.synchronizedMap(new IdentityHashMap<Contextual<?>, 
Producer<?>>());
-    
     /**InjectionTargets for Java EE component instances that supports 
injections*/
     private Map<Class<?>, Producer<?>> producersForJavaEeComponents =
         new ConcurrentHashMap<Class<?>, Producer<?>>();
@@ -187,6 +184,16 @@ public class BeanManagerImpl implements 
 
 
     /**
+     * we cache results of calls to {@link #isScopeTypeNormalCache} because
+     * this doesn't change at runtime.
+     * We don't need to take special care about classloader
+     * hierarchies, because each cl has other classes.
+     */
+    private static Map<Class<? extends Annotation>, Boolean> 
isScopeTypeNormalCache =
+            new ConcurrentHashMap<Class<? extends Annotation>, Boolean>();
+
+
+    /**
      * Creates a new {@link BeanManager} instance.
      * Called by the system. Do not use outside of the
      * system.
@@ -679,7 +686,7 @@ public class BeanManagerImpl implements 
         }
                 
         //Scope is normal
-        if 
(webBeansContext.getWebBeansUtil().isScopeTypeNormal(bean.getScope()))
+        if (isNormalScope(bean.getScope()))
         {
             instance = getEjbOrJmsProxyReference(bean, 
beanType,creationalContext);
             
@@ -757,7 +764,7 @@ public class BeanManagerImpl implements 
         //Create session bean proxy
         if(bean instanceof EnterpriseBeanMarker)
         {
-            
if(webBeansContext.getWebBeansUtil().isScopeTypeNormal(bean.getScope()))
+            if(isNormalScope(bean.getScope()))
             {
                 //Maybe it is cached
                 if(cacheProxies.containsKey(bean))
@@ -837,18 +844,29 @@ public class BeanManagerImpl implements 
         return false;
     }
     
-    public boolean isNormalScope(Class<? extends Annotation> annotationType)
+    public boolean isNormalScope(Class<? extends Annotation> scopeType)
     {
+        Boolean isNormal = isScopeTypeNormalCache.get(scopeType);
+
+        if (isNormal != null)
+        {
+            return isNormal.booleanValue();
+        }
+
         for(int i = 0, size = additionalScopes.size(); i < size; i++)
         {
             ExternalScope extScope = additionalScopes.get(i);
-            if (extScope.getScope().equals(annotationType))
+            if (extScope.getScope().equals(scopeType))
             {
+                isScopeTypeNormalCache.put(scopeType, extScope.isNormal());
                 return extScope.isNormal();
             }
         }
-        
-        return annotationType.getAnnotation(NormalScope.class) != null;
+
+        isNormal = scopeType.getAnnotation(NormalScope.class) != null;
+        isScopeTypeNormalCache.put(scopeType, isNormal);
+
+        return isNormal;
     }
     
     public boolean isPassivatingScope(Class<? extends Annotation> 
annotationType)

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=1435784&r1=1435783&r2=1435784&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
 Sun Jan 20 04:17:49 2013
@@ -36,11 +36,9 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 
 import javax.decorator.Decorator;
 import javax.enterprise.context.Dependent;
-import javax.enterprise.context.NormalScope;
 import javax.enterprise.context.spi.Contextual;
 import javax.enterprise.inject.Alternative;
 import javax.enterprise.inject.IllegalProductException;
@@ -71,7 +69,6 @@ import javax.enterprise.inject.spi.Proce
 import javax.enterprise.inject.spi.ProcessSessionBean;
 import javax.inject.Inject;
 import javax.inject.Named;
-import javax.inject.Scope;
 
 import org.apache.webbeans.annotation.AnnotationManager;
 import org.apache.webbeans.component.InjectionTargetBean;
@@ -101,7 +98,6 @@ import org.apache.webbeans.config.EJBWeb
 import org.apache.webbeans.config.OWBLogConst;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.container.BeanManagerImpl;
-import org.apache.webbeans.container.ExternalScope;
 import org.apache.webbeans.container.InjectionResolver;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.exception.inject.DefinitionException;
@@ -1077,61 +1073,6 @@ public final class WebBeansUtil
         return true;
     }
 
-    /**
-     * The result of this invocation get's cached
-     * @see #isScopeTypeNormalCache
-     * @param scopeType
-     * @return <code>true</code> if the given scopeType represents a
-     *         {@link javax.enterprise.context.NormalScope}d bean
-     */
-    public boolean isScopeTypeNormal(Class<? extends Annotation> scopeType)
-    {
-        Asserts.assertNotNull(scopeType, "scopeType argument can not be null");
-
-        Boolean isNormal = isScopeTypeNormalCache.get(scopeType);
-
-        if (isNormal != null)
-        {
-            return isNormal.booleanValue();
-        }
-
-
-        if (scopeType.isAnnotationPresent(NormalScope.class))
-        {
-            isScopeTypeNormalCache.put(scopeType, Boolean.TRUE);
-            return true;
-        }
-
-        if(scopeType.isAnnotationPresent(Scope.class))
-        {
-            isScopeTypeNormalCache.put(scopeType, Boolean.FALSE);
-            return false;
-        }
-
-        List<ExternalScope> additionalScopes = 
webBeansContext.getBeanManagerImpl().getAdditionalScopes();
-        for (ExternalScope additionalScope : additionalScopes)
-        {
-            if (additionalScope.getScope().equals(scopeType))
-            {
-                isNormal = additionalScope.isNormal() ? Boolean.TRUE : 
Boolean.FALSE;
-                isScopeTypeNormalCache.put(scopeType, isNormal);
-                return isNormal.booleanValue();
-            }
-        }
-
-        // no scopetype found so far -> kawumms
-        throw new IllegalArgumentException("scopeType argument must be 
annotated with @Scope or @NormalScope");
-    }
-
-    /**
-     * we cache results of calls to {@link #isScopeTypeNormalCache} because
-     * this doesn't change at runtime.
-     * We don't need to take special care about classloader
-     * hierarchies, because each cl has other classes.
-     */
-    private static Map<Class<? extends Annotation>, Boolean> 
isScopeTypeNormalCache =
-            new ConcurrentHashMap<Class<? extends Annotation>, Boolean>();
-    
     public static void checkNullInstance(Object instance, Class<? > scopeType, 
String errorMessage, 
             Object... errorMessageArgs)
     {


Reply via email to