2.3. Caching and Retrieving Data
Next, lets use the
Cache
API to access a Node
in the cache and then do some simple reads and writes to that node.
// Let us get a hold of the root node. Node rootNode = cache.getRoot(); // Remember, JBoss Cache stores data in a tree structure. // All nodes in the tree structure are identified by Fqn objects. Fqn peterGriffinFqn = Fqn.fromString("/griffin/peter"); // Create a new Node Node peterGriffin = rootNode.addChild(peterGriffinFqn); // let us store some data in the node peterGriffin.put("isCartoonCharacter", Boolean.TRUE); peterGriffin.put("favoriteDrink", new Beer()); // some tests (just assume this code is in a JUnit test case) assertTrue(peterGriffin.get("isCartoonCharacter")); assertEquals(peterGriffinFqn, peterGriffin.getFqn()); assertTrue(rootNode.hasChild(peterGriffinFqn)); Set keys = new HashSet(); keys.add("isCartoonCharacter"); keys.add("favoriteDrink"); assertEquals(keys, peterGriffin.getKeys()); // let us remove some data from the node peterGriffin.remove("favoriteDrink"); assertNull(peterGriffin.get("favoriteDrink"); // let us remove the node altogether rootNode.removeChild(peterGriffinFqn); assertFalse(rootNode.hasChild(peterGriffinFqn));
The
Cache
interface also exposes put/get/remove operations that take an Section 2.4, “ The Fqn
Class ” as an argument, for convenience:
Fqn peterGriffinFqn = Fqn.fromString("/griffin/peter"); cache.put(peterGriffinFqn, "isCartoonCharacter", Boolean.TRUE); cache.put(peterGriffinFqn, "favoriteDrink", new Beer()); assertTrue(peterGriffin.get(peterGriffinFqn, "isCartoonCharacter")); assertTrue(cache.getRootNode().hasChild(peterGriffinFqn)); cache.remove(peterGriffinFqn, "favoriteDrink"); assertNull(cache.get(peterGriffinFqn, "favoriteDrink"); cache.removeNode(peterGriffinFqn); assertFalse(cache.getRootNode().hasChild(peterGriffinFqn));
2.3.1. Organizing Your Data and Using the Node Structure
A Node should be viewed as a named logical grouping of data. A node should be used to contain data for a single data record, for example information about a particular person or account. It should be kept in mind that all aspects of the cache - locking, cache loading, replication and eviction - happen on a per-node basis. As such, anything grouped together by being stored in a single node will be treated as a single atomic unit.