Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/XATransactionTest.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/XATransactionTest.java702
1 files changed, 351 insertions, 351 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/XATransactionTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/XATransactionTest.java
index 1785b7ea70..3fb7654fc8 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/XATransactionTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/XATransactionTest.java
@@ -1,351 +1,351 @@
-/*
- * Copyright (c) 2004 - 2012 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:
- * Simon McDuff - initial API and implementation
- * Eike Stepper - maintenance
- */
-package org.eclipse.emf.cdo.tests;
-
-import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.cdo.tests.config.IModelConfig;
-import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
-import org.eclipse.emf.cdo.tests.model1.PurchaseOrder;
-import org.eclipse.emf.cdo.tests.model1.Supplier;
-import org.eclipse.emf.cdo.tests.model2.SpecialPurchaseOrder;
-import org.eclipse.emf.cdo.tests.model4.GenRefSingleNonContained;
-import org.eclipse.emf.cdo.transaction.CDOTransaction;
-import org.eclipse.emf.cdo.transaction.CDOUserSavepoint;
-import org.eclipse.emf.cdo.transaction.CDOXATransaction;
-import org.eclipse.emf.cdo.util.CDOUtil;
-import org.eclipse.emf.cdo.util.CommitException;
-
-import org.eclipse.emf.internal.cdo.session.SessionUtil;
-
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.emf.spi.cdo.InternalCDOTransaction;
-
-import java.util.Date;
-
-/**
- * @author Simon McDuff
- */
-public class XATransactionTest extends AbstractCDOTest
-{
- final static public String REPOSITORY2_NAME = "repo2";
-
- public void testRollback() throws Exception
- {
- getRepository(REPOSITORY2_NAME);
-
- CDOSession sessionA = openSession();
- CDOSession sessionB = openSession(REPOSITORY2_NAME);
-
- ResourceSet resourceSet = new ResourceSetImpl();
- CDOXATransaction xaTransaction = CDOUtil.createXATransaction();
-
- SessionUtil.prepareResourceSet(resourceSet);
- xaTransaction.add(CDOUtil.getViewSet(resourceSet));
-
- sessionA.getPackageRegistry().putEPackage(getModel1Package());
- sessionB.getPackageRegistry().putEPackage(getModel1Package());
-
- CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
- CDOTransaction transactionB1 = sessionB.openTransaction(resourceSet);
-
- CDOResource resA = transactionA1.createResource("/resA");
- CDOResource resB = transactionB1.createResource("/resB");
-
- Supplier supplier = getModel1Factory().createSupplier();
- PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder();
-
- supplier.getPurchaseOrders().add(purchaseOrder);
- resB.getContents().add(supplier);
- resA.getContents().add(purchaseOrder);
-
- assertNew(resA, transactionA1);
- assertNew(resB, transactionB1);
-
- xaTransaction.rollback();
-
- assertTransient(resA);
- assertTransient(resB);
-
- xaTransaction.commit();
- }
-
- @CleanRepositoriesBefore
- public void testRollback_AfterSetpoint() throws Exception
- {
- skipStoreWithoutExternalReferences();
- getRepository(REPOSITORY2_NAME);
-
- CDOSession sessionA = openSession();
- CDOSession sessionB = openSession(REPOSITORY2_NAME);
-
- ResourceSet resourceSet = new ResourceSetImpl();
- CDOXATransaction xaTransaction = CDOUtil.createXATransaction();
-
- SessionUtil.prepareResourceSet(resourceSet);
- xaTransaction.add(CDOUtil.getViewSet(resourceSet));
-
- sessionA.getPackageRegistry().putEPackage(getModel1Package());
- sessionB.getPackageRegistry().putEPackage(getModel1Package());
-
- CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
- CDOTransaction transactionB1 = sessionB.openTransaction(resourceSet);
-
- CDOResource resA = transactionA1.createResource("/resA");
- CDOResource resB = transactionB1.createResource("/resB");
-
- Supplier supplier = getModel1Factory().createSupplier();
- PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder();
-
- supplier.getPurchaseOrders().add(purchaseOrder);
- resB.getContents().add(supplier);
- resA.getContents().add(purchaseOrder);
-
- assertNew(resA, transactionA1);
- assertNew(resB, transactionB1);
-
- CDOUserSavepoint savepoint1 = xaTransaction.setSavepoint();
-
- purchaseOrder.setDate(new Date());
- supplier.setCity("OTTAWA");
-
- CDOUserSavepoint savepoint2 = xaTransaction.setSavepoint();
-
- savepoint1.rollback();
-
- assertNew(resA, transactionA1);
- assertNew(resB, transactionB1);
-
- assertEquals(null, supplier.getCity());
- assertEquals(null, purchaseOrder.getDate());
- assertEquals(supplier, purchaseOrder.getSupplier());
-
- try
- {
- savepoint2.rollback();
- fail("Should have an exception");
- }
- catch (Exception ex)
- {
- }
-
- xaTransaction.commit();
- }
-
- // XXX disabled because of Bug 290097
- @Skips("Postgresql")
- public void testCommitFromTransactionDisabled() throws Exception
- {
- skipStoreWithoutExternalReferences();
- getRepository(REPOSITORY2_NAME);
-
- {
- CDOSession sessionA = openSession();
- sessionA.getPackageRegistry().putEPackage(getModel4InterfacesPackage());
- sessionA.getPackageRegistry().putEPackage(getModel4Package());
-
- CDOSession sessionB = openSession(REPOSITORY2_NAME);
- sessionB.getPackageRegistry().putEPackage(getModel4InterfacesPackage());
- sessionB.getPackageRegistry().putEPackage(getModel4Package());
-
- ResourceSet resourceSet = new ResourceSetImpl();
- CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
- CDOTransaction transactionB1 = sessionB.openTransaction(resourceSet);
-
- CDOResource resA = transactionA1.createResource(getResourcePath("/resA"));
- CDOResource resB = transactionB1.createResource(getResourcePath("/resB"));
-
- ((InternalCDOTransaction)transactionA1).setTransactionStrategy(null);
- GenRefSingleNonContained objectFromResA = getModel4Factory().createGenRefSingleNonContained();
- GenRefSingleNonContained objectFromResB = getModel4Factory().createGenRefSingleNonContained();
-
- objectFromResA.setElement(objectFromResB);
- resA.getContents().add(objectFromResA);
- resB.getContents().add(objectFromResB);
-
- CDOXATransaction transSet = CDOUtil.createXATransaction();
- transSet.setAllowRequestFromTransactionEnabled(false);
- transSet.add(CDOUtil.getViewSet(resourceSet));
-
- try
- {
- transactionA1.commit();
- fail("CommitException expected");
- }
- catch (CommitException exp)
- {
- }
-
- transSet.commit();
- }
- }
-
- // Skip this test until the problems with XATransactions are solved.
- @Skips({ IModelConfig.CAPABILITY_LEGACY, IRepositoryConfig.CAPABILITY_UUIDS, "DB" })
- public void testNotUsingXATransaction_Exception() throws Exception
- {
- skipStoreWithoutExternalReferences();
- getRepository(REPOSITORY2_NAME);
-
- {
- CDOSession sessionA = openSession();
- sessionA.getPackageRegistry().putEPackage(getModel4InterfacesPackage());
- sessionA.getPackageRegistry().putEPackage(getModel4Package());
-
- CDOSession sessionB = openSession(REPOSITORY2_NAME);
- sessionB.getPackageRegistry().putEPackage(getModel4InterfacesPackage());
- sessionB.getPackageRegistry().putEPackage(getModel4Package());
-
- ResourceSet resourceSet = new ResourceSetImpl();
- CDOTransaction transactionA = sessionA.openTransaction(resourceSet);
- CDOTransaction transactionB = sessionB.openTransaction(resourceSet);
-
- CDOResource resA = transactionA.createResource(getResourcePath("/resA"));
- CDOResource resB = transactionB.createResource(getResourcePath("/resB"));
- GenRefSingleNonContained objectFromResA = getModel4Factory().createGenRefSingleNonContained();
- GenRefSingleNonContained objectFromResB = getModel4Factory().createGenRefSingleNonContained();
-
- objectFromResA.setElement(objectFromResB);
- resA.getContents().add(objectFromResA);
- resB.getContents().add(objectFromResB);
-
- try
- {
- transactionA.commit(); // Would not fail with IDGenerationLocation.CLIENT!
- fail("CommitException expected");
- }
- catch (CommitException expected)
- {
- }
-
- CDOXATransaction transSet = CDOUtil.createXATransaction();
- transSet.add(CDOUtil.getViewSet(resourceSet));
-
- transactionA.commit();
- }
- }
-
- // XXX disabled because of Bug 290097
- @Skips("Postgresql")
- @CleanRepositoriesBefore
- public void test_ExceptionInReadingStream() throws Exception
- {
- skipStoreWithoutExternalReferences();
- getRepository(REPOSITORY2_NAME);
-
- CDOSession sessionA = openSession();
- CDOSession sessionB = openSession(REPOSITORY2_NAME);
-
- ResourceSet resourceSet = new ResourceSetImpl();
- CDOXATransaction xaTransaction = CDOUtil.createXATransaction();
-
- SessionUtil.prepareResourceSet(resourceSet);
- xaTransaction.add(CDOUtil.getViewSet(resourceSet));
-
- sessionA.getPackageRegistry().putEPackage(getModel1Package());
- sessionB.getPackageRegistry().putEPackage(getModel1Package());
-
- CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
- CDOTransaction transactionB1 = sessionB.openTransaction(resourceSet);
-
- CDOResource resA = transactionA1.createResource(getResourcePath("/resA"));
- CDOResource resB = transactionB1.createResource(getResourcePath("/resB"));
-
- Supplier supplier = getModel1Factory().createSupplier();
- PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder();
-
- supplier.getPurchaseOrders().add(purchaseOrder);
- resB.getContents().add(supplier);
- resA.getContents().add(purchaseOrder);
-
- assertNew(resA, transactionA1);
- assertNew(resB, transactionB1);
-
- xaTransaction.commit();
- SpecialPurchaseOrder order = getModel2Factory().createSpecialPurchaseOrder();
- resB.getContents().add(order);
- try
- {
- xaTransaction.commit();
- }
- catch (Exception ignore)
- {
- }
- }
-
- // Skip this test until the problems with XATransactions are solved.
- @Skips(IModelConfig.CAPABILITY_LEGACY)
- public void _test_ExceptionInWrite() throws Exception
- {
- getRepository(REPOSITORY2_NAME);
- getRepository("repo3");
-
- CDOSession sessionA = openSession();
- CDOSession sessionB = openSession(REPOSITORY2_NAME);
- CDOSession sessionC = openSession("repo3");
-
- ResourceSet resourceSet = new ResourceSetImpl();
- CDOXATransaction xaTransaction = CDOUtil.createXATransaction();
-
- SessionUtil.prepareResourceSet(resourceSet);
- xaTransaction.add(CDOUtil.getViewSet(resourceSet));
-
- sessionA.getPackageRegistry().putEPackage(getModel1Package());
- sessionB.getPackageRegistry().putEPackage(getModel1Package());
-
- CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
- CDOTransaction transactionB1 = sessionB.openTransaction(resourceSet);
-
- CDOResource resA = transactionA1.createResource("/resA");
- CDOResource resB = transactionB1.createResource("/resB");
-
- Supplier supplier = getModel1Factory().createSupplier();
- PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder();
-
- supplier.getPurchaseOrders().add(purchaseOrder);
- resB.getContents().add(supplier);
- resA.getContents().add(purchaseOrder);
-
- assertNew(resA, transactionA1);
- assertNew(resB, transactionB1);
-
- xaTransaction.commit();
-
- CDOTransaction transactionC1 = sessionC.openTransaction();
- sessionC.getPackageRegistry().putEPackage(getModel1Package());
-
- PurchaseOrder purchaseOrder3 = getModel1Factory().createPurchaseOrder();
- CDOResource resC = transactionC1.createResource("/resC");
- resC.getContents().add(purchaseOrder3);
- supplier.getPurchaseOrders().add(purchaseOrder3);
- purchaseOrder.setDate(new Date());
-
- try
- {
- xaTransaction.commit();
- fail("Should fail");
- }
- catch (Exception ignore)
- {
- }
-
- assertEquals(false, CDOUtil.getCDOObject(supplier).cdoWriteLock().isLocked());
- assertEquals(false, CDOUtil.getCDOObject(purchaseOrder).cdoWriteLock().isLocked());
-
- xaTransaction.rollback();
-
- transactionA1.waitForUpdate(transactionC1.getLastCommitTime(), DEFAULT_TIMEOUT);
- assertEquals(null, purchaseOrder.getDate());
- assertEquals(1, supplier.getPurchaseOrders().size());
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 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:
+ * Simon McDuff - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.tests;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.config.IModelConfig;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.model1.PurchaseOrder;
+import org.eclipse.emf.cdo.tests.model1.Supplier;
+import org.eclipse.emf.cdo.tests.model2.SpecialPurchaseOrder;
+import org.eclipse.emf.cdo.tests.model4.GenRefSingleNonContained;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.transaction.CDOUserSavepoint;
+import org.eclipse.emf.cdo.transaction.CDOXATransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+import org.eclipse.emf.cdo.util.CommitException;
+
+import org.eclipse.emf.internal.cdo.session.SessionUtil;
+
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.spi.cdo.InternalCDOTransaction;
+
+import java.util.Date;
+
+/**
+ * @author Simon McDuff
+ */
+public class XATransactionTest extends AbstractCDOTest
+{
+ final static public String REPOSITORY2_NAME = "repo2";
+
+ public void testRollback() throws Exception
+ {
+ getRepository(REPOSITORY2_NAME);
+
+ CDOSession sessionA = openSession();
+ CDOSession sessionB = openSession(REPOSITORY2_NAME);
+
+ ResourceSet resourceSet = new ResourceSetImpl();
+ CDOXATransaction xaTransaction = CDOUtil.createXATransaction();
+
+ SessionUtil.prepareResourceSet(resourceSet);
+ xaTransaction.add(CDOUtil.getViewSet(resourceSet));
+
+ sessionA.getPackageRegistry().putEPackage(getModel1Package());
+ sessionB.getPackageRegistry().putEPackage(getModel1Package());
+
+ CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
+ CDOTransaction transactionB1 = sessionB.openTransaction(resourceSet);
+
+ CDOResource resA = transactionA1.createResource("/resA");
+ CDOResource resB = transactionB1.createResource("/resB");
+
+ Supplier supplier = getModel1Factory().createSupplier();
+ PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder();
+
+ supplier.getPurchaseOrders().add(purchaseOrder);
+ resB.getContents().add(supplier);
+ resA.getContents().add(purchaseOrder);
+
+ assertNew(resA, transactionA1);
+ assertNew(resB, transactionB1);
+
+ xaTransaction.rollback();
+
+ assertTransient(resA);
+ assertTransient(resB);
+
+ xaTransaction.commit();
+ }
+
+ @CleanRepositoriesBefore
+ public void testRollback_AfterSetpoint() throws Exception
+ {
+ skipStoreWithoutExternalReferences();
+ getRepository(REPOSITORY2_NAME);
+
+ CDOSession sessionA = openSession();
+ CDOSession sessionB = openSession(REPOSITORY2_NAME);
+
+ ResourceSet resourceSet = new ResourceSetImpl();
+ CDOXATransaction xaTransaction = CDOUtil.createXATransaction();
+
+ SessionUtil.prepareResourceSet(resourceSet);
+ xaTransaction.add(CDOUtil.getViewSet(resourceSet));
+
+ sessionA.getPackageRegistry().putEPackage(getModel1Package());
+ sessionB.getPackageRegistry().putEPackage(getModel1Package());
+
+ CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
+ CDOTransaction transactionB1 = sessionB.openTransaction(resourceSet);
+
+ CDOResource resA = transactionA1.createResource("/resA");
+ CDOResource resB = transactionB1.createResource("/resB");
+
+ Supplier supplier = getModel1Factory().createSupplier();
+ PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder();
+
+ supplier.getPurchaseOrders().add(purchaseOrder);
+ resB.getContents().add(supplier);
+ resA.getContents().add(purchaseOrder);
+
+ assertNew(resA, transactionA1);
+ assertNew(resB, transactionB1);
+
+ CDOUserSavepoint savepoint1 = xaTransaction.setSavepoint();
+
+ purchaseOrder.setDate(new Date());
+ supplier.setCity("OTTAWA");
+
+ CDOUserSavepoint savepoint2 = xaTransaction.setSavepoint();
+
+ savepoint1.rollback();
+
+ assertNew(resA, transactionA1);
+ assertNew(resB, transactionB1);
+
+ assertEquals(null, supplier.getCity());
+ assertEquals(null, purchaseOrder.getDate());
+ assertEquals(supplier, purchaseOrder.getSupplier());
+
+ try
+ {
+ savepoint2.rollback();
+ fail("Should have an exception");
+ }
+ catch (Exception ex)
+ {
+ }
+
+ xaTransaction.commit();
+ }
+
+ // XXX disabled because of Bug 290097
+ @Skips("Postgresql")
+ public void testCommitFromTransactionDisabled() throws Exception
+ {
+ skipStoreWithoutExternalReferences();
+ getRepository(REPOSITORY2_NAME);
+
+ {
+ CDOSession sessionA = openSession();
+ sessionA.getPackageRegistry().putEPackage(getModel4InterfacesPackage());
+ sessionA.getPackageRegistry().putEPackage(getModel4Package());
+
+ CDOSession sessionB = openSession(REPOSITORY2_NAME);
+ sessionB.getPackageRegistry().putEPackage(getModel4InterfacesPackage());
+ sessionB.getPackageRegistry().putEPackage(getModel4Package());
+
+ ResourceSet resourceSet = new ResourceSetImpl();
+ CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
+ CDOTransaction transactionB1 = sessionB.openTransaction(resourceSet);
+
+ CDOResource resA = transactionA1.createResource(getResourcePath("/resA"));
+ CDOResource resB = transactionB1.createResource(getResourcePath("/resB"));
+
+ ((InternalCDOTransaction)transactionA1).setTransactionStrategy(null);
+ GenRefSingleNonContained objectFromResA = getModel4Factory().createGenRefSingleNonContained();
+ GenRefSingleNonContained objectFromResB = getModel4Factory().createGenRefSingleNonContained();
+
+ objectFromResA.setElement(objectFromResB);
+ resA.getContents().add(objectFromResA);
+ resB.getContents().add(objectFromResB);
+
+ CDOXATransaction transSet = CDOUtil.createXATransaction();
+ transSet.setAllowRequestFromTransactionEnabled(false);
+ transSet.add(CDOUtil.getViewSet(resourceSet));
+
+ try
+ {
+ transactionA1.commit();
+ fail("CommitException expected");
+ }
+ catch (CommitException exp)
+ {
+ }
+
+ transSet.commit();
+ }
+ }
+
+ // Skip this test until the problems with XATransactions are solved.
+ @Skips({ IModelConfig.CAPABILITY_LEGACY, IRepositoryConfig.CAPABILITY_UUIDS, "DB" })
+ public void testNotUsingXATransaction_Exception() throws Exception
+ {
+ skipStoreWithoutExternalReferences();
+ getRepository(REPOSITORY2_NAME);
+
+ {
+ CDOSession sessionA = openSession();
+ sessionA.getPackageRegistry().putEPackage(getModel4InterfacesPackage());
+ sessionA.getPackageRegistry().putEPackage(getModel4Package());
+
+ CDOSession sessionB = openSession(REPOSITORY2_NAME);
+ sessionB.getPackageRegistry().putEPackage(getModel4InterfacesPackage());
+ sessionB.getPackageRegistry().putEPackage(getModel4Package());
+
+ ResourceSet resourceSet = new ResourceSetImpl();
+ CDOTransaction transactionA = sessionA.openTransaction(resourceSet);
+ CDOTransaction transactionB = sessionB.openTransaction(resourceSet);
+
+ CDOResource resA = transactionA.createResource(getResourcePath("/resA"));
+ CDOResource resB = transactionB.createResource(getResourcePath("/resB"));
+ GenRefSingleNonContained objectFromResA = getModel4Factory().createGenRefSingleNonContained();
+ GenRefSingleNonContained objectFromResB = getModel4Factory().createGenRefSingleNonContained();
+
+ objectFromResA.setElement(objectFromResB);
+ resA.getContents().add(objectFromResA);
+ resB.getContents().add(objectFromResB);
+
+ try
+ {
+ transactionA.commit(); // Would not fail with IDGenerationLocation.CLIENT!
+ fail("CommitException expected");
+ }
+ catch (CommitException expected)
+ {
+ }
+
+ CDOXATransaction transSet = CDOUtil.createXATransaction();
+ transSet.add(CDOUtil.getViewSet(resourceSet));
+
+ transactionA.commit();
+ }
+ }
+
+ // XXX disabled because of Bug 290097
+ @Skips("Postgresql")
+ @CleanRepositoriesBefore
+ public void test_ExceptionInReadingStream() throws Exception
+ {
+ skipStoreWithoutExternalReferences();
+ getRepository(REPOSITORY2_NAME);
+
+ CDOSession sessionA = openSession();
+ CDOSession sessionB = openSession(REPOSITORY2_NAME);
+
+ ResourceSet resourceSet = new ResourceSetImpl();
+ CDOXATransaction xaTransaction = CDOUtil.createXATransaction();
+
+ SessionUtil.prepareResourceSet(resourceSet);
+ xaTransaction.add(CDOUtil.getViewSet(resourceSet));
+
+ sessionA.getPackageRegistry().putEPackage(getModel1Package());
+ sessionB.getPackageRegistry().putEPackage(getModel1Package());
+
+ CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
+ CDOTransaction transactionB1 = sessionB.openTransaction(resourceSet);
+
+ CDOResource resA = transactionA1.createResource(getResourcePath("/resA"));
+ CDOResource resB = transactionB1.createResource(getResourcePath("/resB"));
+
+ Supplier supplier = getModel1Factory().createSupplier();
+ PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder();
+
+ supplier.getPurchaseOrders().add(purchaseOrder);
+ resB.getContents().add(supplier);
+ resA.getContents().add(purchaseOrder);
+
+ assertNew(resA, transactionA1);
+ assertNew(resB, transactionB1);
+
+ xaTransaction.commit();
+ SpecialPurchaseOrder order = getModel2Factory().createSpecialPurchaseOrder();
+ resB.getContents().add(order);
+ try
+ {
+ xaTransaction.commit();
+ }
+ catch (Exception ignore)
+ {
+ }
+ }
+
+ // Skip this test until the problems with XATransactions are solved.
+ @Skips(IModelConfig.CAPABILITY_LEGACY)
+ public void _test_ExceptionInWrite() throws Exception
+ {
+ getRepository(REPOSITORY2_NAME);
+ getRepository("repo3");
+
+ CDOSession sessionA = openSession();
+ CDOSession sessionB = openSession(REPOSITORY2_NAME);
+ CDOSession sessionC = openSession("repo3");
+
+ ResourceSet resourceSet = new ResourceSetImpl();
+ CDOXATransaction xaTransaction = CDOUtil.createXATransaction();
+
+ SessionUtil.prepareResourceSet(resourceSet);
+ xaTransaction.add(CDOUtil.getViewSet(resourceSet));
+
+ sessionA.getPackageRegistry().putEPackage(getModel1Package());
+ sessionB.getPackageRegistry().putEPackage(getModel1Package());
+
+ CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
+ CDOTransaction transactionB1 = sessionB.openTransaction(resourceSet);
+
+ CDOResource resA = transactionA1.createResource("/resA");
+ CDOResource resB = transactionB1.createResource("/resB");
+
+ Supplier supplier = getModel1Factory().createSupplier();
+ PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder();
+
+ supplier.getPurchaseOrders().add(purchaseOrder);
+ resB.getContents().add(supplier);
+ resA.getContents().add(purchaseOrder);
+
+ assertNew(resA, transactionA1);
+ assertNew(resB, transactionB1);
+
+ xaTransaction.commit();
+
+ CDOTransaction transactionC1 = sessionC.openTransaction();
+ sessionC.getPackageRegistry().putEPackage(getModel1Package());
+
+ PurchaseOrder purchaseOrder3 = getModel1Factory().createPurchaseOrder();
+ CDOResource resC = transactionC1.createResource("/resC");
+ resC.getContents().add(purchaseOrder3);
+ supplier.getPurchaseOrders().add(purchaseOrder3);
+ purchaseOrder.setDate(new Date());
+
+ try
+ {
+ xaTransaction.commit();
+ fail("Should fail");
+ }
+ catch (Exception ignore)
+ {
+ }
+
+ assertEquals(false, CDOUtil.getCDOObject(supplier).cdoWriteLock().isLocked());
+ assertEquals(false, CDOUtil.getCDOObject(purchaseOrder).cdoWriteLock().isLocked());
+
+ xaTransaction.rollback();
+
+ transactionA1.waitForUpdate(transactionC1.getLastCommitTime(), DEFAULT_TIMEOUT);
+ assertEquals(null, purchaseOrder.getDate());
+ assertEquals(1, supplier.getPurchaseOrders().size());
+ }
+}

Back to the top