java.lang.Object | |
↳ | org.hibernate.cache.ReadWriteCache |
Caches data that is sometimes updated while maintaining the semantics of
"read committed" isolation level. If the database is set to "repeatable
read", this concurrency strategy almost maintains the semantics.
Repeatable read isolation is compromised in the case of concurrent writes.
This is an "asynchronous" concurrency strategy.
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.
Nested Classes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
ReadWriteCache.Item | An item of cached data, timestamped with the time it was cached,. | ||||||||||
ReadWriteCache.Lock | A soft lock which supports concurrent locking, timestamped with the time it was released | ||||||||||
ReadWriteCache.Lockable |
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Add the new item to the cache, checking that no other transaction has
accessed the item.
| |||||||||||
Re-cache the updated state, if and only if there there are
no other concurrent soft locks.
| |||||||||||
Evict all items from the cache immediately.
| |||||||||||
Clean up all resources.
| |||||||||||
Do nothing.
| |||||||||||
Do not return an item whose timestamp is later than the current
transaction timestamp.
| |||||||||||
Get the wrapped cache implementation
| |||||||||||
Get the cache region name
| |||||||||||
Do nothing.
| |||||||||||
Stop any other transactions reading or writing this item to/from
the cache.
| |||||||||||
Do not add an item to the cache unless the current transaction
timestamp is later than the timestamp at which the item was
invalidated.
| |||||||||||
Release the soft lock on the item.
| |||||||||||
Evict an item from the cache immediately (without regard for transaction
isolation).
| |||||||||||
Set the underlying cache implementation.
| |||||||||||
Do nothing.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
java.lang.Object
| |||||||||||
From interface
org.hibernate.cache.CacheConcurrencyStrategy
|
Add the new item to the cache, checking that no other transaction has accessed the item.
CacheException |
---|
Re-cache the updated state, if and only if there there are no other concurrent soft locks. Release our lock.
CacheException |
---|
Clean up all resources.
Do not return an item whose timestamp is later than the current
transaction timestamp. (Otherwise we might compromise repeatable
read unnecessarily.) Do not return an item which is soft-locked.
Always go straight to the database instead.
Note that since reading an item from that cache does not actually
go to the database, it is possible to see a kind of phantom read
due to the underlying row being updated after we have read it
from the cache. This would not be possible in a lock-based
implementation of repeatable read isolation. It is also possible
to overwrite changes made and committed by another transaction
after the current transaction read the item from the cache. This
problem would be caught by the update-time version-checking, if
the data is versioned or timestamped.
txTimestamp | a timestamp prior to the transaction start time |
---|
CacheException |
---|
Stop any other transactions reading or writing this item to/from the cache. Send them straight to the database instead. (The lock does time out eventually.) This implementation tracks concurrent locks of transactions which simultaneously attempt to write to an item.
CacheException |
---|
Do not add an item to the cache unless the current transaction timestamp is later than the timestamp at which the item was invalidated. (Otherwise, a stale item might be re-added if the database is operating in repeatable read isolation mode.) For versioned data, don't add the item unless it is the later version.
txTimestamp | a timestamp prior to the transaction start time |
---|---|
version | the item version number |
versionComparator | a comparator used to compare version numbers |
minimalPut | indicates that the cache should avoid a put is the item is already cached |
CacheException |
---|
Release the soft lock on the item. Other transactions may now re-cache the item (assuming that no other transaction holds a simultaneous lock).
CacheException |
---|
Evict an item from the cache immediately (without regard for transaction isolation).
CacheException |
---|
Do nothing.