public interface TreeCache<K,V> extends Lifecycle
Cache allowing for efficient tree-style access to cached data.
The primary purpose of this interface is to allow for efficient caching of tree-like structures such as directories,
as well as to provide a compatibility layer with JBoss Cache 3.x and earlier.
For most purposes, we expect people to use the Cache interface directly as it is simpler.
The tree API assumes that a collection of Nodes, organized in a tree structure underneath a root node,
contains key/value attributes of data.
Any locking happens on a node-level granularity, which means that all attributes on a node are atomic and in terms of
locking, is coarse grained. At the same time, replication is fine grained, and only modified attributes in a Node
are replicated.
Obtaining a TreeCache is done using the TreeCacheFactory.
Cache cache = new DefaultCacheFactory().getCache(); TreeCacheFactory tcf = new TreeCacheFactory(); TreeCache tree = tcf.createTreeCache(cache);
Node| Modifier and Type | Method and Description |
|---|---|
void |
clearData(Fqn fqn)
Removes the keys and properties from a named node.
|
void |
clearData(Fqn fqn,
Flag... flags) |
void |
clearData(java.lang.String fqn)
Convenience method that takes in a String represenation of the Fqn.
|
void |
clearData(java.lang.String fqn,
Flag... flags) |
boolean |
exists(Fqn fqn)
Tests if an Fqn exists.
|
boolean |
exists(Fqn fqn,
Flag... flags) |
boolean |
exists(java.lang.String fqn)
Tests if an Fqn exists.
|
boolean |
exists(java.lang.String fqn,
Flag... flags) |
V |
get(Fqn fqn,
K key)
Convenience method that allows for direct access to the data in a
Node. |
V |
get(Fqn fqn,
K key,
Flag... flags) |
V |
get(java.lang.String fqn,
K key)
Convenience method that takes a string representation of an Fqn.
|
V |
get(java.lang.String fqn,
K key,
Flag... flags) |
Cache<?,?> |
getCache() |
java.util.Map<K,V> |
getData(Fqn fqn)
Retrieves a defensively copied data map of the underlying node.
|
java.util.Map<K,V> |
getData(Fqn fqn,
Flag... flags) |
java.util.Set<K> |
getKeys(Fqn fqn)
Returns a set of attribute keys for the Fqn.
|
java.util.Set<K> |
getKeys(Fqn fqn,
Flag... flags) |
java.util.Set<K> |
getKeys(java.lang.String fqn)
Convenience method that takes in a String represenation of the Fqn.
|
java.util.Set<K> |
getKeys(java.lang.String fqn,
Flag... flags) |
Node<K,V> |
getNode(Fqn fqn)
A convenience method to retrieve a node directly from the cache.
|
Node<K,V> |
getNode(Fqn fqn,
Flag... flags) |
Node<K,V> |
getNode(java.lang.String fqn)
Convenience method that takes a string representation of an Fqn.
|
Node<K,V> |
getNode(java.lang.String fqn,
Flag... flags) |
Node<K,V> |
getRoot()
Returns the root node of this cache.
|
Node<K,V> |
getRoot(Flag... flags) |
void |
move(Fqn nodeToMove,
Fqn newParent)
Moves a part of the cache to a different subtree.
|
void |
move(Fqn nodeToMove,
Fqn newParent,
Flag... flags) |
void |
move(java.lang.String nodeToMove,
java.lang.String newParent)
Convenience method that takes in string representations of Fqns.
|
void |
move(java.lang.String nodeToMove,
java.lang.String newParent,
Flag... flags) |
V |
put(Fqn fqn,
K key,
V value)
Associates the specified value with the specified key for a
Node in this cache. |
V |
put(Fqn fqn,
K key,
V value,
Flag... flags) |
void |
put(Fqn fqn,
java.util.Map<? extends K,? extends V> data)
Copies all of the mappings from the specified map to a
Node. |
void |
put(Fqn fqn,
java.util.Map<? extends K,? extends V> data,
Flag... flags) |
V |
put(java.lang.String fqn,
K key,
V value)
Convenience method that takes a string representation of an Fqn.
|
V |
put(java.lang.String fqn,
K key,
V value,
Flag... flags) |
void |
put(java.lang.String fqn,
java.util.Map<? extends K,? extends V> data)
Convenience method that takes a string representation of an Fqn.
|
void |
put(java.lang.String fqn,
java.util.Map<? extends K,? extends V> data,
Flag... flags) |
V |
remove(Fqn fqn,
K key)
Removes the mapping for this key from a Node.
|
V |
remove(Fqn fqn,
K key,
Flag... flags) |
V |
remove(java.lang.String fqn,
K key)
Convenience method that takes a string representation of an Fqn.
|
V |
remove(java.lang.String fqn,
K key,
Flag... flags) |
boolean |
removeNode(Fqn fqn)
|
boolean |
removeNode(Fqn fqn,
Flag... flags) |
boolean |
removeNode(java.lang.String fqn)
Convenience method that takes a string representation of an Fqn.
|
boolean |
removeNode(java.lang.String fqn,
Flag... flags) |
V put(Fqn fqn, K key, V value)
Node in this cache. If the Node
previously contained a mapping for this key, the old value is replaced by the specified value.fqn - absolute Fqn to the Node to be accessed.key - key with which the specified value is to be associated.value - value to be associated with the specified key.null if there was no mapping for key. A
null return can also indicate that the Node previously associated null with the
specified key, if the implementation supports null values.java.lang.IllegalStateException - if the cache is not in a started state.V put(java.lang.String fqn, K key, V value)
put(Fqn, Object,
Object)fqn - String representation of the Fqnkey - key with which the specified value is to be associated.value - value to be associated with the specified key.null if there was no mapping for key. A
null return can also indicate that the Node previously associated null with the
specified key, if the implementation supports null values.java.lang.IllegalStateException - if the cache is not in a started statevoid put(Fqn fqn, java.util.Map<? extends K,? extends V> data)
Node.void put(java.lang.String fqn,
java.util.Map<? extends K,? extends V> data)
put(Fqn,
java.util.Map)fqn - String representation of the Fqndata - data map to insertjava.lang.IllegalStateException - if the cache is not in a started stateV remove(Fqn fqn, K key)
null if the Node contained no mapping for this key.V remove(java.lang.String fqn, K key)
remove(Fqn,
Object)fqn - string representation of the Fqn to retrievekey - key to removejava.lang.IllegalStateException - if the cache is not in a started stateboolean removeNode(Fqn fqn)
fqn - Node to removejava.lang.IllegalStateException - if the cache is not in a started stateboolean removeNode(java.lang.String fqn)
removeNode(Fqn)fqn - string representation of the Fqn to retrievejava.lang.IllegalStateException - if the cache is not in a started stateboolean removeNode(java.lang.String fqn,
Flag... flags)
Node<K,V> getNode(Fqn fqn)
fqn - fqn of the node to retrievejava.lang.IllegalStateException - if the cache is not in a started stateNode<K,V> getNode(java.lang.String fqn)
getNode(Fqn)fqn - string representation of the Fqn to retrievejava.lang.IllegalStateException - if the cache is not in a started stateV get(java.lang.String fqn, K key)
get(Fqn,
Object)fqn - string representation of the Fqn to retrievekey - key to fetchjava.lang.IllegalStateException - if the cache is not in a started statevoid move(Fqn nodeToMove, Fqn newParent) throws NodeNotExistsException
/a/b/c
/a/b/d
/a/b/e
Fqn f1 = Fqn.fromString("/a/b/c");
Fqn f2 = Fqn.fromString("/a/b/d");
cache.move(f1, f2);
Will result in:
/a/b/d/c /a/b/eand now
Fqn f3 = Fqn.fromString("/a/b/e");
Fqn f4 = Fqn.fromString("/a");
cache.move(f3, f4);
will result in:
/a/b/d/c /a/eNo-op if the node to be moved is the root node. Note: As of 3.0.0 and when using MVCC locking, more specific behaviour is defined as follows:
nodeToMove - the Fqn of the node to move.newParent - new location under which to attach the node being moved.NodeNotExistsException - may throw one of these if the target node does not exist or if a different thread
has moved this node elsewhere already.java.lang.IllegalStateException - if Cache.getStatus() would not return ComponentStatus.RUNNING.void move(Fqn nodeToMove, Fqn newParent, Flag... flags) throws NodeNotExistsException
NodeNotExistsExceptionvoid move(java.lang.String nodeToMove,
java.lang.String newParent)
throws NodeNotExistsException
move(Fqn, Fqn)java.lang.IllegalStateException - if Cache.getStatus() would not return ComponentStatus.RUNNING.NodeNotExistsExceptionvoid move(java.lang.String nodeToMove,
java.lang.String newParent,
Flag... flags)
throws NodeNotExistsException
NodeNotExistsExceptionjava.util.Map<K,V> getData(Fqn fqn)
fqn - CacheExceptionjava.lang.IllegalStateException - if Cache.getStatus() would not return ComponentStatus.RUNNING.java.util.Set<K> getKeys(java.lang.String fqn)
getKeys(Fqn).java.util.Set<K> getKeys(Fqn fqn)
fqn - name of the nodejava.lang.IllegalStateException - if Cache.getStatus() would not return ComponentStatus.RUNNING.void clearData(java.lang.String fqn)
clearData(Fqn).java.lang.IllegalStateException - if Cache.getStatus() would not return ComponentStatus.RUNNING.void clearData(java.lang.String fqn,
Flag... flags)
void clearData(Fqn fqn)
fqn - name of the nodejava.lang.IllegalStateException - if Cache.getStatus() would not return ComponentStatus.RUNNING.Cache<?,?> getCache()
boolean exists(java.lang.String fqn)
exists(Fqn)fqn - string representation of an Fqnboolean exists(java.lang.String fqn,
Flag... flags)
boolean exists(Fqn fqn)
fqn - Fqn to test