svn commit: r1365895 - /ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/AbstractEngine.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1365895 - /ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/AbstractEngine.java

jacopoc
Author: jacopoc
Date: Thu Jul 26 07:03:46 2012
New Revision: 1365895

URL: http://svn.apache.org/viewvc?rev=1365895&view=rev
Log:
Made locationMap thread safe using static initialization and immutability.

Modified:
    ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/AbstractEngine.java

Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/AbstractEngine.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/AbstractEngine.java?rev=1365895&r1=1365894&r2=1365895&view=diff
==============================================================================
--- ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/AbstractEngine.java (original)
+++ ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/AbstractEngine.java Thu Jul 26 07:03:46 2012
@@ -18,12 +18,12 @@
  *******************************************************************************/
 package org.ofbiz.service.engine;
 
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.List;
 import java.util.Iterator;
 
-import javolution.util.FastMap;
-
 import org.ofbiz.service.ServiceDispatcher;
 import org.ofbiz.service.ModelService;
 import org.ofbiz.service.GenericServiceException;
@@ -41,40 +41,38 @@ import org.w3c.dom.Element;
 public abstract class AbstractEngine implements GenericEngine {
 
     public static final String module = AbstractEngine.class.getName();
-    protected static Map<String, String> locationMap = null;
+    protected static final Map<String, String> locationMap = createLocationMap();
 
     protected ServiceDispatcher dispatcher = null;
 
     protected AbstractEngine(ServiceDispatcher dispatcher) {
         this.dispatcher = dispatcher;
-        initLocations();
     }
 
     // creates the location alias map
-    protected synchronized void initLocations() {
-        if (locationMap == null) {
-            locationMap = FastMap.newInstance();
-
-            Element root = null;
-            try {
-                root = ServiceConfigUtil.getXmlRootElement();
-            } catch (GenericConfigException e) {
-                Debug.logError(e, module);
-            }
+    protected static Map<String, String> createLocationMap() {
+        Map<String, String> tmpMap = new HashMap<String, String>();
+
+        Element root = null;
+        try {
+            root = ServiceConfigUtil.getXmlRootElement();
+        } catch (GenericConfigException e) {
+            Debug.logError(e, module);
+        }
 
-            if (root != null) {
-                List<? extends Element> locationElements = UtilXml.childElementList(root, "service-location");
-                if (locationElements != null) {
-                    for (Element e: locationElements) {
-                        locationMap.put(e.getAttribute("name"), e.getAttribute("location"));
-                    }
+        if (root != null) {
+            List<? extends Element> locationElements = UtilXml.childElementList(root, "service-location");
+            if (locationElements != null) {
+                for (Element e: locationElements) {
+                    tmpMap.put(e.getAttribute("name"), e.getAttribute("location"));
                 }
             }
-            Debug.logInfo("Loaded Service Locations : " + locationMap, module);
         }
+        Debug.logInfo("Loaded Service Locations: " + tmpMap, module);
+        return Collections.unmodifiableMap(tmpMap);
     }
 
-    // uses the lookup map to determin if the location has been aliased in serviceconfig.xml
+    // uses the lookup map to determine if the location has been aliased in serviceconfig.xml
     protected String getLocation(ModelService model) {
         if (locationMap.containsKey(model.location)) {
             return locationMap.get(model.location);