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;

   }

-

 }