|
Author: jacopoc
Date: Tue May 29 12:10:54 2012 New Revision: 1343692 URL: http://svn.apache.org/viewvc?rev=1343692&view=rev Log: Improved code that manages the cache: * removed unnecessary synchronization * protected the UtilCache object (static field) by making it private and final * replaced non atomic containsKey+put+get with get + putIfAbsentAndGet * replaced containsKey + null check + get with get + null check Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/BshUtil.java ofbiz/trunk/framework/base/src/org/ofbiz/base/util/OfbizBshBsfEngine.java ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonEvents.java ofbiz/trunk/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaUtil.java ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleMethod.java ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/BSFEngine.java ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/artifactinfo/ArtifactInfoFactory.java Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/BshUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/BshUtil.java?rev=1343692&r1=1343691&r2=1343692&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/BshUtil.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/BshUtil.java Tue May 29 12:10:54 2012 @@ -46,7 +46,7 @@ public final class BshUtil { public static final String module = BshUtil.class.getName(); protected static FastMap<ClassLoader, BshClassManager> masterClassManagers = FastMap.newInstance(); - public static UtilCache<String, Interpreter.ParsedScript> parsedScripts = UtilCache.createUtilCache("script.BshLocationParsedCache", 0, 0, false); + private static final UtilCache<String, Interpreter.ParsedScript> parsedScripts = UtilCache.createUtilCache("script.BshLocationParsedCache", 0, 0, false); /** * Evaluate a BSH condition or expression @@ -134,19 +134,14 @@ public final class BshUtil { Interpreter.ParsedScript script = null; script = parsedScripts.get(location); if (script == null) { - synchronized (OfbizBshBsfEngine.class) { - script = parsedScripts.get(location); - if (script == null) { - URL scriptUrl = FlexibleLocation.resolveLocation(location); - if (scriptUrl == null) { - throw new GeneralException("Could not find bsh script at [" + location + "]"); - } - Reader scriptReader = new InputStreamReader(scriptUrl.openStream()); - script = interpreter.parseScript(location, scriptReader); - if (Debug.verboseOn()) Debug.logVerbose("Caching BSH script at: " + location, module); - parsedScripts.put(location, script); - } + URL scriptUrl = FlexibleLocation.resolveLocation(location); + if (scriptUrl == null) { + throw new GeneralException("Could not find bsh script at [" + location + "]"); } + Reader scriptReader = new InputStreamReader(scriptUrl.openStream()); + script = interpreter.parseScript(location, scriptReader); + if (Debug.verboseOn()) Debug.logVerbose("Caching BSH script at: " + location, module); + script = parsedScripts.putIfAbsentAndGet(location, script); } return interpreter.evalParsedScript(script); Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/OfbizBshBsfEngine.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/OfbizBshBsfEngine.java?rev=1343692&r1=1343691&r2=1343692&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/OfbizBshBsfEngine.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/OfbizBshBsfEngine.java Tue May 29 12:10:54 2012 @@ -61,7 +61,7 @@ public class OfbizBshBsfEngine extends B protected Interpreter interpreter; protected boolean installedApplyMethod; - public static UtilCache<String, Interpreter.ParsedScript> parsedScripts = UtilCache.createUtilCache("script.BshBsfParsedCache", 0, 0, false); + private static final UtilCache<String, Interpreter.ParsedScript> parsedScripts = UtilCache.createUtilCache("script.BshBsfParsedCache", 0, 0, false); @SuppressWarnings("unchecked") @Override @@ -177,14 +177,9 @@ public class OfbizBshBsfEngine extends B if (UtilValidate.isNotEmpty(source)) { script = parsedScripts.get(source); if (script == null) { - synchronized (OfbizBshBsfEngine.class) { - script = parsedScripts.get(source); - if (script == null) { - script = interpreter.parseScript(source, new StringReader((String) expr)); - Debug.logVerbose("Caching BSH script at: " + source, module); - parsedScripts.put(source, script); - } - } + script = interpreter.parseScript(source, new StringReader((String) expr)); + Debug.logVerbose("Caching BSH script at: " + source, module); + script = parsedScripts.putIfAbsentAndGet(source, script); } } else { script = interpreter.parseScript(source, new StringReader((String) expr)); Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonEvents.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonEvents.java?rev=1343692&r1=1343691&r2=1343692&view=diff ============================================================================== --- ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonEvents.java (original) +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonEvents.java Tue May 29 12:10:54 2012 @@ -68,7 +68,7 @@ public class CommonEvents { public static final String module = CommonEvents.class.getName(); - public static UtilCache<String, Map<String, String>> appletSessions = UtilCache.createUtilCache("AppletSessions", 0, 600000, true); + private static final UtilCache<String, Map<String, String>> appletSessions = UtilCache.createUtilCache("AppletSessions", 0, 600000, true); public static String checkAppletRequest(HttpServletRequest request, HttpServletResponse response) { Delegator delegator = (Delegator) request.getAttribute("delegator"); @@ -122,8 +122,8 @@ public class CommonEvents { if (visit.getString("sessionId").equals(sessionId)) { String currentPage = request.getParameter("currentPage"); - if (appletSessions.containsKey(sessionId)) { - Map<String, String> sessionMap = appletSessions.get(sessionId); + Map<String, String> sessionMap = appletSessions.get(sessionId); + if (sessionMap != null) { String followers = sessionMap.get("followers"); List<String> folList = StringUtil.split(followers, ","); for (String follower: folList) { Modified: ofbiz/trunk/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaUtil.java?rev=1343692&r1=1343691&r2=1343692&view=diff ============================================================================== --- ofbiz/trunk/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaUtil.java (original) +++ ofbiz/trunk/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaUtil.java Tue May 29 12:10:54 2012 @@ -49,19 +49,14 @@ public class EntityEcaUtil { public static final String module = EntityEcaUtil.class.getName(); - public static UtilCache<String, Map<String, Map<String, List<EntityEcaRule>>>> entityEcaReaders = UtilCache.createUtilCache("entity.EcaReaders", 0, 0, false); + private static final UtilCache<String, Map<String, Map<String, List<EntityEcaRule>>>> entityEcaReaders = UtilCache.createUtilCache("entity.EcaReaders", 0, 0, false); public static Map<String, Map<String, List<EntityEcaRule>>> getEntityEcaCache(String entityEcaReaderName) { Map<String, Map<String, List<EntityEcaRule>>> ecaCache = entityEcaReaders.get(entityEcaReaderName); if (ecaCache == null) { - synchronized (EntityEcaUtil.class) { - ecaCache = entityEcaReaders.get(entityEcaReaderName); - if (ecaCache == null) { - ecaCache = FastMap.newInstance(); - readConfig(entityEcaReaderName, ecaCache); - entityEcaReaders.put(entityEcaReaderName, ecaCache); - } - } + ecaCache = FastMap.newInstance(); + readConfig(entityEcaReaderName, ecaCache); + ecaCache = entityEcaReaders.putIfAbsentAndGet(entityEcaReaderName, ecaCache); } return ecaCache; } Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleMethod.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleMethod.java?rev=1343692&r1=1343691&r2=1343692&view=diff ============================================================================== --- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleMethod.java (original) +++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/SimpleMethod.java Tue May 29 12:10:54 2012 @@ -154,8 +154,7 @@ public final class SimpleMethod extends Map<String, SimpleMethod> simpleMethods = simpleMethodsDirectCache.get(name); if (simpleMethods == null) { simpleMethods = getAllDirectSimpleMethods(name, content, fromLocation); - simpleMethodsDirectCache.putIfAbsent(name, simpleMethods); - simpleMethods = simpleMethodsDirectCache.get(name); + simpleMethods = simpleMethodsDirectCache.putIfAbsentAndGet(name, simpleMethods); } return simpleMethods; } @@ -192,8 +191,7 @@ public final class SimpleMethod extends Map<String, SimpleMethod> simpleMethods = simpleMethodsResourceCache.get(cacheKey); if (simpleMethods == null) { simpleMethods = getAllSimpleMethods(xmlURL); - simpleMethodsResourceCache.putIfAbsent(cacheKey, simpleMethods); - simpleMethods = simpleMethodsResourceCache.get(cacheKey); + simpleMethods = simpleMethodsResourceCache.putIfAbsentAndGet(cacheKey, simpleMethods); } return simpleMethods; } Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/BSFEngine.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/BSFEngine.java?rev=1343692&r1=1343691&r2=1343692&view=diff ============================================================================== --- ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/BSFEngine.java (original) +++ ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/BSFEngine.java Tue May 29 12:10:54 2012 @@ -40,7 +40,7 @@ import org.apache.bsf.BSFManager; public class BSFEngine extends GenericAsyncEngine { public static final String module = BSFEngine.class.getName(); - public static UtilCache<String, String> scriptCache = UtilCache.createUtilCache("BSFScripts", 0, 0); + private static final UtilCache<String, String> scriptCache = UtilCache.createUtilCache("BSFScripts", 0, 0); public BSFEngine(ServiceDispatcher dispatcher) { super(dispatcher); @@ -104,27 +104,22 @@ public class BSFEngine extends GenericAs String script = scriptCache.get(localName + "_" + location); if (script == null) { - synchronized (this) { - script = scriptCache.get(localName + "_" + location); - if (script == null) { - URL scriptUrl = UtilURL.fromResource(location, cl); - - if (scriptUrl != null) { - try { - HttpClient http = new HttpClient(scriptUrl); - script = http.get(); - } catch (HttpClientException e) { - throw new GenericServiceException("Cannot read script from resource", e); - } - } else { - throw new GenericServiceException("Cannot read script, resource [" + location + "] not found"); - } - if (script == null || script.length() < 2) { - throw new GenericServiceException("Null or empty script"); - } - scriptCache.put(localName + "_" + location, script); + URL scriptUrl = UtilURL.fromResource(location, cl); + + if (scriptUrl != null) { + try { + HttpClient http = new HttpClient(scriptUrl); + script = http.get(); + } catch (HttpClientException e) { + throw new GenericServiceException("Cannot read script from resource", e); } + } else { + throw new GenericServiceException("Cannot read script, resource [" + location + "] not found"); + } + if (script == null || script.length() < 2) { + throw new GenericServiceException("Null or empty script"); } + script = scriptCache.putIfAbsentAndGet(localName + "_" + location, script); } // now invoke the script Modified: ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/artifactinfo/ArtifactInfoFactory.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/artifactinfo/ArtifactInfoFactory.java?rev=1343692&r1=1343691&r2=1343692&view=diff ============================================================================== --- ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/artifactinfo/ArtifactInfoFactory.java (original) +++ ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/artifactinfo/ArtifactInfoFactory.java Tue May 29 12:10:54 2012 @@ -63,7 +63,7 @@ public class ArtifactInfoFactory { public static final String module = ArtifactInfoFactory.class.getName(); - protected static UtilCache<String, ArtifactInfoFactory> artifactInfoFactoryCache = UtilCache.createUtilCache("ArtifactInfoFactory"); + private static final UtilCache<String, ArtifactInfoFactory> artifactInfoFactoryCache = UtilCache.createUtilCache("ArtifactInfoFactory"); public static final String EntityInfoTypeId = "entity"; public static final String ServiceInfoTypeId = "service"; @@ -121,8 +121,7 @@ public class ArtifactInfoFactory { ArtifactInfoFactory aif = artifactInfoFactoryCache.get(delegatorName); if (aif == null) { - aif = new ArtifactInfoFactory(delegatorName); - artifactInfoFactoryCache.put(delegatorName, aif); + aif = artifactInfoFactoryCache.putIfAbsentAndGet(delegatorName, new ArtifactInfoFactory(delegatorName)); } return aif; } |
| Free forum by Nabble | Edit this page |
