Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2010-02-11 12:36:02 +0000
committerEike Stepper2010-02-11 12:36:02 +0000
commit7c65309293b4fafe753c1c869efee694f8a9cccb (patch)
tree222a3256c3da5d921c450308b0d2455b68058f6a
parentaf32841a19a88e0b28b1feb1728b215f1e0f291c (diff)
downloadcdo-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
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionManager.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/DetachTest.java3
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java16
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java14
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);

Back to the top