diff --git a/api/src/main/java/org/sakaiproject/memory/api/MultiRefCache.java b/api/src/main/java/org/sakaiproject/memory/api/MultiRefCache.java index 16b42b8..e1aebed 100644 --- a/api/src/main/java/org/sakaiproject/memory/api/MultiRefCache.java +++ b/api/src/main/java/org/sakaiproject/memory/api/MultiRefCache.java @@ -45,4 +45,13 @@ public interface MultiRefCache extends Cache * AuthzGroup ids that, if the changed, will invalidate this entry. */ void put(Object key, Object payload, int duration, String ref, Collection azgIds); + + /** + * Cache an object that depends on more than just the key. This doesn't just work for + * authz but anything. + * @param key The key with which to find the payload. + * @param payload The cached object. + * @param dependRefs All the references that this cached object depends on. + */ + void put(Object key, Object payload, String ref, Collection dependRefs); } diff --git a/kernel-impl/src/main/java/org/sakaiproject/memory/impl/MultiRefCacheImpl.java b/kernel-impl/src/main/java/org/sakaiproject/memory/impl/MultiRefCacheImpl.java index 12a19f8..5fc0e5f 100644 --- a/kernel-impl/src/main/java/org/sakaiproject/memory/impl/MultiRefCacheImpl.java +++ b/kernel-impl/src/main/java/org/sakaiproject/memory/impl/MultiRefCacheImpl.java @@ -148,21 +148,29 @@ public class MultiRefCacheImpl extends MemCache implements MultiRefCache, azgRefs.add(m_authzGroupService.authzGroupReference(azgId)); } } - - // create our extended cache entry for the cache map - the reference strings are recorded - super.put(key, new MultiRefCacheEntry(payload, duration, ref, azgRefs)); - + put(key, payload, ref, azgRefs); + } + + public void put(Object key, Object payload, String ref, Collection dependRefs) + { + if(M_log.isDebugEnabled()) + { + M_log.debug("put(Object " + key + ", Object " + payload + +", Dependent Refs " + dependRefs + ")"); + } + if (disabled()) return; + // Durations don't work any more (hence 0 duration). + super.put(key, new MultiRefCacheEntry(payload, 0, ref, dependRefs)); if (ref != null) { addRefCachedKey(ref, key); } - - if (azgRefs != null) + if (dependRefs != null) { - for (Iterator i = azgRefs.iterator(); i.hasNext();) + for (Iterator i = dependRefs.iterator(); i.hasNext();) { - String azgRef = (String) i.next(); - addRefCachedKey(azgRef, key); + String dependRef = (String) i.next(); + addRefCachedKey(dependRef, key); } } }