Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--features/org.eclipse.emf.cdo-feature/feature.xml2
-rw-r--r--features/org.eclipse.emf.cdo-feature/pom.xml2
-rw-r--r--features/org.eclipse.emf.cdo.all-feature/feature.xml2
-rw-r--r--features/org.eclipse.emf.cdo.all-feature/pom.xml2
-rw-r--r--features/org.eclipse.emf.cdo.epp-feature/feature.xml2
-rw-r--r--features/org.eclipse.emf.cdo.epp-feature/pom.xml2
-rw-r--r--features/org.eclipse.emf.cdo.sdk-feature/feature.xml2
-rw-r--r--features/org.eclipse.emf.cdo.sdk-feature/pom.xml2
-rw-r--r--features/org.eclipse.emf.cdo.server-feature/feature.xml2
-rw-r--r--features/org.eclipse.emf.cdo.server-feature/pom.xml2
-rw-r--r--features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml2
-rw-r--r--features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml2
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/LockingManagerTest.java24
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_560957_Test.java4
-rw-r--r--plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF52
-rw-r--r--plugins/org.eclipse.emf.cdo/pom.xml2
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOLock.java71
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOLockImpl.java224
18 files changed, 293 insertions, 108 deletions
diff --git a/features/org.eclipse.emf.cdo-feature/feature.xml b/features/org.eclipse.emf.cdo-feature/feature.xml
index 22cc7e029b..d3c63cd8d1 100644
--- a/features/org.eclipse.emf.cdo-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo-feature/feature.xml
@@ -13,7 +13,7 @@
<feature
id="org.eclipse.emf.cdo"
label="%featureName"
- version="4.16.1.qualifier"
+ version="4.17.0.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.emf.cdo.license"
license-feature-version="0.0.0">
diff --git a/features/org.eclipse.emf.cdo-feature/pom.xml b/features/org.eclipse.emf.cdo-feature/pom.xml
index 6afce1bc6b..2cb6efd0a8 100644
--- a/features/org.eclipse.emf.cdo-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo</artifactId>
- <version>4.16.1-SNAPSHOT</version>
+ <version>4.17.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/features/org.eclipse.emf.cdo.all-feature/feature.xml b/features/org.eclipse.emf.cdo.all-feature/feature.xml
index 8707829118..d583dbc517 100644
--- a/features/org.eclipse.emf.cdo.all-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo.all-feature/feature.xml
@@ -13,7 +13,7 @@
<feature
id="org.eclipse.emf.cdo.all"
label="%featureName"
- version="4.16.1.qualifier"
+ version="4.17.0.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.emf.cdo.license"
license-feature-version="0.0.0">
diff --git a/features/org.eclipse.emf.cdo.all-feature/pom.xml b/features/org.eclipse.emf.cdo.all-feature/pom.xml
index a254800c3e..7fbe4f5d45 100644
--- a/features/org.eclipse.emf.cdo.all-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo.all-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo.all</artifactId>
- <version>4.16.1-SNAPSHOT</version>
+ <version>4.17.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/features/org.eclipse.emf.cdo.epp-feature/feature.xml b/features/org.eclipse.emf.cdo.epp-feature/feature.xml
index 31307648f8..529515fdd7 100644
--- a/features/org.eclipse.emf.cdo.epp-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo.epp-feature/feature.xml
@@ -12,7 +12,7 @@
<feature
id="org.eclipse.emf.cdo.epp"
label="%featureName"
- version="4.16.1.qualifier"
+ version="4.17.0.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.emf.cdo.license"
license-feature-version="0.0.0">
diff --git a/features/org.eclipse.emf.cdo.epp-feature/pom.xml b/features/org.eclipse.emf.cdo.epp-feature/pom.xml
index d06eaad328..cc9c9234db 100644
--- a/features/org.eclipse.emf.cdo.epp-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo.epp-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo.epp</artifactId>
- <version>4.16.1-SNAPSHOT</version>
+ <version>4.17.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/features/org.eclipse.emf.cdo.sdk-feature/feature.xml b/features/org.eclipse.emf.cdo.sdk-feature/feature.xml
index 983056c999..1012572cad 100644
--- a/features/org.eclipse.emf.cdo.sdk-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo.sdk-feature/feature.xml
@@ -12,7 +12,7 @@
<feature
id="org.eclipse.emf.cdo.sdk"
label="%featureName"
- version="5.9.1.qualifier"
+ version="5.10.0.qualifier"
provider-name="%providerName"
image="eclipse_update_120.jpg"
license-feature="org.eclipse.emf.cdo.license"
diff --git a/features/org.eclipse.emf.cdo.sdk-feature/pom.xml b/features/org.eclipse.emf.cdo.sdk-feature/pom.xml
index cf1704387c..340d96b5f5 100644
--- a/features/org.eclipse.emf.cdo.sdk-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo.sdk-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo.sdk</artifactId>
- <version>5.9.1-SNAPSHOT</version>
+ <version>5.10.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/features/org.eclipse.emf.cdo.server-feature/feature.xml b/features/org.eclipse.emf.cdo.server-feature/feature.xml
index 9626da2a87..0b8b176e50 100644
--- a/features/org.eclipse.emf.cdo.server-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo.server-feature/feature.xml
@@ -12,7 +12,7 @@
<feature
id="org.eclipse.emf.cdo.server"
label="%featureName"
- version="4.16.1.qualifier"
+ version="4.17.0.qualifier"
provider-name="%providerName"
image="eclipse_update_120.jpg"
license-feature="org.eclipse.emf.cdo.license"
diff --git a/features/org.eclipse.emf.cdo.server-feature/pom.xml b/features/org.eclipse.emf.cdo.server-feature/pom.xml
index 97707430ab..9efdbaae8e 100644
--- a/features/org.eclipse.emf.cdo.server-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo.server-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo.server</artifactId>
- <version>4.16.1-SNAPSHOT</version>
+ <version>4.17.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml b/features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml
index 791e9e154e..513715f454 100644
--- a/features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml
@@ -12,7 +12,7 @@
<feature
id="org.eclipse.emf.cdo.server.embedded"
label="%featureName"
- version="4.16.1.qualifier"
+ version="4.17.0.qualifier"
provider-name="%providerName"
image="eclipse_update_120.jpg"
license-feature="org.eclipse.emf.cdo.license"
diff --git a/features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml b/features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml
index ed1b329ec7..cd8fd00c24 100644
--- a/features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo.server.embedded</artifactId>
- <version>4.16.1-SNAPSHOT</version>
+ <version>4.17.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/LockingManagerTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/LockingManagerTest.java
index 65f3969907..be1573a6c8 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/LockingManagerTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/LockingManagerTest.java
@@ -13,6 +13,7 @@
package org.eclipse.emf.cdo.tests;
import org.eclipse.emf.cdo.CDOLock;
+import org.eclipse.emf.cdo.CDOLock.CDOAcquiredLock;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.id.CDOID;
@@ -1178,6 +1179,29 @@ public class LockingManagerTest extends AbstractLockingTest
objects.add(CDOUtil.getCDOObject(category));
}
+ public void testAcquiredLock() throws Exception
+ {
+ CDOSession session1 = openSession();
+ CDOTransaction transaction1 = session1.openTransaction();
+ transaction1.options().setAutoReleaseLocksEnabled(false);
+
+ CDOResource resource1 = transaction1.createResource(getResourcePath("/res1"));
+ Company company1 = getModel1Factory().createCompany();
+ resource1.getContents().add(company1);
+ transaction1.commit();
+
+ CDOObject cdoObject = CDOUtil.getCDOObject(company1);
+
+ try (CDOAcquiredLock lock = cdoObject.cdoWriteLock().acquire(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS, true))
+ {
+ company1.setName("ESC");
+ assertWriteLock(true, cdoObject);
+ transaction1.commit();
+ }
+
+ assertWriteLock(false, cdoObject);
+ }
+
public void testLockContention() throws Exception
{
Company company1 = getModel1Factory().createCompany();
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_560957_Test.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_560957_Test.java
index 7e17f5803c..9a8ed6161f 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_560957_Test.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_560957_Test.java
@@ -30,9 +30,9 @@ import java.util.concurrent.CountDownLatch;
*/
public class Bugzilla_560957_Test extends AbstractCDOTest
{
- public void testDeadlockOnViewGetBranch10000() throws Exception
+ public void _testDeadlockOnViewGetBranch10000() throws Exception
{
- for (int i = 0; i < 100; i++)
+ for (int i = 0; i < 10000; i++)
{
System.out.println("Run " + i);
run(i);
diff --git a/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF
index 7eb7654d65..85afa6b240 100644
--- a/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.emf.cdo; singleton:=true
-Bundle-Version: 4.15.1.qualifier
+Bundle-Version: 4.16.0.qualifier
Bundle-ClassPath: .
Bundle-Vendor: %providerName
Bundle-Localization: plugin
@@ -10,28 +10,28 @@ Bundle-Activator: org.eclipse.emf.internal.cdo.bundle.Activator$Implementation
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)";resolution:=optional,
org.eclipse.emf.cdo.common;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
-Export-Package: org.eclipse.emf.cdo;version="4.15.1",
- org.eclipse.emf.cdo.eresource;version="4.15.1",
- org.eclipse.emf.cdo.eresource.impl;version="4.15.1",
- org.eclipse.emf.cdo.eresource.util;version="4.15.1",
- org.eclipse.emf.cdo.eresource.validation;version="4.15.1",
- org.eclipse.emf.cdo.etypes;version="4.15.1",
- org.eclipse.emf.cdo.etypes.impl;version="4.15.1",
- org.eclipse.emf.cdo.etypes.util;version="4.15.1",
- org.eclipse.emf.cdo.session;version="4.15.1",
- org.eclipse.emf.cdo.session.remote;version="4.15.1",
- org.eclipse.emf.cdo.transaction;version="4.15.1",
- org.eclipse.emf.cdo.util;version="4.15.1",
- org.eclipse.emf.cdo.view;version="4.15.1",
- org.eclipse.emf.internal.cdo;version="4.15.1",
- org.eclipse.emf.internal.cdo.analyzer;version="4.15.1";
+Export-Package: org.eclipse.emf.cdo;version="4.16.0",
+ org.eclipse.emf.cdo.eresource;version="4.16.0",
+ org.eclipse.emf.cdo.eresource.impl;version="4.16.0",
+ org.eclipse.emf.cdo.eresource.util;version="4.16.0",
+ org.eclipse.emf.cdo.eresource.validation;version="4.16.0",
+ org.eclipse.emf.cdo.etypes;version="4.16.0",
+ org.eclipse.emf.cdo.etypes.impl;version="4.16.0",
+ org.eclipse.emf.cdo.etypes.util;version="4.16.0",
+ org.eclipse.emf.cdo.session;version="4.16.0",
+ org.eclipse.emf.cdo.session.remote;version="4.16.0",
+ org.eclipse.emf.cdo.transaction;version="4.16.0",
+ org.eclipse.emf.cdo.util;version="4.16.0",
+ org.eclipse.emf.cdo.view;version="4.16.0",
+ org.eclipse.emf.internal.cdo;version="4.16.0",
+ org.eclipse.emf.internal.cdo.analyzer;version="4.16.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
org.eclipse.emf.cdo.ui",
- org.eclipse.emf.internal.cdo.bundle;version="4.15.1";x-friends:="org.eclipse.emf.cdo.ui",
- org.eclipse.emf.internal.cdo.messages;version="4.15.1";x-internal:=true,
- org.eclipse.emf.internal.cdo.object;version="4.15.1";
+ org.eclipse.emf.internal.cdo.bundle;version="4.16.0";x-friends:="org.eclipse.emf.cdo.ui",
+ org.eclipse.emf.internal.cdo.messages;version="4.16.0";x-internal:=true,
+ org.eclipse.emf.internal.cdo.object;version="4.16.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
@@ -40,12 +40,12 @@ Export-Package: org.eclipse.emf.cdo;version="4.15.1",
org.eclipse.emf.cdo.explorer,
org.eclipse.emf.cdo.explorer.ui,
org.eclipse.emf.cdo.edit",
- org.eclipse.emf.internal.cdo.query;version="4.15.1";
+ org.eclipse.emf.internal.cdo.query;version="4.16.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
org.eclipse.emf.cdo.ui",
- org.eclipse.emf.internal.cdo.session;version="4.15.1";
+ org.eclipse.emf.internal.cdo.session;version="4.16.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
@@ -55,23 +55,23 @@ Export-Package: org.eclipse.emf.cdo;version="4.15.1",
org.eclipse.emf.cdo.security.ui,
org.eclipse.emf.cdo.explorer,
org.eclipse.emf.cdo.explorer.ui",
- org.eclipse.emf.internal.cdo.session.remote;version="4.15.1";
+ org.eclipse.emf.internal.cdo.session.remote;version="4.16.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
org.eclipse.emf.cdo.ui",
- org.eclipse.emf.internal.cdo.transaction;version="4.15.1";
+ org.eclipse.emf.internal.cdo.transaction;version="4.16.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
org.eclipse.emf.cdo.ui,
org.eclipse.emf.cdo.explorer.ui",
- org.eclipse.emf.internal.cdo.util;version="4.15.1";
+ org.eclipse.emf.internal.cdo.util;version="4.16.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
org.eclipse.emf.cdo.ui",
- org.eclipse.emf.internal.cdo.view;version="4.15.1";
+ org.eclipse.emf.internal.cdo.view;version="4.16.0";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
@@ -79,6 +79,6 @@ Export-Package: org.eclipse.emf.cdo;version="4.15.1",
org.eclipse.emf.cdo.ui.ide,
org.eclipse.emf.cdo.explorer,
org.eclipse.emf.cdo.explorer.ui",
- org.eclipse.emf.spi.cdo;version="4.15.1"
+ org.eclipse.emf.spi.cdo;version="4.16.0"
Bundle-ActivationPolicy: lazy
Automatic-Module-Name: org.eclipse.emf.cdo
diff --git a/plugins/org.eclipse.emf.cdo/pom.xml b/plugins/org.eclipse.emf.cdo/pom.xml
index 5aa641d26b..83e67f2f74 100644
--- a/plugins/org.eclipse.emf.cdo/pom.xml
+++ b/plugins/org.eclipse.emf.cdo/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo</groupId>
<artifactId>org.eclipse.emf.cdo</artifactId>
- <version>4.15.1-SNAPSHOT</version>
+ <version>4.16.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>
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 05c5413fbc..18622690a8 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
@@ -32,7 +32,7 @@ import java.util.concurrent.locks.Lock;
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
-public interface CDOLock extends Lock
+public interface CDOLock extends Lock, AutoCloseable
{
/**
* @since 4.15
@@ -50,11 +50,33 @@ public interface CDOLock extends Lock
public LockType getType();
/**
+ * @since 4.15
+ */
+ public Set<CDOLockOwner> getOwners();
+
+ /**
+ * Returns <code>true</code> if this lock is currently held by the requesting {@link CDOView view}, <code>false</code>
+ * otherwise.
+ */
+ public boolean isLocked();
+
+ /**
+ * Returns <code>true</code> if this lock is currently held by another {@link CDOView view} (i.e. any view different
+ * from the requesting one), <code>false</code> otherwise.
+ */
+ public boolean isLockedByOthers();
+
+ /**
* @since 4.0
*/
public void lock(long time, TimeUnit unit) throws TimeoutException;
/**
+ * @since 4.16
+ */
+ public void lock(long time, TimeUnit unit, boolean recursive) throws TimeoutException;
+
+ /**
* @since 4.0
*/
public void lock(long millis) throws TimeoutException;
@@ -65,25 +87,56 @@ public interface CDOLock extends Lock
public boolean tryLock(long millis) throws InterruptedException;
/**
- * Returns <code>true</code> if this lock is currently held by the requesting {@link CDOView view}, <code>false</code>
- * otherwise.
+ * @since 4.16
*/
- public boolean isLocked();
+ public boolean tryLock(long time, TimeUnit unit, boolean recursive) throws InterruptedException;
/**
- * Returns <code>true</code> if this lock is currently held by another {@link CDOView view} (i.e. any view different
- * from the requesting one), <code>false</code> otherwise.
+ * @since 4.16
*/
- public boolean isLockedByOthers();
+ public CDOAcquiredLock acquire(long time, TimeUnit unit, boolean recursive) throws TimeoutException;
/**
- * @since 4.15
+ * @since 4.16
*/
- public Set<CDOLockOwner> getOwners();
+ public void unlock(boolean recursive);
+
+ /**
+ * @since 4.16
+ */
+ @Override
+ default void close()
+ {
+ unlock();
+ }
@Deprecated
public static final int WAIT = IRWLockManager.WAIT;
@Deprecated
public static final int NO_WAIT = IRWLockManager.NO_WAIT;
+
+ /**
+ * @author Eike Stepper
+ * @since 4.16
+ */
+ public interface CDOAcquiredLock extends AutoCloseable
+ {
+ public CDOLock getLock();
+
+ public CDOObject getObject();
+
+ public LockType getType();
+
+ public Set<CDOLockOwner> getOwners();
+
+ public boolean isLocked();
+
+ public boolean isLockedByOthers();
+
+ public boolean isRecursive();
+
+ @Override
+ public void close();
+ }
}
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 93015ab3d4..89e72b3854 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
@@ -63,21 +63,6 @@ public class CDOLockImpl implements CDOLock
}
@Override
- public boolean isLocked()
- {
- return isLocked(false);
- }
-
- /**
- * @see org.eclipse.emf.cdo.CDOLock#isLockedByOthers()
- */
- @Override
- public boolean isLockedByOthers()
- {
- return isLocked(true);
- }
-
- @Override
public Set<CDOLockOwner> getOwners()
{
CDOLockState lockState = object.cdoLockState();
@@ -101,25 +86,33 @@ public class CDOLockImpl implements CDOLock
}
@Override
- public void lock()
+ public boolean isLocked()
{
- try
- {
- InternalCDOView view = object.cdoView();
- view.lockObjects(Collections.singletonList(object), type, NO_TIMEOUT);
- }
- catch (InterruptedException ex)
- {
- throw WrappedException.wrap(ex);
- }
+ return isLocked(false);
}
+ /**
+ * @see org.eclipse.emf.cdo.CDOLock#isLockedByOthers()
+ */
@Override
- public void lock(long time, TimeUnit unit) throws TimeoutException
+ public boolean isLockedByOthers()
+ {
+ return isLocked(true);
+ }
+
+ @Override
+ public CDOAcquiredLock acquire(long time, TimeUnit unit, boolean recursive) throws TimeoutException
+ {
+ lock(time, unit, recursive);
+ return new CDOAcquiredLockImpl(this, recursive);
+ }
+
+ @Override
+ public void lock(long time, TimeUnit unit, boolean recursive) throws TimeoutException
{
try
{
- if (!tryLock(time, unit))
+ if (!tryLock(time, unit, recursive))
{
throw new TimeoutException();
}
@@ -131,68 +124,95 @@ public class CDOLockImpl implements CDOLock
}
@Override
- public void lock(long millis) throws TimeoutException
+ public void lock(long time, TimeUnit unit) throws TimeoutException
{
- lock(millis, TimeUnit.MILLISECONDS);
+ lock(time, unit, false);
}
@Override
- public boolean tryLock(long millis) throws InterruptedException
+ public void lock(long millis) throws TimeoutException
{
- return tryLock(millis, TimeUnit.MILLISECONDS);
+ lock(millis, TimeUnit.MILLISECONDS);
}
@Override
- public void lockInterruptibly() throws InterruptedException
+ public void lock()
{
- lock();
+ try
+ {
+ lock(NO_TIMEOUT);
+ }
+ catch (TimeoutException ex)
+ {
+ // Should not happen.
+ throw WrappedException.wrap(ex);
+ }
}
@Override
- public Condition newCondition()
+ public void lockInterruptibly() throws InterruptedException
{
- throw new UnsupportedOperationException();
+ lock();
}
@Override
- public boolean tryLock()
+ public boolean tryLock(long time, TimeUnit unit, boolean recursive) throws InterruptedException
{
try
{
InternalCDOView view = object.cdoView();
- view.lockObjects(Collections.singletonList(object), type, 0);
+ view.lockObjects(Collections.singletonList(object), type, unit.toMillis(time), recursive);
return true;
}
catch (LockTimeoutException ex)
{
return false;
}
- catch (InterruptedException ex)
- {
- throw WrappedException.wrap(ex);
- }
}
@Override
public boolean tryLock(long time, TimeUnit unit) throws InterruptedException
{
+ return tryLock(time, unit, false);
+ }
+
+ @Override
+ public boolean tryLock(long millis) throws InterruptedException
+ {
+ return tryLock(millis, TimeUnit.MILLISECONDS);
+ }
+
+ @Override
+ public boolean tryLock()
+ {
try
{
- InternalCDOView view = object.cdoView();
- view.lockObjects(Collections.singletonList(object), type, unit.toMillis(time));
- return true;
+ return tryLock(NO_TIMEOUT, TimeUnit.MILLISECONDS);
}
- catch (LockTimeoutException ex)
+ catch (InterruptedException ex)
{
- return false;
+ // Should not happen.
+ throw WrappedException.wrap(ex);
}
}
@Override
- public void unlock()
+ public void unlock(boolean recursive)
{
InternalCDOView view = object.cdoView();
- view.unlockObjects(Collections.singletonList(object), type);
+ view.unlockObjects(Collections.singletonList(object), type, recursive);
+ }
+
+ @Override
+ public void unlock()
+ {
+ unlock(false);
+ }
+
+ @Override
+ public Condition newCondition()
+ {
+ throw new UnsupportedOperationException();
}
@Override
@@ -208,6 +228,70 @@ public class CDOLockImpl implements CDOLock
}
/**
+ * @author Eike Stepper
+ */
+ private static final class CDOAcquiredLockImpl implements CDOAcquiredLock
+ {
+ private final CDOLock lock;
+
+ private final boolean recursive;
+
+ public CDOAcquiredLockImpl(CDOLock lock, boolean recursive)
+ {
+ this.lock = lock;
+ this.recursive = recursive;
+ }
+
+ @Override
+ public CDOLock getLock()
+ {
+ return lock;
+ }
+
+ @Override
+ public CDOObject getObject()
+ {
+ return lock.getObject();
+ }
+
+ @Override
+ public LockType getType()
+ {
+ return lock.getType();
+ }
+
+ @Override
+ public Set<CDOLockOwner> getOwners()
+ {
+ return lock.getOwners();
+ }
+
+ @Override
+ public boolean isLocked()
+ {
+ return lock.isLocked();
+ }
+
+ @Override
+ public boolean isLockedByOthers()
+ {
+ return lock.isLockedByOthers();
+ }
+
+ @Override
+ public boolean isRecursive()
+ {
+ return recursive;
+ }
+
+ @Override
+ public void close()
+ {
+ lock.unlock(recursive);
+ }
+ }
+
+ /**
* @author Simon McDuff
*/
public static final class NOOPLockImpl implements CDOLock
@@ -250,31 +334,49 @@ public class CDOLockImpl implements CDOLock
}
@Override
- public void lock()
+ public CDOAcquiredLock acquire(long time, TimeUnit unit, boolean recursive) throws TimeoutException
{
throw new UnsupportedOperationException();
}
@Override
- public void lockInterruptibly() throws InterruptedException
+ public void lock(long time, TimeUnit unit, boolean recursive) throws TimeoutException
{
throw new UnsupportedOperationException();
}
@Override
- public Condition newCondition()
+ public void lock(long time, TimeUnit unit) throws TimeoutException
{
- return null;
+ throw new UnsupportedOperationException();
}
@Override
- public void lock(long time, TimeUnit unit) throws TimeoutException
+ public void lock(long millis) throws TimeoutException
{
throw new UnsupportedOperationException();
}
@Override
- public void lock(long millis) throws TimeoutException
+ public void lock()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void lockInterruptibly() throws InterruptedException
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean tryLock(long time, TimeUnit unit, boolean recursive) throws InterruptedException
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean tryLock(long time, TimeUnit unit) throws InterruptedException
{
throw new UnsupportedOperationException();
}
@@ -282,19 +384,19 @@ public class CDOLockImpl implements CDOLock
@Override
public boolean tryLock(long millis) throws InterruptedException
{
- return false;
+ throw new UnsupportedOperationException();
}
@Override
public boolean tryLock()
{
- return false;
+ throw new UnsupportedOperationException();
}
@Override
- public boolean tryLock(long time, TimeUnit unit) throws InterruptedException
+ public void unlock(boolean recursive)
{
- return false;
+ throw new UnsupportedOperationException();
}
@Override
@@ -302,5 +404,11 @@ public class CDOLockImpl implements CDOLock
{
throw new UnsupportedOperationException();
}
+
+ @Override
+ public Condition newCondition()
+ {
+ throw new UnsupportedOperationException();
+ }
}
}

Back to the top