Search in sources :

Example 16 with XAResourceRecord

use of com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord in project narayana by jbosstm.

the class RecoveryShutdownTest method test.

/**
 * test that the call sequence
 *
 * XARecoveryModule#getNewXAResource()
 * RecoveryManager#terminate();
 * XARecoveryModule#removeXAResourceRecoveryHelper
 *
 * does not hang
 *
 * @throws InterruptedException if the test is interrupted
 */
@Test
public void test() throws InterruptedException {
    recoveryPropertyManager.getRecoveryEnvironmentBean().setRecoveryBackoffPeriod(1);
    RecoveryManager manager = RecoveryManager.manager(RecoveryManager.DIRECT_MANAGEMENT);
    XARecoveryModule xarm = new XARecoveryModule();
    final SimpleResource testXAResource = new SimpleResource() {

        @Override
        public Xid[] recover(int i) throws XAException {
            return new Xid[] { new Xid() {

                @Override
                public int getFormatId() {
                    return 0;
                }

                @Override
                public byte[] getGlobalTransactionId() {
                    return new byte[0];
                }

                @Override
                public byte[] getBranchQualifier() {
                    return new byte[0];
                }
            } };
        }
    };
    final XAResourceRecoveryHelper xaResourceRecoveryHelper = new XAResourceRecoveryHelper() {

        @Override
        public boolean initialise(String p) throws Exception {
            return true;
        }

        @Override
        public XAResource[] getXAResources() throws Exception {
            return new XAResource[] { testXAResource };
        }
    };
    xarm.addXAResourceRecoveryHelper(xaResourceRecoveryHelper);
    manager.removeAllModules(false);
    manager.addModule(xarm);
    manager.scan();
    manager.terminate();
    xarm.getNewXAResource(new XAResourceRecord(null, null, new XidImple(), null));
    final boolean[] removedHelper = { false };
    Runnable r = () -> {
        // the next call will hang unless JBTM-2837 is fixed
        xarm.removeXAResourceRecoveryHelper(xaResourceRecoveryHelper);
        removedHelper[0] = true;
    };
    Thread t = new Thread(r);
    t.start();
    Thread.sleep(100);
    assertTrue("removal of an XAResourceRecoveryHelper hung", removedHelper[0]);
}
Also used : RecoveryManager(com.arjuna.ats.arjuna.recovery.RecoveryManager) XidImple(com.arjuna.ats.jta.xa.XidImple) Xid(javax.transaction.xa.Xid) XAResource(javax.transaction.xa.XAResource) XAResourceRecord(com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord) XAResourceRecoveryHelper(com.arjuna.ats.jta.recovery.XAResourceRecoveryHelper) XARecoveryModule(com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule) Test(org.junit.Test)

Aggregations

XAResourceRecord (com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord)16 Test (org.junit.Test)15 XidImple (com.arjuna.ats.jta.xa.XidImple)9 TransactionImple (com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple)7 Uid (com.arjuna.ats.arjuna.common.Uid)5 XAResource (javax.transaction.xa.XAResource)5 XARecoveryModule (com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule)4 DummyXA (com.hp.mwtests.ts.jta.common.DummyXA)4 FailureXAResource (com.hp.mwtests.ts.jta.common.FailureXAResource)4 Xid (javax.transaction.xa.Xid)4 DummyRecoverableXAConnection (com.hp.mwtests.ts.jta.common.DummyRecoverableXAConnection)3 SubordinateAtomicAction (com.arjuna.ats.internal.jta.transaction.arjunacore.subordinate.jca.SubordinateAtomicAction)2 ArrayList (java.util.ArrayList)2 XAException (javax.transaction.xa.XAException)2 BasicAction (com.arjuna.ats.arjuna.coordinator.BasicAction)1 RecordTypeMap (com.arjuna.ats.arjuna.coordinator.abstractrecord.RecordTypeMap)1 RecoverAtomicAction (com.arjuna.ats.arjuna.recovery.RecoverAtomicAction)1 RecoveryManager (com.arjuna.ats.arjuna.recovery.RecoveryManager)1 RecoveryModule (com.arjuna.ats.arjuna.recovery.RecoveryModule)1 InputObjectState (com.arjuna.ats.arjuna.state.InputObjectState)1