@Override public EntityRegionAccessStrategy buildAccessStrategy(AccessType accessType) throws CacheException { if (accessType == AccessType.READ_ONLY) { return new ReadOnlyEntityRegionAccessStrategy(settings, this); } if (accessType == AccessType.READ_WRITE) { return new ReadWriteEntityRegionAccessStrategy(settings, this, mapCache); } if (accessType == AccessType.NONSTRICT_READ_WRITE) { return new NonStrictReadWriteEntityRegionAccessStrategy(settings, this); } if (accessType == AccessType.TRANSACTIONAL) { return new TransactionalEntityRegionAccessStrategy(settings, this); } throw new CacheException("Unsupported access strategy: " + accessType); }
@Override public boolean afterUpdate(SharedSessionContractImplementor session, Object key, Object value, Object currentVersion, Object previousVersion, SoftLock lock) throws CacheException { RLock writeLock = mapCache.getReadWriteLock(key).writeLock(); writeLock.lock(); try { Lockable item = (Lockable) region.get(session, key); if (item != null && item.isUnlockable(lock)) { Lock lockItem = (Lock) item; if (lockItem.wasLockedConcurrently()) { decrementLock(session, key, lockItem ); return false; } else { region.put(session, key, new Item(value, currentVersion, region.nextTimestamp())); return true; } } else { handleLockExpiry(session, key, item ); return false; } } finally { writeLock.unlock(); } }
@Override public boolean afterUpdate(SessionImplementor session, Object key, Object value, Object currentVersion, Object previousVersion, SoftLock lock) throws CacheException { RLock writeLock = mapCache.getReadWriteLock(key).writeLock(); writeLock.lock(); try { Lockable item = (Lockable) region.get(session, key); if (item != null && item.isUnlockable(lock)) { Lock lockItem = (Lock) item; if (lockItem.wasLockedConcurrently()) { decrementLock(session, key, lockItem ); return false; } else { region.put(session, key, new Item(value, currentVersion, region.nextTimestamp())); return true; } } else { handleLockExpiry(session, key, item ); return false; } } finally { writeLock.unlock(); } }
@Override public boolean afterUpdate(Object key, Object value, Object currentVersion, Object previousVersion, SoftLock lock) throws CacheException { RLock writeLock = mapCache.getReadWriteLock(key).writeLock(); writeLock.lock(); try { Lockable item = (Lockable) region.get(key); if (item != null && item.isUnlockable(lock)) { Lock lockItem = (Lock) item; if (lockItem.wasLockedConcurrently()) { decrementLock( key, lockItem ); return false; } else { region.put( key, new Item(value, currentVersion, region.nextTimestamp())); return true; } } else { handleLockExpiry( key, item ); return false; } } finally { writeLock.unlock(); } }
@Override public EntityRegionAccessStrategy buildAccessStrategy(AccessType accessType) throws CacheException { if (accessType == AccessType.READ_ONLY) { return new ReadOnlyEntityRegionAccessStrategy(settings, this); } if (accessType == AccessType.READ_WRITE) { return new ReadWriteEntityRegionAccessStrategy(settings, this, mapCache); } if (accessType == AccessType.NONSTRICT_READ_WRITE) { return new NonStrictReadWriteEntityRegionAccessStrategy(settings, this); } if (accessType == AccessType.TRANSACTIONAL) { return new TransactionalEntityRegionAccessStrategy(settings, this); } throw new CacheException("Unsupported access strategy: " + accessType); }
@Override public EntityRegionAccessStrategy buildAccessStrategy(AccessType accessType) throws CacheException { if (accessType == AccessType.READ_ONLY) { return new ReadOnlyEntityRegionAccessStrategy(settings, this); } if (accessType == AccessType.READ_WRITE) { return new ReadWriteEntityRegionAccessStrategy(settings, this, mapCache); } if (accessType == AccessType.NONSTRICT_READ_WRITE) { return new NonStrictReadWriteEntityRegionAccessStrategy(settings, this); } if (accessType == AccessType.TRANSACTIONAL) { return new TransactionalEntityRegionAccessStrategy(settings, this); } throw new CacheException("Unsupported access strategy: " + accessType); }