diff --git a/source/java/org/alfresco/repo/cache/DefaultSimpleCache.java b/source/java/org/alfresco/repo/cache/DefaultSimpleCache.java index 5c9861622f..6d75d23301 100644 --- a/source/java/org/alfresco/repo/cache/DefaultSimpleCache.java +++ b/source/java/org/alfresco/repo/cache/DefaultSimpleCache.java @@ -96,10 +96,21 @@ public final class DefaultSimpleCache @Override public void put(K key, V value) { - AbstractMap.SimpleImmutableEntry kvp = new AbstractMap.SimpleImmutableEntry(key, value); - map.put(key, kvp); + putAndCheckUpdate(key, value); } + /** + * put method that may be used to check for updates in a thread-safe manner. + * + * @return true if the put resulted in a change in value, false otherwise. + */ + public boolean putAndCheckUpdate(K key, V value) + { + AbstractMap.SimpleImmutableEntry kvp = new AbstractMap.SimpleImmutableEntry(key, value); + AbstractMap.SimpleImmutableEntry priorKVP = map.put(key, kvp); + return priorKVP != null && (! priorKVP.equals(kvp)); + } + @Override public void remove(K key) { diff --git a/source/test-java/org/alfresco/repo/cache/DefaultSimpleCacheTest.java b/source/test-java/org/alfresco/repo/cache/DefaultSimpleCacheTest.java index 07f308e56e..1299eda236 100644 --- a/source/test-java/org/alfresco/repo/cache/DefaultSimpleCacheTest.java +++ b/source/test-java/org/alfresco/repo/cache/DefaultSimpleCacheTest.java @@ -62,4 +62,43 @@ public class DefaultSimpleCacheTest extends SimpleCacheTestBase