Most of the caching frameworks have the not up-to-date issue, they just limiting to cache a result for a given period of time. So if you have to invalidate the cache, you must do it manually.
That's the not ordinary part of CacheAware, it does that magically. The purpose of this document is to explaining how the magic is done.
CacheAware works intercepting calls each @CacheAwareFactory annotated method and collects all entities used inside its execution. Then assumes that all those collected entities are involved (or part) of that method result.
So if any of them changes, there is no warranty the cached result is up-to-date and therefore is invalidated.
A couple of questions arise from the above statement:
That will be answered soon, but lets introduce a few concepts first.
CacheAware distinguishes between tree kind on objects: