diff options
author | Eike Stepper | 2016-07-30 13:16:35 +0000 |
---|---|---|
committer | Eike Stepper | 2016-07-30 13:16:35 +0000 |
commit | 915fe3f55eb53acb190536a314e885d2a05d9720 (patch) | |
tree | d7a684ded717d97b89da72d50760a75cbcdd6c6f /plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction | |
parent | 6dc966a83269a207a5538850648ea23697c682bc (diff) | |
download | cdo-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" "
This reverts commit 6dc966a83269a207a5538850648ea23697c682bc.
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction')
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); |