Wanted to write up how the cache works. Its not very efficient on how
it decides to do invalidations, but this was the easiest approach.
* There are RealmAdapter, UserAdapter, etc. in the cache module just
like any other adapter
* These adapter objects are created once per session and reused with
* Any non-read method invoked will cause a persistence adapter to be
found for that model. The cache adapter object will then, from then on,
delegate to that persistence adapter.
* Invalidations happen at the end of a transaction
* Any create, update, or delete method invoked will cause a invalidation
event to be registered.
* If you call RealmModel.removeOAuthClient(), RealmModel.addRole(),
etc...this also causes the realm to be registered for invalidation.
Same thing with applications etc. This is true for everything but user
sessions and users.
* Anything registered for invalidation will cause the cache provider to
return a persistent model for any top level lookups.
* persistent adapter methods should never try and typecast a Model
reference to an adapter class. This is problematic for JPA as you need
to set up entity relationships. To get around this,
EntityManager.getReference() is used. Doesn't seem to be as much a
problem in the mongo one.
JBoss, a division of Red Hat