Author: lukaszlenart
Date: Tue Jan 22 14:28:15 2013
New Revision: 1436951

URL: http://svn.apache.org/viewvc?rev=1436951&view=rev
Log:
WW-3845 adds usage of putIfAbsent to improve atomicity

Modified:
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
    
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
    
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java?rev=1436951&r1=1436950&r2=1436951&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
 Tue Jan 22 14:28:15 2013
@@ -49,6 +49,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 /**
  * UIBean is the standard superclass of all Struts UI components.
@@ -502,7 +503,7 @@ public abstract class UIBean extends Com
     protected TemplateEngineManager templateEngineManager;
 
     // dynamic attributes support for tags used with FreeMarker templates
-    protected static Map<Class, Set<String>> standardAttributesMap = new 
ConcurrentHashMap<Class, Set<String>>();
+    protected static ConcurrentMap<Class, Set<String>> standardAttributesMap = 
new ConcurrentHashMap<Class, Set<String>>();
 
     @Inject(StrutsConstants.STRUTS_UI_TEMPLATEDIR)
     public void setDefaultTemplateDir(String dir) {
@@ -1256,7 +1257,7 @@ public abstract class UIBean extends Com
                     clz = clz.getSuperclass();
                 }
             }
-            standardAttributesMap.put(clz, standardAttributes);
+            standardAttributesMap.putIfAbsent(clz, standardAttributes);
         }
                return standardAttributes;
        }

Modified: 
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java?rev=1436951&r1=1436950&r2=1436951&view=diff
==============================================================================
--- 
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
 (original)
+++ 
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
 Tue Jan 22 14:28:15 2013
@@ -22,7 +22,12 @@ import com.opensymphony.xwork2.util.Comp
 import com.opensymphony.xwork2.util.logging.Logger;
 import com.opensymphony.xwork2.util.logging.LoggerFactory;
 import com.opensymphony.xwork2.util.reflection.ReflectionException;
-import ognl.*;
+import ognl.Ognl;
+import ognl.OgnlContext;
+import ognl.OgnlException;
+import ognl.OgnlRuntime;
+import ognl.SimpleNode;
+import ognl.TypeConverter;
 
 import java.beans.BeanInfo;
 import java.beans.IntrospectionException;
@@ -33,6 +38,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 
 /**
@@ -44,8 +50,8 @@ import java.util.concurrent.ConcurrentHa
 public class OgnlUtil {
 
     private static final Logger LOG = LoggerFactory.getLogger(OgnlUtil.class);
-    private ConcurrentHashMap<String, Object> expressions = new 
ConcurrentHashMap<String, Object>();
-    private final ConcurrentHashMap<Class, BeanInfo> beanInfoCache = new 
ConcurrentHashMap<Class, BeanInfo>();
+    private ConcurrentMap<String, Object> expressions = new 
ConcurrentHashMap<String, Object>();
+    private final ConcurrentMap<Class, BeanInfo> beanInfoCache = new 
ConcurrentHashMap<Class, BeanInfo>();
 
     private TypeConverter defaultConverter;
     static boolean devMode = false;
@@ -240,7 +246,7 @@ public class OgnlUtil {
             Object o = expressions.get(expression);
             if (o == null) {
                 o = Ognl.parseExpression(expression);
-                expressions.put(expression, o);
+                expressions.putIfAbsent(expression, o);
             }
             return o;
         } else
@@ -416,7 +422,7 @@ public class OgnlUtil {
             beanInfo = beanInfoCache.get(clazz);
             if (beanInfo == null) {
                 beanInfo = Introspector.getBeanInfo(clazz, Object.class);
-                beanInfoCache.put(clazz, beanInfo);
+                beanInfoCache.putIfAbsent(clazz, beanInfo);
             }
             return beanInfo;
         }

Modified: 
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java?rev=1436951&r1=1436950&r2=1436951&view=diff
==============================================================================
--- 
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
 (original)
+++ 
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
 Tue Jan 22 14:28:15 2013
@@ -251,7 +251,7 @@ public class LocalizedTextUtil {
         try {
             if (!bundlesMap.containsKey(key)) {
                 bundle = ResourceBundle.getBundle(aBundleName, locale, 
Thread.currentThread().getContextClassLoader());
-                bundlesMap.put(key, bundle);
+                bundlesMap.putIfAbsent(key, bundle);
             }
 
             bundle = bundlesMap.get(key);
@@ -260,18 +260,18 @@ public class LocalizedTextUtil {
                 try {
                     if (!bundlesMap.containsKey(key)) {
                         bundle = ResourceBundle.getBundle(aBundleName, locale, 
delegatedClassLoader);
-                        bundlesMap.put(key, bundle);
+                        bundlesMap.putIfAbsent(key, bundle);
                     }
 
                     bundle = bundlesMap.get(key);
 
                 } catch (MissingResourceException e) {
                     bundle = EMPTY_BUNDLE;
-                    bundlesMap.put(key, bundle);
+                    bundlesMap.putIfAbsent(key, bundle);
                 }
             } else {
                 bundle = EMPTY_BUNDLE;
-                bundlesMap.put(key, bundle);
+                bundlesMap.putIfAbsent(key, bundle);
             }
         }
         return (bundle == EMPTY_BUNDLE) ? null : bundle;


Reply via email to