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 2013/01/22 15:28:16 UTC
svn commit: r1436951 - in /struts/struts2/trunk:
core/src/main/java/org/apache/struts2/components/UIBean.java
xwork-core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
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;