Author: jacopoc
Date: Tue May 29 15:37:03 2012
New Revision: 1343783
URL: http://svn.apache.org/viewvc?rev=1343783&view=rev
Log:
Improved code that manages the cache:
* protected the UtilCache object (static field) by making it private and final
* removed unnecessary synchronization
* refactored code to be more inline with best practices for thread safefy:
removed the method readNotificationGroups() (that was only used by the same
class in one place) that was called with a lock held and inlined its logic into
the colling method; this simplifies thecode and its readability
Modified:
ofbiz/trunk/framework/service/src/org/ofbiz/service/config/ServiceConfigUtil.java
Modified:
ofbiz/trunk/framework/service/src/org/ofbiz/service/config/ServiceConfigUtil.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/config/ServiceConfigUtil.java?rev=1343783&r1=1343782&r2=1343783&view=diff
==============================================================================
---
ofbiz/trunk/framework/service/src/org/ofbiz/service/config/ServiceConfigUtil.java
(original)
+++
ofbiz/trunk/framework/service/src/org/ofbiz/service/config/ServiceConfigUtil.java
Tue May 29 15:37:03 2012
@@ -43,7 +43,7 @@ public class ServiceConfigUtil implement
public static final String module = ServiceConfigUtil.class.getName();
public static final String engine = "default";
public static final String SERVICE_ENGINE_XML_FILENAME =
"serviceengine.xml";
- protected static UtilCache<String, Map<String, NotificationGroup>>
notificationGroupCache =
UtilCache.createUtilCache("service.NotificationGroups", 0, 0, false);
+ private static final UtilCache<String, Map<String, NotificationGroup>>
notificationGroupCache =
UtilCache.createUtilCache("service.NotificationGroups", 0, 0, false);
public static Element getXmlRootElement() throws GenericConfigException {
Element root =
ResourceLoader.getXmlRootElement(ServiceConfigUtil.SERVICE_ENGINE_XML_FILENAME);
@@ -110,35 +110,22 @@ public class ServiceConfigUtil implement
return retryMin;
}
- public static void readNotificationGroups() {
- Element rootElement = null;
-
- try {
- rootElement = ServiceConfigUtil.getXmlRootElement();
- } catch (GenericConfigException e) {
- Debug.logError(e, "Error getting Service Engine XML root element",
module);
- }
-
- FastMap<String, NotificationGroup> engineNotifyMap =
FastMap.newInstance();
-
- for (Element e: UtilXml.childElementList(rootElement,
"notification-group")) {
- NotificationGroup ng = new NotificationGroup(e);
- engineNotifyMap.put(ng.getName(), ng);
- }
-
- notificationGroupCache.put(engine, engineNotifyMap);
- }
-
public static NotificationGroup getNotificationGroup(String group) {
Map<String, NotificationGroup> engineNotifyMap =
notificationGroupCache.get(engine);
if (engineNotifyMap == null) {
- synchronized(ServiceConfigUtil.class) {
- engineNotifyMap = notificationGroupCache.get(engine);
- if (engineNotifyMap == null) {
- readNotificationGroups();
- }
+ //
+ Element rootElement = null;
+ try {
+ rootElement = ServiceConfigUtil.getXmlRootElement();
+ } catch (GenericConfigException e) {
+ Debug.logError(e, "Error getting Service Engine XML root
element", module);
+ }
+ engineNotifyMap = FastMap.newInstance();
+ for (Element e: UtilXml.childElementList(rootElement,
"notification-group")) {
+ NotificationGroup ng = new NotificationGroup(e);
+ engineNotifyMap.put(ng.getName(), ng);
}
- engineNotifyMap = notificationGroupCache.get(engine);
+ engineNotifyMap = notificationGroupCache.putIfAbsentAndGet(engine,
engineNotifyMap);
}
if (engineNotifyMap != null) {
return engineNotifyMap.get(group);