diff --git a/source/java/org/alfresco/repo/cache/lookup/EntityLookupCache.java b/source/java/org/alfresco/repo/cache/lookup/EntityLookupCache.java index a935cb2675..bc02d1f67b 100644 --- a/source/java/org/alfresco/repo/cache/lookup/EntityLookupCache.java +++ b/source/java/org/alfresco/repo/cache/lookup/EntityLookupCache.java @@ -621,6 +621,21 @@ public class EntityLookupCache + * NOTE: This operation removes ALL entries for ALL cache regions. + */ + public void clear() + { + // Handle missing cache + if (cache == null) + { + return; + } + cache.clear(); + } + /** * Key-wrapper used to separate cache regions, allowing a single cache to be used for different * purposes. diff --git a/source/java/org/alfresco/repo/cache/lookup/EntityLookupCacheTest.java b/source/java/org/alfresco/repo/cache/lookup/EntityLookupCacheTest.java index 8cfe9f67fd..5a8c338a6b 100644 --- a/source/java/org/alfresco/repo/cache/lookup/EntityLookupCacheTest.java +++ b/source/java/org/alfresco/repo/cache/lookup/EntityLookupCacheTest.java @@ -213,6 +213,21 @@ public class EntityLookupCacheTest extends TestCase implements EntityLookupCallb assertNull(database.get(id)); assertEquals(0, cache.getKeys().size()); } + + public void testClear() throws Exception + { + TestValue valueOne = new TestValue(getName() + "-ONE"); + Pair entityPairOne = entityLookupCacheA.getOrCreateByValue(valueOne); + assertNotNull(entityPairOne); + Long id = entityPairOne.getFirst(); + assertEquals(valueOne.val, database.get(id)); + assertEquals(2, cache.getKeys().size()); + + // Clear it + entityLookupCacheA.clear(); + assertEquals(valueOne.val, database.get(id)); // Must still be in database + assertEquals(0, cache.getKeys().size()); // ... but cache must be empty + } /** * Helper class to represent business object