/** * Attempt to create an XAResourceRecord wrapping the given XAResource. Return null if this fails, or * is diallowed by the current configuration of multiple last resource behaviour. * * @param xaRes * @param params * @param xid * @return */ private XAResourceRecord createRecord(XAResource xaRes, Object[] params, Xid xid) { final XAResourceRecord record; if ((xaRes instanceof LastResourceCommitOptimisation) || ((LAST_RESOURCE_OPTIMISATION_INTERFACE != null) && LAST_RESOURCE_OPTIMISATION_INTERFACE .isInstance(xaRes))) { record = new LastResourceRecord(this, xaRes, xid, params); } else { record = new XAResourceRecord(this, xaRes, xid, params); } return record; }
private final int doRecovery(boolean commit) { if (jtaxLogger.logger.isTraceEnabled()) { jtaxLogger.logger.trace("XAResourceRecord.doRecovery ( " + commit + " )"); } int result = XARecoveryResource.FAILED_TO_RECOVER; if ((_theXAResource != null) && (_tranID != null)) { try { if (commit) { jtaxLogger.i18NLogger.info_jtax_recovery_jts_orbspecific_commit(XAHelper.xidToString(_tranID)); commit(); } else { jtaxLogger.i18NLogger.info_jtax_recovery_jts_orbspecific_rollback(XAHelper.xidToString(_tranID)); rollback(); } // if those succeed, they will have removed any persistent state result = XARecoveryResource.RECOVERED_OK; } catch (Exception e2) { jtaxLogger.i18NLogger.warn_jtax_resources_jts_orbspecific_recfailed(((commit) ? "commit" : "rollback"), e2); } } return result; }
public void forget() throws org.omg.CORBA.SystemException { if (jtaxLogger.logger.isTraceEnabled()) { jtaxLogger.logger.trace("XAResourceRecord.forget for " + _tranID + " _forgotten=" + _forgotten); } // if we have not yet seen a successful forget call then tell the resource to forget if (!_forgotten) handleForget(); // this call can fail silently which will leave _forgotten as false // if it is known that the resource has forgotten the heuristic then delete our record of it if (_forgotten) { destroyState(); removeConnection(); } }
endAssociation(XAResource.TMFAIL, TxInfo.FAILED); removeConnection(); removeConnection(); if (notAProblem(e1, false)) "txn uid=%s resource uid=%s\n", XAHelper.printXAErrorCode(e1), _tranID, get_uid()); break; // just do the finally block case XAException.XA_HEURHAZ: updateState(TwoPhaseOutcome.HEURISTIC_HAZARD); updateState(TwoPhaseOutcome.HEURISTIC_COMMIT); updateState(TwoPhaseOutcome.HEURISTIC_MIXED); case XAException.XA_RBPROTO: case XAException.XA_RBTIMEOUT: destroyState(); break; case XAException.XAER_NOTA: if (_phaseTwoStarted) { destroyState(); break;
endAssociation(XAResource.TMSUCCESS, TxInfo.NOT_ASSOCIATED); updateState(TwoPhaseOutcome.HEURISTIC_HAZARD); handleForget() ; } catch (SystemException ignore) { case XAException.XA_HEURRB: try { handleForget() ; } catch (SystemException ignore) { case XAException.XAER_NOTA: updateState(TwoPhaseOutcome.HEURISTIC_HAZARD); throw new org.omg.CosTransactions.HeuristicHazard(); case XAException.XAER_PROTO: removeConnection();
removeConnection(); endAssociation(XAResource.TMSUCCESS, TxInfo.NOT_ASSOCIATED); removeConnection(); if (createState()) return Vote.VoteCommit; else "XAResourceRecord.prepare exception %s resource_trace: txn uid=%s " + "resource uid=%s\n", XAHelper.printXAErrorCode(e1), _tranID, get_uid()); removeConnection(); removeConnection();
removeConnection(); removeConnection(); if (endAssociation()) removeConnection(); if (createState()) return Vote.VoteCommit; else removeConnection(); removeConnection();
xaRes.start(xid, XAResource.TMNOFLAGS); try { RecoveryCoordinator recCoord = _theTransaction.registerResource(xaResourceRecord.getResource()); xaResourceRecord.setRecoveryCoordinator(recCoord); if (jtaxLogger.logger.isTraceEnabled()) { jtaxLogger.logger.tracef("TransactionImple.enlistResource: " + "resource_trace: txn uid=%s XAReource=%s resource uid=%s\n", get_uid(), xaRes, xaResourceRecord.get_uid()); xaResourceRecord.rollback(); markRollbackOnly(); jtaxLogger.logger.debug("Can't set recovery coordinator for xa resource record: " + xaResourceRecord
xaRes.start(xid, XAResource.TMNOFLAGS); try { RecoveryCoordinator recCoord = _theTransaction.registerResource(xaResourceRecord.getResource()); xaResourceRecord.setRecoveryCoordinator(recCoord); } catch(Exception e) { xaResourceRecord.rollback(); markRollbackOnly(); return false;
s = _recoveryCoordinator.replay_completion(getResource()); return doRecovery(doCommit);
protected XAResourceRecord(Uid u) { _theXAResource = null; _recoveryObject = null; _tranID = null; _prepared = true; _committed = false; _heuristic = TwoPhaseOutcome.FINISH_OK; _theUid = new Uid(u); _objStore = null; _valid = false; _theReference = null; _recoveryCoordinator = null; _theTransaction = null; _valid = loadState(); }
destroyState(); if (notAProblem(e1, true)) destroyState(); "resource_trace: txn uid=%s resource uid=%s\n", XAHelper.printXAErrorCode(e1), _tranID, get_uid()); updateState(TwoPhaseOutcome.HEURISTIC_HAZARD); destroyState(); break; case XAException.XA_HEURRB: case XAException.XA_RBTRANSIENT: case XAException.XAER_RMERR: updateState(TwoPhaseOutcome.HEURISTIC_ROLLBACK); updateState(TwoPhaseOutcome.HEURISTIC_MIXED); updateState(TwoPhaseOutcome.HEURISTIC_HAZARD); throw new org.omg.CosTransactions.HeuristicHazard(); case XAException.XAER_PROTO: removeConnection();
if (endAssociation()) updateState(TwoPhaseOutcome.HEURISTIC_HAZARD); handleForget() ; break; case XAException.XA_HEURRB: handleForget() ; throw new TRANSACTION_ROLLEDBACK(); case XAException.XA_RBROLLBACK: case XAException.XAER_NOTA: updateState(TwoPhaseOutcome.HEURISTIC_HAZARD); throw new org.omg.CosTransactions.HeuristicHazard(); case XAException.XAER_PROTO: removeConnection();
s = _recoveryCoordinator.replay_completion(getResource()); return doRecovery(doCommit);
protected XAResourceRecord(Uid u) { _theXAResource = null; _recoveryObject = null; _tranID = null; _prepared = true; _committed = false; _heuristic = TwoPhaseOutcome.FINISH_OK; _theUid = new Uid(u); _participantStore = null; _valid = false; _theReference = null; _recoveryCoordinator = null; _theTransaction = null; _phaseTwoStarted = true; _valid = loadState(); }
if (endAssociation()) removeConnection(); if (notAProblem(e1, false)) break; // just do the finally block case XAException.XA_HEURHAZ: updateState(TwoPhaseOutcome.HEURISTIC_HAZARD); updateState(TwoPhaseOutcome.HEURISTIC_COMMIT); updateState(TwoPhaseOutcome.HEURISTIC_MIXED); case XAException.XA_RBPROTO: case XAException.XA_RBTIMEOUT: destroyState(); break; default: destroyState(); destroyState(); else removeConnection();
public void forget() throws org.omg.CORBA.SystemException { if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC, com.arjuna.ats.jta.logging.FacilityCode.FAC_JTA, "XAResourceRecord.forget for " + _tranID); } handleForget() ; destroyState(); removeConnection(); }
/** * Attempt to create an XAResourceRecord wrapping the given XAResource. Return null if this fails, or * is diallowed by the current configuration of multiple last resource behaviour. * * @param xaRes * @param params * @param xid * @return */ private XAResourceRecord createRecord(XAResource xaRes, Object[] params, Xid xid) { final XAResourceRecord record; if ((xaRes instanceof LastResourceCommitOptimisation) || ((LAST_RESOURCE_OPTIMISATION_INTERFACE != null) && LAST_RESOURCE_OPTIMISATION_INTERFACE .isInstance(xaRes))) { record = new LastResourceRecord(this, xaRes, xid, params); } else { record = new XAResourceRecord(this, xaRes, xid, params); } return record; }
destroyState(); if (notAProblem(e1, true)) destroyState(); updateState(TwoPhaseOutcome.HEURISTIC_HAZARD); destroyState(); break; case XAException.XA_HEURRB: case XAException.XA_RBTRANSIENT: case XAException.XAER_RMERR: updateState(TwoPhaseOutcome.HEURISTIC_ROLLBACK); updateState(TwoPhaseOutcome.HEURISTIC_MIXED); updateState(TwoPhaseOutcome.HEURISTIC_HAZARD); throw new org.omg.CosTransactions.HeuristicHazard(); case XAException.XAER_PROTO: removeConnection();