Looks like a good pattern. -David
On May 28, 2012, at 9:27 AM, Jacopo Cappellato <jacopo.cappell...@hotwaxmedia.com> wrote: > Please also review the following commit because it is another pattern I am > going to apply to other code: > > > On May 28, 2012, at 5:25 PM, jaco...@apache.org wrote: > >> Author: jacopoc >> Date: Mon May 28 15:25:46 2012 >> New Revision: 1343278 >> >> URL: http://svn.apache.org/viewvc?rev=1343278&view=rev >> Log: >> Improved code that manages the cache: >> * protected the UtilCache object (static field) by making it private and >> final >> * instead of using the "put" method, use the "putIfAbsentAndGet" method to >> prevent the risk of adding the new value if another concurrent thread added >> it in the meantime >> >> >> Modified: >> >> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/XslTransform.java >> >> Modified: >> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/XslTransform.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/XslTransform.java?rev=1343278&r1=1343277&r2=1343278&view=diff >> ============================================================================== >> --- >> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/XslTransform.java >> (original) >> +++ >> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/XslTransform.java >> Mon May 28 15:25:46 2012 >> @@ -56,7 +56,7 @@ import javax.xml.transform.stream.Stream >> public final class XslTransform { >> >> public static final String module = XslTransform.class.getName(); >> - public static UtilCache<String, Templates> xslTemplatesCache = >> UtilCache.createUtilCache("XsltTemplates", 0, 0); >> + private static final UtilCache<String, Templates> xslTemplatesCache = >> UtilCache.createUtilCache("XsltTemplates", 0, 0); >> >> /** >> * @param template the content or url of the xsl template >> @@ -116,7 +116,7 @@ public final class XslTransform { >> Source templateSource = getSource(templateDocument, templateUrl, >> templateString); >> translet = tFactory.newTemplates(templateSource); >> if (UtilValidate.isNotEmpty(templateName)) { >> - xslTemplatesCache.put(templateName, translet); >> + translet = >> xslTemplatesCache.putIfAbsentAndGet(templateName, translet); >> } >> } >> if (translet != null) { >> >> > > Jacopo >