diff options
author | Caspar De Groot | 2011-07-22 06:49:40 +0000 |
---|---|---|
committer | Caspar De Groot | 2011-07-22 06:49:40 +0000 |
commit | 1036f1d4827c74af0863403cf35f482f201676b7 (patch) | |
tree | edcb855ae7f3c9a461308a178e0619e77d27239c /plugins/org.eclipse.emf.cdo/src/org/eclipse | |
parent | c25c1dd4e3ec84079ff08955b113e03a97f94ab0 (diff) | |
download | cdo-1036f1d4827c74af0863403cf35f482f201676b7.tar.gz cdo-1036f1d4827c74af0863403cf35f482f201676b7.tar.xz cdo-1036f1d4827c74af0863403cf35f482f201676b7.zip |
[351793] Enhance LockMgr with write options
https://bugs.eclipse.org/bugs/show_bug.cgi?id=351793
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse')
6 files changed, 40 insertions, 15 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOLock.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOLock.java index 5ba2386e62..7240a6e573 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOLock.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOLock.java @@ -13,8 +13,8 @@ package org.eclipse.emf.cdo; import org.eclipse.emf.cdo.view.CDOView; +import org.eclipse.net4j.util.concurrent.IRWLockManager; import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; -import org.eclipse.net4j.util.concurrent.RWLockManager; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -31,15 +31,9 @@ import java.util.concurrent.locks.Lock; */ public interface CDOLock extends Lock { - /** - * TODO Simon: JavaDoc - */ - public static final int WAIT = RWLockManager.WAIT; + public static final int WAIT = IRWLockManager.WAIT; - /** - * TODO Simon: JavaDoc - */ - public static final int NO_WAIT = RWLockManager.NO_WAIT; + public static final int NO_WAIT = IRWLockManager.NO_WAIT; /** * TODO Simon: JavaDoc diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOObject.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOObject.java index f224201ba0..16dcd90fd9 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOObject.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOObject.java @@ -126,6 +126,11 @@ public interface CDOObject extends EObject, CDOWithID public CDOLock cdoWriteLock(); /** + * @since 4.1 + */ + public CDOLock cdoWriteOption(); + + /** * Ensures that the revisions of the contained objects up to the given depth are in the local * {@link CDORevisionManager revision cache}. Subsequent access to the respective contained objects will not lead to * server round-trips after calling this method. diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java index c1fff7f383..bb9a1c2023 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java @@ -205,6 +205,19 @@ public class CDOObjectImpl extends EStoreEObjectImpl implements InternalCDOObjec return new CDOLockImpl(this, LockType.WRITE); } + /** + * @since 4.1 + */ + public CDOLock cdoWriteOption() + { + if (FSMUtil.isTransient(this) || FSMUtil.isNew(this)) + { + return CDOLockImpl.NOOP; + } + + return new CDOLockImpl(this, LockType.OPTION); + } + public void cdoInternalSetID(CDOID id) { if (TRACER.isEnabled()) diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOLockImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOLockImpl.java index 94558a885a..851c0a10cf 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOLockImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOLockImpl.java @@ -65,7 +65,7 @@ public class CDOLockImpl implements CDOLock { try { - object.cdoView().lockObjects(Collections.singletonList(object), type, CDOLock.WAIT); + object.cdoView().lockObjects(Collections.singletonList(object), type, WAIT); } catch (InterruptedException ex) { @@ -112,7 +112,7 @@ public class CDOLockImpl implements CDOLock { try { - object.cdoView().lockObjects(Collections.singletonList(object), type, CDOLock.NO_WAIT); + object.cdoView().lockObjects(Collections.singletonList(object), type, NO_WAIT); return true; } catch (LockTimeoutException ex) diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOObjectWrapper.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOObjectWrapper.java index 145b6264f5..f0c3d8f120 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOObjectWrapper.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOObjectWrapper.java @@ -198,6 +198,19 @@ public abstract class CDOObjectWrapper implements InternalCDOObject return new CDOLockImpl(this, LockType.WRITE); } + /** + * @since 4.1 + */ + public CDOLock cdoWriteOption() + { + if (FSMUtil.isTransient(this) || FSMUtil.isNew(this)) + { + return CDOLockImpl.NOOP; + } + + return new CDOLockImpl(this, LockType.OPTION); + } + public EList<Adapter> eAdapters() { return instance.eAdapters(); diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java index 50e9c385dc..4a39ec7d44 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java @@ -89,7 +89,7 @@ import org.eclipse.net4j.util.WrappedException; import org.eclipse.net4j.util.collection.Pair; import org.eclipse.net4j.util.concurrent.IRWLockManager; import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; -import org.eclipse.net4j.util.concurrent.RWLockManager; +import org.eclipse.net4j.util.concurrent.RWOLockManager; import org.eclipse.net4j.util.event.Event; import org.eclipse.net4j.util.event.EventUtil; import org.eclipse.net4j.util.event.IEvent; @@ -183,7 +183,7 @@ public abstract class CDOSessionImpl extends CDOTransactionContainerImpl impleme } }; - private IRWLockManager<CDOSessionImpl, Object> lockmanager = new RWLockManager<CDOSessionImpl, Object>(); + private IRWLockManager<CDOSessionImpl, Object> lockManager = new RWOLockManager<CDOSessionImpl, Object>(); @ExcludeFromDump private Set<CDOSessionImpl> singletonCollection = Collections.singleton(this); @@ -530,7 +530,7 @@ public abstract class CDOSessionImpl extends CDOTransactionContainerImpl impleme { try { - lockmanager.lock(LockType.WRITE, key, this, RWLockManager.WAIT); + lockManager.lock(LockType.WRITE, key, this, IRWLockManager.WAIT); } catch (InterruptedException ex) { @@ -540,7 +540,7 @@ public abstract class CDOSessionImpl extends CDOTransactionContainerImpl impleme public void releaseAtomicRequestLock(Object key) { - lockmanager.unlock(LockType.WRITE, key, singletonCollection); + lockManager.unlock(LockType.WRITE, key, singletonCollection); } @Override |