org.jboss.cache.loader
Class DelegatingCacheLoader

java.lang.Object
  extended by org.jboss.cache.loader.AbstractCacheLoader
      extended by org.jboss.cache.loader.DelegatingCacheLoader
All Implemented Interfaces:
CacheLoader
Direct Known Subclasses:
LocalDelegatingCacheLoader, TcpDelegatingCacheLoader

public abstract class DelegatingCacheLoader
extends AbstractCacheLoader

CacheLoader implementation which delegates to another CacheImpl. This allows to stack caches on top of each other, allowing for hierarchical cache levels. For example, first level cache delegates to a second level cache, which delegates to a persistent cache.

Version:
$Id: DelegatingCacheLoader.java,v 1.13 2006/12/30 17:50:01 msurtani Exp $
Author:
Bela Ban, Daniel Gredler

Field Summary
static int delegateExists
           
static int delegateGet
           
static int delegateGetChildrenNames
           
static int delegateGetKey
           
static int delegateLoadEntireState
           
static int delegatePut
           
static int delegatePutKeyVal
           
static int delegateRemove
           
static int delegateRemoveData
           
static int delegateRemoveKey
           
static int delegateStoreEntireState
           
static int putList
           
 
Fields inherited from class org.jboss.cache.loader.AbstractCacheLoader
cache, regionManager
 
Constructor Summary
DelegatingCacheLoader()
           
 
Method Summary
 void commit(java.lang.Object tx)
          Commits the transaction.
 void create()
          Lifecycle method, called when the cache loader is created.
protected abstract  boolean delegateExists(Fqn name)
           
protected abstract  java.util.Map delegateGet(Fqn name)
           
protected abstract  java.util.Set delegateGetChildrenNames(Fqn fqn)
           
protected abstract  void delegateLoadEntireState(java.io.ObjectOutputStream os)
           
protected abstract  void delegateLoadState(Fqn subtree, java.io.ObjectOutputStream os)
           
protected abstract  void delegatePut(Fqn name, java.util.Map attributes)
           
protected abstract  java.lang.Object delegatePut(Fqn name, java.lang.Object key, java.lang.Object value)
           
protected abstract  void delegateRemove(Fqn name)
           
protected abstract  java.lang.Object delegateRemove(Fqn name, java.lang.Object key)
           
protected abstract  void delegateRemoveData(Fqn name)
           
protected abstract  void delegateStoreEntireState(java.io.ObjectInputStream is)
           
protected abstract  void delegateStoreState(Fqn subtree, java.io.ObjectInputStream is)
           
 void destroy()
          Lifecycle method, called when the cache loader is destroyed.
 boolean exists(Fqn name)
          Returns true if the CacheLoader has a node with a Fqn.
 java.util.Map get(Fqn name)
          Returns all keys and values from the persistent store, given a Fqn
 java.util.Set<java.lang.String> getChildrenNames(Fqn fqn)
          Returns a set of children node names.
 void loadEntireState(java.io.ObjectOutputStream os)
          Fetches the entire state for this cache from secondary storage (disk, database) and writes it to a provided ObjectOutputStream.
 void loadState(Fqn subtree, java.io.ObjectOutputStream os)
          Fetches a portion of the state for this cache from secondary storage (disk, database) and writes it to a provided ObjectOutputStream.
 void prepare(java.lang.Object tx, java.util.List<Modification> modifications, boolean one_phase)
          Prepares a list of modifications.
 void put(Fqn name, java.util.Map attributes)
          Puts all entries of the map into the existing map of the given node, overwriting existing keys, but not clearing the existing map before insertion.
 void put(Fqn fqn, java.util.Map attributes, boolean erase)
           
 java.lang.Object put(Fqn name, java.lang.Object key, java.lang.Object value)
          Puts a key and value into the attribute map of a given node.
 void remove(Fqn name)
          Removes the given node and all its subnodes, does nothing if the node does not exist.
 java.lang.Object remove(Fqn name, java.lang.Object key)
          Removes the given key and value from the attributes of the given node.
 void removeData(Fqn name)
          Removes all attributes from a given node, but doesn't delete the node itself or any subnodes.
 void rollback(java.lang.Object tx)
          Rolls the transaction back.
 void start()
          Lifecycle method, called when the cache loader is started.
 void stop()
          Lifecycle method, called when the cache loader is stopped.
 void storeEntireState(java.io.ObjectInputStream is)
          Stores the entire state for this cache by reading it from a provided ObjectInputStream.
 void storeState(Fqn subtree, java.io.ObjectInputStream is)
          Stores the given portion of the cache tree's state in secondary storage.
 
Methods inherited from class org.jboss.cache.loader.AbstractCacheLoader
getMarshaller, getNodeDataList, loadStateHelper, put, setCache, setRegionManager
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.jboss.cache.loader.CacheLoader
getConfig, setConfig
 

Field Detail

delegateGetChildrenNames

public static final int delegateGetChildrenNames
See Also:
Constant Field Values

delegateGetKey

public static final int delegateGetKey
See Also:
Constant Field Values

delegateGet

public static final int delegateGet
See Also:
Constant Field Values

delegateExists

public static final int delegateExists
See Also:
Constant Field Values

delegatePutKeyVal

public static final int delegatePutKeyVal
See Also:
Constant Field Values

delegatePut

public static final int delegatePut
See Also:
Constant Field Values

delegateRemoveKey

public static final int delegateRemoveKey
See Also:
Constant Field Values

delegateRemove

public static final int delegateRemove
See Also:
Constant Field Values

delegateRemoveData

public static final int delegateRemoveData
See Also:
Constant Field Values

delegateLoadEntireState

public static final int delegateLoadEntireState
See Also:
Constant Field Values

delegateStoreEntireState

public static final int delegateStoreEntireState
See Also:
Constant Field Values

putList

public static final int putList
See Also:
Constant Field Values
Constructor Detail

DelegatingCacheLoader

public DelegatingCacheLoader()
Method Detail

getChildrenNames

public java.util.Set<java.lang.String> getChildrenNames(Fqn fqn)
                                                 throws java.lang.Exception
Description copied from interface: CacheLoader
Returns a set of children node names. All names are relative to this parent Fqn. Returns null if the named node is not found or there are no children. The returned set must not be modifiable. Implementors can use Collections.unmodifiableSet(java.util.Set) to make the set unmodifiable.

Implementors may impose restrictions on the contents of an Fqn (such as Strings-only) and as such, indirectly impose the same restriction on the contents of a Set returned by getChildrenNames().

Parameters:
fqn - The Fqn of the parent
Returns:
Set a set of children. Returns null if no children nodes are present, or the parent is not present
Throws:
java.lang.Exception

get

public java.util.Map get(Fqn name)
                  throws java.lang.Exception
Description copied from interface: CacheLoader
Returns all keys and values from the persistent store, given a Fqn

Parameters:
name - the Fqn to search for.
Returns:
Map keys and values for the given node. Returns null if the node is not found. If the node is found but has no attributes, this method returns an empty Map.
Throws:
java.lang.Exception

exists

public boolean exists(Fqn name)
               throws java.lang.Exception
Description copied from interface: CacheLoader
Returns true if the CacheLoader has a node with a Fqn.

Returns:
true if node exists, false otherwise
Throws:
java.lang.Exception

put

public java.lang.Object put(Fqn name,
                            java.lang.Object key,
                            java.lang.Object value)
                     throws java.lang.Exception
Description copied from interface: CacheLoader
Puts a key and value into the attribute map of a given node. If the node does not exist, all parent nodes from the root down are created automatically. Returns the old value.

Throws:
java.lang.Exception

put

public void put(Fqn name,
                java.util.Map attributes)
         throws java.lang.Exception
Description copied from interface: CacheLoader
Puts all entries of the map into the existing map of the given node, overwriting existing keys, but not clearing the existing map before insertion. This is the same behavior as Map.putAll(java.util.Map). If the node does not exist, all parent nodes from the root down are created automatically

Parameters:
name - The fully qualified name of the node
attributes - A Map of attributes. Can be null
Throws:
java.lang.Exception

put

public void put(Fqn fqn,
                java.util.Map attributes,
                boolean erase)
         throws java.lang.Exception
Overrides:
put in class AbstractCacheLoader
Throws:
java.lang.Exception

remove

public java.lang.Object remove(Fqn name,
                               java.lang.Object key)
                        throws java.lang.Exception
Description copied from interface: CacheLoader
Removes the given key and value from the attributes of the given node. Does nothing if the node doesn't exist Returns the removed value.

Throws:
java.lang.Exception

remove

public void remove(Fqn name)
            throws java.lang.Exception
Description copied from interface: CacheLoader
Removes the given node and all its subnodes, does nothing if the node does not exist.

Parameters:
name - the Fqn of the node
Throws:
java.lang.Exception

removeData

public void removeData(Fqn name)
                throws java.lang.Exception
Description copied from interface: CacheLoader
Removes all attributes from a given node, but doesn't delete the node itself or any subnodes.

Parameters:
name - the Fqn of the node
Throws:
java.lang.Exception

prepare

public void prepare(java.lang.Object tx,
                    java.util.List<Modification> modifications,
                    boolean one_phase)
             throws java.lang.Exception
Description copied from interface: CacheLoader
Prepares a list of modifications. For example, for a DB-based CacheLoader:
  1. Create a local (JDBC) transaction
  2. Associate the local transaction with tx (tx is the key)
  3. Execute the corresponding SQL statements against the DB (statements derived from modifications)
For non-transactional CacheLoader (e.g. file-based), the implementation could attempt to implement it's own transactional logic, attempting to write data to a temp location (or memory) and writing it to the proper location upon commit.

Parameters:
tx - The transaction, indended to be used by implementations as an identifier of the transaction (and not necessarily a JTA Transaction object)
modifications - A List containing Modifications, for the given transaction
one_phase - Persist immediately and (for example) commit the local JDBC transaction as well. When true, we won't get a CacheLoader.commit(Object) or CacheLoader.rollback(Object) method call later
Throws:
java.lang.Exception

commit

public void commit(java.lang.Object tx)
            throws java.lang.Exception
Description copied from interface: CacheLoader
Commits the transaction. A DB-based CacheLoader would look up the local JDBC transaction asociated with tx and commit that transaction. Non-transactional CacheLoaders could simply write the data that was previously saved transiently under the given tx key, to (for example) a file system.

Note this only holds if the previous prepare() did not define

one_phase=true

Parameters:
tx - transaction to commit
Throws:
java.lang.Exception

rollback

public void rollback(java.lang.Object tx)
Description copied from interface: CacheLoader
Rolls the transaction back. A DB-based CacheLoader would look up the local JDBC transaction asociated with tx and roll back that transaction.

Parameters:
tx - transaction to roll back

loadEntireState

public void loadEntireState(java.io.ObjectOutputStream os)
                     throws java.lang.Exception
Description copied from interface: CacheLoader
Fetches the entire state for this cache from secondary storage (disk, database) and writes it to a provided ObjectOutputStream. State written to the provided ObjectOutputStream parameter is used for initialization of a new CacheImpl instance. When the state gets transferred to the new cache instance its cacheloader calls CacheLoader.storeEntireState(ObjectInputStream)

Implementations of this method should not catch any exception or close the given ObjectOutputStream parameter. In order to ensure cacheloader interoperability contents of the cache are written to the ObjectOutputStream as a sequence of NodeData objects.

Default implementation is provided by AbstractCacheLoader and ensures cacheloader interoperability. Implementors are encouraged to consider extending AbstractCacheLoader prior to implementing completely custom cacheloader.

Specified by:
loadEntireState in interface CacheLoader
Overrides:
loadEntireState in class AbstractCacheLoader
Parameters:
os - ObjectOutputStream to write state
Throws:
java.lang.Exception
See Also:
AbstractCacheLoader.loadEntireState(ObjectOutputStream), NodeData

loadState

public void loadState(Fqn subtree,
                      java.io.ObjectOutputStream os)
               throws java.lang.Exception
Description copied from interface: CacheLoader
Fetches a portion of the state for this cache from secondary storage (disk, database) and writes it to a provided ObjectOutputStream. State written to the provided ObjectOutputStream parameter is used for activation of a portion of a new CacheImpl instance. When the state gets transferred to the new cache instance its cacheloader calls CacheLoader.storeState(Fqn,ObjectInputStream).

Implementations of this method should not catch any exception or close the given ObjectOutputStream parameter. In order to ensure cacheloader interoperability contents of the cache are written to the ObjectOutputStream as a sequence of NodeData objects.

Default implementation is provided by AbstractCacheLoader and ensures cacheloader interoperability. Implementors are encouraged to consider extending AbstractCacheLoader prior to implementing completely custom cacheloader.

Specified by:
loadState in interface CacheLoader
Overrides:
loadState in class AbstractCacheLoader
Parameters:
subtree - Fqn naming the root (i.e. highest level parent) node of the subtree for which state is requested.
os - ObjectOutputStream to write state
Throws:
java.lang.Exception
See Also:
AbstractCacheLoader.loadState(Fqn,ObjectOutputStream), Region.activate(), NodeData

storeEntireState

public void storeEntireState(java.io.ObjectInputStream is)
                      throws java.lang.Exception
Description copied from interface: CacheLoader
Stores the entire state for this cache by reading it from a provided ObjectInputStream. The state was provided to this cache by calling CacheLoader.loadEntireState(ObjectOutputStream)} on some other cache instance. State currently in storage gets overwritten.

Implementations of this method should not catch any exception or close the given ObjectInputStream parameter. In order to ensure cacheloader interoperability contents of the cache are read from the ObjectInputStream as a sequence of NodeData objects.

Default implementation is provided by AbstractCacheLoader and ensures cacheloader interoperability. Implementors are encouraged to consider extending AbstractCacheLoader prior to implementing completely custom cacheloader.

Specified by:
storeEntireState in interface CacheLoader
Overrides:
storeEntireState in class AbstractCacheLoader
Parameters:
is - ObjectInputStream to read state
Throws:
java.lang.Exception
See Also:
AbstractCacheLoader.storeEntireState(ObjectInputStream), NodeData

storeState

public void storeState(Fqn subtree,
                       java.io.ObjectInputStream is)
                throws java.lang.Exception
Description copied from interface: CacheLoader
Stores the given portion of the cache tree's state in secondary storage. Overwrite whatever is currently in secondary storage. If the transferred state has Fqns equal to or children of parameter subtree, then no special behavior is required. Otherwise, ensure that the state is integrated under the given subtree. Typically in the latter case subtree would be the Fqn of the buddy backup region for a buddy group; e.g.

If the the transferred state had Fqns starting with "/a" and subtree was "/_BUDDY_BACKUP_/192.168.1.2:5555" then the state should be stored in the local persistent store under "/_BUDDY_BACKUP_/192.168.1.2:5555/a"

Implementations of this method should not catch any exception or close the given ObjectInputStream parameter. In order to ensure cacheloader interoperability contents of the cache are read from the ObjectInputStream as a sequence of NodeData objects.

Default implementation is provided by AbstractCacheLoader and ensures cacheloader interoperability. Implementors are encouraged to consider extending AbstractCacheLoader prior to implementing completely custom cacheloader.

Specified by:
storeState in interface CacheLoader
Overrides:
storeState in class AbstractCacheLoader
Parameters:
subtree - Fqn naming the root (i.e. highest level parent) node of the subtree included in state. If the Fqns of the data included in state are not already children of subtree, then their Fqns should be altered to make them children of subtree before they are persisted.
is - ObjectInputStream to read state
Throws:
java.lang.Exception
See Also:
AbstractCacheLoader.storeState(Fqn,ObjectInputStream), NodeData

create

public void create()
            throws java.lang.Exception
Description copied from interface: CacheLoader
Lifecycle method, called when the cache loader is created.

Throws:
java.lang.Exception

start

public void start()
           throws java.lang.Exception
Description copied from interface: CacheLoader
Lifecycle method, called when the cache loader is started.

Throws:
java.lang.Exception

stop

public void stop()
Description copied from interface: CacheLoader
Lifecycle method, called when the cache loader is stopped.


destroy

public void destroy()
Description copied from interface: CacheLoader
Lifecycle method, called when the cache loader is destroyed.


delegateGetChildrenNames

protected abstract java.util.Set delegateGetChildrenNames(Fqn fqn)
                                                   throws java.lang.Exception
Throws:
java.lang.Exception

delegateGet

protected abstract java.util.Map delegateGet(Fqn name)
                                      throws java.lang.Exception
Throws:
java.lang.Exception

delegateExists

protected abstract boolean delegateExists(Fqn name)
                                   throws java.lang.Exception
Throws:
java.lang.Exception

delegatePut

protected abstract java.lang.Object delegatePut(Fqn name,
                                                java.lang.Object key,
                                                java.lang.Object value)
                                         throws java.lang.Exception
Throws:
java.lang.Exception

delegatePut

protected abstract void delegatePut(Fqn name,
                                    java.util.Map attributes)
                             throws java.lang.Exception
Throws:
java.lang.Exception

delegateRemove

protected abstract java.lang.Object delegateRemove(Fqn name,
                                                   java.lang.Object key)
                                            throws java.lang.Exception
Throws:
java.lang.Exception

delegateRemove

protected abstract void delegateRemove(Fqn name)
                                throws java.lang.Exception
Throws:
java.lang.Exception

delegateRemoveData

protected abstract void delegateRemoveData(Fqn name)
                                    throws java.lang.Exception
Throws:
java.lang.Exception

delegateLoadEntireState

protected abstract void delegateLoadEntireState(java.io.ObjectOutputStream os)
                                         throws java.lang.Exception
Throws:
java.lang.Exception

delegateLoadState

protected abstract void delegateLoadState(Fqn subtree,
                                          java.io.ObjectOutputStream os)
                                   throws java.lang.Exception
Throws:
java.lang.Exception

delegateStoreEntireState

protected abstract void delegateStoreEntireState(java.io.ObjectInputStream is)
                                          throws java.lang.Exception
Throws:
java.lang.Exception

delegateStoreState

protected abstract void delegateStoreState(Fqn subtree,
                                           java.io.ObjectInputStream is)
                                    throws java.lang.Exception
Throws:
java.lang.Exception