|
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); |
| Free forum by Nabble | Edit this page |
