|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.jboss.cache.loader.AbstractCacheLoader org.jboss.cache.loader.AbstractDelegatingCacheLoader org.jboss.cache.loader.SingletonStoreCacheLoader
public class SingletonStoreCacheLoader
SingletonStoreCacheLoader is a delegating cache loader used for situations when only one node should interact with the underlying store. The coordinator of the cluster will be responsible for the underlying CacheLoader. SingletonStoreCacheLoader is a simply facade to a real CacheLoader implementation. It always delegates reads to the real CacheLoader.
Writes are forwarded only if this SingletonStoreCacheLoader is currently the cordinator. This avoid having all CacheLoaders in a cluster writing the same data to the same underlying store. Although not incorrect (e.g. a DB will just discard additional INSERTs for the same key, and throw an exception), this will avoid a lot of redundant work.
Nested Class Summary | |
---|---|
class |
SingletonStoreCacheLoader.SingletonStoreListener
Cache listener that reacts to cluster topology changes to find out whether a new coordinator is elected. |
Field Summary |
---|
Fields inherited from class org.jboss.cache.loader.AbstractCacheLoader |
---|
cache, regionManager |
Constructor Summary | |
---|---|
SingletonStoreCacheLoader(CacheLoader cacheLoader,
boolean pushConfiguration)
|
Method Summary | |
---|---|
protected void |
activeStatusChanged(boolean newActiveState)
|
void |
commit(java.lang.Object tx)
Commits the transaction. |
protected java.lang.Thread |
createPushStateThread()
|
java.lang.Object |
getCacheListener()
|
java.lang.Thread |
getPushStateThread()
|
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. |
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 |
put(java.util.List<Modification> modifications)
Applies all modifications to the backend store. |
void |
remove(Fqn fqn)
Removes the given node and all its subnodes, does nothing if the node does not exist. |
java.lang.Object |
remove(Fqn fqn,
java.lang.Object key)
Removes the given key and value from the attributes of the given node. |
void |
removeData(Fqn fqn)
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 |
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. |
java.lang.String |
toString()
|
Methods inherited from class org.jboss.cache.loader.AbstractDelegatingCacheLoader |
---|
create, destroy, exists, get, getCacheLoader, getChildrenNames, getConfig, loadEntireState, loadState, setCache, setCacheLoader, setConfig, setRegionManager, start, stop |
Methods inherited from class org.jboss.cache.loader.AbstractCacheLoader |
---|
getMarshaller, getNodeDataList, loadStateHelper, put |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Constructor Detail |
---|
public SingletonStoreCacheLoader(CacheLoader cacheLoader, boolean pushConfiguration)
Method Detail |
---|
public java.lang.Object getCacheListener()
protected void activeStatusChanged(boolean newActiveState)
protected java.lang.Thread createPushStateThread()
public java.lang.Object put(Fqn name, java.lang.Object key, java.lang.Object value) throws java.lang.Exception
CacheLoader
put
in interface CacheLoader
put
in class AbstractDelegatingCacheLoader
java.lang.Exception
public void put(Fqn name, java.util.Map attributes) throws java.lang.Exception
CacheLoader
Map.putAll(java.util.Map extends K, ? extends V>)
.
If the node does not exist, all parent nodes from the root down are created automatically
put
in interface CacheLoader
put
in class AbstractDelegatingCacheLoader
name
- The fully qualified name of the nodeattributes
- A Map of attributes. Can be null
java.lang.Exception
public void put(java.util.List<Modification> modifications) throws java.lang.Exception
CacheLoader
put
in interface CacheLoader
put
in class AbstractDelegatingCacheLoader
modifications
- A Listjava.lang.Exception
public java.lang.Object remove(Fqn fqn, java.lang.Object key) throws java.lang.Exception
CacheLoader
remove
in interface CacheLoader
remove
in class AbstractDelegatingCacheLoader
java.lang.Exception
public void remove(Fqn fqn) throws java.lang.Exception
CacheLoader
remove
in interface CacheLoader
remove
in class AbstractDelegatingCacheLoader
fqn
- the Fqn
of the node
java.lang.Exception
public void removeData(Fqn fqn) throws java.lang.Exception
CacheLoader
removeData
in interface CacheLoader
removeData
in class AbstractDelegatingCacheLoader
fqn
- the Fqn
of the node
java.lang.Exception
public void prepare(java.lang.Object tx, java.util.List<Modification> modifications, boolean one_phase) throws java.lang.Exception
CacheLoader
tx
(tx is the key)
prepare
in interface CacheLoader
prepare
in class AbstractDelegatingCacheLoader
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 Modification
s, for the given transactionone_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
java.lang.Exception
public void commit(java.lang.Object tx) throws java.lang.Exception
CacheLoader
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
commit
in interface CacheLoader
commit
in class AbstractDelegatingCacheLoader
tx
- transaction to commit
java.lang.Exception
public void rollback(java.lang.Object tx)
CacheLoader
tx
and roll back that
transaction.
rollback
in interface CacheLoader
rollback
in class AbstractDelegatingCacheLoader
tx
- transaction to roll backpublic void storeEntireState(java.io.ObjectInputStream is) throws java.lang.Exception
CacheLoader
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.
storeEntireState
in interface CacheLoader
storeEntireState
in class AbstractDelegatingCacheLoader
is
- ObjectInputStream to read state
java.lang.Exception
AbstractCacheLoader.storeEntireState(ObjectInputStream)
,
NodeData
public void storeState(Fqn subtree, java.io.ObjectInputStream is) throws java.lang.Exception
CacheLoader
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.
storeState
in interface CacheLoader
storeState
in class AbstractDelegatingCacheLoader
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
java.lang.Exception
AbstractCacheLoader.storeState(Fqn,ObjectInputStream)
,
NodeData
public java.lang.Thread getPushStateThread()
public java.lang.String toString()
toString
in class java.lang.Object
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |