diff options
author | Eike Stepper | 2011-01-06 16:10:15 +0000 |
---|---|---|
committer | Eike Stepper | 2011-01-06 16:10:15 +0000 |
commit | 46b3ceb3a47a9054de0719886c723a71a808ff91 (patch) | |
tree | 99958f837ee5cbf4c1378e52f7c22052995e34b3 /plugins/org.eclipse.emf.cdo.server.net4j | |
parent | 56132fe81debf29f34621ddd51de2bf52721eefb (diff) | |
download | cdo-46b3ceb3a47a9054de0719886c723a71a808ff91.tar.gz cdo-46b3ceb3a47a9054de0719886c723a71a808ff91.tar.xz cdo-46b3ceb3a47a9054de0719886c723a71a808ff91.zip |
[333663] Provide a ReferentialIntegrityException with full XRef infos
https://bugs.eclipse.org/bugs/show_bug.cgi?id=333663
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.net4j')
6 files changed, 26 insertions, 21 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java index b1acaa02b2..cb5cd36a78 100644 --- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java @@ -14,6 +14,7 @@ package org.eclipse.emf.cdo.server.internal.net4j.protocol; import org.eclipse.emf.cdo.common.id.CDOID; +import org.eclipse.emf.cdo.common.id.CDOIDReference; import org.eclipse.emf.cdo.common.model.EMFUtil; import org.eclipse.emf.cdo.common.protocol.CDODataInput; import org.eclipse.emf.cdo.common.protocol.CDODataOutput; @@ -40,6 +41,7 @@ import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl; import java.io.IOException; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -238,7 +240,7 @@ public class CommitTransactionIndication extends CDOServerIndicationWithMonitori try { - success = respondingException(out, commitContext.getRollbackMessage()); + success = respondingException(out, commitContext.getRollbackMessage(), commitContext.getXRefs()); if (success) { respondingResult(out); @@ -251,13 +253,27 @@ public class CommitTransactionIndication extends CDOServerIndicationWithMonitori } } - protected boolean respondingException(CDODataOutput out, String rollbackMessage) throws Exception + protected boolean respondingException(CDODataOutput out, String rollbackMessage, List<CDOIDReference> xRefs) + throws Exception { boolean success = rollbackMessage == null; out.writeBoolean(success); if (!success) { out.writeString(rollbackMessage); + + if (xRefs != null) + { + out.writeInt(xRefs.size()); + for (CDOIDReference xRef : xRefs) + { + out.writeCDOIDReference(xRef); + } + } + else + { + out.writeInt(0); + } } return success; diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionCancelIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionCancelIndication.java index 4089b360ec..5a14bbe488 100644 --- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionCancelIndication.java +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionCancelIndication.java @@ -4,7 +4,7 @@ * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html - * + * * Contributors: * Simon McDuff - initial API and implementation * Eike Stepper - maintenance @@ -54,7 +54,7 @@ public class CommitXATransactionCancelIndication extends CommitTransactionIndica exceptionMessage = commitContext.getRollbackMessage(); } - respondingException(out, exceptionMessage); + respondingException(out, exceptionMessage, null); } @Override diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase1Indication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase1Indication.java index 1acbf04f44..b5c100173c 100644 --- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase1Indication.java +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase1Indication.java @@ -61,7 +61,7 @@ public class CommitXATransactionPhase1Indication extends CommitTransactionIndica exceptionMessage = commitContext.getRollbackMessage(); } - boolean success = respondingException(out, exceptionMessage); + boolean success = respondingException(out, exceptionMessage, null); if (success) { respondingResult(out); diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase2Indication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase2Indication.java index 094d54faed..d3d36e3650 100644 --- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase2Indication.java +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase2Indication.java @@ -86,7 +86,7 @@ public class CommitXATransactionPhase2Indication extends CommitTransactionIndica exceptionMessage = commitContext.getRollbackMessage(); } - respondingException(out, exceptionMessage); + respondingException(out, exceptionMessage, null); } @Override diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java index 7c16f35a9f..2b9d73c0e4 100644 --- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java @@ -37,7 +37,7 @@ public class CommitXATransactionPhase3Indication extends CommitTransactionIndica protected void responding(CDODataOutput out, OMMonitor monitor) throws Exception { commitContext.commit(monitor); - boolean success = respondingException(out, commitContext.getRollbackMessage()); + boolean success = respondingException(out, commitContext.getRollbackMessage(), null); commitContext.postCommit(success); } diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/QueryIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/QueryIndication.java index a14f717341..5e2db4ad7e 100644 --- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/QueryIndication.java +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/QueryIndication.java @@ -11,7 +11,7 @@ */ package org.eclipse.emf.cdo.server.internal.net4j.protocol; -import org.eclipse.emf.cdo.common.id.CDOID; +import org.eclipse.emf.cdo.common.id.CDOIDReference; import org.eclipse.emf.cdo.common.protocol.CDODataInput; import org.eclipse.emf.cdo.common.protocol.CDODataOutput; import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; @@ -24,8 +24,6 @@ import org.eclipse.emf.cdo.spi.server.InternalView; import org.eclipse.net4j.util.om.trace.ContextTracer; -import org.eclipse.emf.ecore.EReference; - import java.io.IOException; /** @@ -75,17 +73,8 @@ public class QueryIndication extends CDOReadIndication if (xrefs) { - Object[] values = (Object[])object; - CDOID targetID = (CDOID)values[0]; - CDOID sourceID = (CDOID)values[1]; - EReference sourceReference = (EReference)values[2]; - int sourceIndex = (Integer)values[3]; - - out.writeCDOID(targetID); - out.writeCDOID(sourceID); - out.writeCDOClassifierRef(sourceReference.getEContainingClass()); - out.writeString(sourceReference.getName()); - out.writeInt(sourceIndex); + CDOIDReference idReference = (CDOIDReference)object; + out.writeCDOIDReference(idReference); } else { |