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