com.atlassian.cache.compat.impl
Class AbstractCacheFactory

java.lang.Object
  extended by com.atlassian.cache.compat.impl.AbstractCacheFactory
All Implemented Interfaces:
CacheFactory
Direct Known Subclasses:
MemoryCacheFactory, MemoryCacheFactory, MemoryCacheFactory

public abstract class AbstractCacheFactory
extends Object
implements CacheFactory

A partial implementation of CacheFactory.

Since:
v1.0

Field Summary
protected  com.atlassian.util.concurrent.Function<String,com.atlassian.util.concurrent.ManagedLock> cacheCreationLocks
          Used to synchronize the creation of caches.
protected  ConcurrentMap<String,Supplier<Cache>> caches
          Map of all the caches.
 
Constructor Summary
AbstractCacheFactory()
           
 
Method Summary
protected abstract
<K,V> Cache<K,V>
createComputingCache(String name, CacheSettings settings, CacheLoader<K,V> loader)
          Creates a cache that upon a miss is able to populate itself using the loader.
protected abstract
<K,V> Cache<K,V>
createSimpleCache(String name, CacheSettings settings)
          Creates a cache with no loader, i.e.
<K,V> Cache<K,V>
getCache(Class<?> owningClass, String name)
          Returns the cache with the given name, creates it if necessary.
<K,V> Cache<K,V>
getCache(String name)
          Returns the cache with the given name, creates it if necessary.
<K,V> Cache<K,V>
getCache(String name, CacheLoader<K,V> loader)
          Returns the cache with the given name and loader, creates it if necessary.
<K,V> Cache<K,V>
getCache(String name, CacheLoader<K,V> loader, CacheSettings settings)
          Returns the cache with the given name, loader and required cache settings, creates it if necessary.
<K,V> Cache<K,V>
getCache(String name, Class<K> keyType, Class<V> valueType)
          Returns a cache with the given name, and the types specified.
<V> CachedReference<V>
getCachedReference(Class<?> owningClass, String name, Supplier<V> supplier)
          Returns a Cached Reference, creating it if necessary.
<V> CachedReference<V>
getCachedReference(Class<?> owningClass, String name, Supplier<V> supplier, CacheSettings settings)
          Returns a Cached Reference, creating it if necessary.
<V> CachedReference<V>
getCachedReference(String name, Supplier<V> supplier)
          Returns a Cached Reference, creating it if necessary.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface com.atlassian.cache.compat.CacheFactory
getCachedReference
 

Field Detail

caches

protected final ConcurrentMap<String,Supplier<Cache>> caches
Map of all the caches. Before creating a cache to put into the map, acquire a lock using cacheCreationLocks to ensure that a cache is created only once.


cacheCreationLocks

protected final com.atlassian.util.concurrent.Function<String,com.atlassian.util.concurrent.ManagedLock> cacheCreationLocks
Used to synchronize the creation of caches.

Constructor Detail

AbstractCacheFactory

public AbstractCacheFactory()
Method Detail

getCache

public <K,V> Cache<K,V> getCache(@NotNull
                                 String name)
Description copied from interface: CacheFactory
Returns the cache with the given name, creates it if necessary. This is equivalent to calling CacheFactory.getCache(String, CacheLoader) with name and null.

Specified by:
getCache in interface CacheFactory
Parameters:
name - the name of the cache
Returns:
a Cache

getCache

public <K,V> Cache<K,V> getCache(Class<?> owningClass,
                                 String name)
Description copied from interface: CacheFactory
Returns the cache with the given name, creates it if necessary.

It is equivalent to calling CacheFactory.getCache(String) with the computed name.

Specified by:
getCache in interface CacheFactory
Parameters:
owningClass - the owning class
name - the name of the cache spaced within the owningClass
Returns:
a Cache

getCache

public <K,V> Cache<K,V> getCache(String name,
                                 Class<K> keyType,
                                 Class<V> valueType)
Description copied from interface: CacheFactory
Returns a cache with the given name, and the types specified. Creates it if necessary. If two caches of the same name are queries, with different types, the call with incorrect type arguments will throw a ClassCastException. For example with:

Cache firstCache = cacheManager.getCache("myCache", String.class, String.class);
Cache secondCache = cacheManager.getCache("myCache", String.class, Long.class);

the second call to getCache will result in a ClassCastException.

Specified by:
getCache in interface CacheFactory
Parameters:
name - the name of the cache
keyType - the type of keys in the cache. Must extend Serializable
valueType - the type of values in the cache. Must extend Serializable
Returns:
a Cache

getCache

public <K,V> Cache<K,V> getCache(String name,
                                 CacheLoader<K,V> loader)
Description copied from interface: CacheFactory
Returns the cache with the given name and loader, creates it if necessary. This is equivalent to calling CacheFactory.getCache(String, CacheLoader, CacheSettings) with name, null and new CacheSettingsBuilder().build().

Specified by:
getCache in interface CacheFactory
Parameters:
name - the name of the cache
loader - the loader that will be used to provide values for keys that will be added to the cache. null indicates no loader
Returns:
a Cache

getCachedReference

public <V> CachedReference<V> getCachedReference(String name,
                                                 Supplier<V> supplier)
Description copied from interface: CacheFactory
Returns a Cached Reference, creating it if necessary.

Specified by:
getCachedReference in interface CacheFactory
Parameters:
name - the name of the Cached Reference
supplier - the supplier for value to be cached, called if the value needs to be generated
Returns:
the Cached Reference

getCachedReference

public <V> CachedReference<V> getCachedReference(Class<?> owningClass,
                                                 String name,
                                                 Supplier<V> supplier)
Description copied from interface: CacheFactory
Returns a Cached Reference, creating it if necessary.

It is equivalent to calling CacheFactory.getCachedReference(String, Supplier, CacheSettings)

Specified by:
getCachedReference in interface CacheFactory
Parameters:
owningClass - the owning class
name - the name of the cache spaced within the owningClass
supplier - the supplier for value to be cached, called if the value needs to be generated
Returns:
the Cached Reference

getCachedReference

public <V> CachedReference<V> getCachedReference(Class<?> owningClass,
                                                 String name,
                                                 Supplier<V> supplier,
                                                 CacheSettings settings)
Description copied from interface: CacheFactory
Returns a Cached Reference, creating it if necessary.

It is equivalent to calling CacheFactory.getCachedReference(String, Supplier, CacheSettings)

Specified by:
getCachedReference in interface CacheFactory
Parameters:
owningClass - the owning class
name - the name of the cache spaced within the owningClass
supplier - the supplier for value to be cached, called if the value needs to be generated
settings - specifies the required cache settings
Returns:
the Cached Reference

getCache

public <K,V> Cache<K,V> getCache(String name,
                                 CacheLoader<K,V> loader,
                                 CacheSettings settings)
Description copied from interface: CacheFactory
Returns the cache with the given name, loader and required cache settings, creates it if necessary.

Specified by:
getCache in interface CacheFactory
Parameters:
name - the name of the cache
loader - the loader that will be used to provide values for keys that will be added to the cache. null indicates no loader
settings - the cache settings that are required to be set if the cache is created.
Returns:
a Cache

createComputingCache

protected abstract <K,V> Cache<K,V> createComputingCache(String name,
                                                         CacheSettings settings,
                                                         CacheLoader<K,V> loader)
Creates a cache that upon a miss is able to populate itself using the loader.

Returns:
a non-null cache

createSimpleCache

protected abstract <K,V> Cache<K,V> createSimpleCache(String name,
                                                      CacheSettings settings)
Creates a cache with no loader, i.e. one populated via explicit puts.

Parameters:
name - the name to give the cache (required)
Returns:
a non-null cache


Copyright © 2015 Atlassian. All Rights Reserved.