You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mb...@apache.org on 2012/02/24 21:54:13 UTC

svn commit: r1293412 - /commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/JXPathIntrospector.java

Author: mbenson
Date: Fri Feb 24 20:54:12 2012
New Revision: 1293412

URL: http://svn.apache.org/viewvc?rev=1293412&view=rev
Log:
[JXPATH-152] synchronized access to HashMap#put() calls in JXPathIntrospector

Modified:
    commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/JXPathIntrospector.java

Modified: commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/JXPathIntrospector.java
URL: http://svn.apache.org/viewvc/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/JXPathIntrospector.java?rev=1293412&r1=1293411&r2=1293412&view=diff
==============================================================================
--- commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/JXPathIntrospector.java (original)
+++ commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/JXPathIntrospector.java Fri Feb 24 20:54:12 2012
@@ -16,6 +16,7 @@
  */
 package org.apache.commons.jxpath;
 
+import java.util.Collections;
 import java.util.Date;
 import java.util.Map;
 import java.util.HashMap;
@@ -31,8 +32,8 @@ import org.apache.commons.jxpath.util.Cl
  */
 public class JXPathIntrospector {
 
-    private static HashMap byClass = new HashMap();
-    private static HashMap byInterface = new HashMap();
+    private static Map byClass = Collections.synchronizedMap(new HashMap());
+    private static Map byInterface = Collections.synchronizedMap(new HashMap());
 
     static {
         registerAtomicClass(Class.class);
@@ -67,7 +68,9 @@ public class JXPathIntrospector {
      * @param beanClass to register
      */
     public static void registerAtomicClass(Class beanClass) {
-        byClass.put(beanClass, new JXPathBasicBeanInfo(beanClass, true));
+        synchronized (byClass) { 
+            byClass.put(beanClass, new JXPathBasicBeanInfo(beanClass, true));
+        }
     }
 
     /**
@@ -83,10 +86,14 @@ public class JXPathIntrospector {
         JXPathBasicBeanInfo bi =
             new JXPathBasicBeanInfo(beanClass, dynamicPropertyHandlerClass);
         if (beanClass.isInterface()) {
-            byInterface.put(beanClass, bi);
+            synchronized (byInterface) {
+                byInterface.put(beanClass, bi);
+            }
         }
         else {
-            byClass.put(beanClass, bi);
+            synchronized (byClass) {
+                byClass.put(beanClass, bi);
+            }
         }
     }
 
@@ -115,7 +122,9 @@ public class JXPathIntrospector {
                     beanInfo = new JXPathBasicBeanInfo(beanClass);
                 }
             }
-            byClass.put(beanClass, beanInfo);
+            synchronized (byClass) {
+                byClass.put(beanClass, beanInfo);
+            }
         }
         return beanInfo;
     }