use of javax.resource.spi.XATerminator in project narayana by jbosstm.
the class SubordinateTestCase method testFailOnCommitRetry.
@Test
public void testFailOnCommitRetry() throws Exception {
final Xid xid = new XidImple(new Uid());
final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid);
final TestXAResource xaResource = new TestXAResource();
xaResource.setCommitException(new XAException(XAException.XA_RETRY));
t.enlistResource(xaResource);
final XATerminator xaTerminator = SubordinationManager.getXATerminator();
Xid[] recover1 = xaTerminator.recover(XAResource.TMSTARTRSCAN);
xaTerminator.recover(XAResource.TMENDRSCAN);
xaTerminator.prepare(xid);
try {
xaTerminator.commit(xid, false);
fail("Expected an error");
} catch (XAException e) {
assertTrue(e.errorCode == XAException.XAER_RMFAIL);
}
Xid[] recover2 = xaTerminator.recover(XAResource.TMSTARTRSCAN);
xaTerminator.recover(XAResource.TMENDRSCAN);
if (recover1 == null) {
recover1 = new Xid[0];
}
int difference = recover2.length - recover1.length;
assertTrue("" + difference, difference == 1);
}
use of javax.resource.spi.XATerminator in project narayana by jbosstm.
the class SubordinateTestCase method testOnePhaseCommitSyncViaXATerminatorWithSeparateSync.
@Test
public void testOnePhaseCommitSyncViaXATerminatorWithSeparateSync() throws Exception {
final Xid xid = new XidImple(new Uid());
final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid);
final TestSynchronization sync = new TestSynchronization();
t.registerSynchronization(sync);
final XATerminator xaTerminator = SubordinationManager.getXATerminator();
final XATerminatorExtensions xaTerminatorExtensions = (XATerminatorExtensions) xaTerminator;
xaTerminatorExtensions.beforeCompletion(xid);
xaTerminator.commit(xid, true);
assertTrue(sync.isBeforeCompletionDone());
assertTrue(sync.isAfterCompletionDone());
assertEquals(javax.transaction.Status.STATUS_COMMITTED, t.getStatus());
}
use of javax.resource.spi.XATerminator in project narayana by jbosstm.
the class SubordinateTestCase method testFailOnCommit.
@Test
public void testFailOnCommit() throws Exception {
final Xid xid = new XidImple(new Uid());
final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid);
final TestXAResource xaResource = new TestXAResource();
// provoke commit into failing with TwoPhaseOutcome.FINISH_ERROR
// warning: this is sensitive to the impl exception handling in
// XAResourceRecord.topLevelCommit
// throw a little spice into things!
xaResource.setCommitException(new XAException(XAException.XA_HEURHAZ));
t.enlistResource(xaResource);
final XATerminator xaTerminator = SubordinationManager.getXATerminator();
try {
xaTerminator.prepare(xid);
xaTerminator.commit(xid, false);
} catch (final XAException ex) {
return;
}
assertTrue("commit should throw an exception and not get to here", false);
}
use of javax.resource.spi.XATerminator in project narayana by jbosstm.
the class SubordinateTestCase method testTwoPhaseCommitSyncViaXATerminator.
@Test
public void testTwoPhaseCommitSyncViaXATerminator() throws Exception {
final Xid xid = new XidImple(new Uid());
final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid);
final TestSynchronization sync = new TestSynchronization();
t.registerSynchronization(sync);
final XATerminator xaTerminator = SubordinationManager.getXATerminator();
assertEquals(XAResource.XA_RDONLY, xaTerminator.prepare(xid));
// don't call commit for read only case
assertTrue(sync.isBeforeCompletionDone());
assertTrue(sync.isAfterCompletionDone());
assertEquals(javax.transaction.Status.STATUS_COMMITTED, t.getStatus());
}
use of javax.resource.spi.XATerminator in project narayana by jbosstm.
the class SubordinateTestCase method testTwoPhaseCommitSyncWithXAOKViaXATerminatorWithSeparateSync.
@Test
public void testTwoPhaseCommitSyncWithXAOKViaXATerminatorWithSeparateSync() throws Exception {
final Xid xid = new XidImple(new Uid());
final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid);
final TestSynchronization sync = new TestSynchronization();
t.registerSynchronization(sync);
final TestXAResource xaResource = new TestXAResource();
xaResource.setPrepareReturnValue(XAResource.XA_OK);
t.enlistResource(xaResource);
final XATerminator xaTerminator = SubordinationManager.getXATerminator();
final XATerminatorExtensions xaTerminatorExtensions = (XATerminatorExtensions) xaTerminator;
xaTerminatorExtensions.beforeCompletion(xid);
assertEquals(XAResource.XA_OK, xaTerminator.prepare(xid));
xaTerminator.commit(xid, false);
assertTrue(sync.isBeforeCompletionDone());
assertTrue(sync.isAfterCompletionDone());
assertEquals(javax.transaction.Status.STATUS_COMMITTED, t.getStatus());
}
Aggregations