Defines contracts for transactional and concurrent access to cached {@link EntityRegionAcessStrategy entity} and {@link CollectionAccessStrategy collection} data. Transactions pass in a timestamp indicating transaction start time which is then used to protect against concurrent access (exactly how that occurs is based on the actual access-strategy impl used). Two different implementation patterns are provided for.

Note that, for an asynchronous cache, cache invalidation must be a two step process (lock->release or lock->afterUpdate), since this is the only way to guarantee consistency with the database for a nontransactional cache implementation. For a synchronous cache, cache invalidation is a single step process (evict or update). Hence, this these contracts ({@link EntityRegionAcessStrategy} and {@link CollectionAccessStrategy}) define a three step process to cater for both models.

Note that query result caching does not go through an access strategy; those caches are managed directly against the underlying {@link org.hibernate.cache.QueryResultsRegion}.