org.apache.cayenne.cache
Class NestedQueryCache

java.lang.Object
  extended by org.apache.cayenne.cache.NestedQueryCache
All Implemented Interfaces:
QueryCache

public class NestedQueryCache
extends Object
implements QueryCache

A QueryCache wrapper that introduces a key namespace on top of a delegate shared cache. This way multiple cache users can share the same underlying cache without a possibility of key conflicts, yet refresh the cache groups in a coordinated fashion.

Since:
3.0

Field Summary
protected  QueryCache delegate
           
protected  String namespace
           
 
Constructor Summary
NestedQueryCache(QueryCache delegate)
           
 
Method Summary
 void clear()
          Clears the underlying shared cache.
 List get(QueryMetadata metadata)
          Returns a cached query result for the given QueryMetadata or null if the result is not cached or is expired.
 List get(QueryMetadata metadata, QueryCacheEntryFactory factory)
          Returns a cached query result for the given QueryMetadata.
 QueryCache getDelegate()
          Returns the actual implementation of the query cache that is wrapped by this NestedQueryCache.
 void put(QueryMetadata metadata, List results)
           
 void remove(String key)
          Removes an entry for key in the current namespace.
 void removeGroup(String groupKey)
          Invalidates a shared cache group.
 int size()
          Returns a shared cache size.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

delegate

protected QueryCache delegate

namespace

protected String namespace
Constructor Detail

NestedQueryCache

public NestedQueryCache(QueryCache delegate)
Method Detail

getDelegate

public QueryCache getDelegate()
Returns the actual implementation of the query cache that is wrapped by this NestedQueryCache.


clear

public void clear()
Clears the underlying shared cache.

Specified by:
clear in interface QueryCache

get

public List get(QueryMetadata metadata,
                QueryCacheEntryFactory factory)
Description copied from interface: QueryCache
Returns a cached query result for the given QueryMetadata. If the result is not cached or is expired, cache will use provided factory to rebuild the value and store it in the cache. A corollary is that this method never returns null.

Compared to QueryCache.get(QueryMetadata), this method allows the cache to do appropriate synchronization when refreshing the entry, preventing multiple threads from running the same query when a missing entry is requested by multiple threads simultaneously.

Specified by:
get in interface QueryCache

get

public List get(QueryMetadata metadata)
Description copied from interface: QueryCache
Returns a cached query result for the given QueryMetadata or null if the result is not cached or is expired.

Specified by:
get in interface QueryCache

put

public void put(QueryMetadata metadata,
                List results)
Specified by:
put in interface QueryCache

remove

public void remove(String key)
Removes an entry for key in the current namespace.

Specified by:
remove in interface QueryCache

removeGroup

public void removeGroup(String groupKey)
Invalidates a shared cache group.

Specified by:
removeGroup in interface QueryCache

size

public int size()
Returns a shared cache size.

Specified by:
size in interface QueryCache


Copyright © 2001-2011 Apache Cayenne. All Rights Reserved.