Package org.wso2.carbon.caching.impl
Class CacheImpl<K,V>
- java.lang.Object
-
- org.wso2.carbon.caching.impl.CacheImpl<K,V>
-
- All Implemented Interfaces:
Iterable<Cache.Entry<K,V>>,Cache<K,V>,CacheLifecycle
public class CacheImpl<K,V> extends Object implements Cache<K,V>
TODO: class description TODO: Cache statistics
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface javax.cache.Cache
Cache.Entry<K,V>, Cache.EntryProcessor<K,V>, Cache.MutableEntry<K,V>
-
-
Constructor Summary
Constructors Constructor Description CacheImpl(String cacheName, CacheManager cacheManager)
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description booleancontainsKey(K key)Returns true if this cache contains a mapping for the specified key.booleanequals(Object o)voidevict(K key)voidexpire(K key)Vget(K key)Gets an entry from the cache.Collection<CacheEntry<K,V>>getAll()Map<K,V>getAll(Set<? extends K> keys)The getAll method will return, from the cache, aMapof the objects associated with the Collection of keys in argument "keys".VgetAndPut(K key, V value)Associates the specified value with the specified key in this cache, returning an existing value if one existed.VgetAndRemove(K key)Atomically removes the entry for a key only if currently mapped to a given value.VgetAndReplace(K key, V value)Atomically replaces the entry for a key only if currently mapped to some value.CacheManagergetCacheManager()Gets the CacheManager managing this cache.CacheConfiguration<K,V>getConfiguration()Returns a CacheConfiguration.CacheMXBeangetMBean()Get the MBean for this cache.StringgetName()Return the name of the cache.CacheStatisticsgetStatistics()Returns theCacheStatisticsMXBean associated with the cache.StatusgetStatus()Returns the cache status.inthashCode()ObjectinvokeEntryProcessor(K key, Cache.EntryProcessor<K,V> entryProcessor)Passes the cache entry associated with K to be passed to the entry processor.Iterator<Cache.Entry<K,V>>iterator()The ordering of the entries is undefinedIterator<K>keys()Future<V>load(K key)The load method provides a means to "pre-load" the cache.Future<Map<K,? extends V>>loadAll(Set<? extends K> keys)The loadAll method provides a means to "pre-load" objects into the cache.voidput(K key, V value)Associates the specified value with the specified key in this cache If the cache previously contained a mapping for the key, the old value is replaced by the specified value.voidputAll(Map<? extends K,? extends V> map)Copies all of the mappings from the specified map to this cache.booleanputIfAbsent(K key, V value)Atomically associates the specified key with the given value if it is not already associated with a value.booleanregisterCacheEntryListener(CacheEntryListener<? super K,? super V> cacheEntryListener)Adds a listener to the notification service.booleanremove(Object key)Removes the mapping for a key from this cache if it is present.booleanremove(K key, V oldValue)Atomically removes the mapping for a key only if currently mapped to the given value.voidremoveAll()Removes all of the mappings from this cache.voidremoveAll(Set<? extends K> keys)Removes entries for the specified keys.voidremoveAllLocal()This method is added to only remove the cache locally.booleanremoveLocal(Object key)This method is added to only remove the cache locally.booleanreplace(K key, V value)Atomically replaces the entry for a key only if currently mapped to some value.booleanreplace(K key, V oldValue, V newValue)Atomically replaces the entry for a key only if currently mapped to a given value.voidsetCacheConfiguration(CacheConfigurationImpl cacheConfiguration)voidsetCapacity(long capacity)voidsetEvictionAlgorithm(EvictionAlgorithm evictionAlgorithm)voidstart()Notifies providers to start themselves.voidstop()Providers may be doing all sorts of exotic things and need to be able to clean up on stop.voidsyncCaches()Deprecated.This method is highly inefficient.booleanunregisterCacheEntryListener(CacheEntryListener<?,?> cacheEntryListener)Removes a call back listener.<T> Tunwrap(Class<T> cls)Return an object of the specified type to allow access to the provider-specific API.-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
-
-
-
Constructor Detail
-
CacheImpl
public CacheImpl(String cacheName, CacheManager cacheManager)
-
-
Method Detail
-
get
public V get(K key)
Description copied from interface:CacheGets an entry from the cache. If the cache is configured read-through, and get would return null because the entry is missing from the cache, the Cache'sCacheLoaderis called which will attempt to load the entry.Effects:
- Expiry - updates
Access Time. - Read-Through - will use the
CacheLoaderif enabled and key not present in cache
- Specified by:
getin interfaceCache<K,V>- Parameters:
key- the key whose associated value is to be returned- Returns:
- the element, or null, if it does not exist.
- See Also:
Map.get(Object)
- Expiry - updates
-
getAll
public Map<K,V> getAll(Set<? extends K> keys)
Description copied from interface:CacheThe getAll method will return, from the cache, aMapof the objects associated with the Collection of keys in argument "keys". If the cache is configured read-through, and a get would return null because an entry is missing from the cache, the Cache'sCacheLoaderis called which will attempt to load the entry. This is done for each key in the collection for which this is the case. If an entry cannot be loaded for a given key, the key will not be present in the returned Map.
-
syncCaches
public void syncCaches()
Deprecated.This method is highly inefficient. Do not use.
-
getAll
public Collection<CacheEntry<K,V>> getAll()
-
containsKey
public boolean containsKey(K key)
Description copied from interface:CacheReturns true if this cache contains a mapping for the specified key. More formally, returns true if and only if this cache contains a mapping for a key k such that key.equals(k). (There can be at most one such mapping.)- Specified by:
containsKeyin interfaceCache<K,V>- Parameters:
key- key whose presence in this cache is to be tested.- Returns:
- true if this map contains a mapping for the specified key
- See Also:
Map.containsKey(Object)
-
load
public Future<V> load(K key)
Description copied from interface:CacheThe load method provides a means to "pre-load" the cache. This method will, asynchronously, load the specified object into the cache using the associatedCacheLoaderfor the given key. If the object already exists in the cache, no action is taken and null is returned. If no loader is associated with the cache no object will be loaded into the cache and null is returned. If a problem is encountered during the retrieving or loading of the object, an exception must be propagated onFuture.get()as aExecutionException
-
loadAll
public Future<Map<K,? extends V>> loadAll(Set<? extends K> keys)
Description copied from interface:CacheThe loadAll method provides a means to "pre-load" objects into the cache. This method will, asynchronously, load the specified objects into the cache using the associated cache loader for the given keys. If the an object already exists in the cache, no action is taken. If no loader is associated with the object, no object will be loaded into the cache. If a problem is encountered during the retrieving or loading of the objects, an exception (to be defined) should be logged. If a problem is encountered during the retrieving or loading of the object, an exception must be propagated onFuture.get()as aExecutionException
-
getStatistics
public CacheStatistics getStatistics()
Description copied from interface:CacheReturns theCacheStatisticsMXBean associated with the cache. May return null if the cache does not support statistics gathering.- Specified by:
getStatisticsin interfaceCache<K,V>- Returns:
- the CacheStatisticsMBean
-
put
public void put(K key, V value)
Description copied from interface:CacheAssociates the specified value with the specified key in this cache If the cache previously contained a mapping for the key, the old value is replaced by the specified value. (A cache c is said to contain a mapping for a key k if and only ifc.containsKey(k)would return true.) In contrast to the corresponding Map operation, does not return the previous value.- Specified by:
putin interfaceCache<K,V>- Parameters:
key- key with which the specified value is to be associatedvalue- value to be associated with the specified key- See Also:
Map.put(Object, Object),Cache.getAndPut(Object, Object),Cache.getAndReplace(Object, Object)
-
getAndPut
public V getAndPut(K key, V value)
Description copied from interface:CacheAssociates the specified value with the specified key in this cache, returning an existing value if one existed. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. (A cache c is said to contain a mapping for a key k if and only ifc.containsKey(k)would return true.) The the previous value is returned, or null if there was no value associated with the key previously.- Specified by:
getAndPutin interfaceCache<K,V>- Parameters:
key- key with which the specified value is to be associatedvalue- value to be associated with the specified key- Returns:
- the value associated with the key at the start of the operation or null if none was associated
- See Also:
Map.put(Object, Object),Cache.put(Object, Object),Cache.getAndReplace(Object, Object)
-
putAll
public void putAll(Map<? extends K,? extends V> map)
Description copied from interface:CacheCopies all of the mappings from the specified map to this cache. The effect of this call is equivalent to that of callingput(k, v)on this cache once for each mapping from key k to value v in the specified map. The order in which the individual puts will occur is undefined. The behavior of this operation is undefined if the specified cache or map is modified while the operation is in progress.- Specified by:
putAllin interfaceCache<K,V>- Parameters:
map- mappings to be stored in this cache- See Also:
Map.putAll(java.util.Map)
-
putIfAbsent
public boolean putIfAbsent(K key, V value)
Description copied from interface:CacheAtomically associates the specified key with the given value if it is not already associated with a value. This is equivalent toif (!cache.containsKey(key)) {} cache.put(key, value); return true; } else { return false; }except that the action is performed atomically. In contrast to the corresponding ConcurrentMap operation, does not return the previous value.- Specified by:
putIfAbsentin interfaceCache<K,V>- Parameters:
key- key with which the specified value is to be associatedvalue- value to be associated with the specified key- Returns:
- true if a value was set.
- See Also:
ConcurrentMap.putIfAbsent(Object, Object)
-
remove
public boolean remove(Object key)
Description copied from interface:CacheRemoves the mapping for a key from this cache if it is present. More formally, if this cache contains a mapping from key k to value v such that(key==null ? k==null : key.equals(k)), that mapping is removed. (The cache can contain at most one such mapping.)Returns true if this cache previously associated the key, or false if the cache contained no mapping for the key.
The cache will not contain a mapping for the specified key once the call returns.
- Specified by:
removein interfaceCache<K,V>- Parameters:
key- key whose mapping is to be removed from the cache- Returns:
- returns false if there was no matching key
- See Also:
Map.remove(Object)
-
removeLocal
public boolean removeLocal(Object key)
This method is added to only remove the cache locally. This is required sinceremove(Object)method notifies the other nodes in a cluster in addition to removing the local cache.
-
remove
public boolean remove(K key, V oldValue)
Description copied from interface:CacheAtomically removes the mapping for a key only if currently mapped to the given value. This is equivalent toif (cache.containsKey(key) && cache.get(key).equals(oldValue)) { cache.remove(key); return true; } else { return false; }except that the action is performed atomically.- Specified by:
removein interfaceCache<K,V>- Parameters:
key- key whose mapping is to be removed from the cacheoldValue- value expected to be associated with the specified key- Returns:
- returns false if there was no matching key
- See Also:
Map.remove(Object)
-
getAndRemove
public V getAndRemove(K key)
Description copied from interface:CacheAtomically removes the entry for a key only if currently mapped to a given value. This is equivalent toif (cache.containsKey(key)) { V oldValue = cache.get(key); cache.remove(key); return oldValue; } else { return null; }except that the action is performed atomically.- Specified by:
getAndRemovein interfaceCache<K,V>- Parameters:
key- key with which the specified value is associated- Returns:
- the value if one existed or null if no mapping existed for this key
- See Also:
Map.remove(Object)
-
replace
public boolean replace(K key, V oldValue, V newValue)
Description copied from interface:CacheAtomically replaces the entry for a key only if currently mapped to a given value. This is equivalent toif (cache.containsKey(key) && cache.get(key).equals(oldValue)) { cache.put(key, newValue); return true; } else { return false; }except that the action is performed atomically.- Specified by:
replacein interfaceCache<K,V>- Parameters:
key- key with which the specified value is associatedoldValue- value expected to be associated with the specified keynewValue- value to be associated with the specified key- Returns:
- true if the value was replaced
- See Also:
ConcurrentMap.replace(Object, Object, Object)
-
replace
public boolean replace(K key, V value)
Description copied from interface:CacheAtomically replaces the entry for a key only if currently mapped to some value. This is equivalent toif (cache.containsKey(key)) { cache.put(key, value); return true; } else { return false; }except that the action is performed atomically. In contrast to the corresponding ConcurrentMap operation, does not return the previous value.- Specified by:
replacein interfaceCache<K,V>- Parameters:
key- key with which the specified value is associatedvalue- value to be associated with the specified key- Returns:
- true if the value was replaced
- See Also:
Cache.getAndReplace(Object, Object),ConcurrentMap.replace(Object, Object)
-
getAndReplace
public V getAndReplace(K key, V value)
Description copied from interface:CacheAtomically replaces the entry for a key only if currently mapped to some value. This is equivalent toif (cache.containsKey(key)) { V value = cache.get(key, value); cache.put(key, value); return value; } else { return null; }except that the action is performed atomically.- Specified by:
getAndReplacein interfaceCache<K,V>- Parameters:
key- key with which the specified value is associatedvalue- value to be associated with the specified key- Returns:
- the previous value associated with the specified key, or null if there was no mapping for the key.
- See Also:
ConcurrentMap.replace(Object, Object)
-
removeAll
public void removeAll(Set<? extends K> keys)
Description copied from interface:CacheRemoves entries for the specified keys. The order in which the individual removes will occur is undefined.
-
removeAll
public void removeAll()
Description copied from interface:CacheRemoves all of the mappings from this cache. The order in which the individual removes will occur is undefined. This is potentially an expensive operation as listeners are invoked. Use #clear() to avoid this.
-
removeAllLocal
public void removeAllLocal()
This method is added to only remove the cache locally. This is required sinceremoveAll()method notifies the other nodes in a cluster in addition to removing the local cache.
-
getConfiguration
public CacheConfiguration<K,V> getConfiguration()
Description copied from interface:CacheReturns a CacheConfiguration. When status isStatus.STARTEDan implementation must respect the following:- Statistics must be mutable when status is
Status.STARTED(CacheConfiguration.setStatisticsEnabled(boolean))
InvalidConfigurationExceptionmust be thrown on an attempt to mutate the configuration.- Specified by:
getConfigurationin interfaceCache<K,V>- Returns:
- the
CacheConfigurationof this cache
- Statistics must be mutable when status is
-
registerCacheEntryListener
public boolean registerCacheEntryListener(CacheEntryListener<? super K,? super V> cacheEntryListener)
Description copied from interface:CacheAdds a listener to the notification service.- Specified by:
registerCacheEntryListenerin interfaceCache<K,V>- Parameters:
cacheEntryListener- The listener to add. Listeners fire synchronously in the execution path, and after the causing event. if a listener throws an exception it will be wrapped in a CacheException and propagated back to the caller.- Returns:
- true if the listener is being added and was not already added
-
unregisterCacheEntryListener
public boolean unregisterCacheEntryListener(CacheEntryListener<?,?> cacheEntryListener)
Description copied from interface:CacheRemoves a call back listener.- Specified by:
unregisterCacheEntryListenerin interfaceCache<K,V>- Parameters:
cacheEntryListener- the listener to remove- Returns:
- true if the listener was present
-
invokeEntryProcessor
public Object invokeEntryProcessor(K key, Cache.EntryProcessor<K,V> entryProcessor)
Description copied from interface:CachePasses the cache entry associated with K to be passed to the entry processor. All operations performed by the processor will be done atomically i.e. all The processor will perform the operations against- Specified by:
invokeEntryProcessorin interfaceCache<K,V>- Parameters:
key- the key to the entryentryProcessor- the processor which will process the entry- Returns:
- an object
- See Also:
Cache.EntryProcessor
-
getName
public String getName()
Description copied from interface:CacheReturn the name of the cache.
-
getCacheManager
public CacheManager getCacheManager()
Description copied from interface:CacheGets the CacheManager managing this cache. A cache can be in only one CacheManager.- Specified by:
getCacheManagerin interfaceCache<K,V>- Returns:
- the manager
-
unwrap
public <T> T unwrap(Class<T> cls)
Description copied from interface:CacheReturn an object of the specified type to allow access to the provider-specific API. If the provider's implementation does not support the specified class, theIllegalArgumentExceptionis thrown.
-
iterator
public Iterator<Cache.Entry<K,V>> iterator()
Description copied from interface:CacheThe ordering of the entries is undefined
-
getMBean
public CacheMXBean getMBean()
Description copied from interface:CacheGet the MBean for this cache.
-
start
public void start()
Description copied from interface:CacheLifecycleNotifies providers to start themselves. This method is called during the resource's start method after it has changed its status to alive. Cache operations are legal in this method. At the completion of this method invocationCacheLifecycle.getStatus()must returnStatus.STARTED.- Specified by:
startin interfaceCacheLifecycle
-
stop
public void stop()
Description copied from interface:CacheLifecycleProviders may be doing all sorts of exotic things and need to be able to clean up on stop. Cache operations are illegal after this method is called. AIllegalStateExceptionwill be Resources will change status toStatus.STOPPEDwhen this method completes. Stop must free any JVM resources used.- Specified by:
stopin interfaceCacheLifecycle
-
getStatus
public Status getStatus()
Description copied from interface:CacheLifecycleReturns the cache status. This method blocks while the state is changing- Specified by:
getStatusin interfaceCacheLifecycle- Returns:
- one of
Status
-
expire
public void expire(K key)
-
evict
public void evict(K key)
-
setCacheConfiguration
public void setCacheConfiguration(CacheConfigurationImpl cacheConfiguration)
-
setCapacity
public void setCapacity(long capacity)
-
setEvictionAlgorithm
public void setEvictionAlgorithm(EvictionAlgorithm evictionAlgorithm)
-
-