Package org.apache.cayenne.cache
Class MapQueryCache
- java.lang.Object
-
- org.apache.cayenne.cache.MapQueryCache
-
- All Implemented Interfaces:
Serializable
,QueryCache
public class MapQueryCache extends Object implements QueryCache, Serializable
A default implementation of theQueryCache
interface that stores data in a non-expiring LRUMap.- Since:
- 3.0
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected Map<String,Map<String,List<?>>>
cacheGroups
static int
DEFAULT_CACHE_SIZE
-
Constructor Summary
Constructors Constructor Description MapQueryCache()
MapQueryCache(int maxSize)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected String
cacheName(QueryMetadata metadata)
void
clear()
Clears all cache entries.protected Map<String,List<?>>
createCache(String cacheName)
protected Map<String,List<?>>
createIfAbsent(String cacheName)
protected Map<String,List<?>>
createIfAbsent(QueryMetadata metadata)
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 non-null cached value.protected Map<String,List<?>>
getCache(String name)
void
put(QueryMetadata metadata, List results)
void
remove(String key)
Removes a single entry from cache.void
removeGroup(String groupKey)
Removes a group of entries identified by group key.void
removeGroup(String groupKey, Class<?> keyType, Class<?> valueType)
Removes a group of entries identified by group key.int
size()
-
-
-
Method Detail
-
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 interfaceQueryCache
-
get
public List get(QueryMetadata metadata, QueryCacheEntryFactory factory)
Returns a non-null cached value. If it is not present in the cache, it is obtained by callingQueryCacheEntryFactory.createObject()
without blocking the cache. As a result there is a potential of multiple threads to be updating cache in parallel - this wouldn't lead to corruption of the cache, but can be suboptimal.- Specified by:
get
in interfaceQueryCache
-
put
public void put(QueryMetadata metadata, List results)
- Specified by:
put
in interfaceQueryCache
-
remove
public void remove(String key)
Description copied from interface:QueryCache
Removes a single entry from cache.- Specified by:
remove
in interfaceQueryCache
-
removeGroup
public void removeGroup(String groupKey)
Description copied from interface:QueryCache
Removes a group of entries identified by group key. Note that depending on implementation this method may either actively remove the entries belonging to the group or just mark them as expired, so that they are refreshed on the next access. In the former case the cache size would shrink, but in the later the cache size will not change after calling this method.- Specified by:
removeGroup
in interfaceQueryCache
-
removeGroup
public void removeGroup(String groupKey, Class<?> keyType, Class<?> valueType)
Description copied from interface:QueryCache
Removes a group of entries identified by group key. Can be used if cache provider supports strictly typed caches.- Specified by:
removeGroup
in interfaceQueryCache
- See Also:
QueryCache.removeGroup(String)
-
clear
public void clear()
Description copied from interface:QueryCache
Clears all cache entries.- Specified by:
clear
in interfaceQueryCache
-
size
public int size()
-
createIfAbsent
protected Map<String,List<?>> createIfAbsent(QueryMetadata metadata)
-
cacheName
protected String cacheName(QueryMetadata metadata)
-
-