Java 类org.hibernate.cache.access.SoftLock 实例源码
项目:hazelcast-hibernate
文件:LocalRegionCache.java
@Override
public SoftLock tryLock(final Object key, final Object version) {
ExpiryMarker marker;
String markerId = nextMarkerId();
while (true) {
final Expirable original = cache.get(key);
long timeout = nextTimestamp() + CacheEnvironment.getDefaultCacheTimeoutInMillis();
if (original == null) {
marker = new ExpiryMarker(version, timeout, markerId);
if (cache.putIfAbsent(key, marker) == null) {
break;
}
} else {
marker = original.markForExpiration(timeout, markerId);
if (cache.replace(key, original, marker)) {
break;
}
}
}
return new MarkerWrapper(marker);
}
项目:health-and-care-developer-network
文件:LocalRegionCache.java
public boolean update(final Object key, final Object value, final Object currentVersion,
final Object previousVersion, final SoftLock lock) {
if (lock == LOCK_FAILURE) {
return false;
}
final Value currentValue = cache.get(key);
if (lock == LOCK_SUCCESS) {
if (currentValue != null && currentVersion != null
&& versionComparator.compare(currentVersion, currentValue.getVersion()) < 0) {
return false;
}
}
if (topic != null) {
topic.publish(createMessage(key, value, currentVersion));
}
cache.put(key, new Value(currentVersion, value, lock, Clock.currentTimeMillis()));
return true;
}
项目:health-and-care-developer-network
文件:LocalRegionCache.java
public SoftLock tryLock(final Object key, final Object version) {
final Value value = cache.get(key);
if (value == null) {
if (cache.putIfAbsent(key, new Value(version, null, LOCK_SUCCESS, Clock.currentTimeMillis())) == null) {
return LOCK_SUCCESS;
} else {
return LOCK_FAILURE;
}
} else {
if (version == null || versionComparator.compare(version, value.getVersion()) >= 0) {
if (cache.replace(key, value, value.createLockedValue(LOCK_SUCCESS))) {
return LOCK_SUCCESS;
} else {
return LOCK_FAILURE;
}
} else {
return LOCK_FAILURE;
}
}
}
项目:hazelcast-hibernate
文件:LocalRegionCache.java
@Override
public void unlock(final Object key, SoftLock lock) {
while (true) {
final Expirable original = cache.get(key);
if (original != null) {
if (!(lock instanceof MarkerWrapper)) {
break;
}
final ExpiryMarker unwrappedMarker = ((MarkerWrapper) lock).getMarker();
if (original.matches(unwrappedMarker)) {
final Expirable revised = ((ExpiryMarker) original).expire(nextTimestamp());
if (cache.replace(key, original, revised)) {
break;
}
} else if (original.getValue() != null) {
if (cache.remove(key, original)) {
break;
}
} else {
break;
}
} else {
break;
}
}
maybeNotifyTopic(key, null, null);
}
项目:hazelcast-hibernate
文件:ReadWriteAccessDelegate.java
/**
* {@inheritDoc}
* <p>
* Called after <code>com.hazelcast.ReadWriteAccessDelegate.lockItem()</code>
* </p>
*/
@Override
public boolean afterUpdate(final Object key, final Object value, final Object currentVersion, final Object previousVersion,
final SoftLock lock) throws CacheException {
try {
return cache.update(key, value, currentVersion, lock);
} catch (HazelcastException e) {
if (log.isFinestEnabled()) {
log.finest("Could not update Cache[" + hazelcastRegion.getName() + "]: " + e.getMessage());
}
return false;
}
}
项目:hazelcast-hibernate
文件:ReadOnlyAccessDelegate.java
/**
* @throws UnsupportedOperationException Always thrown as we cannot update an item in a read-only cache
*/
@Override
public boolean afterUpdate(final Object key, final Object value, final Object currentVersion,
final Object previousVersion, final SoftLock lock) throws CacheException {
throw new UnsupportedOperationException("Cannot update an item in a read-only cache: "
+ getHazelcastRegion().getName());
}
项目:hazelcast-hibernate
文件:ReadOnlyAccessDelegate.java
/**
* {@inheritDoc}
* <p>
* Should be a no-op since this cache is read-only
* </p>
*/
@Override
public void unlockItem(final Object key, final SoftLock lock) throws CacheException {
/*
* To err on the safe side though, follow ReadOnlyEhcacheEntityRegionAccessStrategy which nevertheless evicts
* the key.
*/
evict(key);
}
项目:hazelcast-hibernate
文件:IMapRegionCache.java
@Override
public boolean update(final Object key, final Object newValue, final Object newVersion, final SoftLock lock) {
if (lock instanceof MarkerWrapper) {
final ExpiryMarker unwrappedMarker = ((MarkerWrapper) lock).getMarker();
return (Boolean) map.executeOnKey(key, new UpdateEntryProcessor(unwrappedMarker, newValue, newVersion,
nextMarkerId(), nextTimestamp(hazelcastInstance)));
} else {
return false;
}
}
项目:hazelcast-hibernate
文件:IMapRegionCache.java
@Override
public SoftLock tryLock(final Object key, final Object version) {
long timeout = nextTimestamp(hazelcastInstance) + lockTimeout;
final ExpiryMarker marker = (ExpiryMarker) map.executeOnKey(key,
new LockEntryProcessor(nextMarkerId(), timeout, version));
return new MarkerWrapper(marker);
}
项目:hazelcast-hibernate
文件:IMapRegionCache.java
@Override
public void unlock(final Object key, SoftLock lock) {
if (lock instanceof MarkerWrapper) {
final ExpiryMarker unwrappedMarker = ((MarkerWrapper) lock).getMarker();
map.executeOnKey(key, new UnlockEntryProcessor(unwrappedMarker, nextMarkerId(),
nextTimestamp(hazelcastInstance)));
}
}
项目:hazelcast-archive
文件:ReadWriteAccessDelegate.java
/**
* {@inheritDoc}
* <p/>
* Called after <code>com.hazelcast.hibernate.access.ReadWriteAccessDelegate.lockItem()</code>
*/
public boolean afterUpdate(final Object key, final Object value, final Object currentVersion, final Object previousVersion,
final SoftLock lock) throws CacheException {
try {
return put(key, value, currentVersion, previousVersion);
} catch (TimeoutException e) {
LOG.log(Level.FINEST, e.getMessage());
} finally {
unlockItem(key, lock);
}
return false;
}
项目:hazelcast-archive
文件:ReadWriteAccessDelegate.java
public SoftLock lockItem(final Object key, final Object version) throws CacheException {
if (lockTimeout > 0) {
if (!getCache().tryLock(key, lockTimeout, TimeUnit.SECONDS)) {
throw new CacheException("Cache lock could not be acquired! Wait-time: " + lockTimeout + " seconds");
}
} else {
getCache().lock(key);
}
return new SoftLock() {
}; // dummy lock
}
项目:hazelcast-archive
文件:ReadOnlyAccessDelegate.java
/**
* @throws UnsupportedOperationException
*/
@Override
public boolean afterUpdate(final Object key, final Object value, final Object currentVersion,
final Object previousVersion, final SoftLock lock) throws CacheException {
throw new UnsupportedOperationException("Cannot update an item in a read-only cache: "
+ getHazelcastRegion().getName());
}
项目:health-and-care-developer-network
文件:LocalRegionCache.java
public void unlock(final Object key, SoftLock lock) {
final Value value = cache.get(key);
if (value != null) {
final SoftLock currentLock = value.getLock();
if (currentLock == lock) {
cache.replace(key, value, value.createUnlockedValue());
}
}
}
项目:health-and-care-developer-network
文件:ReadWriteAccessDelegate.java
/**
* {@inheritDoc}
* <p/>
* Called after <code>com.hazelcast.hibernate.access.ReadWriteAccessDelegate.lockItem()</code>
*/
public boolean afterUpdate(final Object key, final Object value, final Object currentVersion, final Object previousVersion,
final SoftLock lock) throws CacheException {
try {
return update(key, value, currentVersion, previousVersion, lock);
} finally {
unlockItem(key, lock);
}
}
项目:health-and-care-developer-network
文件:ReadOnlyAccessDelegate.java
/**
* @throws UnsupportedOperationException
*/
@Override
public boolean afterUpdate(final Object key, final Object value, final Object currentVersion,
final Object previousVersion, final SoftLock lock) throws CacheException {
throw new UnsupportedOperationException("Cannot update an item in a read-only cache: "
+ getHazelcastRegion().getName());
}
项目:health-and-care-developer-network
文件:AbstractAccessDelegate.java
protected boolean update(final Object key, final Object value,
final Object currentVersion, final Object previousVersion, final SoftLock lock) {
try {
return cache.update(key, value, currentVersion, previousVersion, lock);
} catch (HazelcastException e) {
LOG.log(Level.FINEST, "Could not update Cache[" + hazelcastRegion.getName() + "]: " + e.getMessage());
return false;
}
}
项目:health-and-care-developer-network
文件:IMapRegionCache.java
public boolean update(final Object key, final Object value, final Object currentVersion,
final Object previousVersion, final SoftLock lock) {
if (lock == LOCK_FAILURE) {
logger.log(Level.WARNING, "Cache lock could not be acquired!");
return false;
}
if (versionComparator != null && currentVersion != null) {
if (explicitVersionCheckEnabled && value instanceof CacheEntry) {
try {
final CacheEntry currentEntry = (CacheEntry) value;
final CacheEntry previousEntry = (CacheEntry) map.tryLockAndGet(key,
tryLockAndGetTimeout, TimeUnit.MILLISECONDS);
if (previousEntry == null ||
versionComparator.compare(currentEntry.getVersion(), previousEntry.getVersion()) > 0) {
map.putAndUnlock(key, value);
return true;
} else {
map.unlock(key);
return false;
}
} catch (TimeoutException e) {
return false;
}
} else if (previousVersion == null || versionComparator.compare(currentVersion, previousVersion) > 0) {
map.set(key, value, 0, TimeUnit.MILLISECONDS);
}
return false;
} else {
map.set(key, value, 0, TimeUnit.MILLISECONDS);
return true;
}
}
项目:hazelcast-hibernate
文件:LocalRegionCache.java
@Override
public boolean update(final Object key, final Object newValue, final Object newVersion, final SoftLock softLock) {
boolean updated = false;
while (true) {
Expirable original = cache.get(key);
Expirable revised;
long timestamp = nextTimestamp();
if (original == null) {
// The entry must have expired. it should be safe to update
revised = new Value(newVersion, timestamp, newValue);
updated = true;
if (cache.putIfAbsent(key, revised) == null) {
break;
}
} else {
if (softLock instanceof MarkerWrapper) {
final ExpiryMarker unwrappedMarker = ((MarkerWrapper) softLock).getMarker();
if (original.matches(unwrappedMarker)) {
// The lock matches
final ExpiryMarker marker = (ExpiryMarker) original;
if (marker.isConcurrent()) {
revised = marker.expire(timestamp);
updated = false;
} else {
revised = new Value(newVersion, timestamp, newValue);
updated = true;
}
if (cache.replace(key, original, revised)) {
break;
}
} else if (original.getValue() == null) {
// It's marked for expiration, leave it as is
updated = false;
break;
} else {
// It's a value. Instead of removing it, expire it to prevent stale from in progress
// transactions being put in the cache
revised = new ExpiryMarker(newVersion, timestamp, nextMarkerId()).expire(timestamp);
updated = false;
if (cache.replace(key, original, revised)) {
break;
}
}
} else {
break;
}
}
}
maybeNotifyTopic(key, newValue, newVersion);
return updated;
}
项目:hazelcast-hibernate
文件:ReadWriteAccessDelegate.java
@Override
public SoftLock lockItem(final Object key, final Object version) throws CacheException {
return cache.tryLock(key, version);
}
项目:hazelcast-hibernate
文件:ReadWriteAccessDelegate.java
@Override
public void unlockItem(final Object key, final SoftLock lock) throws CacheException {
cache.unlock(key, lock);
}
项目:hazelcast-hibernate
文件:ReadOnlyAccessDelegate.java
@Override
public SoftLock lockItem(final Object key, final Object version) throws CacheException {
return null;
}
项目:hazelcast-hibernate
文件:ReadOnlyAccessDelegate.java
/**
* @throws UnsupportedOperationException Thrown always because a read-only cache region cannot be locked
*/
@Override
public SoftLock lockRegion() throws CacheException {
throw new UnsupportedOperationException("Attempting to lock a read-only cache region: "
+ getHazelcastRegion().getName());
}
项目:hazelcast-hibernate
文件:ReadOnlyAccessDelegate.java
/**
* This will issue a log warning stating that an attempt was made to unlock a read-only cache region.
*/
@Override
public void unlockRegion(final SoftLock lock) throws CacheException {
log.warning("Attempting to unlock a read-only cache region");
}
项目:hazelcast-hibernate
文件:NonStrictReadWriteAccessDelegate.java
@Override
public boolean afterUpdate(final Object key, final Object value, final Object currentVersion, final Object previousVersion,
final SoftLock lock) throws CacheException {
unlockItem(key, lock);
return false;
}
项目:hazelcast-hibernate
文件:NonStrictReadWriteAccessDelegate.java
@Override
public SoftLock lockItem(Object key, Object version) throws CacheException {
return null;
}
项目:hazelcast-hibernate
文件:NonStrictReadWriteAccessDelegate.java
@Override
public void unlockItem(final Object key, final SoftLock lock) throws CacheException {
remove(key);
}
项目:hazelcast-hibernate
文件:AbstractAccessDelegate.java
/**
* NO-OP
*/
@Override
public SoftLock lockRegion() throws CacheException {
return null;
}
项目:hazelcast-hibernate
文件:AbstractAccessDelegate.java
@Override
public void unlockRegion(final SoftLock lock) throws CacheException {
cache.clear();
}
项目:hazelcast-hibernate
文件:CollectionRegionAccessStrategyAdapter.java
@Override
public SoftLock lockItem(final Object key, final Object version) throws CacheException {
return delegate.lockItem(key, version);
}
项目:hazelcast-hibernate
文件:CollectionRegionAccessStrategyAdapter.java
@Override
public SoftLock lockRegion() throws CacheException {
return delegate.lockRegion();
}
项目:hazelcast-hibernate
文件:CollectionRegionAccessStrategyAdapter.java
@Override
public void unlockItem(final Object key, final SoftLock lock) throws CacheException {
delegate.unlockItem(key, lock);
}
项目:hazelcast-hibernate
文件:CollectionRegionAccessStrategyAdapter.java
@Override
public void unlockRegion(final SoftLock lock) throws CacheException {
delegate.unlockRegion(lock);
}
项目:hazelcast-hibernate
文件:EntityRegionAccessStrategyAdapter.java
@Override
public boolean afterUpdate(final Object key, final Object value, final Object currentVersion,
final Object previousVersion, final SoftLock lock) throws CacheException {
return delegate.afterUpdate(key, value, currentVersion, previousVersion, lock);
}
项目:hazelcast-hibernate
文件:EntityRegionAccessStrategyAdapter.java
@Override
public SoftLock lockItem(final Object key, final Object version) throws CacheException {
return delegate.lockItem(key, version);
}
项目:hazelcast-hibernate
文件:EntityRegionAccessStrategyAdapter.java
@Override
public SoftLock lockRegion() throws CacheException {
return delegate.lockRegion();
}
项目:hazelcast-hibernate
文件:EntityRegionAccessStrategyAdapter.java
@Override
public void unlockItem(final Object key, final SoftLock lock) throws CacheException {
delegate.unlockItem(key, lock);
}
项目:hazelcast-hibernate
文件:EntityRegionAccessStrategyAdapter.java
@Override
public void unlockRegion(final SoftLock lock) throws CacheException {
delegate.unlockRegion(lock);
}
项目:hazelcast-hibernate
文件:ReadWriteAccessDelegateTest.java
@Test
public void testAfterUpdate() {
when(cache.update(any(), any(), any(), any(SoftLock.class))).thenThrow(new HazelcastException("expected exception"));
assertFalse(delegate.afterUpdate(null, null, null, null, null));
}
项目:hazelcast-archive
文件:AbstractEntityRegionAccessStrategy.java
public boolean afterUpdate(final Object key, final Object value, final Object currentVersion,
final Object previousVersion, final SoftLock lock) throws CacheException {
return delegate.afterUpdate(key, value, currentVersion, previousVersion, lock);
}