diff options
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.java | 702 |
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()); + } +} |