You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by mb...@apache.org on 2017/10/07 12:26:35 UTC

svn commit: r1811415 - in /ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/cache: CacheSoftReference.java UtilCache.java

Author: mbrohl
Date: Sat Oct  7 12:26:35 2017
New Revision: 1811415

URL: http://svn.apache.org/viewvc?rev=1811415&view=rev
Log:
Improved: Fixing defects reported by FindBugs, package 
org.apache.ofbiz.base.util.cache.
(OFBIZ-9575)

Thanks Dennis Balkir for reporting and providing the patch.

Modified:
    ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/cache/CacheSoftReference.java
    ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/cache/UtilCache.java

Modified: ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/cache/CacheSoftReference.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/cache/CacheSoftReference.java?rev=1811415&r1=1811414&r2=1811415&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/cache/CacheSoftReference.java (original)
+++ ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/cache/CacheSoftReference.java Sat Oct  7 12:26:35 2017
@@ -41,7 +41,7 @@ public abstract class CacheSoftReference
     }
 
     @Override
-    public void finalize() throws Throwable {
+    protected void finalize() throws Throwable {
         if (Debug.verboseOn()) {
             Debug.logVerbose(new Exception("UtilCache.CacheSoftRef.finalize()"), "Finalize UtilCache SoftReference - " + get(), module);
         }

Modified: ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/cache/UtilCache.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/cache/UtilCache.java?rev=1811415&r1=1811414&r2=1811415&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/cache/UtilCache.java (original)
+++ ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/cache/UtilCache.java Sat Oct  7 12:26:35 2017
@@ -20,6 +20,7 @@ package org.apache.ofbiz.base.util.cache
 
 import java.io.NotSerializableException;
 import java.io.Serializable;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -66,10 +67,10 @@ public class UtilCache<K, V> implements
     public static final String module = UtilCache.class.getName();
 
     /** A static Map to keep track of all of the UtilCache instances. */
-    private static final ConcurrentHashMap<String, UtilCache<?, ?>> utilCacheTable = new ConcurrentHashMap<String, UtilCache<?, ?>>();
+    private static final ConcurrentHashMap<String, UtilCache<?, ?>> utilCacheTable = new ConcurrentHashMap<>();
 
     /** An index number appended to utilCacheTable names when there are conflicts. */
-    private final static ConcurrentHashMap<String, AtomicInteger> defaultIndices = new ConcurrentHashMap<String, AtomicInteger>();
+    private final static ConcurrentHashMap<String, AtomicInteger> defaultIndices = new ConcurrentHashMap<>();
 
     /** The name of the UtilCache instance, is also the key for the instance in utilCacheTable. */
     private final String name;
@@ -104,7 +105,7 @@ public class UtilCache<K, V> implements
     protected boolean useSoftReference = false;
 
     /** The set of listeners to receive notifications when items are modified (either deliberately or because they were expired). */
-    protected Set<CacheListener<K, V>> listeners = new CopyOnWriteArraySet<CacheListener<K, V>>();
+    protected Set<CacheListener<K, V>> listeners = new CopyOnWriteArraySet<>();
 
     protected ConcurrentMap<Object, CacheLine<V>> memoryTable = null;
 
@@ -126,7 +127,7 @@ public class UtilCache<K, V> implements
         int maxMemSize = this.maxInMemory;
         if (maxMemSize == 0) maxMemSize = sizeLimit;
         if (maxMemSize == 0) {
-            memoryTable = new ConcurrentHashMap<Object, CacheLine<V>>();
+            memoryTable = new ConcurrentHashMap<>();
         } else {
             memoryTable = new Builder<Object, CacheLine<V>>()
             .maximumWeightedCapacity(maxMemSize)
@@ -157,7 +158,7 @@ public class UtilCache<K, V> implements
                 }
             }
         } catch (Exception e) {
-            Debug.logWarning(e, "Error getting " + parameter + " value from ResourceBundle for propNames: " + propNames, module);
+            Debug.logWarning(e, "Error getting " + parameter + " value from ResourceBundle for propNames: " + Arrays.toString(propNames), module);
         }
         return null;
     }
@@ -234,12 +235,10 @@ public class UtilCache<K, V> implements
                 if (useSoftReference) {
                     if (differentExpireTime(expireTimeNanos)) {
                         return this;
-                    } else {
-                        return createSoftRefCacheLine(key, getValue(), loadTimeNanos, expireTimeNanos);
                     }
-                } else {
-                    return createHardRefCacheLine(key, getValue(), loadTimeNanos, expireTimeNanos);
+                    return createSoftRefCacheLine(key, getValue(), loadTimeNanos, expireTimeNanos);
                 }
+                return createHardRefCacheLine(key, getValue(), loadTimeNanos, expireTimeNanos);
             }
 
             @Override
@@ -255,13 +254,11 @@ public class UtilCache<K, V> implements
             CacheLine<V> changeLine(boolean useSoftReference, long expireTimeNanos) {
                 if (useSoftReference) {
                     return createSoftRefCacheLine(key, getValue(), loadTimeNanos, expireTimeNanos);
-                } else {
-                    if (differentExpireTime(expireTimeNanos)) {
-                        return this;
-                    } else {
-                        return createHardRefCacheLine(key, getValue(), loadTimeNanos, expireTimeNanos);
-                    }
                 }
+                if (differentExpireTime(expireTimeNanos)) {
+                    return this;
+                }
+                return createHardRefCacheLine(key, getValue(), loadTimeNanos, expireTimeNanos);
             }
 
             @Override
@@ -282,9 +279,8 @@ public class UtilCache<K, V> implements
         long loadTimeNanos = expireTimeNanos > 0 ? System.nanoTime() : 0;
         if (useSoftReference) {
             return createSoftRefCacheLine(key, value, loadTimeNanos, expireTimeNanos);
-        } else {
-            return createHardRefCacheLine(key, value, loadTimeNanos, expireTimeNanos);
         }
+        return createHardRefCacheLine(key, value, loadTimeNanos, expireTimeNanos);
     }
     private V cancel(CacheLine<V> line) {
         // FIXME: this is a race condition, the item could expire
@@ -315,10 +311,9 @@ public class UtilCache<K, V> implements
         if (oldValue == null) {
             noteAddition(key, value);
             return null;
-        } else {
-            noteUpdate(key, value, oldValue);
-            return oldValue;
         }
+        noteUpdate(key, value, oldValue);
+        return oldValue;
     }
 
     V putIfAbsentInternal(K key, V value, long expireTimeNanos) {
@@ -335,9 +330,8 @@ public class UtilCache<K, V> implements
         if (oldValue == null) {
             noteAddition(key, value);
             return null;
-        } else {
-            return oldValue;
         }
+        return oldValue;
     }
 
     /** Gets an element from the cache according to the specified key.
@@ -357,7 +351,7 @@ public class UtilCache<K, V> implements
     }
 
     public Collection<V> values() {
-        List<V> valuesList = new LinkedList<V>();
+        List<V> valuesList = new LinkedList<>();
         for (CacheLine<V> line: memoryTable.values()) {
             valuesList.add(line.getValue());
         }
@@ -365,17 +359,16 @@ public class UtilCache<K, V> implements
     }
 
     private long findSizeInBytes(Object o) {
+        if (o == null) {
+            if (Debug.infoOn()) Debug.logInfo("Found null object in cache: " + getName(), module);
+            return 0;
+        }
         try {
-            if (o == null) {
-                if (Debug.infoOn()) Debug.logInfo("Found null object in cache: " + getName(), module);
-                return 0;
-            }
             if (o instanceof Serializable) {
                 return UtilObject.getByteCount(o);
-            } else {
-                if (Debug.infoOn()) Debug.logInfo("Unable to compute memory size for non serializable object; returning 0 byte size for object of " + o.getClass(), module);
-                return 0;
             }
+            if (Debug.infoOn()) Debug.logInfo("Unable to compute memory size for non serializable object; returning 0 byte size for object of " + o.getClass(), module);
+            return 0;
         } catch (NotSerializableException e) {
             // this happens when we try to get the byte count for an object which itself is
             // serializable, but fails to be serialized, such as a map holding unserializable objects
@@ -423,10 +416,9 @@ public class UtilCache<K, V> implements
             noteRemoval((K) key, oldValue);
             if (countRemove) removeHitCount.incrementAndGet();
             return oldValue;
-        } else {
-            if (countRemove) removeMissCount.incrementAndGet();
-            return null;
         }
+        if (countRemove) removeMissCount.incrementAndGet();
+        return null;
     }
 
     protected synchronized void removeInternal(Object key, CacheLine<V> existingCacheLine) {
@@ -463,7 +455,7 @@ public class UtilCache<K, V> implements
     }
 
     public static Set<String> getUtilCacheTableKeySet() {
-        Set<String> set = new HashSet<String>(utilCacheTable.size());
+        Set<String> set = new HashSet<>(utilCacheTable.size());
         set.addAll(utilCacheTable.keySet());
         return set;
     }
@@ -537,13 +529,12 @@ public class UtilCache<K, V> implements
             if (this.memoryTable instanceof ConcurrentLinkedHashMap<?, ?>) {
                 ((ConcurrentLinkedHashMap<?, ?>) this.memoryTable).setCapacity(newInMemory);
                 return;
-            } else {
-                this.memoryTable =new Builder<Object, CacheLine<V>>()
+            }
+            this.memoryTable =new Builder<Object, CacheLine<V>>()
                     .maximumWeightedCapacity(newInMemory)
                     .build();
-            }
         } else {
-            this.memoryTable = new ConcurrentHashMap<Object, CacheLine<V>>();
+            this.memoryTable = new ConcurrentHashMap<>();
         }
 
         this.memoryTable.putAll(oldmap);
@@ -627,7 +618,7 @@ public class UtilCache<K, V> implements
         Set<Object> keys;
 
         if (memoryTable.containsKey(ObjectType.NULL)) {
-            keys = new HashSet<Object>(memoryTable.keySet());
+            keys = new HashSet<>(memoryTable.keySet());
             keys.remove(ObjectType.NULL);
             keys.add(null);
         } else {
@@ -642,7 +633,7 @@ public class UtilCache<K, V> implements
     }
 
     private Map<String, Object> createLineInfo(int keyNum, K key, CacheLine<V> line) {
-        Map<String, Object> lineInfo = new HashMap<String, Object>();
+        Map<String, Object> lineInfo = new HashMap<>();
         lineInfo.put("elementKey", key);
 
         if (line.getLoadTimeNanos() > 0) {
@@ -654,7 +645,7 @@ public class UtilCache<K, V> implements
     }
 
     public Collection<? extends Map<String, Object>> getLineInfos() {
-        List<Map<String, Object>> lineInfos = new LinkedList<Map<String, Object>>();
+        List<Map<String, Object>> lineInfos = new LinkedList<>();
         int keyIndex = 0;
         for (K key: getCacheLineKeys()) {
             Object nulledKey = fromKey(key);
@@ -729,49 +720,49 @@ public class UtilCache<K, V> implements
         UtilCache<K, V> existingCache = (UtilCache<K, V>) utilCacheTable.get(name);
         if (existingCache != null) return existingCache;
         String cacheName = name + getNextDefaultIndex(name);
-        UtilCache<K, V> newCache = new UtilCache<K, V>(cacheName, sizeLimit, maxInMemory, expireTime, useSoftReference, name, names);
+        UtilCache<K, V> newCache = new UtilCache<>(cacheName, sizeLimit, maxInMemory, expireTime, useSoftReference, name, names);
         utilCacheTable.putIfAbsent(name, newCache);
         return (UtilCache<K, V>) utilCacheTable.get(name);
     }
 
     public static <K, V> UtilCache<K, V> createUtilCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, String... names) {
         String cacheName = name + getNextDefaultIndex(name);
-        return storeCache(new UtilCache<K, V>(cacheName, sizeLimit, maxInMemory, expireTime, useSoftReference, name, names));
+        return storeCache(new UtilCache<>(cacheName, sizeLimit, maxInMemory, expireTime, useSoftReference, name, names));
     }
 
     public static <K, V> UtilCache<K, V> createUtilCache(String name, int sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference) {
         String cacheName = name + getNextDefaultIndex(name);
-        return storeCache(new UtilCache<K, V>(cacheName, sizeLimit, maxInMemory, expireTime, useSoftReference, name));
+        return storeCache(new UtilCache<>(cacheName, sizeLimit, maxInMemory, expireTime, useSoftReference, name));
     }
 
     public static <K,V> UtilCache<K, V> createUtilCache(String name, int sizeLimit, long expireTime, boolean useSoftReference) {
         String cacheName = name + getNextDefaultIndex(name);
-        return storeCache(new UtilCache<K, V>(cacheName, sizeLimit, sizeLimit, expireTime, useSoftReference, name));
+        return storeCache(new UtilCache<>(cacheName, sizeLimit, sizeLimit, expireTime, useSoftReference, name));
     }
 
     public static <K,V> UtilCache<K, V> createUtilCache(String name, int sizeLimit, long expireTime) {
         String cacheName = name + getNextDefaultIndex(name);
-        return storeCache(new UtilCache<K, V>(cacheName, sizeLimit, sizeLimit, expireTime, false, name));
+        return storeCache(new UtilCache<>(cacheName, sizeLimit, sizeLimit, expireTime, false, name));
     }
 
     public static <K,V> UtilCache<K, V> createUtilCache(int sizeLimit, long expireTime) {
         String cacheName = "specified" + getNextDefaultIndex("specified");
-        return storeCache(new UtilCache<K, V>(cacheName, sizeLimit, sizeLimit, expireTime, false, "specified"));
+        return storeCache(new UtilCache<>(cacheName, sizeLimit, sizeLimit, expireTime, false, "specified"));
     }
 
     public static <K,V> UtilCache<K, V> createUtilCache(String name, boolean useSoftReference) {
         String cacheName = name + getNextDefaultIndex(name);
-        return storeCache(new UtilCache<K, V>(cacheName, 0, 0, 0, useSoftReference, "default", name));
+        return storeCache(new UtilCache<>(cacheName, 0, 0, 0, useSoftReference, "default", name));
     }
 
     public static <K,V> UtilCache<K, V> createUtilCache(String name) {
         String cacheName = name + getNextDefaultIndex(name);
-        return storeCache(new UtilCache<K, V>(cacheName, 0, 0, 0, false, "default", name));
+        return storeCache(new UtilCache<>(cacheName, 0, 0, 0, false, "default", name));
     }
 
     public static <K,V> UtilCache<K, V> createUtilCache() {
         String cacheName = "default" + getNextDefaultIndex("default");
-        return storeCache(new UtilCache<K, V>(cacheName, 0, 0, 0, false, "default"));
+        return storeCache(new UtilCache<>(cacheName, 0, 0, 0, false, "default"));
     }
 
     private static <K, V> UtilCache<K, V> storeCache(UtilCache<K, V> cache) {