@Override public Vote checkXid(Xid xid) { if(xid.getFormatId() != XATxConverter.FORMAT_ID) { // we only care about Xids created by the JTA return Vote.ABSTAIN; } if(transactionLog(xid)) { // it's owned by a logged transaction which // will recover it top down in due course return Vote.LEAVE_ALONE; } return Vote.ABSTAIN; }
if ( containsCommitMarkableResourceRecord(u) || recoveryStore.currentState(u, transactionType) != StateStatus.OS_UNKNOWN)
XAResourceOrphanFilter.Vote vote = new JTATransactionLogXAResourceOrphanFilter().checkXid(preparedXid); assertTrue(vote == XAResourceOrphanFilter.Vote.LEAVE_ALONE);
@Test public void test() throws NotSupportedException, SystemException, IllegalStateException, RollbackException, SecurityException, HeuristicMixedException, HeuristicRollbackException, NamingException { arjPropertyManager.getObjectStoreEnvironmentBean().setObjectStoreType(JDBCStore.class.getName()); arjPropertyManager.getObjectStoreEnvironmentBean().setJdbcAccess(TestJDBCAccess.class.getName()); javax.transaction.TransactionManager tm = TransactionManager.transactionManager(); tm.begin(); tm.getTransaction().enlistResource(new DummyXAResource()); tm.getTransaction().enlistResource(new DummyXAResource()); tm.commit(); assertTrue(commitCount == 1); FAULT_JDBC = true; jtaPropertyManager.getJTAEnvironmentBean().setXaRecoveryNodes(Arrays.asList(new String[] { "1" })); jtaPropertyManager.getJTAEnvironmentBean().setXaResourceOrphanFilters(Arrays.asList(new XAResourceOrphanFilter[] { new com.arjuna.ats.internal.jta.recovery.arjunacore.JTATransactionLogXAResourceOrphanFilter(), new com.arjuna.ats.internal.jta.recovery.arjunacore.JTANodeNameXAResourceOrphanFilter() })); jtaPropertyManager.getJTAEnvironmentBean().setXaResourceRecoveries(Arrays.asList(new XAResourceRecovery[] { new DummyXAResourceRecovery() })); jtaPropertyManager.getJTAEnvironmentBean().setOrphanSafetyInterval(1); recoveryPropertyManager.getRecoveryEnvironmentBean().setRecoveryBackoffPeriod(2); recoveryPropertyManager.getRecoveryEnvironmentBean().setRecoveryModules(Arrays.asList(new RecoveryModule[] { new XARecoveryModule() })); RecoveryManager manager = RecoveryManager.manager(RecoveryManager.DIRECT_MANAGEMENT); manager.scan(); assertFalse(rollbackCalled); }
if (containsCommitMarkableResourceRecord(u) || recoveryStore.currentState(u, transactionType) != StateStatus.OS_UNKNOWN)
xaRecoveryModule.addXAResourceRecoveryHelper(new XARROne()); xaRecoveryModule.addXAResourceRecoveryHelper(new XARRTwo()); xaRecoveryModule.addXAResourceOrphanFilter(new com.arjuna.ats.internal.jta.recovery.arjunacore.JTATransactionLogXAResourceOrphanFilter()); xaRecoveryModule.addXAResourceOrphanFilter(new com.arjuna.ats.internal.jta.recovery.arjunacore.JTANodeNameXAResourceOrphanFilter()); RecoveryManager.manager().addModule(xaRecoveryModule);
@Override public Vote checkXid(Xid xid) { if(xid.getFormatId() != XATxConverter.FORMAT_ID) { // we only care about Xids created by the JTA return Vote.ABSTAIN; } if(transactionLog(xid)) { // it's owned by a logged transaction which // will recover it top down in due course return Vote.LEAVE_ALONE; } return Vote.ABSTAIN; }
if (containsCommitMarkableResourceRecord(u) || recoveryStore.currentState(u, transactionType) != StateStatus.OS_UNKNOWN)
@Test public void testJTATransactionLogOrphanFilter() { XAResourceOrphanFilter orphanFilter = new JTATransactionLogXAResourceOrphanFilter(); Xid notJTAFormatId = XATxConverter.getXid(new Uid(), false, 0); assertEquals(XAResourceOrphanFilter.Vote.ABSTAIN, orphanFilter.checkXid(notJTAFormatId)); Xid jtaFormatId = XATxConverter.getXid(new Uid(), false, XATxConverter.FORMAT_ID); assertEquals(XAResourceOrphanFilter.Vote.ABSTAIN, orphanFilter.checkXid(jtaFormatId)); }
@Override public Vote checkXid(Xid xid) { if(xid.getFormatId() != XATxConverter.FORMAT_ID) { // we only care about Xids created by the JTA return Vote.ABSTAIN; } try { if(transactionLog(xid)) { // it's owned by a logged transaction which // will recover it top down in due course return Vote.LEAVE_ALONE; } } catch (ObjectStoreException | IOException e) { jtaLogger.i18NLogger.warn_could_not_access_object_store(e); // we don't know what the state of the parent transaction is so leave it alone return Vote.LEAVE_ALONE; } return Vote.ABSTAIN; }
if (containsCommitMarkableResourceRecord(u) || recoveryStore.currentState(u, transactionType) != StateStatus.OS_UNKNOWN)
@Override public Vote checkXid(Xid xid) { if(xid.getFormatId() != XATxConverter.FORMAT_ID) { // we only care about Xids created by the JTA return Vote.ABSTAIN; } try { if(transactionLog(xid)) { // it's owned by a logged transaction which // will recover it top down in due course return Vote.LEAVE_ALONE; } } catch (ObjectStoreException | IOException e) { jtaLogger.i18NLogger.warn_could_not_access_object_store(e); // we don't know what the state of the parent transaction is so leave it alone return Vote.LEAVE_ALONE; } return Vote.ABSTAIN; }
if (containsCommitMarkableResourceRecord(u) || recoveryStore.currentState(u, transactionType) != StateStatus.OS_UNKNOWN)
@Override public Vote checkXid(Xid xid) { if(xid.getFormatId() != XATxConverter.FORMAT_ID) { // we only care about Xids created by the JTA return Vote.ABSTAIN; } try { if(transactionLog(xid)) { // it's owned by a logged transaction which // will recover it top down in due course return Vote.LEAVE_ALONE; } } catch (ObjectStoreException | IOException e) { jtaLogger.i18NLogger.warn_could_not_access_object_store(e); // we don't know what the state of the parent transaction is so leave it alone return Vote.LEAVE_ALONE; } return Vote.ABSTAIN; }
@Override public Vote checkXid(Xid xid) { if(xid.getFormatId() != XATxConverter.FORMAT_ID) { // we only care about Xids created by the JTA return Vote.ABSTAIN; } try { if(transactionLog(xid)) { // it's owned by a logged transaction which // will recover it top down in due course return Vote.LEAVE_ALONE; } } catch (ObjectStoreException | IOException e) { jtaLogger.i18NLogger.warn_could_not_access_object_store(e); // we don't know what the state of the parent transaction is so leave it alone return Vote.LEAVE_ALONE; } return Vote.ABSTAIN; }