The JavaDoc for org.hibernate.cache.ReadWriteCache (the class that implements the read-write strategy) says this strategy may be used in a cluster, depending on the underlying cache implementation:
Quote:
If this strategy is used in a cluster, the underlying cache implementation must support distributed hard locks (which are held only momentarily). This strategy also assumes that the underlying cache implementation does not do asynchronous replication and that state has been fully replicated as soon as the lock is released.
As far as I can see, however, you could use a non-locking async cache such as EhCache as long as you accept the possibility for cache inconsistencies. If you're very cautious in choosing things to be cached (very rarely updated) the chance of an inconsistency arising would be very small. The risk can be further mitigated by configuring the cache to invalidate rather than replicate. In any case, depending on the nature of the application, inconsistencies may be acceptable. Any inconsistencies that do arise can be flushed occasionally by setting a suitable timeout (e.g. 1 hour).