public RecoveryXAResource () { if (xids == null) { xids = new Xid[2]; AtomicAction a = new AtomicAction(); xids[0] = new XidImple(a); String c = com.arjuna.ats.arjuna.coordinator.TxControl.getXANodeName(); String b = "2"; com.arjuna.ats.arjuna.coordinator.TxControl.setXANodeName(b); xids[1] = new XidImple(new Uid()); com.arjuna.ats.arjuna.coordinator.TxControl.setXANodeName(c); } }
@Test public void testJTANodeNameXAResourceOrphanFilter() { XAResourceOrphanFilter orphanFilter = new JTANodeNameXAResourceOrphanFilter(); Xid notJTAFormatId = XATxConverter.getXid(new Uid(), false, 0); assertEquals(XAResourceOrphanFilter.Vote.ABSTAIN, orphanFilter.checkXid(notJTAFormatId)); List<String> recoveryNodes = new LinkedList<String>(); recoveryNodes.add("1"); jtaPropertyManager.getJTAEnvironmentBean().setXaRecoveryNodes(recoveryNodes); String notRecoverableNodeName ="2"; TxControl.setXANodeName(notRecoverableNodeName); Xid jtaNotRecoverableNodeName = XATxConverter.getXid(new Uid(), false, XATxConverter.FORMAT_ID); assertEquals(XAResourceOrphanFilter.Vote.ABSTAIN, orphanFilter.checkXid(jtaNotRecoverableNodeName)); String recoverableNodeName ="1"; TxControl.setXANodeName(recoverableNodeName); Xid jtaRecoverableNodeName = XATxConverter.getXid(new Uid(), false, XATxConverter.FORMAT_ID); assertEquals(XAResourceOrphanFilter.Vote.ROLLBACK, orphanFilter.checkXid(jtaRecoverableNodeName)); recoveryNodes.clear(); recoveryNodes.add(NodeNameXAResourceOrphanFilter.RECOVER_ALL_NODES); jtaPropertyManager.getJTAEnvironmentBean().setXaRecoveryNodes(recoveryNodes); assertEquals(XAResourceOrphanFilter.Vote.ROLLBACK, orphanFilter.checkXid(jtaNotRecoverableNodeName)); assertEquals(XAResourceOrphanFilter.Vote.ROLLBACK, orphanFilter.checkXid(jtaRecoverableNodeName)); }
@Test public void testCheckDeferredHeuristicRollbackFirstResourceFails() throws Exception { ThreadActionData.purgeActions(); TxControl.setXANodeName("test"); TransactionImple tx = new TransactionImple(500); try { tx.enlistResource(new FailureXAResource(FailLocation.commit, FailType.nota)); tx.enlistResource(new TestResource()); } catch (final RollbackException ex) { fail(); } try { tx.commit(); fail(); } catch (final HeuristicMixedException ex) { assertEquals(XAException.XAER_NOTA, ((XAException) ex.getSuppressed()[0]).errorCode); } }
@Test public void testCheckDeferredHeuristicRollbackSecondResourceFails() throws Exception { ThreadActionData.purgeActions(); TxControl.setXANodeName("test"); TransactionImple tx = new TransactionImple(500); try { tx.enlistResource(new TestResource()); tx.enlistResource(new FailureXAResource(FailLocation.commit, FailType.nota)); } catch (final RollbackException ex) { fail(); } try { tx.commit(); fail(); } catch (final HeuristicMixedException ex) { assertEquals(XAException.XAER_NOTA, ((XAException) ex.getSuppressed()[0]).errorCode); } }
@Test public void testCheckDeferredHeuristicRollbackSecondOfThreeFails() throws Exception { ThreadActionData.purgeActions(); TxControl.setXANodeName("test"); TransactionImple tx = new TransactionImple(500); try { tx.enlistResource(new TestResource()); tx.enlistResource(new FailureXAResource(FailLocation.commit, FailType.nota)); tx.enlistResource(new TestResource()); } catch (final RollbackException ex) { fail(); } try { tx.commit(); fail(); } catch (final HeuristicMixedException ex) { assertEquals(XAException.XAER_NOTA, ((XAException) ex.getSuppressed()[0]).errorCode); } }