Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_283985_SavePointTest.java13
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java10
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java9
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java17
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java9
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXATransactionImpl.java204
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXATransaction.java67
7 files changed, 204 insertions, 125 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_283985_SavePointTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_283985_SavePointTest.java
index 3d12cca430..40a4f714a3 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_283985_SavePointTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_283985_SavePointTest.java
@@ -20,9 +20,8 @@ import org.eclipse.emf.cdo.tests.model1.Model1Factory;
import org.eclipse.emf.cdo.tests.model1.Order;
import org.eclipse.emf.cdo.tests.model1.OrderDetail;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
-import org.eclipse.emf.cdo.transaction.CDOUserSavepoint;
-import org.eclipse.emf.internal.cdo.transaction.CDOSavepointImpl;
+import org.eclipse.emf.spi.cdo.InternalCDOSavepoint;
/**
* @author Caspar De Groot
@@ -94,17 +93,17 @@ public class Bugzilla_283985_SavePointTest extends AbstractCDOTest
public void test2()
{
- CDOUserSavepoint sp = transaction.setSavepoint();
+ InternalCDOSavepoint sp = (InternalCDOSavepoint)transaction.setSavepoint();
order1.getOrderDetails().remove(detail1);
assertTransient(detail1);
- assertTrue(((CDOSavepointImpl)sp).getDetachedObjects().containsValue(detail1));
+ assertTrue(sp.getDetachedObjects().containsValue(detail1));
- sp = transaction.setSavepoint();
- assertTrue(((CDOSavepointImpl)sp.getPreviousSavepoint()).getDetachedObjects().containsValue(detail1));
+ sp = (InternalCDOSavepoint)transaction.setSavepoint();
+ assertTrue(sp.getPreviousSavepoint().getDetachedObjects().containsValue(detail1));
order1.getOrderDetails().add(detail1);
- assertTrue(((CDOSavepointImpl)sp).getReattachedObjects().containsValue(detail1));
+ assertTrue(sp.getReattachedObjects().containsValue(detail1));
assertDirty(detail1, transaction);
sp.rollback();
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java
index 510360cd11..2f35668ff4 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOTransaction.java
@@ -16,6 +16,7 @@ package org.eclipse.emf.cdo.transaction;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.view.CDOView;
@@ -111,13 +112,18 @@ public interface CDOTransaction extends CDOView, CDOUserTransaction
public Map<CDOID, CDOObject> getDirtyObjects();
- public Map<CDOID, CDORevisionDelta> getRevisionDeltas();
-
/**
* @since 2.0
*/
public Map<CDOID, CDOObject> getDetachedObjects();
+ /**
+ * @since 3.0
+ */
+ public Map<CDOID, CDORevision> getBaseNewObjects();
+
+ public Map<CDOID, CDORevisionDelta> getRevisionDeltas();
+
public Options options();
/**
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
index fe0d0c8171..b12a119a42 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
@@ -31,6 +31,7 @@ import org.eclipse.emf.internal.cdo.messages.Messages;
import org.eclipse.emf.internal.cdo.session.CDOCollectionLoadingPolicyImpl;
import org.eclipse.emf.internal.cdo.session.CDOSessionImpl;
import org.eclipse.emf.internal.cdo.transaction.CDOXATransactionImpl;
+import org.eclipse.emf.internal.cdo.transaction.CDOXATransactionImpl.CDOXAInternalAdapter;
import org.eclipse.emf.internal.cdo.util.FSMUtil;
import org.eclipse.emf.internal.cdo.view.CDORevisionPrefetchingPolicyImpl;
@@ -148,7 +149,7 @@ public final class CDOUtil
*/
public static CDOXATransaction createXATransaction(CDOViewSet viewSet)
{
- CDOXATransaction xaTransaction = new CDOXATransactionImpl();
+ CDOXATransaction xaTransaction = createXATransaction();
if (viewSet != null)
{
xaTransaction.add(viewSet);
@@ -162,7 +163,7 @@ public final class CDOUtil
*/
public static CDOXATransaction createXATransaction()
{
- return createXATransaction(null);
+ return new CDOXATransactionImpl();
}
/**
@@ -173,9 +174,9 @@ public final class CDOUtil
EList<Adapter> adapters = viewSet.eAdapters();
for (Adapter adapter : adapters)
{
- if (adapter instanceof CDOXATransactionImpl.CDOXAInternalAdapter)
+ if (adapter instanceof CDOXAInternalAdapter)
{
- return ((CDOXATransactionImpl.CDOXAInternalAdapter)adapter).getCDOXA();
+ return ((CDOXAInternalAdapter)adapter).getXATransaction();
}
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
index 64b57b163b..d664d9ce5a 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
@@ -37,6 +37,7 @@ import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
import org.eclipse.emf.cdo.transaction.CDOConflictResolver;
+import org.eclipse.emf.cdo.transaction.CDOSavepoint;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.transaction.CDOTransactionConflictEvent;
import org.eclipse.emf.cdo.transaction.CDOTransactionFinishedEvent;
@@ -107,7 +108,7 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
}
};
- private InternalCDOSavepoint lastSavepoint = new CDOSavepointImpl(this, null);
+ private InternalCDOSavepoint lastSavepoint = createSavepoint(null);
private InternalCDOSavepoint firstSavepoint = lastSavepoint;
@@ -799,7 +800,7 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
return idsOfNewObjectWithDeltas;
}
- private void loadSavepoint(CDOUserSavepoint savepoint, Set<CDOID> idsOfNewObjectWithDeltas)
+ private void loadSavepoint(CDOSavepoint savepoint, Set<CDOID> idsOfNewObjectWithDeltas)
{
lastSavepoint.recalculateSharedDetachedObjects();
@@ -885,7 +886,7 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
}
}
- dirty = ((CDOSavepointImpl)savepoint).isDirty();
+ dirty = savepoint.isDirty();
}
/**
@@ -1051,14 +1052,18 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
*/
public InternalCDOSavepoint handleSetSavepoint()
{
- // Take a copy of all new objects for the current save point
addToBase(lastSavepoint.getNewObjects());
addToBase(lastSavepoint.getNewResources());
- lastSavepoint = new CDOSavepointImpl(this, lastSavepoint);
+ lastSavepoint = createSavepoint(lastSavepoint);
return lastSavepoint;
}
+ protected CDOSavepointImpl createSavepoint(InternalCDOSavepoint lastSavepoint)
+ {
+ return new CDOSavepointImpl(this, lastSavepoint);
+ }
+
/**
* @since 2.0
*/
@@ -1375,7 +1380,7 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
/**
* @author Simon McDuff
*/
- private class CDOCommitContextImpl implements InternalCDOCommitContext
+ private final class CDOCommitContextImpl implements InternalCDOCommitContext
{
private Map<CDOID, CDOResource> newResources;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java
index 29221b5e63..1cd69dcd8a 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java
@@ -20,13 +20,13 @@ import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectExternalImpl;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.internal.cdo.messages.Messages;
-import org.eclipse.emf.internal.cdo.transaction.CDOXATransactionImpl.CDOXAState;
import org.eclipse.net4j.util.ImplementationError;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.spi.cdo.InternalCDOObject;
import org.eclipse.emf.spi.cdo.InternalCDOTransaction;
+import org.eclipse.emf.spi.cdo.InternalCDOXATransaction;
import org.eclipse.emf.spi.cdo.CDOSessionProtocol.CommitTransactionResult;
import org.eclipse.emf.spi.cdo.InternalCDOTransaction.InternalCDOCommitContext;
import org.eclipse.emf.spi.cdo.InternalCDOXATransaction.InternalCDOXACommitContext;
@@ -44,7 +44,7 @@ import java.util.Map;
*/
public class CDOXACommitContextImpl implements InternalCDOXACommitContext
{
- private CDOXATransactionImpl transactionManager;
+ private InternalCDOXATransaction transactionManager;
private IProgressMonitor progressMonitor;
@@ -58,13 +58,13 @@ public class CDOXACommitContextImpl implements InternalCDOXACommitContext
private Map<InternalCDOObject, CDOIDTempObjectExternalImpl> objectToID = new HashMap<InternalCDOObject, CDOIDTempObjectExternalImpl>();
- public CDOXACommitContextImpl(CDOXATransactionImpl manager, InternalCDOCommitContext commitContext)
+ public CDOXACommitContextImpl(InternalCDOXATransaction manager, InternalCDOCommitContext commitContext)
{
transactionManager = manager;
delegateCommitContext = commitContext;
}
- public CDOXATransactionImpl getTransactionManager()
+ public InternalCDOXATransaction getTransactionManager()
{
return transactionManager;
}
@@ -143,7 +143,6 @@ public class CDOXACommitContextImpl implements InternalCDOXACommitContext
public CDOID provideCDOID(Object idOrObject)
{
CDOID id = getTransaction().provideCDOID(idOrObject);
-
if (id instanceof CDOIDTempObjectExternalImpl)
{
if (idOrObject instanceof InternalEObject)
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXATransactionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXATransactionImpl.java
index 5334a9e03b..d17293601d 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXATransactionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXATransactionImpl.java
@@ -38,6 +38,7 @@ import org.eclipse.emf.spi.cdo.InternalCDOXASavepoint;
import org.eclipse.emf.spi.cdo.InternalCDOXATransaction;
import org.eclipse.emf.spi.cdo.CDOSessionProtocol.CommitTransactionResult;
import org.eclipse.emf.spi.cdo.InternalCDOTransaction.InternalCDOCommitContext;
+import org.eclipse.emf.spi.cdo.InternalCDOXATransaction.InternalCDOXACommitContext.CDOXAState;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
@@ -94,17 +95,17 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
private ExecutorService executorService = createExecutorService();
- private Map<InternalCDOTransaction, CDOXACommitContextImpl> activeContext = new HashMap<InternalCDOTransaction, CDOXACommitContextImpl>();
+ private Map<InternalCDOTransaction, InternalCDOXACommitContext> activeContext = new HashMap<InternalCDOTransaction, InternalCDOXACommitContext>();
private Map<InternalCDOTransaction, Set<CDOID>> requestedCDOID = new HashMap<InternalCDOTransaction, Set<CDOID>>();
- private InternalCDOXASavepoint lastSavepoint = new CDOXASavepointImpl(this, null);
+ private InternalCDOXASavepoint lastSavepoint = createSavepoint(null);
private InternalCDOXASavepoint firstSavepoint = lastSavepoint;
- private CDOTransactionStrategy transactionStrategy = new CDOXATransactionStrategyImpl();
+ private CDOTransactionStrategy transactionStrategy = createTransactionStrategy();
- private CDOXAInternalAdapter internalAdapter = new CDOXAInternalAdapter();
+ private CDOXAInternalAdapter internalAdapter = createInternalAdapter();
public CDOXATransactionImpl()
{
@@ -162,15 +163,15 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
viewSet.eAdapters().remove(internalAdapter);
};
- public void add(InternalCDOTransaction view, CDOID object)
+ public void add(InternalCDOTransaction transaction, CDOID object)
{
synchronized (requestedCDOID)
{
- Set<CDOID> ids = requestedCDOID.get(view);
+ Set<CDOID> ids = requestedCDOID.get(transaction);
if (ids == null)
{
ids = new HashSet<CDOID>();
- requestedCDOID.put(view, ids);
+ requestedCDOID.put(transaction, ids);
}
ids.add(object);
@@ -183,12 +184,12 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
return ids.toArray(new CDOID[ids.size()]);
}
- public CDOXACommitContextImpl getCommitContext(CDOTransaction transaction)
+ public InternalCDOXACommitContext getCommitContext(CDOTransaction transaction)
{
return activeContext.get(transaction);
}
- private void send(Collection<CDOXACommitContextImpl> xaContexts, final IProgressMonitor progressMonitor)
+ private void send(Collection<InternalCDOXACommitContext> xaContexts, final IProgressMonitor progressMonitor)
throws InterruptedException, ExecutionException
{
progressMonitor.beginTask("", xaContexts.size()); //$NON-NLS-1$
@@ -196,7 +197,7 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
try
{
List<Future<Object>> futures = new ArrayList<Future<Object>>();
- for (CDOXACommitContextImpl xaContext : xaContexts)
+ for (InternalCDOXACommitContext xaContext : xaContexts)
{
xaContext.setProgressMonitor(new SynchonizedSubProgressMonitor(progressMonitor, 1));
futures.add(executorService.submit(xaContext));
@@ -222,7 +223,7 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
finally
{
progressMonitor.done();
- for (CDOXACommitContextImpl xaContext : xaContexts)
+ for (InternalCDOXACommitContext xaContext : xaContexts)
{
xaContext.setProgressMonitor(null);
}
@@ -263,7 +264,7 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
for (InternalCDOTransaction transaction : transactions)
{
InternalCDOCommitContext context = transaction.createCommitContext();
- CDOXACommitContextImpl xaContext = new CDOXACommitContextImpl(this, context);
+ InternalCDOXACommitContext xaContext = createXACommitContext(context);
xaContext.setState(CDOXAPhase1State.INSTANCE);
activeContext.put(transaction, xaContext);
}
@@ -282,9 +283,9 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
if (phase < 2)
{
// Phase 0 and 1 are the only two phases we can cancel.
- for (CDOXACommitContextImpl transaction : activeContext.values())
+ for (InternalCDOXACommitContext xaContext : activeContext.values())
{
- transaction.setState(CDOXACancel.INSTANCE);
+ xaContext.setState(CDOXACancel.INSTANCE);
}
try
@@ -352,10 +353,35 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
}
getLastSavepoint().setSavepoints(savepoints);
- lastSavepoint = new CDOXASavepointImpl(this, getLastSavepoint());
+ lastSavepoint = createSavepoint(getLastSavepoint());
return lastSavepoint;
}
+ protected CDOXACommitContextImpl createXACommitContext(InternalCDOCommitContext context)
+ {
+ return new CDOXACommitContextImpl(this, context);
+ }
+
+ protected CDOXATransactionStrategyImpl createTransactionStrategy()
+ {
+ return new CDOXATransactionStrategyImpl(this);
+ }
+
+ protected CDOXAInternalAdapter createInternalAdapter()
+ {
+ return new CDOXAInternalAdapter(this);
+ }
+
+ protected CDOXASavepointImpl createSavepoint(InternalCDOXASavepoint lastSavepoint)
+ {
+ return new CDOXASavepointImpl(this, lastSavepoint);
+ }
+
+ protected ExecutorService createExecutorService()
+ {
+ return Executors.newFixedThreadPool(10);
+ }
+
private List<CDOSavepoint> getListSavepoints()
{
synchronized (transactions)
@@ -370,9 +396,58 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
}
}
- protected ExecutorService createExecutorService()
+ /**
+ * @author Simon McDuff
+ */
+ public static class CDOXAInternalAdapter implements Adapter
{
- return Executors.newFixedThreadPool(10);
+ private InternalCDOXATransaction xaTransaction;
+
+ public CDOXAInternalAdapter(InternalCDOXATransaction xaTransaction)
+ {
+ this.xaTransaction = xaTransaction;
+ }
+
+ public InternalCDOXATransaction getXATransaction()
+ {
+ return xaTransaction;
+ }
+
+ public Notifier getTarget()
+ {
+ return null;
+ }
+
+ public boolean isAdapterForType(Object type)
+ {
+ return false;
+ }
+
+ public void notifyChanged(Notification notification)
+ {
+ switch (notification.getEventType())
+ {
+ case Notification.ADD:
+ if (notification.getNewValue() instanceof InternalCDOTransaction)
+ {
+ getXATransaction().add((InternalCDOTransaction)notification.getNewValue());
+ }
+
+ break;
+
+ case Notification.REMOVE:
+ if (notification.getOldValue() instanceof InternalCDOTransaction)
+ {
+ getXATransaction().remove((InternalCDOTransaction)notification.getNewValue());
+ }
+
+ break;
+ }
+ }
+
+ public void setTarget(Notifier newTarget)
+ {
+ }
}
/**
@@ -380,8 +455,11 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
*/
private final class CDOXATransactionStrategyImpl implements CDOTransactionStrategy
{
- public CDOXATransactionStrategyImpl()
+ private InternalCDOXATransaction xaTransaction;
+
+ public CDOXATransactionStrategyImpl(InternalCDOXATransaction xaTransaction)
{
+ this.xaTransaction = xaTransaction;
}
public void setTarget(InternalCDOTransaction transaction)
@@ -411,56 +489,31 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
public void commit(InternalCDOTransaction transactionCommit, IProgressMonitor progressMonitor) throws Exception
{
checkAccess();
- CDOXATransactionImpl.this.commit(progressMonitor);
+ xaTransaction.commit(progressMonitor);
}
public void rollback(InternalCDOTransaction transaction, InternalCDOUserSavepoint savepoint)
{
checkAccess();
- CDOXATransactionImpl.this.rollback((InternalCDOXASavepoint)savepoint);
+ xaTransaction.rollback((InternalCDOXASavepoint)savepoint);
}
public InternalCDOUserSavepoint setSavepoint(InternalCDOTransaction transaction)
{
checkAccess();
- return CDOXATransactionImpl.this.setSavepoint();
+ return xaTransaction.setSavepoint();
}
}
/**
* @author Simon McDuff
*/
- public static abstract class CDOXAState
- {
- public static final CDOXAState DONE = new CDOXAState()
- {
- @Override
- protected void handle(CDOXACommitContextImpl xaContext, IProgressMonitor progressMonitor) throws Exception
- {
- progressMonitor.done();
- }
- };
-
- protected void check_result(CommitTransactionResult result)
- {
- if (result != null && result.getRollbackMessage() != null)
- {
- throw new TransactionException(result.getRollbackMessage());
- }
- }
-
- protected abstract void handle(CDOXACommitContextImpl xaContext, IProgressMonitor progressMonitor) throws Exception;
- };
-
- /**
- * @author Simon McDuff
- */
public static class CDOXAPhase1State extends CDOXAState
{
public static final CDOXAPhase1State INSTANCE = new CDOXAPhase1State();
@Override
- protected void handle(CDOXACommitContextImpl xaContext, IProgressMonitor progressMonitor) throws Exception
+ public void handle(InternalCDOXACommitContext xaContext, IProgressMonitor progressMonitor) throws Exception
{
xaContext.preCommit();
CommitTransactionResult result = null;
@@ -489,7 +542,7 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
}
@Override
- protected void handle(CDOXACommitContextImpl xaContext, IProgressMonitor progressMonitor) throws Exception
+ public void handle(InternalCDOXACommitContext xaContext, IProgressMonitor progressMonitor) throws Exception
{
if (xaContext.getTransaction().isDirty())
{
@@ -515,7 +568,7 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
}
@Override
- protected void handle(CDOXACommitContextImpl xaContext, IProgressMonitor progressMonitor) throws Exception
+ public void handle(InternalCDOXACommitContext xaContext, IProgressMonitor progressMonitor) throws Exception
{
if (xaContext.getTransaction().isDirty())
{
@@ -542,63 +595,12 @@ public class CDOXATransactionImpl implements InternalCDOXATransaction
}
@Override
- protected void handle(CDOXACommitContextImpl xaContext, IProgressMonitor progressMonitor) throws Exception
+ public void handle(InternalCDOXACommitContext xaContext, IProgressMonitor progressMonitor) throws Exception
{
CDOSessionProtocol sessionProtocol = xaContext.getTransaction().getSession().getSessionProtocol();
OMMonitor monitor = new EclipseMonitor(progressMonitor);
CommitTransactionResult result = sessionProtocol.commitTransactionCancel(xaContext, monitor);
check_result(result);
}
- };
-
- /**
- * @author Simon McDuff
- */
- public class CDOXAInternalAdapter implements Adapter
- {
- public CDOXAInternalAdapter()
- {
- }
-
- public CDOXATransactionImpl getCDOXA()
- {
- return CDOXATransactionImpl.this;
- }
-
- public Notifier getTarget()
- {
- return null;
- }
-
- public boolean isAdapterForType(Object type)
- {
- return false;
- }
-
- public void notifyChanged(Notification notification)
- {
- switch (notification.getEventType())
- {
- case Notification.ADD:
- if (notification.getNewValue() instanceof InternalCDOTransaction)
- {
- CDOXATransactionImpl.this.add((InternalCDOTransaction)notification.getNewValue());
- }
-
- break;
-
- case Notification.REMOVE:
- if (notification.getOldValue() instanceof InternalCDOTransaction)
- {
- CDOXATransactionImpl.this.remove((InternalCDOTransaction)notification.getNewValue());
- }
-
- break;
- }
- }
-
- public void setTarget(Notifier newTarget)
- {
- }
}
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXATransaction.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXATransaction.java
index f20185e189..3d3fc0b4dd 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXATransaction.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXATransaction.java
@@ -10,14 +10,19 @@
**************************************************************************/
package org.eclipse.emf.spi.cdo;
+import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectExternalImpl;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.transaction.CDOXATransaction;
+import org.eclipse.net4j.util.transaction.TransactionException;
+
import org.eclipse.emf.spi.cdo.CDOSessionProtocol.CommitTransactionResult;
import org.eclipse.emf.spi.cdo.InternalCDOTransaction.InternalCDOCommitContext;
+import org.eclipse.core.runtime.IProgressMonitor;
+
import java.util.Map;
import java.util.concurrent.Callable;
@@ -42,6 +47,21 @@ public interface InternalCDOXATransaction extends CDOXATransaction, InternalCDOU
*/
public void rollback(InternalCDOXASavepoint savepoint);
+ /**
+ * @since 3.0
+ */
+ public void add(InternalCDOTransaction transaction, CDOID object);
+
+ /**
+ * @since 3.0
+ */
+ public void add(InternalCDOTransaction transaction);
+
+ /**
+ * @since 3.0
+ */
+ public void remove(InternalCDOTransaction transaction);
+
public InternalCDOXACommitContext getCommitContext(CDOTransaction transaction);
/**
@@ -55,5 +75,52 @@ public interface InternalCDOXATransaction extends CDOXATransaction, InternalCDOU
public Map<CDOIDTempObjectExternalImpl, InternalCDOTransaction> getRequestedIDs();
public CommitTransactionResult getResult();
+
+ /**
+ * @since 3.0
+ */
+ public void setResult(CommitTransactionResult result);
+
+ /**
+ * @since 3.0
+ */
+ public CDOXAState getState();
+
+ /**
+ * @since 3.0
+ */
+ public void setState(CDOXAState state);
+
+ /**
+ * @since 3.0
+ */
+ public void setProgressMonitor(IProgressMonitor progressMonitor);
+
+ /**
+ * @author Simon McDuff
+ * @since 3.0
+ */
+ public static abstract class CDOXAState
+ {
+ public static final CDOXAState DONE = new CDOXAState()
+ {
+ @Override
+ public void handle(InternalCDOXACommitContext xaContext, IProgressMonitor progressMonitor) throws Exception
+ {
+ progressMonitor.done();
+ }
+ };
+
+ public void check_result(CommitTransactionResult result)
+ {
+ if (result != null && result.getRollbackMessage() != null)
+ {
+ throw new TransactionException(result.getRollbackMessage());
+ }
+ }
+
+ public abstract void handle(InternalCDOXACommitContext xaContext, IProgressMonitor progressMonitor)
+ throws Exception;
+ }
}
}

Back to the top