Author: lukaszlenart Date: Mon Nov 14 16:12:55 2011 New Revision: 1201770 URL: http://svn.apache.org/viewvc?rev=1201770&view=rev Log: WW-3702 - adds optional flag to enable/disable internal cache to prevent memory leaks
Modified: struts/struts2/branches/new_conversion/plugins/cdi/src/main/java/org/apache/struts2/cdi/CdiObjectFactory.java Modified: struts/struts2/branches/new_conversion/plugins/cdi/src/main/java/org/apache/struts2/cdi/CdiObjectFactory.java URL: http://svn.apache.org/viewvc/struts/struts2/branches/new_conversion/plugins/cdi/src/main/java/org/apache/struts2/cdi/CdiObjectFactory.java?rev=1201770&r1=1201769&r2=1201770&view=diff ============================================================================== --- struts/struts2/branches/new_conversion/plugins/cdi/src/main/java/org/apache/struts2/cdi/CdiObjectFactory.java (original) +++ struts/struts2/branches/new_conversion/plugins/cdi/src/main/java/org/apache/struts2/cdi/CdiObjectFactory.java Mon Nov 14 16:12:55 2011 @@ -20,6 +20,7 @@ package org.apache.struts2.cdi; import com.opensymphony.xwork2.ObjectFactory; +import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; @@ -54,6 +55,8 @@ public class CdiObjectFactory extends Ob Map<Class<?>, InjectionTarget<?>> injectionTargetCache = new ConcurrentHashMap<Class<?>, InjectionTarget<?>>(); + private boolean useInternalCache = false; + public CdiObjectFactory() { super(); LOG.info("Initializing Struts2 CDI integration..."); @@ -119,11 +122,15 @@ public class CdiObjectFactory extends Ob * @return if found in cache, an existing instance. A new instance otherwise. */ protected InjectionTarget<?> getInjectionTarget(Class<?> clazz) { - InjectionTarget<?> result; - result = injectionTargetCache.get(clazz); + InjectionTarget<?> result = null; + if (useInternalCache) { + result = injectionTargetCache.get(clazz); + } if (result == null) { result = beanManager.createInjectionTarget(beanManager.createAnnotatedType(clazz)); - injectionTargetCache.put(clazz, result); + if (useInternalCache) { + injectionTargetCache.put(clazz, result); + } } return result; @@ -139,4 +146,15 @@ public class CdiObjectFactory extends Ob protected CreationalContext buildNonContextualCreationalContext(BeanManager beanManager) { return beanManager != null ? beanManager.createCreationalContext(null) : null; } + + /** + * Disables use of internal cache for InjectionTargets + * + * @param useInternalCache + */ + @Inject(value = "struts.cdi.useInternalCache", required = false) + public void setUseInternalCache(String useInternalCache) { + this.useInternalCache = "true".equalsIgnoreCase(useInternalCache); + } + }