use ConcurrentHashMap to cache field infos
diff --git a/core/org.eclipse.smila.solr/code/src/org/eclipse/smila/solr/administration/FieldInfoCache.java b/core/org.eclipse.smila.solr/code/src/org/eclipse/smila/solr/administration/FieldInfoCache.java
index b2b270c..e4a5ef2 100755
--- a/core/org.eclipse.smila.solr/code/src/org/eclipse/smila/solr/administration/FieldInfoCache.java
+++ b/core/org.eclipse.smila.solr/code/src/org/eclipse/smila/solr/administration/FieldInfoCache.java
@@ -8,6 +8,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.commons.httpclient.HttpException;
import org.apache.solr.common.params.CommonParams;
@@ -25,33 +26,39 @@
public static final String PARAM_INCLUDE_DYNAMIC = "includeDynamic";
- final static Map<String, Map<String, FieldInfo>> _fieldInfo = new HashMap<String, Map<String, FieldInfo>>();
+ final static Map<String, Map<String, FieldInfo>> _fieldInfoMap =
+ new ConcurrentHashMap<String, Map<String, FieldInfo>>();
- public static Map<String, FieldInfo> getFieldInfo(final String index) {
- Map<String, FieldInfo> fieldInfo = _fieldInfo.get(index);
- if (fieldInfo == null) {
- fieldInfo = new HashMap<String, FieldInfo>();
- _fieldInfo.put(index, fieldInfo);
- }
- return fieldInfo;
- }
-
- public static FieldInfo getFieldInfo(final String index, final String fieldName)
- throws HttpException, InterruptedException, IOException {
- FieldInfo fieldInfo = getFieldInfo(index).get(fieldName);
- if (fieldInfo == null) {
+ public static FieldInfo getFieldInfo(final String index, final String fieldName) throws HttpException,
+ InterruptedException, IOException {
+ FieldInfo fieldInfo;
+ final Map<String, FieldInfo> fieldInfos = getFieldInfos(index);
+ if (fieldInfos.containsKey(fieldName)) {
+ fieldInfo = fieldInfos.get(fieldName);
+ } else {
fieldInfo = getFromSchema(index, fieldName);
if (fieldInfo != null) {
- getFieldInfo(index).put(fieldName, fieldInfo);
+ fieldInfos.put(fieldName, fieldInfo);
}
}
return fieldInfo;
}
- private static FieldInfo getFromSchema(final String index, final String fieldName)
- throws InterruptedException, HttpException, IOException {
+ private static Map<String, FieldInfo> getFieldInfos(final String index) {
+ Map<String, FieldInfo> fieldInfos;
+ if (_fieldInfoMap.containsKey(index)) {
+ fieldInfos = _fieldInfoMap.get(index);
+ } else {
+ fieldInfos = new ConcurrentHashMap<String, FieldInfo>();
+ _fieldInfoMap.put(index, fieldInfos);
+ }
+ return fieldInfos;
+ }
+
+ private static FieldInfo getFromSchema(final String index, final String fieldName) throws InterruptedException,
+ HttpException, IOException {
final SolrOperationService service = ServiceUtils.getService(SolrOperationService.class);
- // add parameter
+ // add Parameter
final Map<String, String[]> params = new HashMap<String, String[]>();
params.put(CommonParams.FL, new String[] { fieldName });
params.put(PARAM_INCLUDE_DYNAMIC, new String[] { Boolean.toString(true) });
@@ -66,5 +73,4 @@
}
return null;
}
-
}