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)
{