public OSegment(final OStorageLocal iStorage, final String iName) { super(OGlobalConfiguration.ENVIRONMENT_CONCURRENT.getValueAsBoolean(), 0, true); storage = iStorage; name = iName; }
/** @author <a href="mailto:[email protected]">Artem Orobets</a> */ public abstract class OAbstractMapCache<T extends Map<ORID, ?>> implements OCache { protected final OSharedResourceAdaptiveExternal lock = new OSharedResourceAdaptiveExternal( OGlobalConfiguration.ENVIRONMENT_CONCURRENT.getValueAsBoolean(), 0, true); protected final T cache; private final AtomicBoolean enabled = new AtomicBoolean(false); public OAbstractMapCache(T cache) { this.cache = cache; } @Override public void startup() { enable(); } @Override public void shutdown() { disable(); } @Override public boolean isEnabled() { return enabled.get(); } @Override public boolean enable() { return enabled.compareAndSet(false, true); } @Override public boolean disable() { clear(); return enabled.compareAndSet(true, false); } @Override public void clear() { if (!isEnabled()) return; lock.acquireExclusiveLock(); try { cache.clear(); } finally { lock.releaseExclusiveLock(); } } @Override public int size() { lock.acquireSharedLock(); try { return cache.size(); } finally { lock.releaseSharedLock(); } } @Override public Collection<ORID> keys() { lock.acquireExclusiveLock(); try { return new ArrayList<ORID>(cache.keySet()); } finally { lock.releaseExclusiveLock(); } } @Override public void lock(final ORID id) { lock.acquireExclusiveLock(); } @Override public void unlock(final ORID id) { lock.releaseExclusiveLock(); } }