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);


Reply via email to