Package org.apache.openjpa.datacache
Class AbstractDataCache
- java.lang.Object
-
- org.apache.openjpa.lib.util.concurrent.AbstractConcurrentEventManager
-
- org.apache.openjpa.datacache.AbstractDataCache
-
- All Implemented Interfaces:
java.io.Serializable
,DataCache
,Configurable
,Clearable
,Closeable
,EventManager
- Direct Known Subclasses:
ConcurrentDataCache
public abstract class AbstractDataCache extends AbstractConcurrentEventManager implements DataCache, Configurable
AbstractDataCache
implementation that provides various statistics, logging, and timeout functionality common across cache implementations.- Author:
- Patrick Linskey, Abe White
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected boolean
_evictOnBulkUpdate
protected java.util.Set<java.lang.String>
_excludedTypes
protected java.util.Set<java.lang.String>
_includedTypes
protected CacheStatisticsSPI
_stats
protected OpenJPAConfiguration
conf
The configuration set by the system.protected Log
log
The log to use.-
Fields inherited from class org.apache.openjpa.lib.util.concurrent.AbstractConcurrentEventManager
_listeners
-
Fields inherited from interface org.apache.openjpa.datacache.DataCache
NAME_DEFAULT
-
-
Constructor Summary
Constructors Constructor Description AbstractDataCache()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
addExpirationListener(ExpirationListener listen)
Add a new expiration 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)
void
commit(java.util.Collection<DataCachePCData> additions, java.util.Collection<DataCachePCData> newUpdates, java.util.Collection<DataCachePCData> existingUpdates, java.util.Collection<java.lang.Object> deletes)
Perform a batch update of the cache.boolean
contains(java.lang.Object key)
Returnstrue
if this cache contains data corresponding tooid
; otherwise returnsfalse
.java.util.BitSet
containsAll(java.util.Collection<java.lang.Object> keys)
Returns the indexes of the oids in this cache.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.DataCachePCData
get(java.lang.Object key)
Return the cached object for the given oid.java.util.Map<java.lang.Object,DataCachePCData>
getAll(java.util.List<java.lang.Object> keys)
Returns the objects for the given key List.void
getEnableStatistics()
java.lang.String
getEvictionSchedule()
boolean
getEvictOnBulkUpdate()
Returns whether the the cache needs to be updated when bulk updates as executed.java.util.Set<java.lang.String>
getExcludedTypes()
protected abstract DataCachePCData
getInternal(java.lang.Object oid)
Return the object for the given oid.java.lang.String
getName()
Returns a string name that can be used by end-user-visible code to identify this cache.DataCache
getPartition(java.lang.String name, boolean create)
Gets the named partition.java.util.Set<java.lang.String>
getPartitionNames()
Gets the name of the known partitions.CacheStatistics
getStatistics()
Returns number of read/write request and cache hit ratio data.java.util.Set<java.lang.String>
getTypes()
void
initialize(DataCacheManager manager)
Initialize any resources associated with the givenDataCacheManager
.boolean
isClosed()
boolean
isPartitioned()
Affirms if this cache maintains partitions.protected void
keyRemoved(java.lang.Object key, boolean expired)
Invoke when a key is removed from this cache.boolean
pin(java.lang.Object key)
Pin the value stored underoid
into the cache.void
pinAll(java.lang.Class<?> cls, boolean subs)
Pin all oids for the given type.java.util.BitSet
pinAll(java.util.Collection<java.lang.Object> keys)
Pin all oids to the cache.protected abstract boolean
pinInternal(java.lang.Object oid)
Pin an object to the cache.DataCachePCData
put(DataCachePCData data)
Set the cached value for the given instance.protected void
putAllInternal(java.util.Collection<DataCachePCData> pcs)
Add all of the given objects to the cache.protected abstract DataCachePCData
putInternal(java.lang.Object oid, DataCachePCData pc)
Add the given object to the cache, returning the old object under the given oid.protected boolean
recacheUpdates()
Returntrue
if updates to data already in the cache (either incommit(java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<java.lang.Object>)
or theupdate(org.apache.openjpa.datacache.DataCachePCData)
) should be put back into the cache.DataCachePCData
remove(java.lang.Object key)
Remove the value stored under the given oid.void
removeAll(java.lang.Class<?> cls, boolean subClasses)
Remove the objects of the given class from the cache.java.util.BitSet
removeAll(java.util.Collection<java.lang.Object> keys)
Remove the values stored under the given oids.protected abstract void
removeAllInternal(java.lang.Class<?> cls, boolean subclasses)
Evict objects in cache by class.protected void
removeAllInternal(java.util.Collection<java.lang.Object> oids)
Remove all objects under the given oids from the cache.protected void
removeAllTypeNamesInternal(java.util.Collection<java.lang.String> classNames)
Remove all objects of the given class names from the cache.boolean
removeExpirationListener(ExpirationListener listen)
Remove an expiration event listener from this cache.protected abstract DataCachePCData
removeInternal(java.lang.Object oid)
Remove the object under the given oid from the cache.DataCache
selectCache(OpenJPAStateManager sm)
void
setConfiguration(Configuration conf)
Invoked prior to setting bean properties.void
setEnableStatistics(boolean enable)
void
setEvictionSchedule(java.lang.String s)
void
setEvictOnBulkUpdate(boolean b)
void
setExcludedTypes(java.lang.String types)
void
setExcludedTypes(java.util.Set<java.lang.String> types)
void
setName(java.lang.String name)
Sets a string name to be used to identify this cache to end-user needs.void
setTypes(java.lang.String types)
void
setTypes(java.util.Set<java.lang.String> types)
void
startConfiguration()
Invoked before bean property configuration is begun on this object.java.lang.String
toString()
boolean
unpin(java.lang.Object key)
Unpin the value stored underoid
from the cache.void
unpinAll(java.lang.Class<?> cls, boolean subs)
Unpin all oids associaed with the given type from the cache.java.util.BitSet
unpinAll(java.util.Collection<java.lang.Object> keys)
Unpin all oids from the cache.protected abstract boolean
unpinInternal(java.lang.Object oid)
Unpin an object from the cache.void
update(DataCachePCData data)
Update the cached value for the given instance.-
Methods inherited from class org.apache.openjpa.lib.util.concurrent.AbstractConcurrentEventManager
addListener, fireEvent, getListeners, hasListener, hasListeners, isFailFast, newListenerCollection, removeListener, setFailFast
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.openjpa.datacache.DataCache
writeLock, writeUnlock
-
-
-
-
Field Detail
-
_stats
protected CacheStatisticsSPI _stats
-
conf
protected OpenJPAConfiguration conf
The configuration set by the system.
-
log
protected Log log
The log to use.
-
_includedTypes
protected java.util.Set<java.lang.String> _includedTypes
-
_excludedTypes
protected java.util.Set<java.lang.String> _excludedTypes
-
_evictOnBulkUpdate
protected boolean _evictOnBulkUpdate
-
-
Method Detail
-
getName
public java.lang.String getName()
Description copied from interface:DataCache
Returns a string name that can be used by end-user-visible code to identify this cache.
-
setName
public void setName(java.lang.String name)
Description copied from interface:DataCache
Sets a string name to be used to identify this cache to end-user needs.
-
setEnableStatistics
public void setEnableStatistics(boolean enable)
-
getEnableStatistics
public void getEnableStatistics()
-
getEvictionSchedule
public java.lang.String getEvictionSchedule()
-
setEvictionSchedule
public void setEvictionSchedule(java.lang.String s)
-
initialize
public void initialize(DataCacheManager manager)
Description copied from interface:DataCache
Initialize any resources associated with the givenDataCacheManager
.- Specified by:
initialize
in interfaceDataCache
-
commit
public void commit(java.util.Collection<DataCachePCData> additions, java.util.Collection<DataCachePCData> newUpdates, java.util.Collection<DataCachePCData> existingUpdates, java.util.Collection<java.lang.Object> deletes)
Description copied from interface:DataCache
Perform a batch update of the cache. Add allDataCachePCData
objects inadditions
and innewUpdates
, make the appropriate modifications to all DataCachePCDatas inexistingUpdates
, and delete all OIDs indeletes
. All changes made to cached data must be made via this method. It is this method that is responsible for performing any side-effects that should happen on meaningful cache changes. Implementations should bear in mind that thedeletes
collection may contain oids that are also in theadditions
map. This is possible because it is valid for a user to delete an object with a particular oid and then add that object in the same batch.- Specified by:
commit
in interfaceDataCache
- Parameters:
additions
- A collection ofDataCachePCData
objects. These represent data that have been newly created, and thus must be added to the cache.newUpdates
- A collection ofDataCachePCData
objects. These represent data that have been modified but were not originally in the cache, and thus must be added to the cache.existingUpdates
- A collection ofDataCachePCData
objects. These represent data that have been modified and were originally loaded from the cache. It is up to the cache implementation to decide if these values must be re-enlisted in the cache. Some caches may return live data fromDataCache.get(java.lang.Object)
invocations, in which case these values need not be re-enlisted.deletes
- A collection of object IDs that have been deleted and must therefore be dropped from the cache.
-
contains
public boolean contains(java.lang.Object key)
Description copied from interface:DataCache
Returnstrue
if this cache contains data corresponding tooid
; otherwise returnsfalse
.
-
containsAll
public java.util.BitSet containsAll(java.util.Collection<java.lang.Object> keys)
Description copied from interface:DataCache
Returns the indexes of the oids in this cache.- Specified by:
containsAll
in interfaceDataCache
-
get
public DataCachePCData get(java.lang.Object key)
Description copied from interface:DataCache
Return the cached object for the given oid. Modifying the returned object may or may not change the cached value; theDataCache.update(org.apache.openjpa.datacache.DataCachePCData)
method should be used to re-cache any changed objects.
-
getAll
public java.util.Map<java.lang.Object,DataCachePCData> getAll(java.util.List<java.lang.Object> keys)
Returns the objects for the given key List.
-
put
public DataCachePCData put(DataCachePCData data)
Description copied from interface:DataCache
Set the cached value for the given instance. This does not result in an update of other caches. Rather, it should only be used for loading clean data into the cache. Meaningful changes to the state of the cache should be made via theDataCache.commit(java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<java.lang.Object>)
method.
-
update
public void update(DataCachePCData data)
Description copied from interface:DataCache
Update the cached value for the given instance. This does not result in an update of other caches. Rather, it should only be used for loading clean data into the cache. Meaningful changes to the state of the cache should be made via theDataCache.commit(java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<java.lang.Object>)
method. A cache implementation may or may not return a live object fromDataCache.get(java.lang.Object)
invocations. If an object retrieved from aDataCache.get(java.lang.Object)
operation needs to be updated, this method can be invoked instead of invokingDataCache.put(org.apache.openjpa.datacache.DataCachePCData)
. The DataCache implementation can then make optimizations based on how itsDataCache.get(java.lang.Object)
method works.
-
remove
public DataCachePCData remove(java.lang.Object key)
Description copied from interface:DataCache
Remove the value stored under the given oid. This does not result in an update of other caches. Rather, it should only be used for removing data in the cache. Meaningful changes to the state of the cache should be made via theDataCache.commit(java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<java.lang.Object>)
method.
-
removeAll
public java.util.BitSet removeAll(java.util.Collection<java.lang.Object> keys)
Description copied from interface:DataCache
Remove the values stored under the given oids.- Specified by:
removeAll
in interfaceDataCache
- Returns:
- the indexes of the removed oids
- See Also:
DataCache.remove(java.lang.Object)
-
removeAll
public void removeAll(java.lang.Class<?> cls, boolean subClasses)
Remove the objects of the given class from the cache.
-
pin
public boolean pin(java.lang.Object key)
Description copied from interface:DataCache
Pin the value stored underoid
into the cache. This method guarantees thatoid
's value will not be dropped by the caching algorithm. This method does not affect the behavior ofDataCache.remove(java.lang.Object)
.
-
pinAll
public java.util.BitSet pinAll(java.util.Collection<java.lang.Object> keys)
Description copied from interface:DataCache
Pin all oids to the cache.- Specified by:
pinAll
in interfaceDataCache
- Returns:
- the indexes of the pinned oids
- See Also:
DataCache.pin(java.lang.Object)
-
pinAll
public void pinAll(java.lang.Class<?> cls, boolean subs)
Description copied from interface:DataCache
Pin all oids for the given type.
-
unpin
public boolean unpin(java.lang.Object key)
Description copied from interface:DataCache
Unpin the value stored underoid
from the cache. This method reverses a previous invocation ofDataCache.pin(java.lang.Object)
. This method does not remove anything from the cache; it merely makesoid
's value a candidate for flushing from the cache.
-
unpinAll
public java.util.BitSet unpinAll(java.util.Collection<java.lang.Object> keys)
Description copied from interface:DataCache
Unpin all oids from the cache.- Specified by:
unpinAll
in interfaceDataCache
- Returns:
- the indexes of the unpinned oids
- See Also:
DataCache.unpin(java.lang.Object)
-
unpinAll
public void unpinAll(java.lang.Class<?> cls, boolean subs)
Description copied from interface:DataCache
Unpin all oids associaed with the given type from the cache.
-
clear
public void clear()
Description copied from interface:DataCache
Remove all data from this cache. This does not result in an update of other caches. Rather, it should only be used for clearing the cache. Meaningful changes to the state of the cache should be made via theDataCache.commit(java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<java.lang.Object>)
method.
-
close
public void close()
Description copied from interface:DataCache
Free the resources used by this cache.
-
close
protected void close(boolean clear)
-
isClosed
public boolean isClosed()
-
addExpirationListener
public void addExpirationListener(ExpirationListener listen)
Description copied from interface:DataCache
Add a new expiration event listener to this cache.- Specified by:
addExpirationListener
in interfaceDataCache
-
removeExpirationListener
public boolean removeExpirationListener(ExpirationListener listen)
Description copied from interface:DataCache
Remove an expiration event listener from this cache.- Specified by:
removeExpirationListener
in interfaceDataCache
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
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.
-
keyRemoved
protected void keyRemoved(java.lang.Object key, boolean expired)
Invoke when a key is removed from this cache. Propagates the expiration event on to all expiration listeners registered with this class.
-
recacheUpdates
protected boolean recacheUpdates()
Returntrue
if updates to data already in the cache (either incommit(java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<org.apache.openjpa.datacache.DataCachePCData>, java.util.Collection<java.lang.Object>)
or theupdate(org.apache.openjpa.datacache.DataCachePCData)
) should be put back into the cache. Returns false by default.
-
getInternal
protected abstract DataCachePCData getInternal(java.lang.Object oid)
Return the object for the given oid.
-
putInternal
protected abstract DataCachePCData putInternal(java.lang.Object oid, DataCachePCData pc)
Add the given object to the cache, returning the old object under the given oid.
-
putAllInternal
protected void putAllInternal(java.util.Collection<DataCachePCData> pcs)
Add all of the given objects to the cache.
-
removeInternal
protected abstract DataCachePCData removeInternal(java.lang.Object oid)
Remove the object under the given oid from the cache.
-
removeAllInternal
protected abstract void removeAllInternal(java.lang.Class<?> cls, boolean subclasses)
Evict objects in cache by class.
-
removeAllInternal
protected void removeAllInternal(java.util.Collection<java.lang.Object> oids)
Remove all objects under the given oids from the cache.
-
removeAllTypeNamesInternal
protected void removeAllTypeNamesInternal(java.util.Collection<java.lang.String> classNames)
Remove all objects of the given class names from the cache.
-
clearInternal
protected abstract void clearInternal()
Clear the cache.
-
pinInternal
protected abstract boolean pinInternal(java.lang.Object oid)
Pin an object to the cache.
-
unpinInternal
protected abstract boolean unpinInternal(java.lang.Object oid)
Unpin an object from the cache.
-
getPartition
public DataCache getPartition(java.lang.String name, boolean create)
Description copied from interface:DataCache
Gets the named partition. Note that a partition itself is another cache.- Specified by:
getPartition
in interfaceDataCache
- Parameters:
name
- name of the given partition.create
- if true optionally create a new partition.- Returns:
- a partition of the given name. Or null, if either no such partition exists or can not be created.
-
getPartitionNames
public java.util.Set<java.lang.String> getPartitionNames()
Description copied from interface:DataCache
Gets the name of the known partitions.- Specified by:
getPartitionNames
in interfaceDataCache
- Returns:
- empty set if no partition exists.
-
isPartitioned
public boolean isPartitioned()
Description copied from interface:DataCache
Affirms if this cache maintains partitions.- Specified by:
isPartitioned
in interfaceDataCache
-
getStatistics
public CacheStatistics getStatistics()
Description copied from interface:DataCache
Returns number of read/write request and cache hit ratio data.- Specified by:
getStatistics
in interfaceDataCache
-
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
-
getTypes
public java.util.Set<java.lang.String> getTypes()
-
getExcludedTypes
public java.util.Set<java.lang.String> getExcludedTypes()
-
setTypes
public void setTypes(java.util.Set<java.lang.String> types)
-
setTypes
public void setTypes(java.lang.String types)
-
setExcludedTypes
public void setExcludedTypes(java.util.Set<java.lang.String> types)
-
setExcludedTypes
public void setExcludedTypes(java.lang.String types)
-
selectCache
public DataCache selectCache(OpenJPAStateManager sm)
-
getEvictOnBulkUpdate
public boolean getEvictOnBulkUpdate()
Description copied from interface:DataCache
Returns whether the the cache needs to be updated when bulk updates as executed. Defaults to true.- Specified by:
getEvictOnBulkUpdate
in interfaceDataCache
-
setEvictOnBulkUpdate
public void setEvictOnBulkUpdate(boolean b)
-
-