Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2016-07-30 13:16:35 +0000
committerEike Stepper2016-07-30 13:16:35 +0000
commit915fe3f55eb53acb190536a314e885d2a05d9720 (patch)
treed7a684ded717d97b89da72d50760a75cbcdd6c6f /plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction
parent6dc966a83269a207a5538850648ea23697c682bc (diff)
downloadcdo-915fe3f55eb53acb190536a314e885d2a05d9720.tar.gz
cdo-915fe3f55eb53acb190536a314e885d2a05d9720.tar.xz
cdo-915fe3f55eb53acb190536a314e885d2a05d9720.zip
Revert "[$387563] $Generalize the "lock of new objects on commit" feature to the "lock/unlock objects on commit" "
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java257
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOUndoDetectorImpl.java2
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java26
3 files changed, 33 insertions, 252 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
index 8c475d932f..c80de5cabe 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
@@ -96,8 +96,6 @@ import org.eclipse.emf.cdo.transaction.CDOMerger;
import org.eclipse.emf.cdo.transaction.CDOSavepoint;
import org.eclipse.emf.cdo.transaction.CDOStaleReferenceCleaner;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
-import org.eclipse.emf.cdo.transaction.CDOTransaction.Options.AutoReleaseLocksEvent.AutoReleaseLocksEnabledEvent;
-import org.eclipse.emf.cdo.transaction.CDOTransaction.Options.AutoReleaseLocksEvent.AutoReleaseLocksExemptionsEvent;
import org.eclipse.emf.cdo.transaction.CDOTransactionConflictEvent;
import org.eclipse.emf.cdo.transaction.CDOTransactionFinishedEvent;
import org.eclipse.emf.cdo.transaction.CDOTransactionHandler;
@@ -148,7 +146,6 @@ import org.eclipse.net4j.util.transaction.TransactionException;
import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
@@ -179,6 +176,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.text.MessageFormat;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -189,7 +187,6 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
-import java.util.WeakHashMap;
import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicInteger;
@@ -3643,6 +3640,8 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
private CDOCommitData commitData;
+ private Collection<CDOLockState> locksOnNewObjects;
+
private Map<CDOID, CDOObject> newObjects;
private Map<CDOID, CDOObject> detachedObjects;
@@ -3653,10 +3652,6 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
private Map<ByteArrayWrapper, CDOLob<?>> lobs = new HashMap<ByteArrayWrapper, CDOLob<?>>();
- private List<CDOLockState> locksOnNewObjects = new ArrayList<CDOLockState>();
-
- private List<CDOID> idsToUnlock = new ArrayList<CDOID>();
-
public CDOCommitContextImpl(InternalCDOTransaction transaction)
{
this.transaction = transaction;
@@ -3665,8 +3660,6 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
private void calculateCommitData()
{
- OptionsImpl options = (OptionsImpl)transaction.options();
-
List<CDOPackageUnit> newPackageUnits = analyzeNewPackages();
newObjects = filterCommittables(transaction.getNewObjects());
@@ -3674,15 +3667,6 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
for (CDOObject newObject : newObjects.values())
{
revisions.add(newObject.cdoRevision());
-
- CDOLockState lockState = getLockState(newObject);
- if (lockState != null)
- {
- if (!options.isEffectiveAutoReleaseLock(newObject))
- {
- locksOnNewObjects.add(lockState);
- }
- }
}
revisionDeltas = filterCommittables(transaction.getRevisionDeltas());
@@ -3716,16 +3700,8 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
dirtyObjects = filterCommittables(transaction.getDirtyObjects());
- for (CDOObject lockedObject : getLockStates().keySet())
- {
- if (!FSMUtil.isTransient(lockedObject))
- {
- if (options.isEffectiveAutoReleaseLock(lockedObject))
- {
- idsToUnlock.add(lockedObject.cdoID());
- }
- }
- }
+ CDOLockState[] locksOnNewObjectsArray = getLockStates(newObjects.keySet(), false);
+ locksOnNewObjects = Arrays.asList(locksOnNewObjectsArray);
commitData = CDOCommitInfoUtil.createCommitData(newPackageUnits, revisions, deltas, detached);
}
@@ -3781,6 +3757,11 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
return isPartialCommit;
}
+ public boolean isAutoReleaseLocks()
+ {
+ return transaction.options().isAutoReleaseLocksEnabled();
+ }
+
public String getCommitComment()
{
return transaction.getCommitComment();
@@ -3806,6 +3787,11 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
return commitData.getNewPackageUnits();
}
+ public Collection<CDOLockState> getLocksOnNewObjects()
+ {
+ return locksOnNewObjects;
+ }
+
public Map<CDOID, CDOObject> getDetachedObjects()
{
return detachedObjects;
@@ -3821,22 +3807,6 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
return lobs.values();
}
- @Deprecated
- public boolean isAutoReleaseLocks()
- {
- return transaction.options().isAutoReleaseLocksEnabled();
- }
-
- public Collection<CDOLockState> getLocksOnNewObjects()
- {
- return locksOnNewObjects;
- }
-
- public List<CDOID> getIDsToUnlock()
- {
- return idsToUnlock;
- }
-
public void preCommit()
{
if (isDirty())
@@ -4021,26 +3991,10 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
fireEvent(new FinishedEvent(idMappings), listeners);
}
- Map<CDOObject, CDOLockState> lockStates = getLockStates();
- if (!lockStates.isEmpty())
+ CDOLockState[] newLockStates = result.getNewLockStates();
+ if (newLockStates != null)
{
- List<CDOLockState> objectsToUnlock = new ArrayList<CDOLockState>();
-
- for (Map.Entry<CDOObject, CDOLockState> entry : lockStates.entrySet())
- {
- CDOObject object = entry.getKey();
- if (options().isEffectiveAutoReleaseLock(object))
- {
- InternalCDOLockState lockState = (InternalCDOLockState)entry.getValue();
- lockState.updateFrom(InternalCDOLockState.UNLOCKED);
-
- objectsToUnlock.add(lockState);
- }
- }
-
- CDOLockState[] newLockStates = objectsToUnlock.toArray(new CDOLockState[objectsToUnlock.size()]);
- notifyOtherViewsAboutLockChanges(CDOLockChangeInfo.Operation.UNLOCK, null, result.getTimeStamp(),
- newLockStates);
+ updateAndNotifyLockStates(CDOLockChangeInfo.Operation.UNLOCK, null, result.getTimeStamp(), newLockStates);
}
}
catch (RuntimeException ex)
@@ -4221,14 +4175,12 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
{
private CDOUndoDetector undoDetector = DEFAULT_UNDO_DETECTOR;
- private final List<CDOConflictResolver> conflictResolvers = new ArrayList<CDOConflictResolver>();
+ private List<CDOConflictResolver> conflictResolvers = new ArrayList<CDOConflictResolver>();
private CDOStaleReferenceCleaner staleReferenceCleaner = CDOStaleReferenceCleaner.DEFAULT;
private boolean autoReleaseLocksEnabled = true;
- private final Map<EObject, Boolean> autoReleaseLocksExemptions = new WeakHashMap<EObject, Boolean>();
-
private long commitInfoTimeout = DEFAULT_COMMIT_INFO_TIMEOUT;
public OptionsImpl()
@@ -4462,67 +4414,7 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
if (autoReleaseLocksEnabled != on)
{
autoReleaseLocksEnabled = on;
- event = new AutoReleaseLocksEnabledEventImpl();
- }
- }
- finally
- {
- unlockView();
- }
- }
-
- fireEvent(event);
- }
-
- public Set<? extends EObject> getAutoReleaseLocksExemptions()
- {
- synchronized (getViewMonitor())
- {
- lockView();
-
- try
- {
- return new HashSet<EObject>(autoReleaseLocksExemptions.keySet());
- }
- finally
- {
- unlockView();
- }
- }
- }
-
- public boolean isAutoReleaseLocksExemption(EObject object)
- {
- synchronized (getViewMonitor())
- {
- lockView();
-
- try
- {
- return autoReleaseLocksExemptions.get(CDOUtil.getCDOObject(object)) == Boolean.TRUE;
- }
- finally
- {
- unlockView();
- }
- }
- }
-
- public void clearAutoReleaseLocksExemptions()
- {
- checkActive();
-
- IEvent event = null;
- synchronized (getViewMonitor())
- {
- lockView();
-
- try
- {
- if (!autoReleaseLocksExemptions.isEmpty())
- {
- autoReleaseLocksExemptions.clear();
- event = new AutoReleaseLocksExemptionsEventImpl();
+ event = new AutoReleaseLocksEventImpl();
}
}
finally
@@ -4534,97 +4426,6 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
fireEvent(event);
}
- public void addAutoReleaseLocksExemptions(boolean recursive, EObject... objects)
- {
- checkActive();
-
- IEvent event = null;
- synchronized (getViewMonitor())
- {
- lockView();
-
- try
- {
- for (EObject object : objects)
- {
- if (autoReleaseLocksExemptions.put(CDOUtil.getCDOObject(object), Boolean.TRUE) == null)
- {
- event = new AutoReleaseLocksExemptionsEventImpl();
- }
-
- if (recursive)
- {
- for (TreeIterator<EObject> it = object.eAllContents(); it.hasNext();)
- {
- EObject child = it.next();
- if (autoReleaseLocksExemptions.put(CDOUtil.getCDOObject(child), Boolean.TRUE) == null && event == null)
- {
- event = new AutoReleaseLocksExemptionsEventImpl();
- }
- }
- }
- }
- }
- finally
- {
- unlockView();
- }
- }
-
- fireEvent(event);
- }
-
- public void removeAutoReleaseLocksExemptions(boolean recursive, EObject... objects)
- {
- checkActive();
-
- IEvent event = null;
- synchronized (getViewMonitor())
- {
- lockView();
-
- try
- {
- for (EObject object : objects)
- {
- if (autoReleaseLocksExemptions.remove(CDOUtil.getCDOObject(object)) != null)
- {
- event = new AutoReleaseLocksExemptionsEventImpl();
- }
-
- if (recursive)
- {
- for (TreeIterator<EObject> it = object.eAllContents(); it.hasNext();)
- {
- EObject child = it.next();
- if (autoReleaseLocksExemptions.remove(CDOUtil.getCDOObject(child)) != null && event == null)
- {
- event = new AutoReleaseLocksExemptionsEventImpl();
- }
- }
- }
- }
- }
- finally
- {
- unlockView();
- }
- }
-
- fireEvent(event);
- }
-
- public boolean isEffectiveAutoReleaseLock(CDOObject newObject)
- {
- boolean effectiveAutoReleaseLock = autoReleaseLocksEnabled;
- if (autoReleaseLocksExemptions.containsKey(newObject))
- {
- effectiveAutoReleaseLock = !effectiveAutoReleaseLock;
- }
-
- return effectiveAutoReleaseLock;
- }
-
public long getCommitInfoTimeout()
{
return commitInfoTimeout;
@@ -4698,25 +4499,11 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
/**
* @author Eike Stepper
*/
- private final class AutoReleaseLocksEnabledEventImpl extends OptionsEvent implements AutoReleaseLocksEnabledEvent
- {
- private static final long serialVersionUID = 1L;
-
- public AutoReleaseLocksEnabledEventImpl()
- {
- super(OptionsImpl.this);
- }
- }
-
- /**
- * @author Eike Stepper
- */
- private final class AutoReleaseLocksExemptionsEventImpl extends OptionsEvent
- implements AutoReleaseLocksExemptionsEvent
+ private final class AutoReleaseLocksEventImpl extends OptionsEvent implements AutoReleaseLocksEvent
{
private static final long serialVersionUID = 1L;
- public AutoReleaseLocksExemptionsEventImpl()
+ public AutoReleaseLocksEventImpl()
{
super(OptionsImpl.this);
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOUndoDetectorImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOUndoDetectorImpl.java
index 3f29900393..eb1fe86189 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOUndoDetectorImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOUndoDetectorImpl.java
@@ -94,7 +94,7 @@ public class CDOUndoDetectorImpl implements CDOUndoDetector
}
/**
- * @deprecated As of 4.5 {@link #detectUndo(CDOTransaction, CDORevision, CDORevision, CDOFeatureDelta)} is called.
+ * @deprecated As of CDO 4.5 {@link #detectUndo(CDOTransaction, CDORevision, CDORevision, CDOFeatureDelta)} is called.
*/
@Deprecated
protected boolean detectUndoContainer(InternalCDORevision cleanRevision, InternalCDORevision currentRevision)
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java
index 0f1dd2fba3..e475279359 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java
@@ -119,6 +119,11 @@ public class CDOXACommitContextImpl implements InternalCDOXACommitContext
return delegateCommitContext.getTransaction();
}
+ public boolean isAutoReleaseLocks()
+ {
+ return delegateCommitContext.isAutoReleaseLocks();
+ }
+
public boolean isPartialCommit()
{
return delegateCommitContext.isPartialCommit();
@@ -154,6 +159,11 @@ public class CDOXACommitContextImpl implements InternalCDOXACommitContext
return delegateCommitContext.getNewPackageUnits();
}
+ public Collection<CDOLockState> getLocksOnNewObjects()
+ {
+ return delegateCommitContext.getLocksOnNewObjects();
+ }
+
public Map<CDOID, CDOObject> getDetachedObjects()
{
return delegateCommitContext.getDetachedObjects();
@@ -169,22 +179,6 @@ public class CDOXACommitContextImpl implements InternalCDOXACommitContext
return delegateCommitContext.getLobs();
}
- @Deprecated
- public boolean isAutoReleaseLocks()
- {
- return delegateCommitContext.isAutoReleaseLocks();
- }
-
- public Collection<CDOLockState> getLocksOnNewObjects()
- {
- return delegateCommitContext.getLocksOnNewObjects();
- }
-
- public Collection<CDOID> getIDsToUnlock()
- {
- return delegateCommitContext.getIDsToUnlock();
- }
-
public Object call() throws Exception
{
state.handle(this, progressMonitor);

Back to the top