From: <jaco...@apache.org>
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);

If serviceconfig.xml  means serviceengine.xml here and location means 
service-location, could we change the comment here? Else just
discard this comment (not enough time to digg in)

Jacques

Reply via email to