From 6ee97b26258d46fb4598c74b3fe4528e6c9d56b6 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Thu, 22 Aug 2013 09:21:17 +0000 Subject: [PATCH] ALF-19779: Stack specific: Caches are no synchronized between the nodes git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@54391 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/cache/DefaultSimpleCache.java | 15 ++++++- .../repo/cache/DefaultSimpleCacheTest.java | 39 +++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) 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