|
Author: jacopoc
Date: Tue May 29 13:52:32 2012 New Revision: 1343727 URL: http://svn.apache.org/viewvc?rev=1343727&view=rev Log: Improved code that manages the cache: * protected the UtilCache object (static field) by making it private and final * removed unnecessary synchronization Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java?rev=1343727&r1=1343726&r2=1343727&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java Tue May 29 13:52:32 2012 @@ -75,7 +75,7 @@ public class FreeMarkerWorker { public static final String module = FreeMarkerWorker.class.getName(); // use soft references for this so that things from Content records don't kill all of our memory, or maybe not for performance reasons... hmmm, leave to config file... - public static UtilCache<String, Template> cachedTemplates = UtilCache.createUtilCache("template.ftl.general", 0, 0, false); + private static final UtilCache<String, Template> cachedTemplates = UtilCache.createUtilCache("template.ftl.general", 0, 0, false); private static final BeansWrapper defaultOfbizWrapper = configureBeansWrapper(new BeansWrapper()); private static final Configuration defaultOfbizConfig = makeConfiguration(defaultOfbizWrapper); @@ -200,49 +200,34 @@ public class FreeMarkerWorker { public static Environment renderTemplateFromString(String templateString, String templateLocation, Map<String, Object> context, Appendable outWriter) throws TemplateException, IOException { Template template = cachedTemplates.get(templateLocation); if (template == null) { - synchronized (cachedTemplates) { - template = cachedTemplates.get(templateLocation); - if (template == null) { - Reader templateReader = new StringReader(templateString); - template = new Template(templateLocation, templateReader, defaultOfbizConfig); - templateReader.close(); - cachedTemplates.put(templateLocation, template); - } - } + Reader templateReader = new StringReader(templateString); + template = new Template(templateLocation, templateReader, defaultOfbizConfig); + templateReader.close(); + template = cachedTemplates.putIfAbsentAndGet(templateLocation, template); } return renderTemplate(template, context, outWriter); } public static Environment renderTemplateFromString(String templateString, String templateLocation, Map<String, Object> context, Appendable outWriter, boolean useCache) throws TemplateException, IOException { Template template = null; - if (useCache){ + if (useCache) { template = cachedTemplates.get(templateLocation); - } - if (template == null) { - if (useCache){ - synchronized (cachedTemplates) { - template = cachedTemplates.get(templateLocation); - if (template == null) { - Reader templateReader = new StringReader(templateString); - template = new Template(templateLocation, templateReader, defaultOfbizConfig); - templateReader.close(); - cachedTemplates.put(templateLocation, template); - } - } - } else { + if (template == null) { Reader templateReader = new StringReader(templateString); template = new Template(templateLocation, templateReader, defaultOfbizConfig); templateReader.close(); + template = cachedTemplates.putIfAbsentAndGet(templateLocation, template); } + } else { + Reader templateReader = new StringReader(templateString); + template = new Template(templateLocation, templateReader, defaultOfbizConfig); + templateReader.close(); } - return renderTemplate(template, context, outWriter); } public static void clearTemplateFromCache(String templateLocation) { - synchronized (cachedTemplates) { - cachedTemplates.remove(templateLocation); - } + cachedTemplates.remove(templateLocation); } /** @@ -341,16 +326,11 @@ public class FreeMarkerWorker { public static Template getTemplate(String templateLocation, UtilCache<String, Template> cache, Configuration config) throws TemplateException, IOException { Template template = cache.get(templateLocation); if (template == null) { - synchronized (cache) { - template = cache.get(templateLocation); - if (template == null) { - // only make the reader if we need it, and then close it right after! - Reader templateReader = makeReader(templateLocation); - template = new Template(templateLocation, templateReader, config); - templateReader.close(); - cache.put(templateLocation, template); - } - } + // only make the reader if we need it, and then close it right after! + Reader templateReader = makeReader(templateLocation); + template = new Template(templateLocation, templateReader, config); + templateReader.close(); + template = cache.putIfAbsentAndGet(templateLocation, template); } return template; } |
| Free forum by Nabble | Edit this page |
