diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping')
5 files changed, 149 insertions, 236 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java index 1de3e75ff8..a9fb07f093 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java @@ -39,6 +39,7 @@ 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.DBAnnotation; import org.eclipse.emf.cdo.server.internal.db.ObjectIDIterator; +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.model.InternalCDOPackageInfo; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry; @@ -824,7 +825,11 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp { for (IClassMapping classMapping : classMappings.values()) { - LifecycleUtil.deactivate(classMapping); + Exception exception = LifecycleUtil.deactivate(classMapping); + if (exception != null) + { + OM.LOG.warn(exception); + } } } 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 88281b8424..cb0d7519f7 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 @@ -24,6 +24,11 @@ import org.eclipse.emf.cdo.common.revision.CDOList; import org.eclipse.emf.cdo.common.revision.CDORevision; import org.eclipse.emf.cdo.common.revision.CDORevisionHandler; import org.eclipse.emf.cdo.common.revision.CDORevisionManager; +import org.eclipse.emf.cdo.common.revision.delta.CDOAddFeatureDelta; +import org.eclipse.emf.cdo.common.revision.delta.CDOClearFeatureDelta; +import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor; +import org.eclipse.emf.cdo.common.revision.delta.CDOMoveFeatureDelta; +import org.eclipse.emf.cdo.common.revision.delta.CDORemoveFeatureDelta; import org.eclipse.emf.cdo.eresource.EresourcePackage; import org.eclipse.emf.cdo.server.IRepository; import org.eclipse.emf.cdo.server.IStoreAccessor.QueryXRefsContext; @@ -41,6 +46,7 @@ import org.eclipse.emf.cdo.spi.common.commit.CDOChangeSetSegment; import org.eclipse.emf.cdo.spi.common.revision.DetachedCDORevision; import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; +import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta; import org.eclipse.net4j.db.DBException; import org.eclipse.net4j.db.DBType; @@ -53,6 +59,7 @@ import org.eclipse.net4j.db.ddl.IDBField; import org.eclipse.net4j.db.ddl.IDBIndex; import org.eclipse.net4j.db.ddl.IDBSchema; import org.eclipse.net4j.db.ddl.IDBTable; +import org.eclipse.net4j.util.ImplementationError; import org.eclipse.net4j.util.lifecycle.IDeactivateable; import org.eclipse.net4j.util.om.monitor.OMMonitor; import org.eclipse.net4j.util.om.monitor.OMMonitor.Async; @@ -1089,4 +1096,51 @@ public abstract class AbstractHorizontalClassMapping implements IClassMapping, I } } } + + /** + * @author Eike Stepper + */ + protected abstract class AbstractFeatureDeltaWriter implements CDOFeatureDeltaVisitor + { + protected IDBStoreAccessor accessor; + + protected long created; + + protected CDOID id; + + public final void process(IDBStoreAccessor accessor, InternalCDORevisionDelta delta, long created) + { + this.accessor = accessor; + this.created = created; + id = delta.getID(); + + doProcess(delta); + } + + protected abstract void doProcess(InternalCDORevisionDelta delta); + + @Deprecated + public final void visit(CDOAddFeatureDelta delta) + { + throw new ImplementationError("Should not be called"); //$NON-NLS-1$ + } + + @Deprecated + public final void visit(CDORemoveFeatureDelta delta) + { + throw new ImplementationError("Should not be called"); //$NON-NLS-1$ + } + + @Deprecated + public final void visit(CDOMoveFeatureDelta delta) + { + throw new ImplementationError("Should not be called"); //$NON-NLS-1$ + } + + @Deprecated + public final void visit(CDOClearFeatureDelta delta) + { + throw new ImplementationError("Should not be called"); //$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 f6f73b7caa..873c9fe97a 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 @@ -21,13 +21,8 @@ import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.revision.CDOList; import org.eclipse.emf.cdo.common.revision.CDORevision; import org.eclipse.emf.cdo.common.revision.CDORevisionHandler; -import org.eclipse.emf.cdo.common.revision.delta.CDOAddFeatureDelta; -import org.eclipse.emf.cdo.common.revision.delta.CDOClearFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOContainerFeatureDelta; -import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor; import org.eclipse.emf.cdo.common.revision.delta.CDOListFeatureDelta; -import org.eclipse.emf.cdo.common.revision.delta.CDOMoveFeatureDelta; -import org.eclipse.emf.cdo.common.revision.delta.CDORemoveFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOUnsetFeatureDelta; import org.eclipse.emf.cdo.eresource.EresourcePackage; @@ -104,15 +99,6 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping private String sqlRawDeleteAttributes; - private ThreadLocal<FeatureDeltaWriter> deltaWriter = new ThreadLocal<FeatureDeltaWriter>() - { - @Override - protected FeatureDeltaWriter initialValue() - { - return new FeatureDeltaWriter(); - } - }; - public HorizontalAuditClassMapping(AbstractHorizontalMappingStrategy mappingStrategy, EClass eClass) { super(mappingStrategy, eClass); @@ -626,7 +612,8 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping try { async = monitor.forkAsync(); - FeatureDeltaWriter writer = deltaWriter.get(); + + FeatureDeltaWriter writer = new FeatureDeltaWriter(); writer.process(accessor, delta, created); } finally @@ -903,25 +890,17 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping /** * @author Stefan Winkler */ - private class FeatureDeltaWriter implements CDOFeatureDeltaVisitor + private final class FeatureDeltaWriter extends AbstractFeatureDeltaWriter { - private IDBStoreAccessor accessor; - - private long created; - - private CDOID id; - private int oldVersion; private InternalCDORevision newRevision; private int branchId; - public void process(IDBStoreAccessor accessor, InternalCDORevisionDelta delta, long created) + @Override + protected void doProcess(InternalCDORevisionDelta delta) { - this.accessor = accessor; - this.created = created; - id = delta.getID(); branchId = delta.getBranch().getID(); oldVersion = delta.getVersion(); @@ -947,21 +926,6 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping writeValues(accessor, newRevision); } - public void visit(CDOMoveFeatureDelta delta) - { - throw new ImplementationError("Should not be called"); //$NON-NLS-1$ - } - - public void visit(CDOAddFeatureDelta delta) - { - throw new ImplementationError("Should not be called"); //$NON-NLS-1$ - } - - public void visit(CDORemoveFeatureDelta delta) - { - throw new ImplementationError("Should not be called"); //$NON-NLS-1$ - } - public void visit(CDOSetFeatureDelta delta) { delta.applyTo(newRevision); @@ -975,15 +939,11 @@ public class HorizontalAuditClassMapping extends AbstractHorizontalClassMapping public void visit(CDOListFeatureDelta delta) { delta.applyTo(newRevision); + IListMappingDeltaSupport listMapping = (IListMappingDeltaSupport)getListMapping(delta.getFeature()); listMapping.processDelta(accessor, id, branchId, oldVersion, oldVersion + 1, created, delta); } - public void visit(CDOClearFeatureDelta delta) - { - throw new ImplementationError("Should not be called"); //$NON-NLS-1$ - } - public void visit(CDOContainerFeatureDelta delta) { delta.applyTo(newRevision); 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 61ef33195d..f77135abcd 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 @@ -23,13 +23,8 @@ import org.eclipse.emf.cdo.common.revision.CDOList; import org.eclipse.emf.cdo.common.revision.CDORevision; import org.eclipse.emf.cdo.common.revision.CDORevisionHandler; import org.eclipse.emf.cdo.common.revision.CDORevisionManager; -import org.eclipse.emf.cdo.common.revision.delta.CDOAddFeatureDelta; -import org.eclipse.emf.cdo.common.revision.delta.CDOClearFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOContainerFeatureDelta; -import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor; import org.eclipse.emf.cdo.common.revision.delta.CDOListFeatureDelta; -import org.eclipse.emf.cdo.common.revision.delta.CDOMoveFeatureDelta; -import org.eclipse.emf.cdo.common.revision.delta.CDORemoveFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOUnsetFeatureDelta; import org.eclipse.emf.cdo.eresource.EresourcePackage; @@ -78,98 +73,6 @@ import java.util.Set; */ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapping implements IClassMappingAuditSupport, IClassMappingDeltaSupport { - /** - * @author Stefan Winkler - */ - private class FeatureDeltaWriter implements CDOFeatureDeltaVisitor - { - private IDBStoreAccessor accessor; - - private long created; - - private CDOID id; - - private CDOBranch targetBranch; - - private int oldVersion; - - private int newVersion; - - private InternalCDORevision newRevision; - - public void process(IDBStoreAccessor accessor, InternalCDORevisionDelta delta, long created) - { - this.accessor = accessor; - this.created = created; - id = delta.getID(); - oldVersion = delta.getVersion(); - - if (TRACER.isEnabled()) - { - TRACER.format("FeatureDeltaWriter: old version: {0}, new version: {1}", oldVersion, oldVersion + 1); //$NON-NLS-1$ - } - - InternalCDORevision originalRevision = (InternalCDORevision)accessor.getTransaction().getRevision(id); - newRevision = originalRevision.copy(); - targetBranch = accessor.getTransaction().getBranch(); - newRevision.adjustForCommit(targetBranch, created); - - newVersion = newRevision.getVersion(); - - // process revision delta tree - delta.accept(this); - - if (newVersion != CDORevision.FIRST_VERSION) - { - reviseOldRevision(accessor, id, delta.getBranch(), newRevision.getTimeStamp() - 1); - } - - writeValues(accessor, newRevision); - } - - public void visit(CDOMoveFeatureDelta delta) - { - throw new ImplementationError("Should not be called"); //$NON-NLS-1$ - } - - public void visit(CDOAddFeatureDelta delta) - { - throw new ImplementationError("Should not be called"); //$NON-NLS-1$ - } - - public void visit(CDORemoveFeatureDelta delta) - { - throw new ImplementationError("Should not be called"); //$NON-NLS-1$ - } - - public void visit(CDOSetFeatureDelta delta) - { - delta.applyTo(newRevision); - } - - public void visit(CDOUnsetFeatureDelta delta) - { - delta.applyTo(newRevision); - } - - public void visit(CDOListFeatureDelta delta) - { - delta.applyTo(newRevision); - IListMappingDeltaSupport listMapping = (IListMappingDeltaSupport)getListMapping(delta.getFeature()); - listMapping.processDelta(accessor, id, targetBranch.getID(), oldVersion, newVersion, created, delta); - } - - public void visit(CDOClearFeatureDelta delta) - { - throw new ImplementationError("Should not be called"); //$NON-NLS-1$ - } - - public void visit(CDOContainerFeatureDelta delta) - { - delta.applyTo(newRevision); - } - } - private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, HorizontalBranchingClassMapping.class); private String sqlInsertAttributes; @@ -190,15 +93,6 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp private String sqlRawDeleteAttributes; - private ThreadLocal<FeatureDeltaWriter> deltaWriter = new ThreadLocal<FeatureDeltaWriter>() - { - @Override - protected FeatureDeltaWriter initialValue() - { - return new FeatureDeltaWriter(); - } - }; - public HorizontalBranchingClassMapping(AbstractHorizontalMappingStrategy mappingStrategy, EClass eClass) { super(mappingStrategy, eClass); @@ -1016,7 +910,8 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp try { async = monitor.forkAsync(); - FeatureDeltaWriter writer = deltaWriter.get(); + + FeatureDeltaWriter writer = new FeatureDeltaWriter(); writer.process(accessor, delta, created); } finally @@ -1060,4 +955,69 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp monitor.done(); } } + + /** + * @author Stefan Winkler + */ + private final class FeatureDeltaWriter extends AbstractFeatureDeltaWriter + { + private CDOBranch targetBranch; + + private int oldVersion; + + private int newVersion; + + private InternalCDORevision newRevision; + + @Override + protected void doProcess(InternalCDORevisionDelta delta) + { + oldVersion = delta.getVersion(); + + if (TRACER.isEnabled()) + { + TRACER.format("FeatureDeltaWriter: old version: {0}, new version: {1}", oldVersion, oldVersion + 1); //$NON-NLS-1$ + } + + InternalCDORevision originalRevision = (InternalCDORevision)accessor.getTransaction().getRevision(id); + newRevision = originalRevision.copy(); + targetBranch = accessor.getTransaction().getBranch(); + newRevision.adjustForCommit(targetBranch, created); + + newVersion = newRevision.getVersion(); + + // process revision delta tree + delta.accept(this); + + if (newVersion != CDORevision.FIRST_VERSION) + { + reviseOldRevision(accessor, id, delta.getBranch(), newRevision.getTimeStamp() - 1); + } + + writeValues(accessor, newRevision); + } + + public void visit(CDOSetFeatureDelta delta) + { + delta.applyTo(newRevision); + } + + public void visit(CDOUnsetFeatureDelta delta) + { + delta.applyTo(newRevision); + } + + public void visit(CDOListFeatureDelta delta) + { + delta.applyTo(newRevision); + + IListMappingDeltaSupport listMapping = (IListMappingDeltaSupport)getListMapping(delta.getFeature()); + listMapping.processDelta(accessor, id, targetBranch.getID(), oldVersion, newVersion, created, delta); + } + + public void visit(CDOContainerFeatureDelta delta) + { + delta.applyTo(newRevision); + } + } } 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 2879544040..5bf405e926 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 @@ -19,14 +19,8 @@ import org.eclipse.emf.cdo.common.branch.CDOBranchVersion; import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.revision.CDOList; import org.eclipse.emf.cdo.common.revision.CDORevision; -import org.eclipse.emf.cdo.common.revision.delta.CDOAddFeatureDelta; -import org.eclipse.emf.cdo.common.revision.delta.CDOClearFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOContainerFeatureDelta; -import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor; import org.eclipse.emf.cdo.common.revision.delta.CDOListFeatureDelta; -import org.eclipse.emf.cdo.common.revision.delta.CDOMoveFeatureDelta; -import org.eclipse.emf.cdo.common.revision.delta.CDORemoveFeatureDelta; -import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOUnsetFeatureDelta; import org.eclipse.emf.cdo.eresource.EresourcePackage; @@ -88,15 +82,6 @@ public class HorizontalNonAuditClassMapping extends AbstractHorizontalClassMappi private boolean hasLists; - private ThreadLocal<FeatureDeltaWriter> deltaWriter = new ThreadLocal<FeatureDeltaWriter>() - { - @Override - protected FeatureDeltaWriter initialValue() - { - return new FeatureDeltaWriter(); - } - }; - public HorizontalNonAuditClassMapping(AbstractHorizontalMappingStrategy mappingStrategy, EClass eClass) { super(mappingStrategy, eClass); @@ -508,7 +493,8 @@ public class HorizontalNonAuditClassMapping extends AbstractHorizontalClassMappi try { async = monitor.forkAsync(); - FeatureDeltaWriter writer = deltaWriter.get(); + + FeatureDeltaWriter writer = new FeatureDeltaWriter(); writer.process(accessor, delta, created); } finally @@ -528,22 +514,16 @@ public class HorizontalNonAuditClassMapping extends AbstractHorizontalClassMappi /** * @author Eike Stepper */ - private class FeatureDeltaWriter implements CDOFeatureDeltaVisitor + private final class FeatureDeltaWriter extends AbstractFeatureDeltaWriter { - private CDOID id; - - private int oldVersion; + private final List<Pair<ITypeMapping, Object>> attributeChanges = new ArrayList<Pair<ITypeMapping, Object>>(); - private long created; + private final List<Pair<EStructuralFeature, Integer>> listSizeChanges = new ArrayList<Pair<EStructuralFeature, Integer>>(); - private IDBStoreAccessor accessor; + private int oldVersion; private boolean updateContainer; - private List<Pair<ITypeMapping, Object>> attributeChanges; - - private List<Pair<EStructuralFeature, Integer>> listSizeChanges; - private int newContainingFeatureID; private CDOID newContainerID; @@ -554,48 +534,20 @@ public class HorizontalNonAuditClassMapping extends AbstractHorizontalClassMappi private int newVersion; - public FeatureDeltaWriter() - { - attributeChanges = new ArrayList<Pair<ITypeMapping, Object>>(); - listSizeChanges = new ArrayList<Pair<EStructuralFeature, Integer>>(); - } - - protected void reset() - { - attributeChanges.clear(); - listSizeChanges.clear(); - updateContainer = false; - } - - public void process(IDBStoreAccessor accessor, CDORevisionDelta delta, long created) + @Override + protected void doProcess(InternalCDORevisionDelta delta) { - try - { - // Set context - id = delta.getID(); + // Set context + id = delta.getID(); - branchId = delta.getBranch().getID(); - oldVersion = delta.getVersion(); - newVersion = oldVersion + 1; - this.created = created; - this.accessor = accessor; + branchId = delta.getBranch().getID(); + oldVersion = delta.getVersion(); + newVersion = oldVersion + 1; - // Process revision delta tree - delta.accept(this); + // Process revision delta tree + delta.accept(this); - updateAttributes(); - } - finally - { - // Clean up - reset(); - } - } - - @Deprecated - public void visit(CDOMoveFeatureDelta delta) - { - throw new ImplementationError("Should not be called"); //$NON-NLS-1$ + updateAttributes(); } public void visit(CDOSetFeatureDelta delta) @@ -644,24 +596,6 @@ public class HorizontalNonAuditClassMapping extends AbstractHorizontalClassMappi } } - @Deprecated - public void visit(CDOClearFeatureDelta delta) - { - throw new ImplementationError("Should not be called"); //$NON-NLS-1$ - } - - @Deprecated - public void visit(CDOAddFeatureDelta delta) - { - throw new ImplementationError("Should not be called"); //$NON-NLS-1$ - } - - @Deprecated - public void visit(CDORemoveFeatureDelta delta) - { - throw new ImplementationError("Should not be called"); //$NON-NLS-1$ - } - public void visit(CDOContainerFeatureDelta delta) { newContainingFeatureID = delta.getContainerFeatureID(); |