use of com.arjuna.ats.arjuna.common.Uid in project narayana by jbosstm.
the class XARecoveryModuleUnitTest method testRecoverPassFailure.
@Test
public void testRecoverPassFailure() throws Exception {
int orphanSafetyInterval = jtaPropertyManager.getJTAEnvironmentBean().getOrphanSafetyInterval();
List<String> xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes();
jtaPropertyManager.getJTAEnvironmentBean().setOrphanSafetyInterval(0);
jtaPropertyManager.getJTAEnvironmentBean().setXaRecoveryNodes(Arrays.asList(new String[] { NodeNameXAResourceOrphanFilter.RECOVER_ALL_NODES }));
XARecoveryModule xarm = new XARecoveryModule();
xarm.addXAResourceOrphanFilter(new JTANodeNameXAResourceOrphanFilter());
xarm.addXAResourceRecoveryHelper(new XAResourceRecoveryHelper() {
XAResource[] xares = new XAResource[] { new XAResourceWrapper() {
@Override
public XAResource getResource() {
return null;
}
@Override
public String getProductName() {
return null;
}
@Override
public String getProductVersion() {
return null;
}
@Override
public String getJndiName() {
return "test";
}
int count = 0;
Xid xid = new XidImple(new Uid());
@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 {
count++;
if (count == 1 || count == 5) {
return new Xid[] { xid };
} else if (count > 5) {
return new Xid[0];
} else {
throw new XAException();
}
}
@Override
public void rollback(Xid xid) throws XAException {
if (count == 1) {
// This comes from the first end scan
throw new XAException(XAException.XA_RETRY);
}
rolledback = true;
}
@Override
public boolean setTransactionTimeout(int i) throws XAException {
return false;
}
@Override
public void start(Xid xid, int i) throws XAException {
}
} };
@Override
public boolean initialise(String p) throws Exception {
return false;
}
@Override
public XAResource[] getXAResources() throws Exception {
return xares;
}
});
// The first two recovery cycles do nothing with the resource (because phase two is getting the exception)
// When count reaches 6 it sees that the xid has gone and presumes abort so calls rollback and hence assertTrue(rolledback) passes
// 1st pass: returns one xid (count is 1)
xarm.periodicWorkFirstPass();
// 2nd pass: throws an exception (count is 2)
xarm.periodicWorkSecondPass();
assertTrue(xarm.getContactedJndiNames().contains("test"));
assertFalse(rolledback);
// 1st pass: throws an exception (count is 3)
xarm.periodicWorkFirstPass();
// 2nd pass: throws an exception (count is 4)
xarm.periodicWorkSecondPass();
assertFalse(xarm.getContactedJndiNames().contains("test"));
assertFalse(rolledback);
// 1st pass: returns an empty list of xids (count is 5)
xarm.periodicWorkFirstPass();
// 2nd pass: returns an empty list of xids (count is 6)
xarm.periodicWorkSecondPass();
assertTrue(xarm.getContactedJndiNames().contains("test"));
assertTrue(rolledback);
jtaPropertyManager.getJTAEnvironmentBean().setOrphanSafetyInterval(orphanSafetyInterval);
jtaPropertyManager.getJTAEnvironmentBean().setXaRecoveryNodes(xaRecoveryNodes);
}
use of com.arjuna.ats.arjuna.common.Uid in project narayana by jbosstm.
the class XARecoveryResourceUnitTest method test.
@Test
public void test() {
XARecoveryResourceManagerImple xarr = new XARecoveryResourceManagerImple();
assertTrue(xarr.getResource(new Uid()) != null);
assertTrue(xarr.getResource(new Uid(), null) != null);
assertTrue(xarr.type() != null);
}
use of com.arjuna.ats.arjuna.common.Uid in project narayana by jbosstm.
the class SubordinateTestCase method testTwoPhaseCommitSyncWithRollbackOnlyViaXATerminatorWithSeparateSync.
@Test
public void testTwoPhaseCommitSyncWithRollbackOnlyViaXATerminatorWithSeparateSync() throws Exception {
final Xid xid = new XidImple(new Uid());
final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid);
final TestSynchronization sync = new TestSynchronization();
t.registerSynchronization(sync);
t.setRollbackOnly();
final XATerminator xaTerminator = SubordinationManager.getXATerminator();
final XATerminatorExtensions xaTerminatorExtensions = (XATerminatorExtensions) xaTerminator;
xaTerminatorExtensions.beforeCompletion(xid);
try {
xaTerminator.prepare(xid);
} catch (XAException e) {
assertEquals(XAException.XA_RBROLLBACK, e.errorCode);
// expected - we tried to prepare a rollbackonly tx.
}
// no need to call rollback - the XA_RBROLLBACK code indicates its been done.
assertTrue(sync.isBeforeCompletionDone());
assertTrue(sync.isAfterCompletionDone());
assertEquals(javax.transaction.Status.STATUS_ROLLEDBACK, t.getStatus());
}
use of com.arjuna.ats.arjuna.common.Uid in project narayana by jbosstm.
the class SubordinateTestCase method testTwoPhaseCommitSyncViaXATerminatorWithSeparateSync.
@Test
public void testTwoPhaseCommitSyncViaXATerminatorWithSeparateSync() 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);
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 com.arjuna.ats.arjuna.common.Uid in project narayana by jbosstm.
the class SubordinateTestCase method testTwoPhaseCommitSyncWithRollbackOnlyViaXATerminator.
@Test
public void testTwoPhaseCommitSyncWithRollbackOnlyViaXATerminator() throws Exception {
final Xid xid = new XidImple(new Uid());
final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid);
final TestSynchronization sync = new TestSynchronization();
t.registerSynchronization(sync);
t.setRollbackOnly();
final XATerminator xaTerminator = SubordinationManager.getXATerminator();
try {
xaTerminator.prepare(xid);
} catch (XAException e) {
assertEquals(XAException.XA_RBROLLBACK, e.errorCode);
// expected - we tried to prepare a rollbackonly tx.
}
// no need to call rollback - the XA_RBROLLBACK code indicates its been done.
assertFalse(sync.isBeforeCompletionDone());
assertTrue(sync.isAfterCompletionDone());
assertEquals(javax.transaction.Status.STATUS_ROLLEDBACK, t.getStatus());
}
Aggregations