Clarify hibernate-jcache transactional behavior

Description

Took a look into hibernate-jcache code today.

It implements an asynchronous cache, meaning it is not aware of transactions itself. A locking mechanism is implemented which wraps every value (the cache entry from hibernate) into an "item" which contains a version and a timestamp.

Looking deeper into the locking implementation, it says that it is working only correctly on a single JVM (Timestamper). The method lockItem returns a lock object, the method lockRegion is doing nothing. Running the unit tests, some paths that deal with concurrent events are uncovered. Since the "locks" are wrappers of values, the locks may get lost when a cache evicts or expires the values.

Is hibernate-jcache meant to work consistently in a clustered environment? Any tests or experiences?

Is the implementation of locking actually needed by a cache implementation, if only targeting a single VM instance?

Depending on what we find out, the documentation should probably get more information about the consistency guarantees / transactional behavior when using JCache based caching.

If it is only working reliably in a single VM this should be documented and maybe the additional overhead of the wrapper objects can be removed.

Environment

None

Assignee

Unassigned

Reporter

Jens Wilke

Fix versions

None

Labels

None

backPortable

None

Suitable for new contributors

None

Requires Release Note

None

Pull Request

None

backportDecision

None

Components

Priority

Major
Configure