com.atlassian.confluence.cache
Class TransactionalCacheFactory

java.lang.Object
  extended by com.atlassian.confluence.cache.TransactionalCacheFactory
All Implemented Interfaces:
com.atlassian.cache.CacheFactory, ReadThroughCacheFactory, LockFactory

public class TransactionalCacheFactory
extends Object
implements LockFactory, ReadThroughCacheFactory

A cache factory that produces transactional caches. These caches perform their updates only when the current transaction is successfully committed. Caches obtained outside of a transaction will pass updates immediately to the target cache while posting a warning to the cache factory log.

Transactional caches returned by this factory make a best effort at committing changes to the underlying cache, but they don't recover well from failure (caches with failures will be flushed), and there is no way that the associated database transaction can be rolled back if the cache updates fail.

Cache updates that are to be performed outside of a transaction that are not transactionally significant can be performed via a cache obtained from getReadThroughCacheForUpdate(String). One example of such a use would be cache read through.

Transaction synchronization is performed via the provided SynchronizationManager.

All updates to underlying caches are performed inside a lock on the cache to prevent other writes occurring at the same time. This applies for updates done post-commit for transaction-based caches, as well as those done via the read-through update method.


Constructor Summary
TransactionalCacheFactory(com.atlassian.cache.CacheFactory cacheFactory, LockFactory lockFactory, SynchronizationManager synchronizationManager, ConfluenceMonitoring confluenceMonitoring)
           
 
Method Summary
<K,V> com.atlassian.cache.Cache<K,V>
getCache(Class<?> owningClass, String name)
           
<K,V> com.atlassian.cache.Cache<K,V>
getCache(String name)
           
<K,V> com.atlassian.cache.Cache<K,V>
getCache(String name, com.atlassian.cache.CacheLoader<K,V> loader)
           
<K,V> com.atlassian.cache.Cache<K,V>
getCache(String cacheName, com.atlassian.cache.CacheLoader<K,V> loader, com.atlassian.cache.CacheSettings required)
           
<K,V> com.atlassian.cache.Cache<K,V>
getCache(String name, Class<K> keyType, Class<V> valueType)
           
<V> com.atlassian.cache.CachedReference<V>
getCachedReference(Class<?> owningClass, String name, com.atlassian.cache.Supplier<V> supplier)
           
<V> com.atlassian.cache.CachedReference<V>
getCachedReference(Class<?> owningClass, String name, com.atlassian.cache.Supplier<V> supplier, com.atlassian.cache.CacheSettings required)
           
<V> com.atlassian.cache.CachedReference<V>
getCachedReference(String name, com.atlassian.cache.Supplier<V> supplier)
           
<V> com.atlassian.cache.CachedReference<V>
getCachedReference(String name, com.atlassian.cache.Supplier<V> supplier, com.atlassian.cache.CacheSettings required)
           
 Lock getLock(String cacheName)
          Get a lock -- getting the lock does *not* imply that it has been acquired.
<K,V> com.atlassian.cache.Cache<K,V>
getReadThroughCacheForUpdate(com.atlassian.cache.Cache<K,V> cache)
          Returns the requested cache with no transactional wrapper for updates read from the database.
<K,V> com.atlassian.cache.Cache<K,V>
getReadThroughCacheForUpdate(String cacheName)
          Returns the requested cache with no transactional wrapper for updates read from the database.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TransactionalCacheFactory

public TransactionalCacheFactory(com.atlassian.cache.CacheFactory cacheFactory,
                                 LockFactory lockFactory,
                                 SynchronizationManager synchronizationManager,
                                 ConfluenceMonitoring confluenceMonitoring)
Method Detail

getCache

@Nonnull
public <K,V> com.atlassian.cache.Cache<K,V> getCache(@Nonnull
                                                             String cacheName,
                                                             com.atlassian.cache.CacheLoader<K,V> loader,
                                                             @Nonnull
                                                             com.atlassian.cache.CacheSettings required)
Specified by:
getCache in interface com.atlassian.cache.CacheFactory

getReadThroughCacheForUpdate

public <K,V> com.atlassian.cache.Cache<K,V> getReadThroughCacheForUpdate(String cacheName)
Returns the requested cache with no transactional wrapper for updates read from the database. Calls to Cache.put(Object, Object) are performed under the appropriate cache lock to prevent concurrent writes.

Specified by:
getReadThroughCacheForUpdate in interface ReadThroughCacheFactory

getReadThroughCacheForUpdate

public <K,V> com.atlassian.cache.Cache<K,V> getReadThroughCacheForUpdate(com.atlassian.cache.Cache<K,V> cache)
Returns the requested cache with no transactional wrapper for updates read from the database. Calls to Cache.put(Object, Object) are performed under the appropriate cache lock to prevent concurrent writes.

Specified by:
getReadThroughCacheForUpdate in interface ReadThroughCacheFactory

getLock

public Lock getLock(String cacheName)
Description copied from interface: LockFactory
Get a lock -- getting the lock does *not* imply that it has been acquired. Call Lock.tryLock() or Lock.lock() on the returned object to acquire the lock.

Specified by:
getLock in interface LockFactory
Returns:
a lock in the transactional cache lock namespace.

getCache

@Nonnull
public <K,V> com.atlassian.cache.Cache<K,V> getCache(@Nonnull
                                                             String name,
                                                             @Nonnull
                                                             Class<K> keyType,
                                                             @Nonnull
                                                             Class<V> valueType)
Specified by:
getCache in interface com.atlassian.cache.CacheFactory

getCache

@Nonnull
public <K,V> com.atlassian.cache.Cache<K,V> getCache(@Nonnull
                                                             Class<?> owningClass,
                                                             @Nonnull
                                                             String name)
Specified by:
getCache in interface com.atlassian.cache.CacheFactory

getCache

@Nonnull
public <K,V> com.atlassian.cache.Cache<K,V> getCache(@Nonnull
                                                             String name,
                                                             com.atlassian.cache.CacheLoader<K,V> loader)
Specified by:
getCache in interface com.atlassian.cache.CacheFactory

getCache

@Nonnull
public <K,V> com.atlassian.cache.Cache<K,V> getCache(@Nonnull
                                                             String name)
Specified by:
getCache in interface com.atlassian.cache.CacheFactory

getCachedReference

@Nonnull
public <V> com.atlassian.cache.CachedReference<V> getCachedReference(@Nonnull
                                                                             String name,
                                                                             @Nonnull
                                                                             com.atlassian.cache.Supplier<V> supplier,
                                                                             @Nonnull
                                                                             com.atlassian.cache.CacheSettings required)
Specified by:
getCachedReference in interface com.atlassian.cache.CacheFactory

getCachedReference

@Nonnull
public <V> com.atlassian.cache.CachedReference<V> getCachedReference(@Nonnull
                                                                             String name,
                                                                             @Nonnull
                                                                             com.atlassian.cache.Supplier<V> supplier)
Specified by:
getCachedReference in interface com.atlassian.cache.CacheFactory

getCachedReference

@Nonnull
public <V> com.atlassian.cache.CachedReference<V> getCachedReference(@Nonnull
                                                                             Class<?> owningClass,
                                                                             @Nonnull
                                                                             String name,
                                                                             @Nonnull
                                                                             com.atlassian.cache.Supplier<V> supplier)
Specified by:
getCachedReference in interface com.atlassian.cache.CacheFactory

getCachedReference

@Nonnull
public <V> com.atlassian.cache.CachedReference<V> getCachedReference(@Nonnull
                                                                             Class<?> owningClass,
                                                                             @Nonnull
                                                                             String name,
                                                                             @Nonnull
                                                                             com.atlassian.cache.Supplier<V> supplier,
                                                                             @Nonnull
                                                                             com.atlassian.cache.CacheSettings required)
Specified by:
getCachedReference in interface com.atlassian.cache.CacheFactory


Copyright © 2003–2015 Atlassian. All rights reserved.