use of com.arjuna.ats.internal.jta.transaction.arjunacore.jca.TransactionImporter in project narayana by jbosstm.
the class XATerminatorImple method getXidsToRecoverForParentNode.
public Xid[] getXidsToRecoverForParentNode(boolean recoverInFlight, String parentNodeName, int recoveryFlags) throws XAException {
final Set<Xid> xidsToRecover = new HashSet<Xid>();
if (recoverInFlight) {
final TransactionImporter transactionImporter = SubordinationManager.getTransactionImporter();
if (transactionImporter instanceof TransactionImporterImple) {
throw new UnsupportedOperationException(jtaxLogger.i18NLogger.get_not_supported());
}
}
final javax.resource.spi.XATerminator xaTerminator = SubordinationManager.getXATerminator();
if (xaTerminator instanceof XATerminatorImple) {
throw new UnsupportedOperationException(jtaxLogger.i18NLogger.get_not_supported());
} else {
final Xid[] inDoubtTransactions = xaTerminator.recover(recoveryFlags);
if (inDoubtTransactions != null) {
xidsToRecover.addAll(Arrays.asList(inDoubtTransactions));
}
}
return xidsToRecover.toArray(NO_XIDS);
}
use of com.arjuna.ats.internal.jta.transaction.arjunacore.jca.TransactionImporter in project narayana by jbosstm.
the class XATerminatorImpleUnitTest method testForget.
@Test
public void testForget() throws Exception {
XidImple xid = new XidImple(new Uid());
TransactionImporter imp = SubordinationManager.getTransactionImporter();
imp.importTransaction(xid);
XATerminatorImple xa = new XATerminatorImple();
xa.forget(xid);
}
use of com.arjuna.ats.internal.jta.transaction.arjunacore.jca.TransactionImporter in project narayana by jbosstm.
the class XATerminatorImpleUnitTest method testOnePhaseCommit.
@Test
public void testOnePhaseCommit() throws Exception {
XidImple xid = new XidImple(new Uid());
TransactionImporter imp = SubordinationManager.getTransactionImporter();
imp.importTransaction(xid);
XATerminatorImple xa = new XATerminatorImple();
xa.commit(xid, true);
}
use of com.arjuna.ats.internal.jta.transaction.arjunacore.jca.TransactionImporter in project narayana by jbosstm.
the class XATerminatorImpleUnitTest method testRecover.
@Test
public void testRecover() throws Exception {
XidImple xid = new XidImple(new Uid());
TransactionImporter imp = SubordinationManager.getTransactionImporter();
imp.importTransaction(xid);
XATerminatorImple xa = new XATerminatorImple();
xa.recover(XAResource.TMSTARTRSCAN);
try {
xa.recover(XAResource.TMSTARTRSCAN);
fail();
} catch (final Exception ex) {
}
xa.recover(XAResource.TMENDRSCAN);
}
use of com.arjuna.ats.internal.jta.transaction.arjunacore.jca.TransactionImporter in project narayana by jbosstm.
the class XATerminatorImpleUnitTest method testXARetry.
@Test
public void testXARetry() throws Exception {
XidImple xid = new XidImple(new Uid());
TransactionImporter imp = SubordinationManager.getTransactionImporter();
SubordinateTransaction subordinateTransaction = imp.importTransaction(xid);
XATerminatorImple xa = new XATerminatorImple();
subordinateTransaction.enlistResource(new XAResource() {
@Override
public void commit(Xid xid, boolean b) throws XAException {
}
@Override
public void end(Xid xid, int i) throws XAException {
}
@Override
public void forget(Xid xid) throws XAException {
}
@Override
public int getTransactionTimeout() throws XAException {
return 0;
}
@Override
public boolean isSameRM(XAResource xaResource) throws XAException {
return false;
}
@Override
public int prepare(Xid xid) throws XAException {
return 0;
}
@Override
public Xid[] recover(int i) throws XAException {
return new Xid[0];
}
@Override
public void rollback(Xid xid) throws XAException {
}
@Override
public boolean setTransactionTimeout(int i) throws XAException {
return false;
}
@Override
public void start(Xid xid, int i) throws XAException {
}
});
subordinateTransaction.enlistResource(new XAResource() {
boolean firstAttempt = true;
@Override
public void commit(Xid xid, boolean b) throws XAException {
if (firstAttempt) {
try {
failedResourceXid = xid;
throw new XAException(XAException.XA_RETRY);
} finally {
firstAttempt = false;
}
}
if (failedResourceXid != null) {
failedResourceXid = null;
} else {
throw new XAException(XAException.XAER_PROTO);
}
}
@Override
public void end(Xid xid, int i) throws XAException {
}
@Override
public void forget(Xid xid) throws XAException {
}
@Override
public int getTransactionTimeout() throws XAException {
return 0;
}
@Override
public boolean isSameRM(XAResource xaResource) throws XAException {
return false;
}
@Override
public int prepare(Xid xid) throws XAException {
return 0;
}
@Override
public Xid[] recover(int i) throws XAException {
return new Xid[0];
}
@Override
public void rollback(Xid xid) throws XAException {
}
@Override
public boolean setTransactionTimeout(int i) throws XAException {
return false;
}
@Override
public void start(Xid xid, int i) throws XAException {
}
});
assertEquals(xa.prepare(xid), XAResource.XA_OK);
try {
xa.commit(xid, false);
fail("Expecting XATerminator throwing XAException as commit should fail" + " as TestXAResource was instructed to throw an exception");
} catch (final XAException ex) {
assertEquals("XATerminator commit should throw XAER_RMFAIL when commit fails", XAException.XAER_RMFAIL, ex.errorCode);
}
Implementationsx.initialise();
xa.recover(XAResource.TMSTARTRSCAN);
assertNotNull(failedResourceXid);
try {
xa.commit(xid, false);
} catch (XAException expected) {
Assert.assertTrue("On commit XAException error code indicating more recover call is expected but it's " + expected.errorCode, XAException.XA_RETRY == expected.errorCode || XAException.XAER_RMFAIL == expected.errorCode);
} finally {
xa.recover(XAResource.TMENDRSCAN);
}
assertNull(failedResourceXid);
}
Aggregations