xaRecoveryModule.addXAResourceRecoveryHelper(getXAResourceRecoveryHelper(xaDataSource, properties));
trans = xares.recover(XAResource.TMSTARTRSCAN); jtaLogger.i18NLogger.warn_recovery_xarecovery1(_logName+".xaRecovery", XAHelper.printXAErrorCode(e), e); xares.recover(XAResource.TMENDRSCAN); _xidScans = new Hashtable<XAResource,RecoveryXids>(); else refreshXidScansForEquivalentXAResourceImpl(xares, trans); xidsToRecover = _xidScans.get(xares); java.util.Enumeration<RecoveryXids> elements = _xidScans.elements(); boolean found = false; while (elements.hasMoreElements()) xidsToRecover = elements.nextElement();
Vector recoveryModules = manager.getModules(); if (recoveryModules != null) { Enumeration modules = recoveryModules.elements(); while (modules.hasMoreElements()) { RecoveryModule m = (RecoveryModule) modules.nextElement(); } else if (m instanceof XARecoveryModule) { XARecoveryModule xarm = (XARecoveryModule) m; xarm.addXAResourceRecoveryHelper(new XAResourceRecoveryHelper() { public boolean initialise(String p) throws Exception { return true;
/** * This routine finds the new XAResource for the transaction that used the * old resource we couldn't serialize. It does this by looking up the * XARecoveryModule in the recovery manager and asking it for the * XAResource. The recovery manager will then look through its list of * registered XARecoveryResource implementations for the appropriate * instance. If the XARecoveryModule hasn't been initialised yet then this * routine will fail, but on the next scan it should work. */ private final XAResource getNewXAResource() { RecoveryManager recMan = RecoveryManager.manager(); Vector recoveryModules = recMan.getModules(); if (recoveryModules != null) { Enumeration modules = recoveryModules.elements(); while (modules.hasMoreElements()) { RecoveryModule m = (RecoveryModule) modules.nextElement(); if (m instanceof XARecoveryModule) { /* * Blaargh! There are better ways to do this! */ return ((XARecoveryModule) m).getNewXAResource(this); } } } return null; }
trans = xares.recover(XAResource.TMSTARTRSCAN); jtaLogger.i18NLogger.warn_recovery_xarecovery1(_logName+".xaRecovery", XAHelper.printXAErrorCode(e), e); xares.recover(XAResource.TMENDRSCAN); refreshXidScansForEquivalentXAResourceImpl(xares, trans); xidsToRecover = _xidScans.get(xares); while (elements.hasMoreElements()) xidsToRecover = elements.nextElement(); recordUid = previousFailure(xids[j]); doForget = handleOrphan(xares, xids[j]); jtaLogger.i18NLogger.warn_recovery_failedtorecover(_logName+".xaRecovery", Integer.toString(recoveryStatus)); removeFailure(record.getXid(), record.get_uid()); xares.forget(xids[j]); jtaLogger.i18NLogger.warn_recovery_forgetfailed(_logName+".xaRecovery", e); jtaLogger.i18NLogger.warn_recovery_xarecovery1(_logName+".xaRecovery", XAHelper.printXAErrorCode(e), e);
trans = xares.recover(XAResource.TMSTARTRSCAN); xares.recover(XAResource.TMENDRSCAN); _xidScans = new Hashtable(); else refreshXidScansForEquivalentXAResourceImpl(xares, trans); xidsToRecover = (RecoveryXids) _xidScans.get(xares); java.util.Enumeration elements = _xidScans.elements(); boolean found = false; while (elements.hasMoreElements()) xidsToRecover = (RecoveryXids) elements.nextElement(); recordUid = previousFailure((Xid) xids[j]); if (!transactionLog((Xid) xids[j])) xares.rollback((Xid) xids[j]); removeFailure(record.getXid(), record.get_uid());
/** * @param Xid * xid The transaction to commit/rollback. * * @return the XAResource than can be used to commit/rollback the specified * transaction. */ public XAResource getNewXAResource(Xid xid) { if (_xidScans == null) { resourceInitiatedRecovery(); resourceInitiatedRecoveryForRecoveryHelpers(); } if (_xidScans != null) { Enumeration keys = _xidScans.keys(); while (keys.hasMoreElements()) { XAResource theKey = (XAResource) keys.nextElement(); RecoveryXids xids = (RecoveryXids) _xidScans.get(theKey); if (xids.contains(xid)) return theKey; } } return null; }
Enumeration<RefAddr> iter = ref.getAll(); while (iter.hasMoreElements()) { RefAddr ra = iter.nextElement(); String type = ra.getType(); String content = ra.getContent().toString(); xaRecoveryModule.addXAResourceRecoveryHelper(new XAResourceRecoveryHelper() { private final Object lock = new Object(); private XAConnection connection;
private void xaRecoverySecondPass(XAResource xares) { RecoveryXids xidsToRecover = _xidScans.get(xares); if (xidsToRecover != null) { try { recordUid = previousFailure(xids[j]); doForget = handleOrphan(xares, xids[j]); jtaLogger.i18NLogger.warn_recovery_failedtorecover(_logName+".xaRecovery", Integer.toString(recoveryStatus)); removeFailure(record.getXid(), record.get_uid()); xares.forget(xids[j]); jtaLogger.i18NLogger.warn_recovery_forgetfailed(_logName+".xaRecovery", e); jtaLogger.i18NLogger.warn_recovery_generalrecoveryerror(_logName + ".xaRecovery", e); xares.recover(XAResource.TMENDRSCAN); jtaLogger.i18NLogger.warn_recovery_xarecovery1(_logName+".xaRecovery", XAHelper.printXAErrorCode(e), e);
/** * * JBTM-895 garbage collection is now done when we return XAResources {@see XARecoveryModule#getNewXAResource(XAResourceRecord)} * @see XARecoveryModule#getNewXAResource(XAResourceRecord) */ private void bottomUpRecovery() { // scan using statically configured plugins; resourceInitiatedRecovery(); // scan using dynamically configured plugins: resourceInitiatedRecoveryForRecoveryHelpers(); // JBTM-895 garbage collection is now done when we return XAResources {@see XARecoveryModule#getNewXAResource(XAResourceRecord)} // JBTM-924 requires this here garbage collection, see JBTM-1155: if (_xidScans != null) { Set<XAResource> keys = new HashSet<XAResource>(_xidScans.keySet()); for(XAResource theKey : keys) { RecoveryXids recoveryXids = _xidScans.get(theKey); if(recoveryXids.isStale()) { _xidScans.remove(theKey); } } } }
if (getScanState() == ScanStates.BETWEEN_PASSES) { periodicWorkSecondPass(); setScanState(ScanStates.FIRST_PASS); // synchronized uses a reentrant lock if (!_recoveryStore.allObjUids(_recoveryManagerClass.type(), _uids)) jtaLogger.i18NLogger.warn_recovery_alluids(); jtaLogger.i18NLogger.warn_recovery_objstoreerror(e); jtaLogger.i18NLogger.warn_recovery_periodicfirstpass(_logName+".periodicWorkFirstPass", e); _resources = resourceInitiatedRecovery(); _resources.addAll(resourceInitiatedRecoveryForRecoveryHelpers()); xaRecoveryFirstPass(xaResource); } catch (Exception ex) { jtaLogger.i18NLogger.warn_recovery_getxaresource(ex); for (XAResource xaResource : resources) { try { xaResource.recover(XAResource.TMENDRSCAN); } catch (Exception ex) { jtaLogger.i18NLogger.warn_recovery_getxaresource(ex); setScanState(endState);
if (_recoveryStore.currentState(theUid, _recoveryManagerClass .type()) != StateStatus.OS_UNKNOWN) jtaLogger.i18NLogger.info_recovery_recoverydelayed(theUid, Integer.toString(recoveryStatus)); jtaLogger.i18NLogger.warn_recovery_recoveryfailed(theUid, Integer.toString(recoveryStatus)); jtaLogger.i18NLogger.warn_recovery_recoveryerror(e); addFailure(record.getXid(), record.get_uid());
if (!getScanState().equals(ScanStates.IDLE)) return; setScanState(ScanStates.FIRST_PASS); // synchronized uses a reentrant lock if (!_recoveryStore.allObjUids(_recoveryManagerClass.type(), _uids)) jtaLogger.i18NLogger.warn_recovery_alluids(); jtaLogger.i18NLogger.warn_recovery_objstoreerror(e); jtaLogger.i18NLogger.warn_recovery_periodicfirstpass(_logName+".periodicWorkFirstPass", e); _resources = resourceInitiatedRecovery(); _resources.addAll(resourceInitiatedRecoveryForRecoveryHelpers()); xaRecoveryFirstPass(xaResource); } catch (Exception ex) { jtaLogger.i18NLogger.warn_recovery_getxaresource(ex); setScanState(ScanStates.BETWEEN_PASSES);
public synchronized void periodicWorkSecondPass() if (getScanState() == ScanStates.IDLE) { setScanState(ScanStates.SECOND_PASS); transactionInitiatedRecovery(); bottomUpRecovery(); jtaLogger.i18NLogger.warn_recovery_periodicsecondpass(_logName+".periodicWorkSecondPass", e); clearAllFailures(); setScanState(ScanStates.IDLE);
recoveryPropertyManager.getRecoveryEnvironmentBean().setRecoveryBackoffPeriod(1); RecoveryManager manager = RecoveryManager.manager(RecoveryManager.DIRECT_MANAGEMENT); XARecoveryModule xarm = new XARecoveryModule(); xarm.addXAResourceRecoveryHelper(xaResourceRecoveryHelper); manager.removeAllModules(false); manager.addModule(xarm); manager.scan(); manager.terminate(); xarm.getNewXAResource( new XAResourceRecord(null, null, new XidImple(), null) ); xarm.removeXAResourceRecoveryHelper(xaResourceRecoveryHelper); removedHelper[0] = true; };
RecoveryManager.manager().initialize(); .manager().getModules())) { if (recoveryModule instanceof XARecoveryModule) { xaRecoveryModule = (XARecoveryModule) recoveryModule; .addXAResourceRecoveryHelper(new XAResourceRecoveryHelper() { StoreManager.getRecoveryStore().allObjUids(type, uids); boolean moreUids = true;
recoveryEnvironmentBean.setRecoveryListener(true); // configure the RecoveryMonitor RecoveryManager manager = RecoveryManager.manager(RecoveryManager.DIRECT_MANAGEMENT); XARecoveryModule recoveryModule = new XARecoveryModule(); recoveryModule.addXAResourceRecoveryHelper(xaResourceRecoveryHelper); manager.addModule(recoveryModule); // we only need to test the XARecoveryModule manager.startRecoveryManagerThread(); // start periodic recovery
XARecoveryModule xarm = new XARecoveryModule(); xarm.addXAResourceRecoveryHelper(new XAResourceRecoveryHelper() { @Override public boolean initialise(String p) throws Exception { RecoveryManager.manager().addModule(xarm);
XARecoveryModule xaRecoveryModule = new XARecoveryModule(); Field safetyIntervalMillis = RecoveryXids.class.getDeclaredField("safetyIntervalMillis"); safetyIntervalMillis.setAccessible(true); safetyIntervalMillis.set(null, 0); 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); xaRecoveryModule.periodicWorkFirstPass(); xaRecoveryModule.periodicWorkSecondPass();
RecoveryManager.manager().initialize(); .manager().getModules())) { if (recoveryModule instanceof XARecoveryModule) { xaRecoveryModule = (XARecoveryModule) recoveryModule; .addXAResourceRecoveryHelper(new XAResourceRecoveryHelper() {