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
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')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOCommitContext.java29
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java111
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java16
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java2
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java23
-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
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java137
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/ViewProperties.java23
10 files changed, 114 insertions, 512 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOCommitContext.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOCommitContext.java
index 7bada9a363..4905d74085 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOCommitContext.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOCommitContext.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012, 2014 Eike Stepper (Berlin, Germany) and others.
+ * Copyright (c) 2009-2012, 2014 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -55,6 +55,11 @@ public interface CDOCommitContext
public CDOTransaction getTransaction();
/**
+ * @since 4.1
+ */
+ public boolean isAutoReleaseLocks();
+
+ /**
* @since 4.0
*/
public boolean isPartialCommit();
@@ -75,6 +80,11 @@ public interface CDOCommitContext
public List<CDOPackageUnit> getNewPackageUnits();
/**
+ * @since 4.1
+ */
+ public Collection<CDOLockState> getLocksOnNewObjects();
+
+ /**
* Returns a map of the new {@link CDOObject objects} that are to be committed with this commit context.
*/
public Map<CDOID, CDOObject> getNewObjects();
@@ -98,21 +108,4 @@ public interface CDOCommitContext
* @since 4.0
*/
public Collection<CDOLob<?>> getLobs();
-
- /**
- * @since 4.1
- * @deprecated As of 4.5 no longer supported. See {@link #getIDsToUnlock()}.
- */
- @Deprecated
- public boolean isAutoReleaseLocks();
-
- /**
- * @since 4.1
- */
- public Collection<CDOLockState> getLocksOnNewObjects();
-
- /**
- * @since 4.6
- */
- public Collection<CDOID> getIDsToUnlock();
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java
index 2ed5ff400e..95d4460e3a 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java
@@ -292,93 +292,24 @@ public interface CDOTransaction extends CDOView, CDOCommonTransaction, CDOUserTr
public void setStaleReferenceCleaner(CDOStaleReferenceCleaner staleReferenceCleaner);
/**
- * Returns <code>true</code> if locks in this transaction will be released when {@link CDOTransaction#commit()} or
- * {@link CDOTransaction#rollback()} are called, <code>false</code> otherwise.
+ * Returns true if locks in this view will be removes when {@link CDOTransaction#commit()} or
+ * {@link CDOTransaction#rollback()} is called.
* <p>
- * The default value is <code>true</code>.
- *
- * @see #getAutoReleaseLocksExemptions()
+ * Default value is true.
*/
public boolean isAutoReleaseLocksEnabled();
/**
- * Specifies whether locks in this transaction will be released when {@link CDOTransaction#commit()} or
- * {@link CDOTransaction#rollback()} are called.
+ * Specifies whether locks in this view will be removed when {@link CDOTransaction#commit()} or
+ * {@link CDOTransaction#rollback()} is called.
* <p>
- * If set to <code>false</code> all locks will be kept when {@link CDOTransaction#commit()} or
- * {@link CDOTransaction#rollback()} are called.
+ * If false all locks are kept.
* <p>
- * The default value is <code>true</code>.
- *
- * @see #getAutoReleaseLocksExemptions()
+ * Default value is true.
*/
public void setAutoReleaseLocksEnabled(boolean on);
/**
- * Returns the set of {@link EObject objects} that are to be treated as exemptions to the {@link #isAutoReleaseLocksEnabled()} option.
- * <p>
- * That means:
- * <p>
- * <ul>
- * <li> If {@link #isAutoReleaseLocksEnabled()} returns <code>true</code>, the locks on the objects in this set are <b>not</b> released
- * when {@link CDOTransaction#commit()} or {@link CDOTransaction#rollback()} are called.
- * <li> If {@link #isAutoReleaseLocksEnabled()} returns <code>false</code>, the locks on the objects in this set <b>are</b> released nevertheless
- * when {@link CDOTransaction#commit()} or {@link CDOTransaction#rollback()} are called.
- * </ul>
- * <p>
- * The returned set is unmodifiable. To modify the set use the {@link #clearAutoReleaseLocksExemptions() clearAutoReleaseLocksExemptions()},
- * {@link #addAutoReleaseLocksExemptions(boolean, EObject...) addAutoReleaseLocksExemption()},
- * and {@link #removeAutoReleaseLocksExemptions(boolean, EObject...) removeAutoReleaseLocksExemption()} methods.
- * <p>
- * <b>Implementation note</b>: This set stores weak references to the contained objects.
- *
- * @see #clearAutoReleaseLocksExemptions()
- * @see #addAutoReleaseLocksExemptions(boolean, EObject...)
- * @see #removeAutoReleaseLocksExemptions(boolean, EObject...)
- * @since 4.6
- */
- public Set<? extends EObject> getAutoReleaseLocksExemptions();
-
- /**
- * Returns <code>true</code> if the given object is treated as an exemption to the {@link #isAutoReleaseLocksEnabled()} option,
- * <code>false</code> otherwise.
- *
- * @see #getAutoReleaseLocksExemptions()
- * @since 4.6
- */
- public boolean isAutoReleaseLocksExemption(EObject object);
-
- /**
- * Clears the set of {@link EObject objects} that are to be treated as exemptions to the {@link #isAutoReleaseLocksEnabled()} option.
- *
- * @see #getAutoReleaseLocksExemptions()
- * @see #addAutoReleaseLocksExemptions(boolean, EObject...)
- * @see #removeAutoReleaseLocksExemptions(boolean, EObject...)
- * @since 4.6
- */
- public void clearAutoReleaseLocksExemptions();
-
- /**
- * Adds the given {@link EObject object} to the set of objects that are to be treated as exemptions to the {@link #isAutoReleaseLocksEnabled()} option.
- *
- * @see #getAutoReleaseLocksExemptions()
- * @see #clearAutoReleaseLocksExemptions()
- * @see #removeAutoReleaseLocksExemptions(boolean, EObject...)
- * @since 4.6
- */
- public void addAutoReleaseLocksExemptions(boolean recursive, EObject... objects);
-
- /**
- * Removes the given {@link EObject object} from the set of objects that are to be treated as exemptions to the {@link #isAutoReleaseLocksEnabled()} option.
- *
- * @see #getAutoReleaseLocksExemptions()
- * @see #clearAutoReleaseLocksExemptions()
- * @see #addAutoReleaseLocksExemptions(boolean, EObject...)
- * @since 4.6
- */
- public void removeAutoReleaseLocksExemptions(boolean recursive, EObject... objects);
-
- /**
* Returns the number of milliseconds to wait for the transaction update when {@link CDOTransaction#commit()} is called.
* <p>
* Default value is 10000.
@@ -436,8 +367,7 @@ public interface CDOTransaction extends CDOView, CDOCommonTransaction, CDOUserTr
/**
* An {@link IOptionsEvent options event} fired from transaction {@link CDOTransaction#options() options} when the
- * {@link Options#setAutoReleaseLocksEnabled(boolean) auto release locks enabled} or
- * {@link Options#getAutoReleaseLocksExemptions() auto release locks exemptions} options have changed.
+ * {@link Options#setAutoReleaseLocksEnabled(boolean) auto release locks} option has changed.
*
* @author Eike Stepper
* @since 3.0
@@ -446,31 +376,6 @@ public interface CDOTransaction extends CDOView, CDOCommonTransaction, CDOUserTr
*/
public interface AutoReleaseLocksEvent extends IOptionsEvent
{
- /**
- * An {@link AutoReleaseLocksEvent auto release locks options event} fired from transaction {@link CDOTransaction#options() options} when the
- * {@link Options#setAutoReleaseLocksEnabled(boolean) auto release locks enabled} option has changed.
- *
- * @author Eike Stepper
- * @since 4.6
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- */
- public interface AutoReleaseLocksEnabledEvent extends AutoReleaseLocksEvent
- {
- }
-
- /**
- * An {@link AutoReleaseLocksEvent auto release locks options event} fired from transaction {@link CDOTransaction#options() options} when the
- * {@link Options#getAutoReleaseLocksExemptions() auto release locks exemptions} option has changed.
- *
- * @author Eike Stepper
- * @since 4.6
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- */
- public interface AutoReleaseLocksExemptionsEvent extends AutoReleaseLocksEvent
- {
- }
}
/**
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
index c6ec39bd64..41cd6b114b 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
@@ -88,10 +88,8 @@ import org.eclipse.emf.spi.cdo.FSMUtil;
import org.eclipse.emf.spi.cdo.InternalCDOObject;
import org.eclipse.emf.spi.cdo.InternalCDOView;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.Lock;
@@ -594,20 +592,6 @@ public final class CDOUtil
}
/**
- * @since 4.6
- */
- public static List<? extends CDOObject> getCDOObjects(EObject... objects)
- {
- List<CDOObject> result = new ArrayList<CDOObject>();
- for (EObject object : objects)
- {
- result.add(getCDOObject(object));
- }
-
- return result;
- }
-
- /**
* @since 4.4
*/
public static boolean isCDOObject(EObject object)
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 ff9c2cf322..2a6dc0f379 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
@@ -1635,7 +1635,7 @@ public class CDOObjectImpl extends MinimalEStoreEObjectImpl implements InternalC
* @author Eike Stepper
* @since 4.1
*/
- private final class CDOStoreEcoreEMap extends EcoreEMap<Object, Object> implements InternalCDOLoadable
+ private final class CDOStoreEcoreEMap extends EcoreEMap<Object, Object>implements InternalCDOLoadable
{
private static final long serialVersionUID = 1L;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java
index 2cd24d3c3c..9f726b234e 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java
@@ -19,7 +19,6 @@ import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.lock.CDOLockState;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.security.CDOPermission;
-import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.view.CDOView;
@@ -520,28 +519,6 @@ public class ObjectProperties extends Properties<EObject>
}
});
- add(new Property<EObject>("autoReleaseLocksExemption")//$NON-NLS-1$
- {
- @Override
- protected Object eval(EObject object)
- {
- CDOObject cdoObject = getCDOObject(object);
- if (cdoObject == null)
- {
- return false;
- }
-
- CDOView view = cdoObject.cdoView();
- if (view instanceof CDOTransaction)
- {
- CDOTransaction transaction = (CDOTransaction)view;
- return transaction.options().isAutoReleaseLocksExemption(cdoObject);
- }
-
- return false;
- }
- });
-
add(new Property<EObject>("viewHistorical") //$NON-NLS-1$
{
@Override
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);
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java
index 814dcf43a3..694efefc37 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java
@@ -99,7 +99,6 @@ import org.eclipse.net4j.util.ref.ReferenceValueMap;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.NotificationChain;
-import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
@@ -122,7 +121,6 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
-import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -363,16 +361,6 @@ public class CDOViewImpl extends AbstractCDOView implements IExecutorServiceProv
{
CDOLockState lockState = createUpdatedLockStateForNewObject(object, lockType, true);
locksOnNewObjects.add(lockState);
-
- if (recursive)
- {
- for (TreeIterator<EObject> it = object.eAllContents(); it.hasNext();)
- {
- CDOObject child = CDOUtil.getCDOObject(it.next());
- lockState = createUpdatedLockStateForNewObject(child, lockType, true);
- locksOnNewObjects.add(lockState);
- }
- }
}
else
{
@@ -441,13 +429,8 @@ public class CDOViewImpl extends AbstractCDOView implements IExecutorServiceProv
}
}
- int locksOnNewObjectsCount = locksOnNewObjects.size();
- if (locksOnNewObjectsCount != 0)
- {
- CDOLockState[] locksOnNewObjectsArray = locksOnNewObjects.toArray(new CDOLockState[locksOnNewObjectsCount]);
- // updateLockStates(locksOnNewObjectsArray);
- updateAndNotifyLockStates(Operation.LOCK, lockType, getTimeStamp(), locksOnNewObjectsArray);
- }
+ CDOLockState[] locksOnNewObjectsArray = locksOnNewObjects.toArray(new CDOLockState[locksOnNewObjects.size()]);
+ updateLockStates(locksOnNewObjectsArray);
if (result != null)
{
@@ -526,8 +509,7 @@ public class CDOViewImpl extends AbstractCDOView implements IExecutorServiceProv
/**
* Notifies other views of lock changes performed in this view
*/
- protected void notifyOtherViewsAboutLockChanges(Operation op, LockType type, long timestamp,
- CDOLockState[] lockStates)
+ private void notifyOtherViewsAboutLockChanges(Operation op, LockType type, long timestamp, CDOLockState[] lockStates)
{
if (lockStates.length > 0)
{
@@ -655,16 +637,6 @@ public class CDOViewImpl extends AbstractCDOView implements IExecutorServiceProv
{
CDOLockState lockState = createUpdatedLockStateForNewObject(object, lockType, false);
locksOnNewObjects.add(lockState);
-
- if (recursive)
- {
- for (TreeIterator<EObject> it = object.eAllContents(); it.hasNext();)
- {
- CDOObject child = CDOUtil.getCDOObject(it.next());
- lockState = createUpdatedLockStateForNewObject(child, lockType, false);
- locksOnNewObjects.add(lockState);
- }
- }
}
else
{
@@ -1012,69 +984,83 @@ public class CDOViewImpl extends AbstractCDOView implements IExecutorServiceProv
try
{
- List<CDOLockState> result = new ArrayList<CDOLockState>();
- List<CDOLockState> lockStatesToUpdate = new ArrayList<CDOLockState>();
- Set<CDOID> missingIDs = new LinkedHashSet<CDOID>();
+ List<CDOID> missing = new LinkedList<CDOID>();
+ List<CDOLockState> lockStates = new LinkedList<CDOLockState>();
+ List<CDOLockState> locksOnNewObjects = new ArrayList<CDOLockState>(ids.size());
for (CDOID id : ids)
{
+ CDOLockState lockState = null;
InternalCDOObject object = getObject(id, false);
if (object != null)
{
- CDOLockState lockState = lockStates.get(object);
- if (lockState != null)
- {
- result.add(lockState);
- continue;
- }
-
- if (loadOnDemand && FSMUtil.isNew(object))
- {
- Object lockTarget = getLockTarget(this, id);
- CDOLockState newLockState = CDOLockUtil.createLockState(lockTarget);
-
- result.add(newLockState);
- lockStatesToUpdate.add(newLockState);
- continue;
- }
+ lockState = this.lockStates.get(object);
}
- missingIDs.add(id);
+ if (lockState != null)
+ {
+ lockStates.add(lockState);
+ }
+ else if (loadOnDemand && object != null && FSMUtil.isNew(object))
+ {
+ Object lockedObject = getLockTarget(object); // CDOID or CDOIDAndBranch
+ CDOLockState defaultLockState = CDOLockUtil.createLockState(lockedObject);
+ locksOnNewObjects.add(defaultLockState);
+ lockStates.add(defaultLockState);
+ }
+ else
+ {
+ missing.add(id);
+ }
}
- if (loadOnDemand && (!missingIDs.isEmpty() || ids.isEmpty()))
+ if (loadOnDemand && (missing.size() > 0 || ids.isEmpty()))
{
CDOSessionProtocol sessionProtocol = session.getSessionProtocol();
- CDOLockState[] loadedLockStates = sessionProtocol.getLockStates(viewID, missingIDs, CDOLockState.DEPTH_NONE);
-
+ CDOLockState[] loadedLockStates = sessionProtocol.getLockStates(viewID, missing, CDOLockState.DEPTH_NONE);
+ List<CDOLockState> newLockStateForCache = new ArrayList<CDOLockState>(
+ loadedLockStates.length + missing.size());
for (CDOLockState loadedLockState : loadedLockStates)
{
- result.add(loadedLockState);
- lockStatesToUpdate.add(loadedLockState);
+ lockStates.add(loadedLockState);
+ newLockStateForCache.add(loadedLockState);
- CDOID id = CDOIDUtil.getCDOID(loadedLockState.getLockedObject());
- if (id != null)
+ CDOID cdoID = CDOIDUtil.getCDOID(loadedLockState.getLockedObject());
+ if (cdoID != null)
{
- missingIDs.remove(id);
+ missing.remove(cdoID);
}
}
- for (CDOID missingID : missingIDs)
+ for (CDOID missingLockStateForCDOID : missing)
{
- Object lockTarget = getLockTarget(this, missingID);
- CDOLockState defaultLockState = CDOLockUtil.createLockState(lockTarget);
+ Object target;
- result.add(defaultLockState);
- lockStatesToUpdate.add(defaultLockState);
+ InternalCDOObject object = getObject(missingLockStateForCDOID, false);
+ if (object != null)
+ {
+ target = getLockTarget(object); // CDOID or CDOIDAndBranch
+ }
+ else
+ {
+ target = missingLockStateForCDOID;
+ }
+
+ CDOLockState defaultLockState = CDOLockUtil.createLockState(target);
+ lockStates.add(defaultLockState);
+ newLockStateForCache.add(defaultLockState);
}
- }
- if (!lockStatesToUpdate.isEmpty())
- {
- updateLockStates(lockStatesToUpdate.toArray(new CDOLockState[lockStatesToUpdate.size()]));
+ if (options().isLockNotificationEnabled())
+ {
+ updateLockStates(newLockStateForCache.toArray(new CDOLockState[newLockStateForCache.size()]));
+ }
}
- return result.toArray(new CDOLockState[result.size()]);
+ CDOLockState[] locksOnNewObjectsArray = locksOnNewObjects.toArray(new CDOLockState[locksOnNewObjects.size()]);
+ updateLockStates(locksOnNewObjectsArray);
+
+ return lockStates.toArray(new CDOLockState[lockStates.size()]);
}
finally
{
@@ -1093,11 +1079,6 @@ public class CDOViewImpl extends AbstractCDOView implements IExecutorServiceProv
return lockStates.get(object);
}
- protected Map<CDOObject, CDOLockState> getLockStates()
- {
- return lockStates;
- }
-
private CDOBranchPoint getBranchPointForID(CDOID id)
{
// If this view's timestamp is something other than UNSPECIFIED_DATE,
@@ -1841,12 +1822,8 @@ public class CDOViewImpl extends AbstractCDOView implements IExecutorServiceProv
}
CDOID id = object.cdoID();
- return getLockTarget(view, id);
- }
-
- protected static Object getLockTarget(CDOView view, CDOID id)
- {
- if (view.getSession().getRepositoryInfo().isSupportingBranches())
+ boolean branching = view.getSession().getRepositoryInfo().isSupportingBranches();
+ if (branching)
{
return CDOIDUtil.createIDAndBranch(id, view.getBranch());
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/ViewProperties.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/ViewProperties.java
index 738e562ee5..70d0dc1fba 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/ViewProperties.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/ViewProperties.java
@@ -13,7 +13,6 @@ package org.eclipse.emf.internal.cdo.view;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
-import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.net4j.util.StringUtil;
@@ -58,13 +57,13 @@ public class ViewProperties extends Properties<CDOView>
});
add(new Property<CDOView>("branchName") //$NON-NLS-1$
- {
+ {
@Override
protected Object eval(CDOView view)
{
return view.getBranch().getName();
}
- });
+ });
add(new Property<CDOView>("branch", //$NON-NLS-1$
"Branch", "The branch of this view.", CATEGORY_VIEW)
@@ -167,27 +166,13 @@ public class ViewProperties extends Properties<CDOView>
});
add(new Property<CDOView>("historical") //$NON-NLS-1$
- {
+ {
@Override
protected Object eval(CDOView view)
{
return view.getTimeStamp() != CDOBranchPoint.UNSPECIFIED_DATE;
}
- });
-
- add(new Property<CDOView>("autoReleaseLocks") //$NON-NLS-1$
- {
- @Override
- protected Object eval(CDOView view)
- {
- if (view instanceof CDOTransaction)
- {
- return ((CDOTransaction)view).options().isAutoReleaseLocksEnabled();
- }
-
- return false;
- }
- });
+ });
}
public static void main(String[] args)

Back to the top