JBoss.org Community Documentation
Here are the current features and benefits of PojoCache:
Fine-grained replication. The replication modes supported are the
same as that of Core Cache:
LOCAL
, REPL_SYNC
, REPL_ASYNC
,
INVALIDATION_SYNC
, and INVALIDATION_ASYNC
(see the
main JBoss Cache reference documentation for details). The
replication level is fine-grained and is performed automatically once the POJO is mapped into the
internal cache store. When a POJO field is updated, a replication request
will be sent out only to the key
corresponding to that modified attribute (instead of the whole
object). This can have a potential performance boost during the replication
process; e.g., updating a single key in a big HashMap will only
replicate the single field instead of the whole map!
POJO p = new POJO(); p.setName("old value"); pojoCache.attach("id", p); tx.begin(); // start a user transaction p.setName("some pojo"); tx.rollback(); // this will cause the rollback p.getName(); // is "old value"
In addition, operations under a transaction is batched. That is,
the update is not performed until the commit
phase. Further, if replication is enabled, other nodes will not see the changes until the transaction has completed successfully.
Passivation. POJO Cache supports the same passivation provided by Core Cache. When a node mapped by POJO Cache has reached a configured threshold, it is evicted from memory and stored using a cache loader. When the node is accessed again, it will be retrieved from the cache loader and put into memory. The configuration parameters are the same as those of the Cache counterpart. To configure the passivation, you will need to configure both the eviction policy and cache loader.
Object cache by reachability, i.e., recursive object mapping
into the cache store. On attach, POJO Cache
will attach all referenced objects as well. This feature is explained in more detail later.
Natural Object Relationships. Java references are preserved as they were written. That is, a user does not need to declare any object relationship (e.g., one-to-one, or one-to-many) to use the cache.
Object Identity. Object identity is preserved. Not only can a cached object be compared
using equals()
, but the comparison operator, ==
, can be
used as well. For example, an object such as
Address
may be multiple referenced by two
Person
s (e.g., joe
and mary
).
The objects retrieved from joe.getAddress()
and mary.getAddress()
should be identicali, when when retrieved from a different node in the cluster then that which attached them.
Inheritance. POJO Cache preserves the inheritance hierarchy of any object in the cache.
For example, if a Student
class inherits from a
Person class, once a Student
object is mapped to POJO Cache (e.g., attach
call), the fields in the base class Person
are mapped as well.
Collections. Java Collection types (e.g. List, Set, and Map) are transparently mapped using Java proxies. Details are described later.
Annotation based. Starting from release 2.0, JDK 5 annotations are used to indicate that an object should be instrumented for use under POJO Cache (once attached).
Transparent. Once a POJO is attached to the cache, subsequent object model changes are transparently handled. No further API calls are required.