Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Transaction.java26
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CommitTransactionIndication.java62
2 files changed, 49 insertions, 39 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Transaction.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Transaction.java
index 55befcc726..bf956f2193 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Transaction.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Transaction.java
@@ -157,6 +157,12 @@ public class Transaction extends View implements ITransaction, IStoreWriter.Comm
return rollbackMessage;
}
+ public void preCommit()
+ {
+ storeWriter = repository.getStore().getWriter(this);
+ StoreUtil.setReader(storeWriter);
+ }
+
public void commit(CDOPackage[] newPackages, CDORevision[] newObjects, CDORevisionDelta[] dirtyObjectDeltas)
{
timeStamp = System.currentTimeMillis();
@@ -165,9 +171,6 @@ public class Transaction extends View implements ITransaction, IStoreWriter.Comm
this.dirtyObjectDeltas = dirtyObjectDeltas;
dirtyObjects = new CDORevision[dirtyObjectDeltas.length];
- storeWriter = repository.getStore().getWriter(this);
- StoreUtil.setReader(storeWriter);
-
try
{
adjustMetaRanges();
@@ -183,15 +186,6 @@ public class Transaction extends View implements ITransaction, IStoreWriter.Comm
rollbackMessage = ex.getMessage();
rollback();
}
- finally
- {
- if (storeWriter != null)
- {
- StoreUtil.setReader(null);
- storeWriter.release();
- storeWriter = null;
- }
- }
}
public void postCommit(boolean success)
@@ -213,6 +207,14 @@ public class Transaction extends View implements ITransaction, IStoreWriter.Comm
}
finally
{
+ // TODO Do this while indcating instead of responding
+ if (storeWriter != null)
+ {
+ StoreUtil.setReader(null);
+ storeWriter.release();
+ storeWriter = null;
+ }
+
timeStamp = 0L;
packageManager.clear();
metaIDRanges.clear();
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CommitTransactionIndication.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CommitTransactionIndication.java
index aabbfc9877..2469731807 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CommitTransactionIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CommitTransactionIndication.java
@@ -65,8 +65,9 @@ public class CommitTransactionIndication extends CDOServerIndication
int viewID = in.readInt();
transaction = getTransaction(viewID);
- TransactionPackageManager packageManager = transaction.getPackageManager();
+ transaction.preCommit();
+ TransactionPackageManager packageManager = transaction.getPackageManager();
CDOPackage[] newPackages = new CDOPackage[in.readInt()];
CDORevision[] newObjects = new CDORevision[in.readInt()];
CDORevisionDelta[] dirtyObjectDeltas = new CDORevisionDelta[in.readInt()];
@@ -111,41 +112,48 @@ public class CommitTransactionIndication extends CDOServerIndication
@Override
protected void responding(ExtendedDataOutputStream out) throws IOException
{
- String rollbackMessage = transaction.getRollbackMessage();
- boolean success = rollbackMessage == null;
- out.writeBoolean(success);
- if (success)
- {
- out.writeLong(transaction.getTimeStamp());
+ boolean success = false;
- // Meta ID ranges
- List<CDOIDMetaRange> metaRanges = transaction.getMetaIDRanges();
- for (CDOIDMetaRange metaRange : metaRanges)
+ try
+ {
+ String rollbackMessage = transaction.getRollbackMessage();
+ success = rollbackMessage == null;
+ out.writeBoolean(success);
+ if (success)
{
- CDOIDUtil.writeMetaRange(out, metaRange);
- }
+ out.writeLong(transaction.getTimeStamp());
- // ID mappings
- Map<CDOIDTemp, CDOID> idMappings = transaction.getIDMappings();
- for (Entry<CDOIDTemp, CDOID> entry : idMappings.entrySet())
- {
- CDOIDTemp oldID = entry.getKey();
- if (!oldID.isMeta())
+ // Meta ID ranges
+ List<CDOIDMetaRange> metaRanges = transaction.getMetaIDRanges();
+ for (CDOIDMetaRange metaRange : metaRanges)
{
- CDOID newID = entry.getValue();
- CDOIDUtil.write(out, oldID);
- CDOIDUtil.write(out, newID);
+ CDOIDUtil.writeMetaRange(out, metaRange);
}
- }
- CDOIDUtil.write(out, CDOID.NULL);
+ // ID mappings
+ Map<CDOIDTemp, CDOID> idMappings = transaction.getIDMappings();
+ for (Entry<CDOIDTemp, CDOID> entry : idMappings.entrySet())
+ {
+ CDOIDTemp oldID = entry.getKey();
+ if (!oldID.isMeta())
+ {
+ CDOID newID = entry.getValue();
+ CDOIDUtil.write(out, oldID);
+ CDOIDUtil.write(out, newID);
+ }
+ }
+
+ CDOIDUtil.write(out, CDOID.NULL);
+ }
+ else
+ {
+ out.writeString(rollbackMessage);
+ }
}
- else
+ finally
{
- out.writeString(rollbackMessage);
+ transaction.postCommit(success);
}
-
- transaction.postCommit(success);
}
private Transaction getTransaction(int viewID)

Back to the top