diff options
author | Eike Stepper | 2011-02-09 13:22:57 +0000 |
---|---|---|
committer | Eike Stepper | 2011-02-09 13:22:57 +0000 |
commit | e267ed281336345d485115cd95703d5766abf6b6 (patch) | |
tree | df9da2f7ddf057b79ce496cb1415a3d9dade5589 | |
parent | ddb1ccbde3a81286bdde7b320590b6b5b491df7c (diff) | |
download | cdo-e267ed281336345d485115cd95703d5766abf6b6.tar.gz cdo-e267ed281336345d485115cd95703d5766abf6b6.tar.xz cdo-e267ed281336345d485115cd95703d5766abf6b6.zip |
[336642] Rework the repository/store contract for "cached persistent values"
https://bugs.eclipse.org/bugs/show_bug.cgi?id=336642
16 files changed, 410 insertions, 119 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java index e37d7608e3..7ca206c31e 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java @@ -66,10 +66,9 @@ public class CDOBranchManagerImpl extends Lifecycle implements InternalCDOBranch this.timeProvider = timeProvider; } - public void initMainBranch(boolean local, long repositoryCreationTime) + public void initMainBranch(boolean local, long timeStamp) { - checkInactive(); - mainBranch = new CDOBranchImpl.Main(this, local, repositoryCreationTime); + mainBranch = new CDOBranchImpl.Main(this, local, timeStamp); } public void handleBranchCreated(InternalCDOBranch branch) @@ -214,9 +213,8 @@ public class CDOBranchManagerImpl extends Lifecycle implements InternalCDOBranch protected void doBeforeActivate() throws Exception { super.doBeforeActivate(); - checkNull(branchLoader, "branchLoader"); //$NON-NLS-1$ - checkNull(timeProvider, "timeProvider"); //$NON-NLS-1$ - checkNull(mainBranch, "mainBranch"); //$NON-NLS-1$ + checkState(branchLoader, "branchLoader"); //$NON-NLS-1$ + checkState(timeProvider, "timeProvider"); //$NON-NLS-1$ } /** diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java index e6d3878134..f7a2b4b8a8 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java @@ -15,6 +15,7 @@ package org.eclipse.emf.cdo.server.internal.db; import org.eclipse.emf.cdo.common.branch.CDOBranch; +import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.id.CDOIDUtil; import org.eclipse.emf.cdo.common.revision.CDOAllRevisionsProvider; @@ -412,7 +413,7 @@ public class DBStore extends Store implements IDBStore, CDOAllRevisionsProvider try { - accessor.handleRevisions(null, null, DBStore.UNSPECIFIED_DATE, true, new CDORevisionHandler() + accessor.handleRevisions(null, null, CDOBranchPoint.UNSPECIFIED_DATE, true, new CDORevisionHandler() { public boolean handleRevision(CDORevision revision) { diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java index ed0ee93d3e..a1f517afdb 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java @@ -991,7 +991,7 @@ public class DBStoreAccessor extends StoreAccessor implements IDBStoreAccessor where = true; } - if (startTime != DBStore.UNSPECIFIED_DATE) + if (startTime != CDOBranchPoint.UNSPECIFIED_DATE) { builder.append(where ? " AND " : " WHERE "); //$NON-NLS-1$ //$NON-NLS-2$ builder.append(CDODBSchema.COMMIT_INFOS_TIMESTAMP); @@ -1000,7 +1000,7 @@ public class DBStoreAccessor extends StoreAccessor implements IDBStoreAccessor where = true; } - if (endTime != DBStore.UNSPECIFIED_DATE) + if (endTime != CDOBranchPoint.UNSPECIFIED_DATE) { builder.append(where ? " AND " : " WHERE "); //$NON-NLS-1$ //$NON-NLS-2$ builder.append(CDODBSchema.COMMIT_INFOS_TIMESTAMP); diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MetaDataManager.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MetaDataManager.java index 24dc6a87f4..681bcc6196 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MetaDataManager.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MetaDataManager.java @@ -13,6 +13,7 @@ */ package org.eclipse.emf.cdo.server.internal.db; +import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.model.CDOModelUtil; import org.eclipse.emf.cdo.common.model.CDOPackageUnit; @@ -122,7 +123,7 @@ public class MetaDataManager extends Lifecycle implements IMetaDataManager public Collection<InternalCDOPackageUnit> readPackageUnits(Connection connection) { - return readPackageUnits(connection, DBStore.UNSPECIFIED_DATE, DBStore.UNSPECIFIED_DATE, new Monitor()); + return readPackageUnits(connection, CDOBranchPoint.UNSPECIFIED_DATE, CDOBranchPoint.UNSPECIFIED_DATE, new Monitor()); } public final void writePackageUnits(Connection connection, InternalCDOPackageUnit[] packageUnits, OMMonitor monitor) @@ -356,7 +357,7 @@ public class MetaDataManager extends Lifecycle implements IMetaDataManager }; String where = null; - if (fromCommitTime != DBStore.UNSPECIFIED_DATE) + if (fromCommitTime != CDOBranchPoint.UNSPECIFIED_DATE) { where = CDODBSchema.PACKAGE_UNITS_ID + "<>'" + CDOModelUtil.CORE_PACKAGE_URI + "' AND " + CDODBSchema.PACKAGE_UNITS_ID + "<>'" + CDOModelUtil.RESOURCE_PACKAGE_URI + "' AND " diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/TypeMappingRegistry.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/TypeMappingRegistry.java index 9867e300f2..7f2fa7b871 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/TypeMappingRegistry.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/TypeMappingRegistry.java @@ -94,16 +94,21 @@ public class TypeMappingRegistry implements ITypeMapping.Registry, ITypeMapping. public TypeMappingRegistry() { + init(); + + // connect to extension registry + populator = new RegistryPopulator(); + populator.connect(); + } + + public void init() + { defaultFeatureMapDBTypes = new HashSet<DBType>(); typeMappingsById = new HashMap<String, ITypeMapping.Descriptor>(); typeMappingByTypes = new HashMap<Pair<EClassifier, DBType>, ITypeMapping.Descriptor>(); classifierDefaultMapping = new HashMap<EClassifier, DBType>(); registerCoreTypeMappings(); - - // connect to extension registry - populator = new RegistryPopulator(); - populator.connect(); } /** @@ -179,7 +184,7 @@ public class TypeMappingRegistry implements ITypeMapping.Registry, ITypeMapping. classifierDefaultMapping.put(EtypesPackage.eINSTANCE.getClob(), DBType.VARCHAR); // TODO Should be DBType.CLOB? } - protected IPluginContainer getContainer() + protected IManagedContainer getContainer() { return IPluginContainer.INSTANCE; } @@ -264,7 +269,7 @@ public class TypeMappingRegistry implements ITypeMapping.Registry, ITypeMapping. type.getEPackage().getName() + "." + type.getName(), dbType.getKeyword())); } - IFactory factory = getManagedContainer().getFactory(ITypeMapping.Factory.PRODUCT_GROUP, + IFactory factory = getContainer().getFactory(ITypeMapping.Factory.PRODUCT_GROUP, descriptor.getFactoryType()); typeMapping = (ITypeMapping)factory.create(null); typeMapping.setDBType(dbType); @@ -275,11 +280,6 @@ public class TypeMappingRegistry implements ITypeMapping.Registry, ITypeMapping. return typeMapping; } - private IManagedContainer getManagedContainer() - { - return getContainer(); - } - private EClassifier getEType(EStructuralFeature feature) { EClassifier classifier = feature.getEType(); @@ -382,7 +382,7 @@ public class TypeMappingRegistry implements ITypeMapping.Registry, ITypeMapping. */ public void connect() { - container = getManagedContainer(); + container = getContainer(); populateTypeMappingRegistry(); container.getFactoryRegistry().addListener(this); } diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java index e41841ee16..bb500d3e4a 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java @@ -36,7 +36,6 @@ import org.eclipse.emf.cdo.server.db.mapping.IListMapping; import org.eclipse.emf.cdo.server.db.mapping.IMappingStrategy; import org.eclipse.emf.cdo.server.db.mapping.ITypeMapping; import org.eclipse.emf.cdo.server.internal.db.CDODBSchema; -import org.eclipse.emf.cdo.server.internal.db.DBStore; import org.eclipse.emf.cdo.server.internal.db.bundle.OM; import org.eclipse.emf.cdo.spi.common.commit.CDOChangeSetSegment; import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList; @@ -573,7 +572,7 @@ public abstract class AbstractHorizontalClassMapping implements IClassMapping { if (exactTime) { - if (timeStamp != DBStore.UNSPECIFIED_DATE) + if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE) { builder.append(" WHERE "); //$NON-NLS-1$ builder.append(CDODBSchema.ATTRIBUTES_CREATED); @@ -584,7 +583,7 @@ public abstract class AbstractHorizontalClassMapping implements IClassMapping else { builder.append(" WHERE "); //$NON-NLS-1$ - if (timeStamp != DBStore.UNSPECIFIED_DATE) + if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE) { builder.append(CDODBSchema.ATTRIBUTES_CREATED); builder.append(">=?"); //$NON-NLS-1$ @@ -593,7 +592,7 @@ public abstract class AbstractHorizontalClassMapping implements IClassMapping builder.append("<=? OR "); //$NON-NLS-1$ builder.append(CDODBSchema.ATTRIBUTES_REVISED); builder.append("="); //$NON-NLS-1$ - builder.append(DBStore.UNSPECIFIED_DATE); + builder.append(CDOBranchPoint.UNSPECIFIED_DATE); builder.append(")"); //$NON-NLS-1$ timeParameters = 2; } @@ -601,7 +600,7 @@ public abstract class AbstractHorizontalClassMapping implements IClassMapping { builder.append(CDODBSchema.ATTRIBUTES_REVISED); builder.append("="); //$NON-NLS-1$ - builder.append(DBStore.UNSPECIFIED_DATE); + builder.append(CDOBranchPoint.UNSPECIFIED_DATE); } } } @@ -666,7 +665,7 @@ public abstract class AbstractHorizontalClassMapping implements IClassMapping builder.append("<=? OR "); //$NON-NLS-1$ builder.append(CDODBSchema.ATTRIBUTES_REVISED); builder.append("="); //$NON-NLS-1$ - builder.append(DBStore.UNSPECIFIED_DATE); + builder.append(CDOBranchPoint.UNSPECIFIED_DATE); builder.append(")"); //$NON-NLS-1$ } diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalAuditClassMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalAuditClassMapping.java index 59f1b25c41..65ef674135 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalAuditClassMapping.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalAuditClassMapping.java @@ -41,7 +41,6 @@ import org.eclipse.emf.cdo.server.db.mapping.IClassMappingDeltaSupport; import org.eclipse.emf.cdo.server.db.mapping.IListMappingDeltaSupport; import org.eclipse.emf.cdo.server.db.mapping.ITypeMapping; import org.eclipse.emf.cdo.server.internal.db.CDODBSchema; -import org.eclipse.emf.cdo.server.internal.db.DBStore; import org.eclipse.emf.cdo.server.internal.db.bundle.OM; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta; @@ -275,7 +274,7 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping try { long timeStamp = revision.getTimeStamp(); - if (timeStamp != DBStore.UNSPECIFIED_DATE) + if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE) { stmt = statementCache.getPreparedStatement(sqlSelectAttributesByTime, ReuseProbability.MEDIUM); idHandler.setCDOID(stmt, 1, revision.getID()); @@ -523,7 +522,7 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping idHandler.setCDOID(stmt, column++, id); stmt.setInt(column++, -version); // cdo_version stmt.setLong(column++, timeStamp); // cdo_created - stmt.setLong(column++, DBStore.UNSPECIFIED_DATE); // cdo_revised + stmt.setLong(column++, CDOBranchPoint.UNSPECIFIED_DATE); // cdo_revised idHandler.setCDOID(stmt, column++, CDOID.NULL); // resource idHandler.setCDOID(stmt, column++, CDOID.NULL); // container stmt.setInt(column++, 0); // containing feature ID diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java index 3c8f4b339d..33943c49b7 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java @@ -47,7 +47,6 @@ import org.eclipse.emf.cdo.server.db.mapping.IListMapping; import org.eclipse.emf.cdo.server.db.mapping.IListMappingDeltaSupport; import org.eclipse.emf.cdo.server.db.mapping.ITypeMapping; import org.eclipse.emf.cdo.server.internal.db.CDODBSchema; -import org.eclipse.emf.cdo.server.internal.db.DBStore; import org.eclipse.emf.cdo.server.internal.db.bundle.OM; import org.eclipse.emf.cdo.spi.common.commit.CDOChangeSetSegment; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; @@ -419,7 +418,7 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp try { - if (timeStamp != DBStore.UNSPECIFIED_DATE) + if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE) { stmt = statementCache.getPreparedStatement(sqlSelectAttributesByTime, ReuseProbability.MEDIUM); idHandler.setCDOID(stmt, 1, revision.getID()); @@ -675,7 +674,7 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp stmt.setInt(column++, -version); // cdo_version stmt.setInt(column++, branch.getID()); stmt.setLong(column++, timeStamp); // cdo_created - stmt.setLong(column++, DBStore.UNSPECIFIED_DATE); // cdo_revised + stmt.setLong(column++, CDOBranchPoint.UNSPECIFIED_DATE); // cdo_revised idHandler.setCDOID(stmt, column++, CDOID.NULL); // resource idHandler.setCDOID(stmt, column++, CDOID.NULL); // container stmt.setInt(column++, 0); // containing feature ID @@ -858,7 +857,7 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp { if (exactTime) { - if (timeStamp != DBStore.UNSPECIFIED_DATE) + if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE) { builder.append(whereAppend ? " AND " : " WHERE "); //$NON-NLS-1$ //$NON-NLS-2$ builder.append(CDODBSchema.ATTRIBUTES_CREATED); @@ -869,7 +868,7 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp else { builder.append(whereAppend ? " AND " : " WHERE "); //$NON-NLS-1$ //$NON-NLS-2$ - if (timeStamp != DBStore.UNSPECIFIED_DATE) + if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE) { builder.append(CDODBSchema.ATTRIBUTES_CREATED); builder.append(">=?"); //$NON-NLS-1$ @@ -878,7 +877,7 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp builder.append("<=? OR "); //$NON-NLS-1$ builder.append(CDODBSchema.ATTRIBUTES_REVISED); builder.append("="); //$NON-NLS-1$ - builder.append(DBStore.UNSPECIFIED_DATE); + builder.append(CDOBranchPoint.UNSPECIFIED_DATE); builder.append(")"); //$NON-NLS-1$ timeParameters = 2; } @@ -886,7 +885,7 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp { builder.append(CDODBSchema.ATTRIBUTES_REVISED); builder.append("="); //$NON-NLS-1$ - builder.append(DBStore.UNSPECIFIED_DATE); + builder.append(CDOBranchPoint.UNSPECIFIED_DATE); } } } @@ -973,7 +972,7 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp builder.append("<=? OR "); //$NON-NLS-1$ builder.append(CDODBSchema.ATTRIBUTES_REVISED); builder.append("="); //$NON-NLS-1$ - builder.append(DBStore.UNSPECIFIED_DATE); + builder.append(CDOBranchPoint.UNSPECIFIED_DATE); builder.append(")"); //$NON-NLS-1$ } diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalNonAuditClassMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalNonAuditClassMapping.java index 0a2399258d..c9166e7b09 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalNonAuditClassMapping.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalNonAuditClassMapping.java @@ -39,7 +39,6 @@ import org.eclipse.emf.cdo.server.db.mapping.IClassMappingDeltaSupport; import org.eclipse.emf.cdo.server.db.mapping.IListMappingDeltaSupport; import org.eclipse.emf.cdo.server.db.mapping.ITypeMapping; import org.eclipse.emf.cdo.server.internal.db.CDODBSchema; -import org.eclipse.emf.cdo.server.internal.db.DBStore; import org.eclipse.emf.cdo.server.internal.db.bundle.OM; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta; @@ -398,7 +397,7 @@ public class HorizontalNonAuditClassMapping extends AbstractHorizontalClassMappi public boolean readRevision(IDBStoreAccessor accessor, InternalCDORevision revision, int listChunk) { long timeStamp = revision.getTimeStamp(); - if (timeStamp != DBStore.UNSPECIFIED_DATE) + if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE) { throw new UnsupportedOperationException("Mapping strategy does not support audits"); //$NON-NLS-1$ } 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 58f58963d0..af249a8d48 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 @@ -1428,7 +1428,7 @@ public class Repository extends Container<Object> implements InternalRepository } } - protected void loadRootResource() + protected void readRootResource() { IStoreAccessor reader = store.getReader(null); StoreThreadLocal.setAccessor(reader); @@ -1469,6 +1469,7 @@ public class Repository extends Container<Object> implements InternalRepository protected void doBeforeActivate() throws Exception { super.doBeforeActivate(); + checkState(store, "store"); //$NON-NLS-1$ checkState(!StringUtil.isEmpty(name), "name is empty"); //$NON-NLS-1$ checkState(packageRegistry, "packageRegistry"); //$NON-NLS-1$ checkState(sessionManager, "sessionManager"); //$NON-NLS-1$ @@ -1482,16 +1483,21 @@ public class Repository extends Container<Object> implements InternalRepository packageRegistry.setReplacingDescriptors(true); packageRegistry.setPackageProcessor(this); packageRegistry.setPackageLoader(this); + branchManager.setBranchLoader(this); branchManager.setTimeProvider(this); + revisionManager.setRevisionLoader(this); + sessionManager.setRepository(this); + queryManager.setRepository(this); + commitInfoManager.setCommitInfoLoader(this); + commitManager.setRepository(this); - lockManager.setRepository(this); - checkState(store, "store"); //$NON-NLS-1$ + lockManager.setRepository(this); { String value = getProperties().get(Props.SUPPORTING_AUDITS); @@ -1544,10 +1550,12 @@ public class Repository extends Container<Object> implements InternalRepository protected void doActivate() throws Exception { super.doActivate(); - LifecycleUtil.activate(packageRegistry); + LifecycleUtil.activate(store); + LifecycleUtil.activate(packageRegistry); LifecycleUtil.activate(sessionManager); LifecycleUtil.activate(revisionManager); + LifecycleUtil.activate(branchManager); LifecycleUtil.activate(queryManager); LifecycleUtil.activate(commitInfoManager); LifecycleUtil.activate(commitManager); @@ -1556,9 +1564,9 @@ public class Repository extends Container<Object> implements InternalRepository if (!skipInitialization) { - lastCommitTimeStamp = Math.max(store.getCreationTime(), store.getLastCommitTime()); - initMainBranch(branchManager, lastCommitTimeStamp); - LifecycleUtil.activate(branchManager); + lastCommitTimeStamp = store.getLastCommitTime(); + long creationTime = store.getCreationTime(); + initMainBranch(branchManager, creationTime); if (store.isFirstTime()) { @@ -1568,7 +1576,7 @@ public class Repository extends Container<Object> implements InternalRepository else { readPackageUnits(); - loadRootResource(); + readRootResource(); } } } diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java index 7b67991c91..41328182c9 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java @@ -220,12 +220,12 @@ public class MEMStore extends LongIDStore implements IMEMStore, BranchLoader for (int i = 0; i < commitInfos.size(); i++) { CommitInfo info = commitInfos.get(i); - if (startTime != UNSPECIFIED_DATE && info.getTimeStamp() < startTime) + if (startTime != CDOBranchPoint.UNSPECIFIED_DATE && info.getTimeStamp() < startTime) { continue; } - if (endTime != UNSPECIFIED_DATE && info.getTimeStamp() > endTime) + if (endTime != CDOBranchPoint.UNSPECIFIED_DATE && info.getTimeStamp() > endTime) { continue; } diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/IRecoverableProperty.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/IRecoverableProperty.java new file mode 100644 index 0000000000..25bdd2d696 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/IRecoverableProperty.java @@ -0,0 +1,268 @@ +/**
+ * Copyright (c) 2004 - 2011 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.spi.server;
+
+/**
+ * @author Eike Stepper
+ * @since 4.0
+ */
+public interface IRecoverableProperty
+{
+ public String getName();
+
+ public String getValue();
+
+ public void setValue(String value);
+
+ public void recover();
+
+ /**
+ * @author Eike Stepper
+ */
+ public static abstract class NamedRecoverableProperty implements IRecoverableProperty
+ {
+ private String name;
+
+ public NamedRecoverableProperty(String name)
+ {
+ this.name = name;
+ }
+
+ public final String getName()
+ {
+ return name;
+ }
+
+ @Override
+ public String toString()
+ {
+ return name + "=" + getValue();
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static abstract class IntCounter extends NamedRecoverableProperty
+ {
+ private int start;
+
+ private int end;
+
+ private int value;
+
+ private boolean needNext;
+
+ public IntCounter(String name, int start, int end)
+ {
+ super(name);
+ this.start = start;
+ this.end = end;
+
+ value = this.start;
+ }
+
+ public final int getStart()
+ {
+ return start;
+ }
+
+ public final int getEnd()
+ {
+ return end;
+ }
+
+ public final boolean isAscending()
+ {
+ return start < end;
+ }
+
+ public final synchronized int getNextInt()
+ {
+ if (needNext)
+ {
+ if (value == end)
+ {
+ overflow();
+ }
+
+ if (isAscending())
+ {
+ ++value;
+ }
+ else
+ {
+ --value;
+ }
+ }
+
+ needNext = true;
+ return value;
+ }
+
+ public final synchronized int getInt()
+ {
+ return value;
+ }
+
+ public final synchronized void setInt(int value)
+ {
+ checkValue(value);
+ this.value = value;
+ needNext = false;
+ }
+
+ public final synchronized String getValue()
+ {
+ return Integer.toString(value);
+ }
+
+ public final synchronized void setValue(String value)
+ {
+ int intValue = Integer.parseInt(value);
+ checkValue(intValue);
+ this.value = intValue;
+ needNext = false;
+ }
+
+ private void checkValue(int value)
+ {
+ if (isAscending())
+ {
+ if (value < start || value > end)
+ {
+ overflow();
+ }
+ }
+ else
+ {
+ if (value > start || value < end)
+ {
+ overflow();
+ }
+ }
+ }
+
+ private static void overflow()
+ {
+ throw new IllegalStateException("Overflow");
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static abstract class LongCounter extends NamedRecoverableProperty
+ {
+ private long start;
+
+ private long end;
+
+ private long value;
+
+ private boolean needNext;
+
+ public LongCounter(String name, long start, long end)
+ {
+ super(name);
+ this.start = start;
+ this.end = end;
+
+ value = this.start;
+ }
+
+ public final long getStart()
+ {
+ return start;
+ }
+
+ public final long getEnd()
+ {
+ return end;
+ }
+
+ public final boolean isAscending()
+ {
+ return start < end;
+ }
+
+ public final synchronized long getNextLong()
+ {
+ if (needNext)
+ {
+ if (value == end)
+ {
+ overflow();
+ }
+
+ if (isAscending())
+ {
+ ++value;
+ }
+ else
+ {
+ --value;
+ }
+ }
+
+ needNext = true;
+ return value;
+ }
+
+ public final synchronized long getLong()
+ {
+ return value;
+ }
+
+ public final synchronized void setLong(long value)
+ {
+ checkValue(value);
+ this.value = value;
+ needNext = false;
+ }
+
+ public final synchronized String getValue()
+ {
+ return Long.toString(value);
+ }
+
+ public final synchronized void setValue(String value)
+ {
+ long longValue = Long.parseLong(value);
+ checkValue(longValue);
+ this.value = longValue;
+ needNext = false;
+ }
+
+ private void checkValue(long value)
+ {
+ if (isAscending())
+ {
+ if (value < start || value > end)
+ {
+ overflow();
+ }
+ }
+ else
+ {
+ if (value > start || value < end)
+ {
+ overflow();
+ }
+ }
+ }
+
+ private static void overflow()
+ {
+ throw new IllegalStateException("Overflow");
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/Store.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/Store.java index 100ab56ac4..6502c09aa6 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/Store.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/Store.java @@ -47,7 +47,9 @@ public abstract class Store extends Lifecycle implements InternalStore { /** * @since 3.0 + * @deprecated Use CDOBranchPoint.UNSPECIFIED_DATE */ + @Deprecated public static final long UNSPECIFIED_DATE = CDOBranchPoint.UNSPECIFIED_DATE; private String type; @@ -465,6 +467,11 @@ public abstract class Store extends Lifecycle implements InternalStore */ protected abstract IStoreAccessor createWriter(ITransaction transaction); + protected static <T> Set<T> set(T... elements) + { + return Collections.unmodifiableSet(new HashSet<T>(Arrays.asList(elements))); + } + /** * @since 3.0 */ @@ -517,9 +524,4 @@ public abstract class Store extends Lifecycle implements InternalStore } }; } - - protected static <T> Set<T> set(T... elements) - { - return Collections.unmodifiableSet(new HashSet<T>(Arrays.asList(elements))); - } } diff --git a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/CustomTypeMappingTest.java b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/CustomTypeMappingTest.java index c1095474cc..8f0c383292 100644 --- a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/CustomTypeMappingTest.java +++ b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/CustomTypeMappingTest.java @@ -51,84 +51,81 @@ public class CustomTypeMappingTest extends AbstractCDOTest public void testCustomTypeMapping() throws CommitException { // manually register type mapping - IPluginContainer.INSTANCE.registerFactory(new MyIntToVarcharTypeMapping.Factory()); + MyIntToVarcharTypeMapping.Factory factory = new MyIntToVarcharTypeMapping.Factory(); + IPluginContainer.INSTANCE.registerFactory(factory); - EPackage pkg = EMFUtil.createEPackage("underscoreTest", "uct", "http://cdo.eclipse.org/tests/underscoreTest.ecore"); - EClass cls = EMFUtil.createEClass(pkg, "foo", false, false); - EAttribute att = EMFUtil.createEAttribute(cls, "bar", EcorePackage.eINSTANCE.getEInt()); - - // annotate type mapping and column type - EAnnotation annotation = EcoreFactory.eINSTANCE.createEAnnotation(); - annotation.setSource("http://www.eclipse.org/CDO/DBStore"); - annotation.getDetails().put("typeMapping", "org.eclipse.emf.cdo.tests.db.EIntToVarchar"); - annotation.getDetails().put("columnType", DBType.VARCHAR.getKeyword()); - att.getEAnnotations().add(annotation); - - if (!isConfig(LEGACY)) + try { - CDOUtil.prepareDynamicEPackage(pkg); - } + EPackage pkg = EMFUtil.createEPackage("underscoreTest", "uct", + "http://cdo.eclipse.org/tests/underscoreTest.ecore"); + EClass cls = EMFUtil.createEClass(pkg, "foo", false, false); + EAttribute att = EMFUtil.createEAttribute(cls, "bar", EcorePackage.eINSTANCE.getEInt()); + + // annotate type mapping and column type + EAnnotation annotation = EcoreFactory.eINSTANCE.createEAnnotation(); + annotation.setSource("http://www.eclipse.org/CDO/DBStore"); + annotation.getDetails().put("typeMapping", "org.eclipse.emf.cdo.tests.db.EIntToVarchar"); + annotation.getDetails().put("columnType", DBType.VARCHAR.getKeyword()); + att.getEAnnotations().add(annotation); + + if (!isConfig(LEGACY)) + { + CDOUtil.prepareDynamicEPackage(pkg); + } - CDOSession session = openSession(); - CDOTransaction transaction = session.openTransaction(); - CDOResource resource = transaction.createResource("/test"); + CDOSession session = openSession(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource("/test"); - EObject obj = EcoreUtil.create(cls); - obj.eSet(att, 42); + EObject obj = EcoreUtil.create(cls); + obj.eSet(att, 42); - resource.getContents().add(obj); - transaction.commit(); - transaction.close(); - session.close(); + resource.getContents().add(obj); + transaction.commit(); + transaction.close(); + session.close(); - msg("Check if type was mapped to string..."); - new DBStoreVerifier(getRepository()) - { - @Override - protected void doVerify() throws Exception + msg("Check if type was mapped to string..."); + new DBStoreVerifier(getRepository()) { - Statement stmt = null; - ResultSet rset = null; - try + @Override + protected void doVerify() throws Exception { - stmt = getStatement(); - rset = stmt.executeQuery("SELECT bar FROM foo"); - assertEquals("java.lang.String", rset.getMetaData().getColumnClassName(1)); - - rset.next(); - assertEquals("2a", rset.getString(1)); + Statement stmt = null; + ResultSet rset = null; + try + { + stmt = getStatement(); + rset = stmt.executeQuery("SELECT bar FROM foo"); + assertEquals("java.lang.String", rset.getMetaData().getColumnClassName(1)); + + rset.next(); + assertEquals("2a", rset.getString(1)); + } + finally + { + DBUtil.close(rset); + DBUtil.close(stmt); + } } - finally - { - DBUtil.close(rset); - DBUtil.close(stmt); - } - } - }.verify(); + }.verify(); + } + finally + { + IPluginContainer.INSTANCE.getFactoryRegistry().remove(factory.getKey()); + } } + /** + * @author Stefan Winkler + */ public static class MyIntToVarcharTypeMapping extends AbstractTypeMapping { public static final ITypeMapping.Descriptor DESCRIPTOR = TypeMappingUtil.createDescriptor( "org.eclipse.emf.cdo.tests.db.EIntToVarchar", EcorePackage.eINSTANCE.getEInt(), DBType.VARCHAR); - public static class Factory extends AbstractTypeMappingFactory - { - public Factory() - { - super(DESCRIPTOR); - } - - @Override - public ITypeMapping create(String description) - { - return new MyIntToVarcharTypeMapping(); - } - } - public MyIntToVarcharTypeMapping() { - super(); } @Override @@ -144,5 +141,22 @@ public class CustomTypeMappingTest extends AbstractCDOTest String stringVal = resultSet.getString(getField().getName()); return Integer.parseInt(stringVal, 16); } + + /** + * @author Stefan Winkler + */ + public static class Factory extends AbstractTypeMappingFactory + { + public Factory() + { + super(DESCRIPTOR); + } + + @Override + public ITypeMapping create(String description) + { + return new MyIntToVarcharTypeMapping(); + } + } } } diff --git a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/DBStoreRepositoryConfig.java b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/DBStoreRepositoryConfig.java index 42d73d5852..d825231923 100644 --- a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/DBStoreRepositoryConfig.java +++ b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/DBStoreRepositoryConfig.java @@ -13,6 +13,8 @@ package org.eclipse.emf.cdo.tests.db; import org.eclipse.emf.cdo.server.IStore; import org.eclipse.emf.cdo.server.db.CDODBUtil; import org.eclipse.emf.cdo.server.db.mapping.IMappingStrategy; +import org.eclipse.emf.cdo.server.db.mapping.ITypeMapping; +import org.eclipse.emf.cdo.server.internal.db.mapping.TypeMappingRegistry; import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig; import org.eclipse.net4j.db.DBUtil; @@ -38,6 +40,7 @@ public abstract class DBStoreRepositoryConfig extends RepositoryConfig { CDODBUtil.prepareContainer(IPluginContainer.INSTANCE); super.setUp(); + ((TypeMappingRegistry)ITypeMapping.Registry.INSTANCE).init(); } @Override diff --git a/plugins/org.eclipse.emf.cdo.workspace/src/org/eclipse/emf/cdo/internal/workspace/CDOWorkspaceImpl.java b/plugins/org.eclipse.emf.cdo.workspace/src/org/eclipse/emf/cdo/internal/workspace/CDOWorkspaceImpl.java index c377bb4c30..179106f8b2 100644 --- a/plugins/org.eclipse.emf.cdo.workspace/src/org/eclipse/emf/cdo/internal/workspace/CDOWorkspaceImpl.java +++ b/plugins/org.eclipse.emf.cdo.workspace/src/org/eclipse/emf/cdo/internal/workspace/CDOWorkspaceImpl.java @@ -547,10 +547,10 @@ public class CDOWorkspaceImpl implements InternalCDOWorkspace Repository repository = new Repository.Default() { @Override - public void initMainBranch(InternalCDOBranchManager branchManager, long lastCommitTimeStamp) + public void initMainBranch(InternalCDOBranchManager branchManager, long timeStamp) { // Mark the main branch local so that new objects get local IDs - branchManager.initMainBranch(true, lastCommitTimeStamp); + branchManager.initMainBranch(true, timeStamp); } @Override |