diff options
author | Eike Stepper | 2010-02-11 12:36:02 +0000 |
---|---|---|
committer | Eike Stepper | 2010-02-11 12:36:02 +0000 |
commit | 7c65309293b4fafe753c1c869efee694f8a9cccb (patch) | |
tree | 222a3256c3da5d921c450308b0d2455b68058f6a | |
parent | af32841a19a88e0b28b1feb1728b215f1e0f291c (diff) | |
download | cdo-7c65309293b4fafe753c1c869efee694f8a9cccb.tar.gz cdo-7c65309293b4fafe753c1c869efee694f8a9cccb.tar.xz cdo-7c65309293b4fafe753c1c869efee694f8a9cccb.zip |
[256936] Support for Offline Mode
https://bugs.eclipse.org/bugs/show_bug.cgi?id=256936
4 files changed, 24 insertions, 13 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionManager.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionManager.java index d2fe23a15f..6b1944df27 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionManager.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionManager.java @@ -51,7 +51,9 @@ public interface InternalCDORevisionManager extends CDORevisionManager, CDORevis public void setCache(CDORevisionCache cache); - @Deprecated + /** + * Called on client via postCommit when there is no version of detached objects available. + */ public void reviseLatest(CDOID id, CDOBranch branch); public void reviseVersion(CDOID id, CDOBranchVersion branchVersion, long timeStamp); diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/DetachTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/DetachTest.java index d64b54e767..98337f98df 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/DetachTest.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/DetachTest.java @@ -87,7 +87,8 @@ public class DetachTest extends AbstractCDOTest try { - transaction.getObject(id); + CDOObject object = transaction.getObject(id); + System.out.println(object); fail("ObjectNotFoundException expected"); } catch (ObjectNotFoundException expected) 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 d97d868b7c..8175780097 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 @@ -738,7 +738,6 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter synchronized (invalidationLock) { registerPackageUnits(commitInfo); - reviseRevisions(commitInfo); invalidate(commitInfo, null); } } @@ -801,8 +800,17 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter // Revise old revisions for (CDOIDAndVersion key : commitInfo.getDetachedObjects()) { - CDOBranchVersion branchVersion = newBranch.getVersion(key.getVersion()); - revisionManager.reviseVersion(key.getID(), branchVersion, timeStamp); + CDOID id = key.getID(); + int version = key.getVersion(); + if (version != CDOBranchVersion.UNSPECIFIED_VERSION) + { + CDOBranchVersion branchVersion = newBranch.getVersion(version); + revisionManager.reviseVersion(id, branchVersion, timeStamp); + } + else + { + revisionManager.reviseLatest(id, newBranch); + } } } @@ -833,6 +841,8 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter */ public void invalidate(final CDOCommitInfo commitInfo, final InternalCDOTransaction sender) { + reviseRevisions(commitInfo); + for (InternalCDOView view : getViews()) { if (view != sender && view.getBranch() == commitInfo.getBranch()) 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 1802993f99..b86fb5d0a0 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 @@ -19,6 +19,7 @@ import org.eclipse.emf.cdo.CDOState; import org.eclipse.emf.cdo.common.branch.CDOBranch; import org.eclipse.emf.cdo.common.branch.CDOBranchManager; import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; +import org.eclipse.emf.cdo.common.branch.CDOBranchVersion; import org.eclipse.emf.cdo.common.commit.CDOCommitData; import org.eclipse.emf.cdo.common.commit.CDOCommitInfo; import org.eclipse.emf.cdo.common.id.CDOID; @@ -1767,15 +1768,12 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa } List<CDOIDAndVersion> detached = new ArrayList<CDOIDAndVersion>(); - for (Entry<CDOID, CDOObject> entry : getDetachedObjects().entrySet()) + for (CDOID id : getDetachedObjects().keySet()) { - CDORevision revision = entry.getValue().cdoRevision(); - if (revision != null) - { - detached.add(revision); - } - - removeObject(entry.getKey()); + // Add "version-less" key. + // CDOSessionImpl.reviseRevisions() will call reviseLatest() accordingly. + detached.add(CDOIDUtil.createIDAndVersion(id, CDOBranchVersion.UNSPECIFIED_VERSION)); + removeObject(id); } CDOCommitInfo commitInfo = makeCommitInfo(result.getTimeStamp(), revisions, deltas, detached); |