Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaspar De Groot2011-07-22 06:49:40 +0000
committerCaspar De Groot2011-07-22 06:49:40 +0000
commit1036f1d4827c74af0863403cf35f482f201676b7 (patch)
treeedcb855ae7f3c9a461308a178e0619e77d27239c /plugins/org.eclipse.emf.cdo/src/org/eclipse
parentc25c1dd4e3ec84079ff08955b113e03a97f94ab0 (diff)
downloadcdo-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')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOLock.java12
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOObject.java5
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java13
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOLockImpl.java4
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOObjectWrapper.java13
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java8
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

Back to the top