org.apache.openjpa.datacache
Class AbstractDataCache

java.lang.Object
  extended by org.apache.openjpa.lib.util.concurrent.AbstractConcurrentEventManager
      extended by org.apache.openjpa.datacache.AbstractDataCache
All Implemented Interfaces:
Serializable, DataCache, Configurable, Clearable, Closeable, EventManager
Direct Known Subclasses:
ConcurrentDataCache

public abstract class AbstractDataCache
extends AbstractConcurrentEventManager
implements DataCache, Configurable

Abstract DataCache implementation that provides various statistics, logging, and timeout functionality common across cache implementations.

Author:
Patrick Linskey, Abe White
See Also:
Serialized Form

Field Summary
protected  boolean _evictOnBulkUpdate
           
protected  Set<String> _excludedTypes
           
protected  Set<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
AbstractDataCache()
           
 
Method Summary
 void addExpirationListener(ExpirationListener listen)
          Add a new expiration event listener to this cache.
 void afterCommit(RemoteCommitEvent event)
          This method is part of the RemoteCommitListener 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(Collection<DataCachePCData> additions, Collection<DataCachePCData> newUpdates, Collection<DataCachePCData> existingUpdates, Collection<Object> deletes)
          Perform a batch update of the cache.
 boolean contains(Object key)
          Returns true if this cache contains data corresponding to oid; otherwise returns false.
 BitSet containsAll(Collection<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(Object event, Object listener)
          Implement this method to fire the given event to the given listener.
 DataCachePCData get(Object key)
          Return the cached object for the given oid.
 Map<Object,DataCachePCData> getAll(List<Object> keys)
          Returns the objects for the given key List.
 void getEnableStatistics()
           
 String getEvictionSchedule()
           
 boolean getEvictOnBulkUpdate()
          Returns whether the the cache needs to be updated when bulk updates as executed.
 Set<String> getExcludedTypes()
           
protected abstract  DataCachePCData getInternal(Object oid)
          Return the object for the given oid.
 String getName()
          Returns a string name that can be used by end-user-visible code to identify this cache.
 DataCache getPartition(String name, boolean create)
          Gets the named partition.
 Set<String> getPartitionNames()
          Gets the name of the known partitions.
 CacheStatistics getStatistics()
          Returns number of read/write request and cache hit ratio data.
 Set<String> getTypes()
           
 void initialize(DataCacheManager manager)
          Initialize any resources associated with the given DataCacheManager.
 boolean isClosed()
           
 boolean isPartitioned()
          Affirms if this cache maintains partitions.
protected  void keyRemoved(Object key, boolean expired)
          Invoke when a key is removed from this cache.
 boolean pin(Object key)
          Pin the value stored under oid into the cache.
 void pinAll(Class<?> cls, boolean subs)
          Pin all oids for the given type.
 BitSet pinAll(Collection<Object> keys)
          Pin all oids to the cache.
protected abstract  boolean pinInternal(Object oid)
          Pin an object to the cache.
 DataCachePCData put(DataCachePCData data)
          Set the cached value for the given instance.
protected  void putAllInternal(Collection<DataCachePCData> pcs)
          Add all of the given objects to the cache.
protected abstract  DataCachePCData putInternal(Object oid, DataCachePCData pc)
          Add the given object to the cache, returning the old object under the given oid.
protected  boolean recacheUpdates()
          Return true if updates to data already in the cache (either in commit(java.util.Collection, java.util.Collection, java.util.Collection, java.util.Collection) or the update(org.apache.openjpa.datacache.DataCachePCData)) should be put back into the cache.
 DataCachePCData remove(Object key)
          Remove the value stored under the given oid.
 void removeAll(Class<?> cls, boolean subClasses)
          Remove the objects of the given class from the cache.
 BitSet removeAll(Collection<Object> keys)
          Remove the values stored under the given oids.
protected abstract  void removeAllInternal(Class<?> cls, boolean subclasses)
          Evict objects in cache by class.
protected  void removeAllInternal(Collection<Object> oids)
          Remove all objects under the given oids from the cache.
protected  void removeAllTypeNamesInternal(Collection<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(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(String s)
           
 void setEvictOnBulkUpdate(boolean b)
           
 void setExcludedTypes(Set<String> types)
           
 void setExcludedTypes(String types)
           
 void setName(String name)
          Sets a string name to be used to identify this cache to end-user needs.
 void setTypes(Set<String> types)
           
 void setTypes(String types)
           
 void startConfiguration()
          Invoked before bean property configuration is begun on this object.
 String toString()
           
 boolean unpin(Object key)
          Unpin the value stored under oid from the cache.
 void unpinAll(Class<?> cls, boolean subs)
          Unpin all oids associaed with the given type from the cache.
 BitSet unpinAll(Collection<Object> keys)
          Unpin all oids from the cache.
protected abstract  boolean unpinInternal(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 Set<String> _includedTypes

_excludedTypes

protected Set<String> _excludedTypes

_evictOnBulkUpdate

protected boolean _evictOnBulkUpdate
Constructor Detail

AbstractDataCache

public AbstractDataCache()
Method Detail

getName

public String getName()
Description copied from interface: DataCache
Returns a string name that can be used by end-user-visible code to identify this cache.

Specified by:
getName in interface DataCache

setName

public void setName(String name)
Description copied from interface: DataCache
Sets a string name to be used to identify this cache to end-user needs.

Specified by:
setName in interface DataCache

setEnableStatistics

public void setEnableStatistics(boolean enable)

getEnableStatistics

public void getEnableStatistics()

getEvictionSchedule

public String getEvictionSchedule()

setEvictionSchedule

public void setEvictionSchedule(String s)

initialize

public void initialize(DataCacheManager manager)
Description copied from interface: DataCache
Initialize any resources associated with the given DataCacheManager.

Specified by:
initialize in interface DataCache

commit

public void commit(Collection<DataCachePCData> additions,
                   Collection<DataCachePCData> newUpdates,
                   Collection<DataCachePCData> existingUpdates,
                   Collection<Object> deletes)
Description copied from interface: DataCache
Perform a batch update of the cache. Add all DataCachePCData objects in additions and in newUpdates, make the appropriate modifications to all DataCachePCDatas in existingUpdates, and delete all OIDs in deletes. 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 the deletes collection may contain oids that are also in the additions 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 interface DataCache
Parameters:
additions - A collection of DataCachePCData objects. These represent data that have been newly created, and thus must be added to the cache.
newUpdates - A collection of DataCachePCData 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 of DataCachePCData 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 from DataCache.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(Object key)
Description copied from interface: DataCache
Returns true if this cache contains data corresponding to oid; otherwise returns false.

Specified by:
contains in interface DataCache

containsAll

public BitSet containsAll(Collection<Object> keys)
Description copied from interface: DataCache
Returns the indexes of the oids in this cache.

Specified by:
containsAll in interface DataCache

get

public DataCachePCData get(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; the DataCache.update(org.apache.openjpa.datacache.DataCachePCData) method should be used to re-cache any changed objects.

Specified by:
get in interface DataCache
Returns:
the object matching the given oid, or null if none

getAll

public Map<Object,DataCachePCData> getAll(List<Object> keys)
Returns the objects for the given key List.

Specified by:
getAll in interface DataCache

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 the DataCache.commit(java.util.Collection, java.util.Collection, java.util.Collection, java.util.Collection) method.

Specified by:
put in interface DataCache
Returns:
The previously cached value, or null if the value was not previously cached. See Map.put(K, V) for more information.

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 the DataCache.commit(java.util.Collection, java.util.Collection, java.util.Collection, java.util.Collection) method. A cache implementation may or may not return a live object from DataCache.get(java.lang.Object) invocations. If an object retrieved from a DataCache.get(java.lang.Object) operation needs to be updated, this method can be invoked instead of invoking DataCache.put(org.apache.openjpa.datacache.DataCachePCData). The DataCache implementation can then make optimizations based on how its DataCache.get(java.lang.Object) method works.

Specified by:
update in interface DataCache

remove

public DataCachePCData remove(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 the DataCache.commit(java.util.Collection, java.util.Collection, java.util.Collection, java.util.Collection) method.

Specified by:
remove in interface DataCache
Returns:
The previously cached value, or null if the oid was not previously cached. See Map.remove(java.lang.Object) for more information.

removeAll

public BitSet removeAll(Collection<Object> keys)
Description copied from interface: DataCache
Remove the values stored under the given oids.

Specified by:
removeAll in interface DataCache
Returns:
the indexes of the removed oids
See Also:
DataCache.remove(java.lang.Object)

removeAll

public void removeAll(Class<?> cls,
                      boolean subClasses)
Remove the objects of the given class from the cache.

Specified by:
removeAll in interface DataCache

pin

public boolean pin(Object key)
Description copied from interface: DataCache
Pin the value stored under oid into the cache. This method guarantees that oid's value will not be dropped by the caching algorithm. This method does not affect the behavior of DataCache.remove(java.lang.Object).

Specified by:
pin in interface DataCache
Returns:
true if oid's value was pinned into the cache; false if the oid is not in the cache.

pinAll

public BitSet pinAll(Collection<Object> keys)
Description copied from interface: DataCache
Pin all oids to the cache.

Specified by:
pinAll in interface DataCache
Returns:
the indexes of the pinned oids
See Also:
DataCache.pin(java.lang.Object)

pinAll

public void pinAll(Class<?> cls,
                   boolean subs)
Description copied from interface: DataCache
Pin all oids for the given type.

Specified by:
pinAll in interface DataCache
subs - Whether to include subclasses.

unpin

public boolean unpin(Object key)
Description copied from interface: DataCache
Unpin the value stored under oid from the cache. This method reverses a previous invocation of DataCache.pin(java.lang.Object). This method does not remove anything from the cache; it merely makes oid's value a candidate for flushing from the cache.

Specified by:
unpin in interface DataCache
Returns:
true if oid's value was unpinned from the cache; false if the oid is not in the cache.

unpinAll

public BitSet unpinAll(Collection<Object> keys)
Description copied from interface: DataCache
Unpin all oids from the cache.

Specified by:
unpinAll in interface DataCache
Returns:
the indexes of the unpinned oids
See Also:
DataCache.unpin(java.lang.Object)

unpinAll

public void unpinAll(Class<?> cls,
                     boolean subs)
Description copied from interface: DataCache
Unpin all oids associaed with the given type from the cache.

Specified by:
unpinAll in interface DataCache
subs - Whether to include subclasses.

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 the DataCache.commit(java.util.Collection, java.util.Collection, java.util.Collection, java.util.Collection) method.

Specified by:
clear in interface DataCache
Specified by:
clear in interface Clearable

close

public void close()
Description copied from interface: DataCache
Free the resources used by this cache.

Specified by:
close in interface DataCache
Specified by:
close in interface Closeable

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 interface DataCache

removeExpirationListener

public boolean removeExpirationListener(ExpirationListener listen)
Description copied from interface: DataCache
Remove an expiration event listener from this cache.

Specified by:
removeExpirationListener in interface DataCache

toString

public String toString()
Overrides:
toString in class Object

afterCommit

public void afterCommit(RemoteCommitEvent event)
This method is part of the RemoteCommitListener interface. If your cache subclass relies on OpenJPA for clustering support, make it implement RemoteCommitListener. This method will take care of invalidating entries from remote commits.


keyRemoved

protected void keyRemoved(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()
Return true if updates to data already in the cache (either in commit(java.util.Collection, java.util.Collection, java.util.Collection, java.util.Collection) or the update(org.apache.openjpa.datacache.DataCachePCData)) should be put back into the cache. Returns false by default.


getInternal

protected abstract DataCachePCData getInternal(Object oid)
Return the object for the given oid.


putInternal

protected abstract DataCachePCData putInternal(Object oid,
                                               DataCachePCData pc)
Add the given object to the cache, returning the old object under the given oid.


putAllInternal

protected void putAllInternal(Collection<DataCachePCData> pcs)
Add all of the given objects to the cache.


removeInternal

protected abstract DataCachePCData removeInternal(Object oid)
Remove the object under the given oid from the cache.


removeAllInternal

protected abstract void removeAllInternal(Class<?> cls,
                                          boolean subclasses)
Evict objects in cache by class.


removeAllInternal

protected void removeAllInternal(Collection<Object> oids)
Remove all objects under the given oids from the cache.


removeAllTypeNamesInternal

protected void removeAllTypeNamesInternal(Collection<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(Object oid)
Pin an object to the cache.


unpinInternal

protected abstract boolean unpinInternal(Object oid)
Unpin an object from the cache.


getPartition

public DataCache getPartition(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 interface DataCache
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 Set<String> getPartitionNames()
Description copied from interface: DataCache
Gets the name of the known partitions.

Specified by:
getPartitionNames in interface DataCache
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 interface DataCache

getStatistics

public CacheStatistics getStatistics()
Description copied from interface: DataCache
Returns number of read/write request and cache hit ratio data.

Specified by:
getStatistics in interface DataCache

setConfiguration

public void setConfiguration(Configuration conf)
Description copied from interface: Configurable
Invoked prior to setting bean properties.

Specified by:
setConfiguration in interface Configurable

startConfiguration

public void startConfiguration()
Description copied from interface: Configurable
Invoked before bean property configuration is begun on this object.

Specified by:
startConfiguration in interface Configurable

endConfiguration

public void endConfiguration()
Description copied from interface: Configurable
Invoked upon completion of bean property configuration for this object.

Specified by:
endConfiguration in interface Configurable

fireEvent

protected void fireEvent(Object event,
                         Object listener)
Description copied from class: AbstractConcurrentEventManager
Implement this method to fire the given event to the given listener.

Specified by:
fireEvent in class AbstractConcurrentEventManager

getTypes

public Set<String> getTypes()

getExcludedTypes

public Set<String> getExcludedTypes()

setTypes

public void setTypes(Set<String> types)

setTypes

public void setTypes(String types)

setExcludedTypes

public void setExcludedTypes(Set<String> types)

setExcludedTypes

public void setExcludedTypes(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 interface DataCache

setEvictOnBulkUpdate

public void setEvictOnBulkUpdate(boolean b)


Copyright © 2006-2011 Apache Software Foundation. All Rights Reserved.