Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2009-09-23 17:19:33 +0000
committerEike Stepper2009-09-23 17:19:33 +0000
commit9bb601e0689834d4dd9ce0507c7212e32853b98d (patch)
tree9e6ef7bf56655b0959f188c1d820a4e4fb41ba63
parent1b527b5759ef827b4d08bb536e615ab39bddb035 (diff)
downloadcdo-9bb601e0689834d4dd9ce0507c7212e32853b98d.tar.gz
cdo-9bb601e0689834d4dd9ce0507c7212e32853b98d.tar.xz
cdo-9bb601e0689834d4dd9ce0507c7212e32853b98d.zip
[289371] Provide Dynamic content prefetching mechanism upon CDOResource load
https://bugs.eclipse.org/bugs/show_bug.cgi?id=289371
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevision.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevisionManager.java20
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionManagerImpl.java44
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/AbstractCDORevision.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionManager.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java21
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionByTimeRequest.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionByVersionRequest.java13
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionRequest.java35
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxy.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/AbstractSyncRevisionsIndication.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadChunkIndication.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionByTimeIndication.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionByVersionIndication.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionIndication.java92
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/VerifyRevisionIndication.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Audit.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java15
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContextImpl.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/DelegatingCDORevisionManager.java36
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java23
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ResourceTest.java57
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java6
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOObject.java7
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java2
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java8
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectWrapper.java8
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java3
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java37
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOAuditImpl.java9
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java14
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java5
34 files changed, 402 insertions, 144 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevision.java
index 9b934beacb..9fb6e7b40a 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevision.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Eike Stepper - initial API and implementation
* Simon McDuff - delta support
@@ -31,6 +31,16 @@ public interface CDORevision
public static final int UNCHUNKED = -1;
/**
+ * @since 3.0
+ */
+ public static final int DEPTH_NONE = 0;
+
+ /**
+ * @since 3.0
+ */
+ public static final int DEPTH_INFINITE = -1;
+
+ /**
* @since 2.0
*/
public EClass getEClass();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevisionManager.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevisionManager.java
index ce6fe523de..ca83e0c0a9 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevisionManager.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevisionManager.java
@@ -34,20 +34,22 @@ public interface CDORevisionManager
public boolean containsRevisionByVersion(CDOID id, int version);
- public CDORevision getRevision(CDOID id, int referenceChunk);
+ public CDORevision getRevision(CDOID id, int referenceChunk, int prefetchDepth);
- public CDORevision getRevision(CDOID id, int referenceChunk, boolean loadOnDemand);
+ public CDORevision getRevision(CDOID id, int referenceChunk, int prefetchDepth, boolean loadOnDemand);
- public CDORevision getRevisionByTime(CDOID id, int referenceChunk, long timeStamp);
+ public CDORevision getRevisionByTime(CDOID id, int referenceChunk, int prefetchDepth, long timeStamp);
- public CDORevision getRevisionByTime(CDOID id, int referenceChunk, long timeStamp, boolean loadOnDemand);
+ public CDORevision getRevisionByTime(CDOID id, int referenceChunk, int prefetchDepth, long timeStamp,
+ boolean loadOnDemand);
- public CDORevision getRevisionByVersion(CDOID id, int referenceChunk, int version);
+ public CDORevision getRevisionByVersion(CDOID id, int referenceChunk, int prefetchDepth, int version);
- public CDORevision getRevisionByVersion(CDOID id, int referenceChunk, int version, boolean loadOnDemand);
+ public CDORevision getRevisionByVersion(CDOID id, int referenceChunk, int prefetchDepth, int version,
+ boolean loadOnDemand);
- public List<CDORevision> getRevisions(Collection<CDOID> ids, int referenceChunk);
+ public List<CDORevision> getRevisions(Collection<CDOID> ids, int referenceChunk, int prefetchDepth);
- public List<CDORevision> getRevisionsByTime(Collection<CDOID> ids, int referenceChunk, long timeStamp,
- boolean loadMissingRevisions);
+ public List<CDORevision> getRevisionsByTime(Collection<CDOID> ids, int referenceChunk, int prefetchDepth,
+ long timeStamp, boolean loadOnDemand);
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionManagerImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionManagerImpl.java
index 66aedb2a4a..c20c69315a 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionManagerImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionManagerImpl.java
@@ -168,12 +168,12 @@ public class CDORevisionManagerImpl extends Lifecycle implements InternalCDORevi
}
}
- public InternalCDORevision getRevision(CDOID id, int referenceChunk)
+ public InternalCDORevision getRevision(CDOID id, int referenceChunk, int prefetchDepth)
{
- return getRevision(id, referenceChunk, true);
+ return getRevision(id, referenceChunk, prefetchDepth, true);
}
- public InternalCDORevision getRevision(CDOID id, int referenceChunk, boolean loadOnDemand)
+ public InternalCDORevision getRevision(CDOID id, int referenceChunk, int prefetchDepth, boolean loadOnDemand)
{
acquireAtomicRequestLock(loadAndAddLock);
@@ -189,7 +189,7 @@ public class CDORevisionManagerImpl extends Lifecycle implements InternalCDORevi
TRACER.format("Loading revision {0}", id); //$NON-NLS-1$
}
- revision = revisionLoader.loadRevision(id, referenceChunk);
+ revision = revisionLoader.loadRevision(id, referenceChunk, prefetchDepth);
addCachedRevisionIfNotNull(revision);
}
}
@@ -211,12 +211,13 @@ public class CDORevisionManagerImpl extends Lifecycle implements InternalCDORevi
}
}
- public InternalCDORevision getRevisionByTime(CDOID id, int referenceChunk, long timeStamp)
+ public InternalCDORevision getRevisionByTime(CDOID id, int referenceChunk, int prefetchDepth, long timeStamp)
{
- return getRevisionByTime(id, referenceChunk, timeStamp, true);
+ return getRevisionByTime(id, referenceChunk, prefetchDepth, timeStamp, true);
}
- public InternalCDORevision getRevisionByTime(CDOID id, int referenceChunk, long timeStamp, boolean loadOnDemand)
+ public InternalCDORevision getRevisionByTime(CDOID id, int referenceChunk, int prefetchDepth, long timeStamp,
+ boolean loadOnDemand)
{
acquireAtomicRequestLock(loadAndAddLock);
@@ -232,7 +233,7 @@ public class CDORevisionManagerImpl extends Lifecycle implements InternalCDORevi
TRACER.format("Loading revision {0} by time {1,date} {1,time}", id, timeStamp); //$NON-NLS-1$
}
- revision = revisionLoader.loadRevisionByTime(id, referenceChunk, timeStamp);
+ revision = revisionLoader.loadRevisionByTime(id, referenceChunk, prefetchDepth, timeStamp);
addCachedRevisionIfNotNull(revision);
}
}
@@ -254,12 +255,14 @@ public class CDORevisionManagerImpl extends Lifecycle implements InternalCDORevi
}
}
- public synchronized InternalCDORevision getRevisionByVersion(CDOID id, int referenceChunk, int version)
+ public synchronized InternalCDORevision getRevisionByVersion(CDOID id, int referenceChunk, int prefetchDepth,
+ int version)
{
- return getRevisionByVersion(id, referenceChunk, version, true);
+ return getRevisionByVersion(id, referenceChunk, prefetchDepth, version, true);
}
- public InternalCDORevision getRevisionByVersion(CDOID id, int referenceChunk, int version, boolean loadOnDemand)
+ public InternalCDORevision getRevisionByVersion(CDOID id, int referenceChunk, int prefetchDepth, int version,
+ boolean loadOnDemand)
{
acquireAtomicRequestLock(loadAndAddLock);
@@ -275,7 +278,7 @@ public class CDORevisionManagerImpl extends Lifecycle implements InternalCDORevi
TRACER.format("Loading revision {0} by version {1}", id, version); //$NON-NLS-1$
}
- revision = revisionLoader.loadRevisionByVersion(id, referenceChunk, version);
+ revision = revisionLoader.loadRevisionByVersion(id, referenceChunk, prefetchDepth, version);
addCachedRevisionIfNotNull(revision);
}
}
@@ -288,13 +291,13 @@ public class CDORevisionManagerImpl extends Lifecycle implements InternalCDORevi
}
}
- public List<CDORevision> getRevisions(Collection<CDOID> ids, int referenceChunk)
+ public List<CDORevision> getRevisions(Collection<CDOID> ids, int referenceChunk, int prefetchDepth)
{
List<CDOID> missingIDs = new ArrayList<CDOID>(0);
List<CDORevision> revisions = new ArrayList<CDORevision>(ids.size());
for (CDOID id : ids)
{
- InternalCDORevision revision = getRevision(id, referenceChunk, false);
+ InternalCDORevision revision = getRevision(id, referenceChunk, prefetchDepth, false);
revisions.add(revision);
if (revision == null)
{
@@ -308,7 +311,8 @@ public class CDORevisionManagerImpl extends Lifecycle implements InternalCDORevi
try
{
- List<InternalCDORevision> missingRevisions = revisionLoader.loadRevisions(missingIDs, referenceChunk);
+ List<InternalCDORevision> missingRevisions = revisionLoader.loadRevisions(missingIDs, referenceChunk,
+ prefetchDepth);
handleMissingRevisions(revisions, missingRevisions);
}
finally
@@ -320,14 +324,14 @@ public class CDORevisionManagerImpl extends Lifecycle implements InternalCDORevi
return revisions;
}
- public List<CDORevision> getRevisionsByTime(Collection<CDOID> ids, int referenceChunk, long timeStamp,
- boolean loadMissingRevisions)
+ public List<CDORevision> getRevisionsByTime(Collection<CDOID> ids, int referenceChunk, int prefetchDepth,
+ long timeStamp, boolean loadOnDemand)
{
- List<CDOID> missingIDs = loadMissingRevisions ? new ArrayList<CDOID>(0) : null;
+ List<CDOID> missingIDs = loadOnDemand ? new ArrayList<CDOID>(0) : null;
List<CDORevision> revisions = new ArrayList<CDORevision>(ids.size());
for (CDOID id : ids)
{
- InternalCDORevision revision = getRevisionByTime(id, referenceChunk, timeStamp, false);
+ InternalCDORevision revision = getRevisionByTime(id, referenceChunk, prefetchDepth, timeStamp, false);
revisions.add(revision);
if (revision == null && missingIDs != null)
{
@@ -342,7 +346,7 @@ public class CDORevisionManagerImpl extends Lifecycle implements InternalCDORevi
try
{
List<InternalCDORevision> missingRevisions = revisionLoader.loadRevisionsByTime(missingIDs, referenceChunk,
- timeStamp);
+ prefetchDepth, timeStamp);
handleMissingRevisions(revisions, missingRevisions);
}
finally
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/AbstractCDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/AbstractCDORevision.java
index 5e73d95cc0..e3ece389db 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/AbstractCDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/AbstractCDORevision.java
@@ -233,6 +233,14 @@ public abstract class AbstractCDORevision implements InternalCDORevision
}
}
+ /**
+ * @since 3.0
+ */
+ public CDOClassInfo getClassInfo()
+ {
+ return classInfo;
+ }
+
public EClass getEClass()
{
return classInfo.getEClass();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java
index 495cce5c5a..7559720b3e 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java
@@ -15,6 +15,7 @@ import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.io.CDODataOutput;
+import org.eclipse.emf.cdo.common.model.CDOClassInfo;
import org.eclipse.emf.cdo.common.revision.CDOList;
import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjustable;
import org.eclipse.emf.cdo.common.revision.CDORevision;
@@ -35,6 +36,11 @@ public interface InternalCDORevision extends CDORevision, CDORevisionData, CDORe
*/
public static final Object NIL = new Object();
+ /**
+ * @since 3.0
+ */
+ public CDOClassInfo getClassInfo();
+
public void setID(CDOID id);
public void setVersion(int version);
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 1483c368d0..7e356b2bd7 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
@@ -53,17 +53,15 @@ public interface InternalCDORevisionManager extends CDORevisionManager, ILifecyc
{
public InternalCDORevision verifyRevision(InternalCDORevision revision, int referenceChunk);
- public InternalCDORevision loadRevision(CDOID id, int referenceChunk);
+ public InternalCDORevision loadRevision(CDOID id, int referenceChunk, int prefetchDepth);
- public InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, long timeStamp);
+ public InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, int prefetchDepth, long timeStamp);
- public InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int version);
+ public InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int prefetchDepth, int version);
- public List<InternalCDORevision> loadRevisions(Collection<CDOID> ids, int referenceChunk);
+ public List<InternalCDORevision> loadRevisions(Collection<CDOID> ids, int referenceChunk, int prefetchDepth);
- public List<InternalCDORevision> loadRevisionsByTime(Collection<CDOID> ids, int referenceChunk, long timeStamp);
-
- // public List<InternalCDORevision> verifyRevisions(List<InternalCDORevision> revisions);
+ public List<InternalCDORevision> loadRevisionsByTime(Collection<CDOID> ids, int referenceChunk, int prefetchDepth, long timeStamp);
}
/**
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java
index 71429264d5..59c8c54670 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java
@@ -105,29 +105,30 @@ public class CDOClientProtocol extends SignalProtocol<CDOSession> implements CDO
return send(new LoadChunkRequest(this, revision, feature, accessIndex, fetchIndex, fromIndex, toIndex));
}
- public InternalCDORevision loadRevision(CDOID id, int referenceChunk)
+ public InternalCDORevision loadRevision(CDOID id, int referenceChunk, int prefetchDepth)
{
- return loadRevisions(Collections.singleton(id), referenceChunk).get(0);
+ return loadRevisions(Collections.singleton(id), referenceChunk, prefetchDepth).get(0);
}
- public InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, long timeStamp)
+ public InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, int prefetchDepth, long timeStamp)
{
- return loadRevisionsByTime(Collections.singleton(id), referenceChunk, timeStamp).get(0);
+ return loadRevisionsByTime(Collections.singleton(id), referenceChunk, prefetchDepth, timeStamp).get(0);
}
- public List<InternalCDORevision> loadRevisions(Collection<CDOID> ids, int referenceChunk)
+ public List<InternalCDORevision> loadRevisions(Collection<CDOID> ids, int referenceChunk, int prefetchDepth)
{
- return send(new LoadRevisionRequest(this, ids, referenceChunk));
+ return send(new LoadRevisionRequest(this, ids, referenceChunk, prefetchDepth));
}
- public List<InternalCDORevision> loadRevisionsByTime(Collection<CDOID> ids, int referenceChunk, long timeStamp)
+ public List<InternalCDORevision> loadRevisionsByTime(Collection<CDOID> ids, int referenceChunk, int prefetchDepth,
+ long timeStamp)
{
- return send(new LoadRevisionByTimeRequest(this, ids, referenceChunk, timeStamp));
+ return send(new LoadRevisionByTimeRequest(this, ids, referenceChunk, prefetchDepth, timeStamp));
}
- public InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int version)
+ public InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int prefetchDepth, int version)
{
- return send(new LoadRevisionByVersionRequest(this, id, referenceChunk, version)).get(0);
+ return send(new LoadRevisionByVersionRequest(this, id, referenceChunk, prefetchDepth, version)).get(0);
}
public InternalCDORevision verifyRevision(InternalCDORevision revision, int referenceChunk)
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionByTimeRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionByTimeRequest.java
index 5791fb60b5..1d4c0026d2 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionByTimeRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionByTimeRequest.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Eike Stepper - initial API and implementation
**************************************************************************/
@@ -30,9 +30,10 @@ public class LoadRevisionByTimeRequest extends LoadRevisionRequest
private long timeStamp;
- public LoadRevisionByTimeRequest(CDOClientProtocol protocol, Collection<CDOID> ids, int referenceChunk, long timeStamp)
+ public LoadRevisionByTimeRequest(CDOClientProtocol protocol, Collection<CDOID> ids, int referenceChunk,
+ int prefetchDepth, long timeStamp)
{
- super(protocol, CDOProtocolConstants.SIGNAL_LOAD_REVISION_BY_TIME, ids, referenceChunk);
+ super(protocol, CDOProtocolConstants.SIGNAL_LOAD_REVISION_BY_TIME, ids, referenceChunk, prefetchDepth);
this.timeStamp = timeStamp;
}
@@ -51,7 +52,8 @@ public class LoadRevisionByTimeRequest extends LoadRevisionRequest
@Override
public String toString()
{
- return MessageFormat.format("{0}(ids={1}, referenceChunk={2}, timeStamp={3})", getClass().getSimpleName(), //$NON-NLS-1$
- getIDs(), getReferenceChunk(), timeStamp);
+ return MessageFormat.format(
+ "{0}(ids={1}, referenceChunk={2}, prefetchDepth={3}, timeStamp={4})", getClass().getSimpleName(), //$NON-NLS-1$
+ getIDs(), getReferenceChunk(), getPrefetchDepth(), timeStamp);
}
}
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionByVersionRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionByVersionRequest.java
index 9f746df55a..773a031011 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionByVersionRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionByVersionRequest.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Eike Stepper - initial API and implementation
**************************************************************************/
@@ -30,9 +30,11 @@ public class LoadRevisionByVersionRequest extends LoadRevisionRequest
private int version;
- public LoadRevisionByVersionRequest(CDOClientProtocol protocol, CDOID id, int referenceChunk, int version)
+ public LoadRevisionByVersionRequest(CDOClientProtocol protocol, CDOID id, int referenceChunk, int prefetchDepth,
+ int version)
{
- super(protocol, CDOProtocolConstants.SIGNAL_LOAD_REVISION_BY_VERSION, Collections.singleton(id), referenceChunk);
+ super(protocol, CDOProtocolConstants.SIGNAL_LOAD_REVISION_BY_VERSION, Collections.singleton(id), referenceChunk,
+ prefetchDepth);
this.version = version;
}
@@ -51,7 +53,8 @@ public class LoadRevisionByVersionRequest extends LoadRevisionRequest
@Override
public String toString()
{
- return MessageFormat.format("{0}(ids={1}, referenceChunk={2}, version={3})", getClass().getSimpleName(), getIDs(), //$NON-NLS-1$
- getReferenceChunk(), version);
+ return MessageFormat.format(
+ "{0}(ids={1}, referenceChunk={2}, prefetchDepth={3}, version={4})", getClass().getSimpleName(), getIDs(), //$NON-NLS-1$
+ getReferenceChunk(), getPrefetchDepth(), version);
}
}
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionRequest.java
index 6fb441d176..48a4a954ea 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadRevisionRequest.java
@@ -39,16 +39,20 @@ public class LoadRevisionRequest extends CDOClientRequest<List<InternalCDORevisi
private int referenceChunk;
- public LoadRevisionRequest(CDOClientProtocol protocol, Collection<CDOID> ids, int referenceChunk)
+ private int prefetchDepth;
+
+ public LoadRevisionRequest(CDOClientProtocol protocol, Collection<CDOID> ids, int referenceChunk, int prefetchDepth)
{
- this(protocol, CDOProtocolConstants.SIGNAL_LOAD_REVISION, ids, referenceChunk);
+ this(protocol, CDOProtocolConstants.SIGNAL_LOAD_REVISION, ids, referenceChunk, prefetchDepth);
}
- public LoadRevisionRequest(CDOClientProtocol protocol, short signalID, Collection<CDOID> ids, int referenceChunk)
+ protected LoadRevisionRequest(CDOClientProtocol protocol, short signalID, Collection<CDOID> ids, int referenceChunk,
+ int prefetchDepth)
{
super(protocol, signalID);
this.ids = ids;
this.referenceChunk = referenceChunk;
+ this.prefetchDepth = prefetchDepth;
}
public Collection<CDOID> getIDs()
@@ -61,6 +65,11 @@ public class LoadRevisionRequest extends CDOClientRequest<List<InternalCDORevisi
return referenceChunk;
}
+ public int getPrefetchDepth()
+ {
+ return prefetchDepth;
+ }
+
@Override
protected void requesting(CDODataOutput out) throws IOException
{
@@ -75,7 +84,21 @@ public class LoadRevisionRequest extends CDOClientRequest<List<InternalCDORevisi
TRACER.format("Writing {0} IDs", ids.size()); //$NON-NLS-1$
}
- out.writeInt(ids.size());
+ if (prefetchDepth == 0)
+ {
+ out.writeInt(ids.size());
+ }
+ else
+ {
+ out.writeInt(-ids.size());
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Writing prefetchDepth: {0}", prefetchDepth); //$NON-NLS-1$
+ }
+
+ out.writeInt(prefetchDepth);
+ }
+
for (CDOID id : ids)
{
if (TRACER.isEnabled())
@@ -150,6 +173,8 @@ public class LoadRevisionRequest extends CDOClientRequest<List<InternalCDORevisi
@Override
public String toString()
{
- return MessageFormat.format("{0}(ids={1}, referenceChunk={2})", getClass().getSimpleName(), ids, referenceChunk); //$NON-NLS-1$
+ return MessageFormat
+ .format(
+ "{0}(ids={1}, referenceChunk={2}, prefetchDepth={3})", getClass().getSimpleName(), ids, referenceChunk, prefetchDepth); //$NON-NLS-1$
}
}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxy.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxy.java
index c54ca17947..87533c812c 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxy.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxy.java
@@ -14,6 +14,7 @@ import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.io.CDODataOutput;
+import org.eclipse.emf.cdo.common.model.CDOClassInfo;
import org.eclipse.emf.cdo.common.revision.CDOList;
import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjuster;
import org.eclipse.emf.cdo.common.revision.CDORevision;
@@ -75,6 +76,11 @@ public class CDORevisionProxy implements HibernateProxy, InternalCDORevision, Se
return li;
}
+ public CDOClassInfo getClassInfo()
+ {
+ return li.getRevision().getClassInfo();
+ }
+
public EClass getEClass()
{
return li.getRevision().getEClass();
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/AbstractSyncRevisionsIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/AbstractSyncRevisionsIndication.java
index f289abb7ab..6f309747f2 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/AbstractSyncRevisionsIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/AbstractSyncRevisionsIndication.java
@@ -86,7 +86,7 @@ public abstract class AbstractSyncRevisionsIndication extends CDOReadIndication
try
{
InternalCDORevision revision = (InternalCDORevision)getRepository().getRevisionManager().getRevision(id,
- referenceChunk);
+ referenceChunk, CDORevision.DEPTH_NONE);
if (revision == null)
{
detachedObjects.add(new Pair<CDOID, Long>(id, getTimestamp(id, version)));
@@ -109,7 +109,8 @@ public abstract class AbstractSyncRevisionsIndication extends CDOReadIndication
protected long getTimestamp(CDOID id, int version)
{
- CDORevision revision = getRepository().getRevisionManager().getRevisionByVersion(id, 0, version, false);
+ CDORevision revision = getRepository().getRevisionManager().getRevisionByVersion(id, 0, CDORevision.DEPTH_NONE,
+ version, false);
if (revision != null)
{
return revision.getRevised() + 1;
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadChunkIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadChunkIndication.java
index ee7ee2f779..6c54574b5f 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadChunkIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadChunkIndication.java
@@ -17,6 +17,7 @@ import org.eclipse.emf.cdo.common.io.CDODataOutput;
import org.eclipse.emf.cdo.common.model.CDOModelUtil;
import org.eclipse.emf.cdo.common.model.CDOType;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.server.internal.net4j.bundle.OM;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
@@ -94,7 +95,8 @@ public class LoadChunkIndication extends CDOReadIndication
InternalRepository repository = getRepository();
InternalCDORevisionManager revisionManager = repository.getRevisionManager();
- InternalCDORevision revision = (InternalCDORevision)revisionManager.getRevisionByVersion(id, 0, version);
+ InternalCDORevision revision = (InternalCDORevision)revisionManager.getRevisionByVersion(id, 0,
+ CDORevision.DEPTH_NONE, version);
repository.ensureChunk(revision, feature, fromIndex, toIndex + 1);
CDOType type = CDOModelUtil.getType(feature);
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionByTimeIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionByTimeIndication.java
index 42c5622346..3430ef0201 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionByTimeIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionByTimeIndication.java
@@ -13,6 +13,7 @@ package org.eclipse.emf.cdo.server.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.server.internal.net4j.bundle.OM;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
@@ -48,7 +49,7 @@ public class LoadRevisionByTimeIndication extends LoadRevisionIndication
@Override
protected InternalCDORevision getRevision(CDOID cdoID)
{
- return (InternalCDORevision)getRepository().getRevisionManager()
- .getRevisionByTime(cdoID, referenceChunk, timeStamp);
+ return (InternalCDORevision)getRepository().getRevisionManager().getRevisionByTime(cdoID, referenceChunk,
+ CDORevision.DEPTH_NONE, timeStamp);
}
}
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionByVersionIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionByVersionIndication.java
index d86971c29e..c61181099c 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionByVersionIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionByVersionIndication.java
@@ -13,6 +13,7 @@ package org.eclipse.emf.cdo.server.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.server.internal.net4j.bundle.OM;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
@@ -49,6 +50,7 @@ public class LoadRevisionByVersionIndication extends LoadRevisionIndication
@Override
protected InternalCDORevision getRevision(CDOID id)
{
- return (InternalCDORevision)getRepository().getRevisionManager().getRevisionByVersion(id, referenceChunk, version);
+ return (InternalCDORevision)getRepository().getRevisionManager().getRevisionByVersion(id, referenceChunk,
+ CDORevision.DEPTH_NONE, version);
}
}
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionIndication.java
index 7adef50aee..2a3b77e894 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionIndication.java
@@ -15,6 +15,7 @@ import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.io.CDODataOutput;
+import org.eclipse.emf.cdo.common.model.CDOClassInfo;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.CDORevisionManager;
@@ -26,10 +27,12 @@ import org.eclipse.net4j.util.collection.MoveableList;
import org.eclipse.net4j.util.om.trace.ContextTracer;
import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -47,6 +50,8 @@ public class LoadRevisionIndication extends CDOReadIndication
protected int referenceChunk;
+ protected int prefetchDepth;
+
protected Map<EClass, CDOFetchRule> fetchRules = new HashMap<EClass, CDOFetchRule>();
protected CDOID contextID = CDOID.NULL;
@@ -73,9 +78,16 @@ public class LoadRevisionIndication extends CDOReadIndication
}
int size = in.readInt();
+ if (size < 0)
+ {
+ size = -size;
+ prefetchDepth = in.readInt();
+ }
+
if (TRACER.isEnabled())
{
TRACER.format("Reading {0} IDs", size); //$NON-NLS-1$
+ TRACER.format("Read prefetchDepth: {0}", prefetchDepth); //$NON-NLS-1$
}
ids = new CDOID[size];
@@ -153,6 +165,11 @@ public class LoadRevisionIndication extends CDOReadIndication
}
}
+ if (prefetchDepth != 0)
+ {
+ prefetchRevisions(prefetchDepth > 0 ? prefetchDepth : Integer.MAX_VALUE, revisions, additionalRevisions);
+ }
+
getRepository().notifyReadAccessHandlers(getSession(), revisions, additionalRevisions);
for (CDORevision revision : revisions)
{
@@ -175,7 +192,7 @@ public class LoadRevisionIndication extends CDOReadIndication
protected InternalCDORevision getRevision(CDOID id)
{
CDORevisionManager revisionManager = getRepository().getRevisionManager();
- return (InternalCDORevision)revisionManager.getRevision(id, referenceChunk);
+ return (InternalCDORevision)revisionManager.getRevision(id, referenceChunk, CDORevision.DEPTH_NONE);
}
private void collectRevisions(InternalCDORevision revision, Set<CDOID> revisions,
@@ -206,7 +223,7 @@ public class LoadRevisionIndication extends CDOReadIndication
if (!CDOIDUtil.isNull(id) && !revisions.contains(id))
{
InternalCDORevision containedRevision = (InternalCDORevision)revisionManager.getRevision(id,
- referenceChunk);
+ referenceChunk, CDORevision.DEPTH_NONE);
revisions.add(containedRevision.getID());
additionalRevisions.add(containedRevision);
collectRevisions(containedRevision, revisions, additionalRevisions, visitedFetchRules);
@@ -222,8 +239,8 @@ public class LoadRevisionIndication extends CDOReadIndication
CDOID id = (CDOID)value;
if (!id.isNull() && !revisions.contains(id))
{
- InternalCDORevision containedRevision = (InternalCDORevision)revisionManager
- .getRevision(id, referenceChunk);
+ InternalCDORevision containedRevision = (InternalCDORevision)revisionManager.getRevision(id,
+ referenceChunk, CDORevision.DEPTH_NONE);
revisions.add(containedRevision.getID());
additionalRevisions.add(containedRevision);
collectRevisions(containedRevision, revisions, additionalRevisions, visitedFetchRules);
@@ -234,4 +251,71 @@ public class LoadRevisionIndication extends CDOReadIndication
visitedFetchRules.remove(fetchRule);
}
+
+ private void prefetchRevisions(int depth, CDORevision[] revisions, List<CDORevision> additionalRevisions)
+ {
+ Map<CDOID, CDORevision> map = new HashMap<CDOID, CDORevision>();
+ for (CDORevision revision : revisions)
+ {
+ map.put(revision.getID(), revision);
+ }
+
+ for (CDORevision revision : additionalRevisions)
+ {
+ map.put(revision.getID(), revision);
+ }
+
+ for (CDORevision revision : revisions)
+ {
+ prefetchRevision(depth, (InternalCDORevision)revision, additionalRevisions, map);
+ }
+ }
+
+ private void prefetchRevision(int depth, InternalCDORevision revision, List<CDORevision> additionalRevisions,
+ Map<CDOID, CDORevision> map)
+ {
+ CDOClassInfo classInfo = revision.getClassInfo();
+ for (EStructuralFeature feature : classInfo.getAllPersistentFeatures())
+ {
+ if (feature instanceof EReference)
+ {
+ EReference reference = (EReference)feature;
+ if (reference.isContainment())
+ {
+ Object value = revision.getValue(reference);
+ if (value instanceof CDOID)
+ {
+ CDOID id = (CDOID)value;
+ prefetchRevisionChild(depth, id, additionalRevisions, map);
+ }
+ else if (value instanceof Collection<?>)
+ {
+ Collection<?> c = (Collection<?>)value;
+ for (Object e : c)
+ {
+ CDOID id = (CDOID)e;
+ prefetchRevisionChild(depth, id, additionalRevisions, map);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private void prefetchRevisionChild(int depth, CDOID id, List<CDORevision> additionalRevisions,
+ Map<CDOID, CDORevision> map)
+ {
+ CDORevision child = map.get(id);
+ if (child == null)
+ {
+ child = getRevision(id);
+ map.put(id, child);
+ additionalRevisions.add(child);
+ }
+
+ if (child != null && depth > 0)
+ {
+ prefetchRevision(depth - 1, (InternalCDORevision)child, additionalRevisions, map);
+ }
+ }
}
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/VerifyRevisionIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/VerifyRevisionIndication.java
index c07afab6d4..33e625daba 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/VerifyRevisionIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/VerifyRevisionIndication.java
@@ -14,6 +14,7 @@ import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.io.CDODataOutput;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.server.internal.net4j.bundle.OM;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
@@ -56,7 +57,8 @@ public class VerifyRevisionIndication extends CDOReadIndication
TRACER.format("Read ID and version: {0}v{1}", id, version); //$NON-NLS-1$
}
- InternalCDORevision revision = (InternalCDORevision)revisionManager.getRevisionByVersion(id, 0, version);
+ InternalCDORevision revision = (InternalCDORevision)revisionManager.getRevisionByVersion(id, 0,
+ CDORevision.DEPTH_NONE, version);
timeStamps[i] = revision.getRevised();
}
}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Audit.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Audit.java
index f84fda1e06..cd2f688d47 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Audit.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Audit.java
@@ -54,8 +54,8 @@ public class Audit extends View implements InternalAudit
checkOpen();
IRepository repository = getSession().getManager().getRepository();
setTimeStamp(repository, timeStamp);
- List<CDORevision> revisions = repository.getRevisionManager().getRevisionsByTime(invalidObjects, 0, timeStamp,
- false);
+ List<CDORevision> revisions = repository.getRevisionManager().getRevisionsByTime(invalidObjects, 0,
+ CDORevision.DEPTH_NONE, timeStamp, false);
boolean[] existanceFlags = new boolean[revisions.size()];
for (int i = 0; i < existanceFlags.length; i++)
{
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
index 3c234e0c0d..cc6964866d 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
@@ -196,13 +196,13 @@ public class Repository extends Container<Object> implements InternalRepository
return accessor.loadPackageUnit((InternalCDOPackageUnit)packageUnit);
}
- public InternalCDORevision loadRevision(CDOID id, int referenceChunk)
+ public InternalCDORevision loadRevision(CDOID id, int referenceChunk, int prefetchDepth)
{
IStoreAccessor accessor = StoreThreadLocal.getAccessor();
return accessor.readRevision(id, referenceChunk, revisionManager.getCache());
}
- public InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, long timeStamp)
+ public InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, int prefetchDepth, long timeStamp)
{
if (isSupportingAudits())
{
@@ -223,7 +223,7 @@ public class Repository extends Container<Object> implements InternalRepository
throw new IllegalStateException("No support for auditing mode"); //$NON-NLS-1$
}
- public InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int version)
+ public InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int prefetchDepth, int version)
{
IStoreAccessor accessor = StoreThreadLocal.getAccessor();
if (isSupportingAudits())
@@ -231,7 +231,7 @@ public class Repository extends Container<Object> implements InternalRepository
return accessor.readRevisionByVersion(id, referenceChunk, revisionManager.getCache(), version);
}
- InternalCDORevision revision = loadRevision(id, referenceChunk);
+ InternalCDORevision revision = loadRevision(id, referenceChunk, prefetchDepth);
if (revision.getVersion() == version)
{
return revision;
@@ -240,7 +240,7 @@ public class Repository extends Container<Object> implements InternalRepository
throw new IllegalStateException("Cannot access object with id " + id + " and version " + version); //$NON-NLS-1$ //$NON-NLS-2$
}
- public List<InternalCDORevision> loadRevisions(Collection<CDOID> ids, int referenceChunk)
+ public List<InternalCDORevision> loadRevisions(Collection<CDOID> ids, int referenceChunk, int prefetchDepth)
{
IStoreAccessor accessor = StoreThreadLocal.getAccessor();
List<InternalCDORevision> revisions = new ArrayList<InternalCDORevision>();
@@ -253,12 +253,13 @@ public class Repository extends Container<Object> implements InternalRepository
return revisions;
}
- public List<InternalCDORevision> loadRevisionsByTime(Collection<CDOID> ids, int referenceChunk, long timeStamp)
+ public List<InternalCDORevision> loadRevisionsByTime(Collection<CDOID> ids, int referenceChunk, int prefetchDepth,
+ long timeStamp)
{
List<InternalCDORevision> revisions = new ArrayList<InternalCDORevision>();
for (CDOID id : ids)
{
- InternalCDORevision revision = loadRevisionByTime(id, referenceChunk, timeStamp);
+ InternalCDORevision revision = loadRevisionByTime(id, referenceChunk, prefetchDepth, timeStamp);
revisions.add(revision);
}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java
index 0d195137c1..c71d85b7b3 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java
@@ -345,8 +345,8 @@ public class Session extends Container<IView> implements InternalSession
CDOID id = (CDOID)value;
if (!CDOIDUtil.isNull(id) && !revisions.contains(id))
{
- InternalCDORevision containedRevision = (InternalCDORevision)revisionManager
- .getRevision(id, referenceChunk);
+ InternalCDORevision containedRevision = (InternalCDORevision)revisionManager.getRevision(id,
+ referenceChunk, CDORevision.DEPTH_NONE);
revisions.add(id);
additionalRevisions.add(containedRevision);
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContextImpl.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContextImpl.java
index 12ebf5e09a..86825ca7df 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContextImpl.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContextImpl.java
@@ -465,7 +465,8 @@ public class TransactionCommitContextImpl implements InternalCommitContext
InternalRepository repository = transaction.getRepository();
InternalCDORevisionManager revisionManager = repository.getRevisionManager();
- CDORevision originObject = revisionManager.getRevisionByVersion(id, CDORevision.UNCHUNKED, version, loadOnDemand);
+ CDORevision originObject = revisionManager.getRevisionByVersion(id, CDORevision.UNCHUNKED, CDORevision.DEPTH_NONE,
+ version, loadOnDemand);
if (originObject != null)
{
if (loadOnDemand)
@@ -655,7 +656,7 @@ public class TransactionCommitContextImpl implements InternalCommitContext
for (CDOID id : detachedObjects)
{
InternalCDORevision revision = (InternalCDORevision)revisionManager.getRevision(id, CDORevision.UNCHUNKED,
- false);
+ CDORevision.DEPTH_NONE, false);
if (revision != null)
{
detachedRevisions.add(revision);
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/DelegatingCDORevisionManager.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/DelegatingCDORevisionManager.java
index c9a7a984a1..c95fbc82a4 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/DelegatingCDORevisionManager.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/DelegatingCDORevisionManager.java
@@ -92,45 +92,47 @@ public abstract class DelegatingCDORevisionManager extends Lifecycle implements
return getDelegate().getObjectType(id);
}
- public CDORevision getRevision(CDOID id, int referenceChunk, boolean loadOnDemand)
+ public CDORevision getRevision(CDOID id, int referenceChunk, int prefetchDepth, boolean loadOnDemand)
{
- return getDelegate().getRevision(id, referenceChunk, loadOnDemand);
+ return getDelegate().getRevision(id, referenceChunk, prefetchDepth, loadOnDemand);
}
- public CDORevision getRevision(CDOID id, int referenceChunk)
+ public CDORevision getRevision(CDOID id, int referenceChunk, int prefetchDepth)
{
- return getDelegate().getRevision(id, referenceChunk);
+ return getDelegate().getRevision(id, referenceChunk, prefetchDepth);
}
- public CDORevision getRevisionByTime(CDOID id, int referenceChunk, long timeStamp, boolean loadOnDemand)
+ public CDORevision getRevisionByTime(CDOID id, int referenceChunk, int prefetchDepth, long timeStamp,
+ boolean loadOnDemand)
{
- return getDelegate().getRevisionByTime(id, referenceChunk, timeStamp, loadOnDemand);
+ return getDelegate().getRevisionByTime(id, referenceChunk, prefetchDepth, timeStamp, loadOnDemand);
}
- public CDORevision getRevisionByTime(CDOID id, int referenceChunk, long timeStamp)
+ public CDORevision getRevisionByTime(CDOID id, int referenceChunk, int prefetchDepth, long timeStamp)
{
- return getDelegate().getRevisionByTime(id, referenceChunk, timeStamp);
+ return getDelegate().getRevisionByTime(id, referenceChunk, prefetchDepth, timeStamp);
}
- public CDORevision getRevisionByVersion(CDOID id, int referenceChunk, int version, boolean loadOnDemand)
+ public CDORevision getRevisionByVersion(CDOID id, int referenceChunk, int prefetchDepth, int version,
+ boolean loadOnDemand)
{
- return getDelegate().getRevisionByVersion(id, referenceChunk, version, loadOnDemand);
+ return getDelegate().getRevisionByVersion(id, referenceChunk, prefetchDepth, version, loadOnDemand);
}
- public CDORevision getRevisionByVersion(CDOID id, int referenceChunk, int version)
+ public CDORevision getRevisionByVersion(CDOID id, int referenceChunk, int prefetchDepth, int version)
{
- return getDelegate().getRevisionByVersion(id, referenceChunk, version);
+ return getDelegate().getRevisionByVersion(id, referenceChunk, prefetchDepth, version);
}
- public List<CDORevision> getRevisions(Collection<CDOID> ids, int referenceChunk)
+ public List<CDORevision> getRevisions(Collection<CDOID> ids, int referenceChunk, int prefetchDepth)
{
- return getDelegate().getRevisions(ids, referenceChunk);
+ return getDelegate().getRevisions(ids, referenceChunk, prefetchDepth);
}
- public List<CDORevision> getRevisionsByTime(Collection<CDOID> ids, int referenceChunk, long timeStamp,
- boolean loadMissingRevisions)
+ public List<CDORevision> getRevisionsByTime(Collection<CDOID> ids, int referenceChunk, int prefetchDepth,
+ long timeStamp, boolean loadOnDemand)
{
- return getDelegate().getRevisionsByTime(ids, referenceChunk, timeStamp, loadMissingRevisions);
+ return getDelegate().getRevisionsByTime(ids, referenceChunk, prefetchDepth, timeStamp, loadOnDemand);
}
public void revisedRevision(CDOID id, long timeStamp)
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java
index 824a170a7b..652af9fee8 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java
@@ -125,13 +125,13 @@ public class EmbeddedClientSessionProtocol extends Lifecycle implements CDOSessi
throw new UnsupportedOperationException();
}
- public InternalCDORevision loadRevision(CDOID id, int referenceChunk)
+ public InternalCDORevision loadRevision(CDOID id, int referenceChunk, int prefetchDepth)
{
try
{
InternalSession session = serverSessionProtocol.getSession();
StoreThreadLocal.setSession(session);
- return (InternalCDORevision)repository.getRevisionManager().getRevision(id, referenceChunk);
+ return (InternalCDORevision)repository.getRevisionManager().getRevision(id, referenceChunk, prefetchDepth);
}
finally
{
@@ -139,13 +139,14 @@ public class EmbeddedClientSessionProtocol extends Lifecycle implements CDOSessi
}
}
- public InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, long timeStamp)
+ public InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, int prefetchDepth, long timeStamp)
{
try
{
InternalSession session = serverSessionProtocol.getSession();
StoreThreadLocal.setSession(session);
- return (InternalCDORevision)repository.getRevisionManager().getRevisionByTime(id, referenceChunk, timeStamp);
+ return (InternalCDORevision)repository.getRevisionManager().getRevisionByTime(id, referenceChunk, prefetchDepth,
+ timeStamp);
}
finally
{
@@ -153,13 +154,14 @@ public class EmbeddedClientSessionProtocol extends Lifecycle implements CDOSessi
}
}
- public InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int version)
+ public InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int prefetchDepth, int version)
{
try
{
InternalSession session = serverSessionProtocol.getSession();
StoreThreadLocal.setSession(session);
- return (InternalCDORevision)repository.getRevisionManager().getRevisionByVersion(id, referenceChunk, version);
+ return (InternalCDORevision)repository.getRevisionManager().getRevisionByVersion(id, referenceChunk,
+ prefetchDepth, version);
}
finally
{
@@ -167,7 +169,7 @@ public class EmbeddedClientSessionProtocol extends Lifecycle implements CDOSessi
}
}
- public List<InternalCDORevision> loadRevisions(Collection<CDOID> ids, int referenceChunk)
+ public List<InternalCDORevision> loadRevisions(Collection<CDOID> ids, int referenceChunk, int prefetchDepth)
{
try
{
@@ -175,7 +177,7 @@ public class EmbeddedClientSessionProtocol extends Lifecycle implements CDOSessi
StoreThreadLocal.setSession(session);
@SuppressWarnings("unchecked")
List<InternalCDORevision> revisions = (List<InternalCDORevision>)(List<?>)repository.getRevisionManager()
- .getRevisions(ids, referenceChunk);
+ .getRevisions(ids, referenceChunk, prefetchDepth);
return revisions;
}
finally
@@ -184,7 +186,8 @@ public class EmbeddedClientSessionProtocol extends Lifecycle implements CDOSessi
}
}
- public List<InternalCDORevision> loadRevisionsByTime(Collection<CDOID> ids, int referenceChunk, long timeStamp)
+ public List<InternalCDORevision> loadRevisionsByTime(Collection<CDOID> ids, int referenceChunk, int prefetchDepth,
+ long timeStamp)
{
try
{
@@ -192,7 +195,7 @@ public class EmbeddedClientSessionProtocol extends Lifecycle implements CDOSessi
StoreThreadLocal.setSession(session);
@SuppressWarnings("unchecked")
List<InternalCDORevision> revisions = (List<InternalCDORevision>)(List<?>)repository.getRevisionManager()
- .getRevisionsByTime(ids, referenceChunk, timeStamp, true);
+ .getRevisionsByTime(ids, referenceChunk, prefetchDepth, timeStamp, true);
return revisions;
}
finally
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ResourceTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ResourceTest.java
index 4bb1f52b07..e72604c025 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ResourceTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ResourceTest.java
@@ -14,10 +14,13 @@ package org.eclipse.emf.cdo.tests;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.CDOState;
import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.eresource.CDOResourceFolder;
import org.eclipse.emf.cdo.eresource.CDOResourceNode;
import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.model1.Category;
+import org.eclipse.emf.cdo.tests.model1.Company;
import org.eclipse.emf.cdo.tests.model1.Order;
import org.eclipse.emf.cdo.tests.model1.Product1;
import org.eclipse.emf.cdo.tests.model1.VAT;
@@ -528,6 +531,60 @@ public class ResourceTest extends AbstractCDOTest
}
}
+ public void testPrefetchContents() throws Exception
+ {
+ {
+ Company company = getModel1Factory().createCompany();
+ company.getCategories().add(createCategoryTree(5));
+
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+
+ CDOResource resource = transaction.createResource("/res1");
+ resource.getContents().add(company);
+
+ transaction.commit();
+ session.close();
+ }
+
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+
+ CDOResource resource = transaction.getResource("/res1");
+ resource.cdoPrefetch(CDORevision.DEPTH_INFINITE);
+
+ Company company = (Company)resource.getContents().get(0);
+ System.out.println(company);
+
+ session.close();
+ }
+
+ private Category createCategoryTree(int depth)
+ {
+ if (depth == 0)
+ {
+ return null;
+ }
+
+ Category category = getModel1Factory().createCategory();
+ for (int i = 0; i < 2; i++)
+ {
+ Category child = createCategoryTree(depth - 1);
+ if (child != null)
+ {
+ category.getCategories().add(child);
+ }
+ }
+
+ for (int i = 0; i < 3; i++)
+ {
+ Product1 child = getModel1Factory().createProduct1();
+ category.getProducts().add(child);
+ }
+
+ return category;
+ }
+
/**
* http://bugs.eclipse.org/208689
*/
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java
index c9c0f731e6..76f6724e51 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java
@@ -15,6 +15,7 @@ import org.eclipse.emf.cdo.common.id.CDOIDProvider;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.io.CDODataOutput;
+import org.eclipse.emf.cdo.common.model.CDOClassInfo;
import org.eclipse.emf.cdo.common.revision.CDOList;
import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjuster;
import org.eclipse.emf.cdo.common.revision.CDORevision;
@@ -280,6 +281,11 @@ public class RevisionHolderTest extends AbstractCDOTest
this(id, 0, CDORevision.UNSPECIFIED_DATE);
}
+ public CDOClassInfo getClassInfo()
+ {
+ throw new UnsupportedOperationException();
+ }
+
public EClass getEClass()
{
throw new UnsupportedOperationException();
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOObject.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOObject.java
index bccc3f1d7d..c186d8a045 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOObject.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOObject.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Eike Stepper - initial API and implementation
*/
@@ -124,6 +124,11 @@ public interface CDOObject extends EObject
public CDOLock cdoWriteLock();
/**
+ * @since 3.0
+ */
+ public void cdoPrefetch(int depth);
+
+ /**
* TODO: JavaDoc
*/
public void cdoReload();
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 9c5d2b8057..f72f2188e4 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
@@ -280,7 +280,7 @@ public final class CDOUtil
throw new IllegalStateException(Messages.getString("CDOUtil.0")); //$NON-NLS-1$
}
- return session.getRevisionManager().getRevisionByVersion(object.cdoID(), 0, version);
+ return session.getRevisionManager().getRevisionByVersion(object.cdoID(), 0, CDORevision.DEPTH_NONE, version);
}
return revision;
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 14dc08dfe5..7c28dcee4a 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
@@ -147,6 +147,14 @@ public class CDOObjectImpl extends EStoreEObjectImpl implements InternalCDOObjec
return null;
}
+ /**
+ * @since 3.0
+ */
+ public void cdoPrefetch(int depth)
+ {
+ view.prefetchRevisions(id, depth);
+ }
+
public void cdoReload()
{
CDOStateMachine.INSTANCE.reload(this);
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectWrapper.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectWrapper.java
index 8da5d75519..1fc4d9ab90 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectWrapper.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectWrapper.java
@@ -135,6 +135,14 @@ public abstract class CDOObjectWrapper implements InternalCDOObject
return FSMUtil.isInvalid(this);
}
+ /**
+ * @since 3.0
+ */
+ public void cdoPrefetch(int depth)
+ {
+ view.prefetchRevisions(id, depth);
+ }
+
public EStructuralFeature cdoInternalDynamicFeature(int dynamicFeatureID)
{
// TODO Implement method CDOWrapperImpl.cdoInternalDynamicFeature()
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
index 7d93c435b4..9bec62a58d 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
@@ -18,6 +18,7 @@ import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.model.CDOModelUtil;
import org.eclipse.emf.cdo.common.model.CDOType;
import org.eclipse.emf.cdo.common.revision.CDOList;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
import org.eclipse.emf.cdo.eresource.CDOResource;
@@ -371,7 +372,7 @@ public final class CDOStore implements EStore
if (!listOfIDs.isEmpty())
{
revisionManager.getRevisions(listOfIDs, view.getSession().options().getCollectionLoadingPolicy()
- .getInitialChunkSize());
+ .getInitialChunkSize(), CDORevision.DEPTH_NONE);
}
}
}
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 5164f551d8..c1c47fd1e8 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
@@ -1249,14 +1249,14 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
}
}
- public InternalCDORevision loadRevision(CDOID id, int referenceChunk)
+ public InternalCDORevision loadRevision(CDOID id, int referenceChunk, int prefetchDepth)
{
int attempt = 0;
for (;;)
{
try
{
- return delegate.loadRevision(id, referenceChunk);
+ return delegate.loadRevision(id, referenceChunk, prefetchDepth);
}
catch (Exception ex)
{
@@ -1265,14 +1265,14 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
}
}
- public InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, long timeStamp)
+ public InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, int prefetchDepth, long timeStamp)
{
int attempt = 0;
for (;;)
{
try
{
- return delegate.loadRevisionByTime(id, referenceChunk, timeStamp);
+ return delegate.loadRevisionByTime(id, referenceChunk, prefetchDepth, timeStamp);
}
catch (Exception ex)
{
@@ -1281,14 +1281,14 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
}
}
- public InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int version)
+ public InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int prefetchDepth, int version)
{
int attempt = 0;
for (;;)
{
try
{
- return delegate.loadRevisionByVersion(id, referenceChunk, version);
+ return delegate.loadRevisionByVersion(id, referenceChunk, prefetchDepth, version);
}
catch (Exception ex)
{
@@ -1297,14 +1297,14 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
}
}
- public List<InternalCDORevision> loadRevisions(Collection<CDOID> ids, int referenceChunk)
+ public List<InternalCDORevision> loadRevisions(Collection<CDOID> ids, int referenceChunk, int prefetchDepth)
{
int attempt = 0;
for (;;)
{
try
{
- return delegate.loadRevisions(ids, referenceChunk);
+ return delegate.loadRevisions(ids, referenceChunk, prefetchDepth);
}
catch (Exception ex)
{
@@ -1313,14 +1313,15 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
}
}
- public List<InternalCDORevision> loadRevisionsByTime(Collection<CDOID> ids, int referenceChunk, long timeStamp)
+ public List<InternalCDORevision> loadRevisionsByTime(Collection<CDOID> ids, int referenceChunk, int prefetchDepth,
+ long timeStamp)
{
int attempt = 0;
for (;;)
{
try
{
- return delegate.loadRevisionsByTime(ids, referenceChunk, timeStamp);
+ return delegate.loadRevisionsByTime(ids, referenceChunk, prefetchDepth, timeStamp);
}
catch (Exception ex)
{
@@ -1329,22 +1330,6 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
}
}
- // public List<InternalCDORevision> verifyRevisions(List<InternalCDORevision> revisions)
- // {
- // int attempt = 0;
- // for (;;)
- // {
- // try
- // {
- // return delegate.verifyRevisions(revisions);
- // }
- // catch (Exception ex)
- // {
- // handleException(++attempt, ex);
- // }
- // }
- // }
-
public InternalCDORevision verifyRevision(InternalCDORevision revision, int referenceChunk)
{
int attempt = 0;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOAuditImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOAuditImpl.java
index 0047db6172..2b15976949 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOAuditImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOAuditImpl.java
@@ -98,7 +98,14 @@ public class CDOAuditImpl extends CDOViewImpl implements CDOAudit
int initialChunkSize = session.options().getCollectionLoadingPolicy().getInitialChunkSize();
CDORevisionManager revisionManager = session.getRevisionManager();
- return (InternalCDORevision)revisionManager.getRevisionByTime(id, initialChunkSize, timeStamp, loadOnDemand);
+ return (InternalCDORevision)revisionManager.getRevisionByTime(id, initialChunkSize, CDORevision.DEPTH_NONE,
+ timeStamp, loadOnDemand);
+ }
+
+ @Override
+ protected void prefetchRevisions(CDOID id, int depth, int initialChunkSize)
+ {
+ getSession().getRevisionManager().getRevisionByTime(id, initialChunkSize, depth, timeStamp);
}
@Override
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 b59477f972..8ab0657e37 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
@@ -682,7 +682,19 @@ public class CDOViewImpl extends Lifecycle implements InternalCDOView
{
CDORevisionManager revisionManager = session.getRevisionManager();
int initialChunkSize = session.options().getCollectionLoadingPolicy().getInitialChunkSize();
- return (InternalCDORevision)revisionManager.getRevision(id, initialChunkSize, loadOnDemand);
+ return (InternalCDORevision)revisionManager.getRevision(id, initialChunkSize, CDORevision.DEPTH_NONE, loadOnDemand);
+ }
+
+ public void prefetchRevisions(CDOID id, int depth)
+ {
+ checkArg(depth != CDORevision.DEPTH_NONE, "Prefetch depth must not be zero");
+ int initialChunkSize = session.options().getCollectionLoadingPolicy().getInitialChunkSize();
+ prefetchRevisions(id, depth, initialChunkSize);
+ }
+
+ protected void prefetchRevisions(CDOID id, int depth, int initialChunkSize)
+ {
+ session.getRevisionManager().getRevision(id, initialChunkSize, depth);
}
public InternalCDOObject getObject(CDOID id)
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java
index 23810ae61e..6036df78ab 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java
@@ -88,6 +88,11 @@ public interface InternalCDOView extends CDOView, CDOIDProvider, ILifecycle
public InternalCDORevision getRevision(CDOID id, boolean loadOnDemand);
+ /**
+ * @since 3.0
+ */
+ public void prefetchRevisions(CDOID id, int depth);
+
public Object convertObjectToID(Object potentialObject);
public Object convertObjectToID(Object potentialObject, boolean onlyPersistedID);

Back to the top