You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2011/11/14 17:12:56 UTC

svn commit: r1201770 - /struts/struts2/branches/new_conversion/plugins/cdi/src/main/java/org/apache/struts2/cdi/CdiObjectFactory.java

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);
+    }
+
 }