Package org.apache.openjpa.datacache
Class AbstractQueryCache
- java.lang.Object
-
- org.apache.openjpa.lib.util.concurrent.AbstractConcurrentEventManager
-
- org.apache.openjpa.datacache.AbstractQueryCache
-
- All Implemented Interfaces:
java.io.Serializable
,QueryCache
,TypesChangedListener
,Configurable
,Closeable
,EventManager
- Direct Known Subclasses:
ConcurrentQueryCache
public abstract class AbstractQueryCache extends AbstractConcurrentEventManager implements QueryCache, Configurable
AbstractQueryCache
implementation that provides various statistics, logging, and timeout functionality common across cache implementations.- Author:
- Patrick Linskey, Abe White
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
AbstractQueryCache.Default<T>
A default implementation of query statistics for the Query result cache.static class
AbstractQueryCache.EvictPolicy
-
Field Summary
Fields Modifier and Type Field Description protected OpenJPAConfiguration
conf
The configuration set by the system.protected java.util.concurrent.ConcurrentHashMap<java.lang.String,java.lang.Long>
entityTimestampMap
AbstractQueryCache.EvictPolicy
evictPolicy
protected Log
log
The log to use.-
Fields inherited from class org.apache.openjpa.lib.util.concurrent.AbstractConcurrentEventManager
_listeners
-
-
Constructor Summary
Constructors Constructor Description AbstractQueryCache()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
addTypesChangedListener(TypesChangedListener listen)
Add a new types event listener to this cache.void
afterCommit(RemoteCommitEvent event)
This method is part of theRemoteCommitListener
interface.void
clear()
Remove all data from this cache.protected abstract void
clearInternal()
Clear the cache.void
close()
Free the resources used by this cache.protected void
close(boolean clear)
int
count()
void
endConfiguration()
Invoked upon completion of bean property configuration for this object.protected void
fireEvent(java.lang.Object event, java.lang.Object listener)
Implement this method to fire the given event to the given listener.QueryResult
get(QueryKey key)
Return a list of oids for the given query key.java.util.List<java.lang.Long>
getAllEntityTimestamp(java.util.List<java.lang.String> keyList)
Returns a list of timestamps in the form of Long objects which are the last updated time stamps for the given entities in the keylist.boolean
getEnableStatistics()
AbstractQueryCache.EvictPolicy
getEvictPolicy()
Returns the evictionPolicy for QueryCacheprotected abstract QueryResult
getInternal(QueryKey qk)
Return the list for the given key.java.lang.String
getName()
QueryStatistics<QueryKey>
getStatistics()
Gets the simple statistics for query results.void
initialize(DataCacheManager manager)
Initialize any resources associated with the givenDataCacheManager
.boolean
isClosed()
protected abstract java.util.Collection
keySet()
Return a threadsafe view of the keys in this cache.protected java.util.Collection
newListenerCollection()
Individual query results will be registered as types changed listeners.void
onTypesChanged(TypesChangedEvent ev)
Notification that instances of persistent types have changed.boolean
pin(QueryKey key)
Pin the value stored underqk
into the cache.protected abstract boolean
pinInternal(QueryKey qk)
Pin an object to the cache.QueryResult
put(QueryKey qk, QueryResult oids)
Set the list of OIDs for the given query key.protected abstract QueryResult
putInternal(QueryKey qk, QueryResult oids)
Add the given result to the cache, returning the old result under the given key.QueryResult
remove(QueryKey key)
Remove the value stored under the given query key.protected void
removeAllInternal(java.util.Collection qks)
Remove all results under the given keys from the cache.protected abstract QueryResult
removeInternal(QueryKey qk)
Remove the result under the given key from the cache.boolean
removeTypesChangedListener(TypesChangedListener listen)
Remove an types event listener from this cache.void
setConfiguration(Configuration conf)
Invoked prior to setting bean properties.void
setEnableStatistics(boolean enable)
void
setEvictPolicy(java.lang.String evictPolicy)
Sets the eviction policy for the query cachevoid
setName(java.lang.String n)
void
startConfiguration()
Invoked before bean property configuration is begun on this object.boolean
unpin(QueryKey key)
Unpin the value stored underkey
into the cache.protected abstract boolean
unpinInternal(QueryKey qk)
Unpin an object from the cache.protected void
updateEntityTimestamp(java.util.Map<java.lang.String,java.lang.Long> timestampMap)
Updates the entity timestamp map with the current time in milliseconds-
Methods inherited from class org.apache.openjpa.lib.util.concurrent.AbstractConcurrentEventManager
addListener, fireEvent, getListeners, hasListener, hasListeners, isFailFast, removeListener, setFailFast
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.openjpa.datacache.QueryCache
writeLock, writeUnlock
-
-
-
-
Field Detail
-
conf
protected OpenJPAConfiguration conf
The configuration set by the system.
-
log
protected Log log
The log to use.
-
entityTimestampMap
protected java.util.concurrent.ConcurrentHashMap<java.lang.String,java.lang.Long> entityTimestampMap
-
evictPolicy
public AbstractQueryCache.EvictPolicy evictPolicy
-
-
Method Detail
-
setEnableStatistics
public void setEnableStatistics(boolean enable)
-
getEnableStatistics
public boolean getEnableStatistics()
-
getStatistics
public QueryStatistics<QueryKey> getStatistics()
Description copied from interface:QueryCache
Gets the simple statistics for query results. If the statistics gathering is disabled, an empty statistics is returned.- Specified by:
getStatistics
in interfaceQueryCache
-
initialize
public void initialize(DataCacheManager manager)
Description copied from interface:QueryCache
Initialize any resources associated with the givenDataCacheManager
.- Specified by:
initialize
in interfaceQueryCache
-
onTypesChanged
public void onTypesChanged(TypesChangedEvent ev)
Description copied from interface:TypesChangedListener
Notification that instances of persistent types have changed.- Specified by:
onTypesChanged
in interfaceTypesChangedListener
-
get
public QueryResult get(QueryKey key)
Description copied from interface:QueryCache
Return a list of oids for the given query key. This is an unmodifiable list.- Specified by:
get
in interfaceQueryCache
- Returns:
- The query results matching the given key, or null if none
-
put
public QueryResult put(QueryKey qk, QueryResult oids)
Description copied from interface:QueryCache
Set the list of OIDs for the given query key. A reference to the given list will be stored in the query cache, so the list should not be modified after invoking this method.- Specified by:
put
in interfaceQueryCache
- Returns:
- The previously cached value, or
null
if the key was not previously cached. SeeMap.put(K, V)
for more information.
-
remove
public QueryResult remove(QueryKey key)
Description copied from interface:QueryCache
Remove the value stored under the given query key. This method is typically not invoked directly from outside theQueryCache
class. Instead, the cache should be updated by implementingRemoteCommitListener
, which will result in all queries that may be invalid being dropped.- Specified by:
remove
in interfaceQueryCache
- Returns:
- The previously cached value, or
null
if the key was not previously cached. SeeMap.remove(java.lang.Object)
for more information.
-
pin
public boolean pin(QueryKey key)
Description copied from interface:QueryCache
Pin the value stored underqk
into the cache. This method guarantees thatqk
's value will not be expired if the cache exceeds its capacity. It causes this data to be ignored when determining whether or not the cache is full, effectively increasing the total amount of data stored in the cache. This method does not affect the behavior ofQueryCache.remove(org.apache.openjpa.datacache.QueryKey)
orTypesChangedListener.onTypesChanged(org.apache.openjpa.datacache.TypesChangedEvent)
.- Specified by:
pin
in interfaceQueryCache
- Returns:
true
ifkey
's value was pinned into the cache;false
if the key is not in the cache.
-
unpin
public boolean unpin(QueryKey key)
Description copied from interface:QueryCache
Unpin the value stored underkey
into the cache. This method reverses a previous invocation ofQueryCache.pin(org.apache.openjpa.datacache.QueryKey)
. This method does not remove anything from the cache; it merely makeskey
's value a candidate for flushing from the cache.- Specified by:
unpin
in interfaceQueryCache
- Returns:
true
ifkey
's value was unpinned from the cache;false
if the key is not in the cache.
-
clear
public void clear()
Description copied from interface:QueryCache
Remove all data from this cache.- Specified by:
clear
in interfaceQueryCache
-
close
public void close()
Description copied from interface:QueryCache
Free the resources used by this cache.- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceQueryCache
-
close
protected void close(boolean clear)
-
isClosed
public boolean isClosed()
-
addTypesChangedListener
public void addTypesChangedListener(TypesChangedListener listen)
Description copied from interface:QueryCache
Add a new types event listener to this cache.- Specified by:
addTypesChangedListener
in interfaceQueryCache
-
removeTypesChangedListener
public boolean removeTypesChangedListener(TypesChangedListener listen)
Description copied from interface:QueryCache
Remove an types event listener from this cache.- Specified by:
removeTypesChangedListener
in interfaceQueryCache
-
afterCommit
public void afterCommit(RemoteCommitEvent event)
This method is part of theRemoteCommitListener
interface. If your cache subclass relies on OpenJPA for clustering support, make it implementRemoteCommitListener
. This method will take care of invalidating entries from remote commits, by delegating toonTypesChanged(org.apache.openjpa.datacache.TypesChangedEvent)
.
-
keySet
protected abstract java.util.Collection keySet()
Return a threadsafe view of the keys in this cache. This collection must be iterable without risk of concurrent modification exceptions. It does not have to implement contains() efficiently or use set semantics.
-
getInternal
protected abstract QueryResult getInternal(QueryKey qk)
Return the list for the given key.
-
putInternal
protected abstract QueryResult putInternal(QueryKey qk, QueryResult oids)
Add the given result to the cache, returning the old result under the given key.
-
removeInternal
protected abstract QueryResult removeInternal(QueryKey qk)
Remove the result under the given key from the cache.
-
removeAllInternal
protected void removeAllInternal(java.util.Collection qks)
Remove all results under the given keys from the cache.
-
clearInternal
protected abstract void clearInternal()
Clear the cache.
-
pinInternal
protected abstract boolean pinInternal(QueryKey qk)
Pin an object to the cache.
-
unpinInternal
protected abstract boolean unpinInternal(QueryKey qk)
Unpin an object from the cache.
-
setConfiguration
public void setConfiguration(Configuration conf)
Description copied from interface:Configurable
Invoked prior to setting bean properties.- Specified by:
setConfiguration
in interfaceConfigurable
-
startConfiguration
public void startConfiguration()
Description copied from interface:Configurable
Invoked before bean property configuration is begun on this object.- Specified by:
startConfiguration
in interfaceConfigurable
-
endConfiguration
public void endConfiguration()
Description copied from interface:Configurable
Invoked upon completion of bean property configuration for this object.- Specified by:
endConfiguration
in interfaceConfigurable
-
fireEvent
protected void fireEvent(java.lang.Object event, java.lang.Object listener)
Description copied from class:AbstractConcurrentEventManager
Implement this method to fire the given event to the given listener.- Specified by:
fireEvent
in classAbstractConcurrentEventManager
-
newListenerCollection
protected java.util.Collection newListenerCollection()
Individual query results will be registered as types changed listeners. We want such query results to be gc'd once the only reference is held by the list of expiration listeners.- Overrides:
newListenerCollection
in classAbstractConcurrentEventManager
-
setEvictPolicy
public void setEvictPolicy(java.lang.String evictPolicy)
Sets the eviction policy for the query cache- Parameters:
evictPolicy
- -- String value that specifies the eviction policy
-
getEvictPolicy
public AbstractQueryCache.EvictPolicy getEvictPolicy()
Returns the evictionPolicy for QueryCache- Returns:
- -- returns a String value of evictPolicy attribute
-
updateEntityTimestamp
protected void updateEntityTimestamp(java.util.Map<java.lang.String,java.lang.Long> timestampMap)
Updates the entity timestamp map with the current time in milliseconds- Parameters:
timestampMap
- -- a map that contains entityname and its last updated timestamp
-
getAllEntityTimestamp
public java.util.List<java.lang.Long> getAllEntityTimestamp(java.util.List<java.lang.String> keyList)
Returns a list of timestamps in the form of Long objects which are the last updated time stamps for the given entities in the keylist.- Parameters:
keyList
- -- List of entity names- Returns:
- -- Returns a list that has the timestamp for the given entities
-
setName
public void setName(java.lang.String n)
-
getName
public java.lang.String getName()
-
count
public int count()
-
-