Author: jonesde
Date: Mon Mar  9 08:30:14 2009
New Revision: 751619

URL: http://svn.apache.org/viewvc?rev=751619&view=rev
Log:
Changed the LRUMap inside CacheLineTable to be synchronized using 
Collections.synchronizedMap, should resolve issues reported in Jira #OFBIZ-2186

Modified:
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/CacheLineTable.java
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/LRUMap.java

Modified: 
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/CacheLineTable.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/CacheLineTable.java?rev=751619&r1=751618&r2=751619&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/CacheLineTable.java 
(original)
+++ 
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/CacheLineTable.java 
Mon Mar  9 08:30:14 2009
@@ -118,12 +118,12 @@
         CacheLine<V> oldValue;
         if (key == null) {
             if (Debug.verboseOn()) Debug.logVerbose("In CacheLineTable tried 
to put with null key, using NullObject" + this.cacheName, module);
-            if (memoryTable instanceof LRUMap) {
-                oldValue = memoryTable.put(key, value);
-            } else {
+            if (memoryTable instanceof FastMap) {
                 oldValue = isNullSet ? nullValue : null;
                 isNullSet = true;
                 nullValue = value;
+            } else {
+                oldValue = memoryTable.put(key, value);
             }
         } else {
             oldValue = memoryTable.put(key, value);
@@ -149,14 +149,14 @@
 
     protected CacheLine<V> getNoCheck(Object key) {
         CacheLine<V> value;
-        if (memoryTable instanceof LRUMap) {
-            value = memoryTable.get(key);
-        } else {
+        if (memoryTable instanceof FastMap) {
             if (key == null) {
                 value = isNullSet ? nullValue : null;
             } else {
                 value = memoryTable.get(key);
             }
+        } else {
+            value = memoryTable.get(key);
         }
         if (value == null) {
             if (fileTable != null) {
@@ -183,11 +183,11 @@
             }
         }
         if (key == null) {
-            if (memoryTable instanceof LRUMap) {
-                memoryTable.remove(key);
-            } else {
+            if (memoryTable instanceof FastMap) {
                 isNullSet = false;
                 nullValue = null;
+            } else {
+                memoryTable.remove(key);
             }
         } else {
             memoryTable.remove(key);
@@ -279,7 +279,7 @@
         }
 
         if (newSize > 0) {
-            this.memoryTable = new LRUMap<K, CacheLine<V>>(newSize);
+            this.memoryTable = Collections.synchronizedMap(new LRUMap<K, 
CacheLine<V>>(newSize));
             if (isNullSet) {
                 this.memoryTable.put(null, nullValue);
                 isNullSet = false;
@@ -311,4 +311,3 @@
         return null;
     }
 }
-

Modified: 
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/LRUMap.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/LRUMap.java?rev=751619&r1=751618&r2=751619&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/LRUMap.java 
(original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/LRUMap.java 
Mon Mar  9 08:30:14 2009
@@ -57,13 +57,4 @@
     protected boolean removeEldestEntry(Map.Entry<K, V> entry) {
         return size() > maxSize;
     }
-
-    /**
-     * An override for the LinkedHashMap.get method that is synchronized to be 
thread safe.
-     * The LinkedHashMap.get method is not synchronized, as made very clear in 
the JavaDocs, and since it does modify internal state and in this case needs to 
be usable by more than one thread at once, making it synchronized.
-     */
-    @Override
-    public synchronized V get(Object key) {
-        return super.get(key);
-    }
 }


Reply via email to