Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2011-02-09 13:22:57 +0000
committerEike Stepper2011-02-09 13:22:57 +0000
commite267ed281336345d485115cd95703d5766abf6b6 (patch)
treedf9da2f7ddf057b79ce496cb1415a3d9dade5589
parentddb1ccbde3a81286bdde7b320590b6b5b491df7c (diff)
downloadcdo-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
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java10
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MetaDataManager.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/TypeMappingRegistry.java24
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java11
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalAuditClassMapping.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java15
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalNonAuditClassMapping.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java24
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/IRecoverableProperty.java268
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/Store.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/CustomTypeMappingTest.java134
-rw-r--r--plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/DBStoreRepositoryConfig.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.workspace/src/org/eclipse/emf/cdo/internal/workspace/CDOWorkspaceImpl.java4
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

Back to the top