use of org.omg.CosTransactions.Status in project narayana by jbosstm.
the class TransactionCache method getOriginalStatus.
/**
* Get the status of a transaction as it is in the original process
* (so type is not needed)
* NoTransaction means the original process has gone
*/
public static Status getOriginalStatus(Uid actionUid, String theType) throws SystemException {
Status theStatus = Status.StatusUnknown;
TransactionCacheItem cacheItem = get(actionUid, theType);
if (cacheItem != null) {
synchronized (cacheItem) {
RecoveringTransaction theTransaction = cacheItem.freshTransaction();
if (theTransaction != null) {
if (jtsLogger.logger.isDebugEnabled()) {
jtsLogger.logger.debug("asking the tran for original status");
}
theStatus = theTransaction.getOriginalStatus();
} else {
if (jtsLogger.logger.isDebugEnabled()) {
jtsLogger.logger.debug("no transaction in cache so not asking for original status");
}
}
}
}
return theStatus;
}
use of org.omg.CosTransactions.Status in project narayana by jbosstm.
the class TransactionRecoveryModule method recoverTransaction.
private void recoverTransaction(Uid tranUid) // protected void recoverTransaction (Uid tranUid)
{
if (jtsLogger.logger.isDebugEnabled()) {
jtsLogger.logger.debug("TransactionRecoveryModule.recoverTransaction(" + tranUid + ")");
}
Status currentStatus = Status.StatusUnknown;
CachedRecoveredTransaction cachedRecoveredTransaction = new CachedRecoveredTransaction(tranUid, _transactionType);
currentStatus = cachedRecoveredTransaction.get_status();
if (jtsLogger.logger.isDebugEnabled()) {
jtsLogger.logger.debug("Activated transaction " + tranUid + " status = " + Utility.stringStatus(currentStatus));
}
// but first check that the original transaction isn't in mid-flight
if (cachedRecoveredTransaction.originalBusy()) {
if (jtsLogger.logger.isDebugEnabled()) {
jtsLogger.logger.debug("Transaction " + tranUid + " still busy");
}
return;
}
cachedRecoveredTransaction.replayPhase2();
cachedRecoveredTransaction = null;
}
use of org.omg.CosTransactions.Status in project narayana by jbosstm.
the class RecoveredServerTransaction method replayPhase2.
/**
* Causes phase 2 of the commit protocol to be replayed.
*/
public void replayPhase2() {
_recoveryStatus = RecoveryStatus.REPLAYING;
Status theStatus = get_status();
if (jtsLogger.logger.isDebugEnabled()) {
jtsLogger.logger.debug("RecoveredServerTransaction.replayPhase2(" + get_uid() + ") - status = " + Utility.stringStatus(theStatus));
}
if (theStatus == Status.StatusPrepared) {
/*
* We need to get the status from the our parent transaction in the
* interposition hierarchy.
*/
theStatus = getStatusFromParent();
if (jtsLogger.logger.isDebugEnabled()) {
jtsLogger.logger.debug("RecoveredServerTransaction.replayPhase2(" + get_uid() + ") -" + " status after contacting parent = " + Utility.stringStatus(theStatus));
}
}
if ((theStatus == Status.StatusCommitting) || (theStatus == Status.StatusCommitted)) {
phase2Commit(_reportHeuristics);
_recoveryStatus = RecoveryStatus.REPLAYED;
_txStatus = Status.StatusCommitted;
} else if ((theStatus == Status.StatusRolledBack) || (theStatus == Status.StatusRollingBack) || (theStatus == Status.StatusMarkedRollback) || (theStatus == Status.StatusNoTransaction)) {
phase2Abort(_reportHeuristics);
_recoveryStatus = RecoveryStatus.REPLAYED;
_txStatus = Status.StatusRolledBack;
} else if (theStatus == Status.StatusUnknown) {
jtsLogger.i18NLogger.info_recovery_transactions_RecoveredServerTransaction_6(get_uid());
_recoveryStatus = RecoveryStatus.REPLAY_FAILED;
} else {
jtsLogger.i18NLogger.warn_recovery_transactions_RecoveredServerTransaction_7(Utility.stringStatus(theStatus));
_recoveryStatus = RecoveryStatus.REPLAY_FAILED;
}
if (jtsLogger.logger.isDebugEnabled()) {
jtsLogger.logger.debug("RecoveredServerTransaction.replayPhase2: (" + get_uid() + ") finished");
}
}
use of org.omg.CosTransactions.Status in project narayana by jbosstm.
the class HeuristicTest method test.
@Test
public void test() throws Exception {
boolean shouldCommit = true;
boolean heuristicPrepare = false;
Coordinator coord = null;
ORB myORB = null;
RootOA myOA = null;
heuristic hImpl = null;
try {
myORB = ORB.getInstance("test");
myOA = OA.getRootOA(myORB);
myORB.initORB(new String[] {}, null);
myOA.initOA();
ORBManager.setORB(myORB);
ORBManager.setPOA(myOA);
Current current = OTSManager.get_current();
hImpl = new heuristic(heuristicPrepare);
Resource heuristicObject = hImpl.getReference();
AtomicResource aImpl = new AtomicResource(shouldCommit);
Resource atomicObject = aImpl.getReference();
System.out.println("beginning top-level transaction.");
current.begin();
Control myControl = current.get_control();
assertNotNull(myControl);
System.out.println("getting coordinator");
coord = myControl.get_coordinator();
myControl = null;
System.out.println("registering resources.");
try {
coord.register_resource(heuristicObject);
coord.register_resource(atomicObject);
} catch (Exception ex) {
fail("Failed to register resources: " + ex);
ex.printStackTrace(System.err);
}
System.out.println("committing top-level transaction.");
current.commit(true);
} catch (TRANSACTION_ROLLEDBACK e1) {
System.out.println("\nTransaction RolledBack exception");
} catch (HeuristicMixed e2) {
System.out.println("\nTransaction HeuristicMixed exception");
} catch (HeuristicHazard e3) {
System.out.println("\nTransaction HeuristicHazard exception");
} catch (Exception e4) {
fail("Caught unexpected exception: " + e4);
e4.printStackTrace(System.err);
}
System.out.println("Trying to determing final transaction outcome.");
org.omg.CosTransactions.Status status = Status.StatusUnknown;
try {
if (coord != null) {
status = coord.get_status();
coord = null;
} else {
fail("\nCould not determine action status.");
}
} catch (SystemException ex1) {
// assume invalid reference - tx may have been garbage collected
} catch (Exception e5) {
fail("Caught unexpected exception:" + e5);
e5.printStackTrace(System.err);
}
System.out.println("\nFinal action status: " + Utility.stringStatus(status));
System.out.println("Test completed successfully.");
ResourceTrace trace = hImpl.getTrace();
if ((!heuristicPrepare) && (shouldCommit) && (trace.getTrace() == ResourceTrace.ResourceTracePrepareCommitHeurisiticRollbackForget)) {
// assertSuccess();
} else {
if ((!heuristicPrepare) && (!shouldCommit) && (trace.getTrace() == ResourceTrace.ResourceTracePrepareRollback)) {
// assertSuccess();
} else {
if ((heuristicPrepare) && (shouldCommit) && (trace.getTrace() == ResourceTrace.ResourceTracePrepareHeuristicHazardForget)) {
// assertSuccess();
} else {
fail();
}
}
}
myOA.destroy();
myORB.shutdown();
}
use of org.omg.CosTransactions.Status in project narayana by jbosstm.
the class RecoveredServerTransaction method replayPhase2.
/**
* Causes phase 2 of the commit protocol to be replayed.
*/
public void replayPhase2() {
_recoveryStatus = RecoveryStatus.REPLAYING;
Status theStatus = get_status();
if (jtsLogger.logger.isDebugEnabled()) {
jtsLogger.logger.debug("RecoveredServerTransaction.replayPhase2(" + get_uid() + ") - status = " + Utility.stringStatus(theStatus));
}
if (theStatus == Status.StatusPrepared) {
/*
* We need to get the status from the our parent transaction in the
* interposition hierarchy.
*/
theStatus = getStatusFromParent();
if (jtsLogger.logger.isDebugEnabled()) {
jtsLogger.logger.debug("RecoveredServerTransaction.replayPhase2(" + get_uid() + ") -" + " status after contacting parent = " + Utility.stringStatus(theStatus));
}
}
if ((theStatus == Status.StatusCommitting) || (theStatus == Status.StatusCommitted)) {
phase2Commit(_reportHeuristics);
_recoveryStatus = RecoveryStatus.REPLAYED;
_txStatus = Status.StatusCommitted;
} else if ((theStatus == Status.StatusRolledBack) || (theStatus == Status.StatusRollingBack) || (theStatus == Status.StatusMarkedRollback) || (theStatus == Status.StatusNoTransaction)) {
phase2Abort(_reportHeuristics);
_recoveryStatus = RecoveryStatus.REPLAYED;
_txStatus = Status.StatusRolledBack;
} else if (theStatus == Status.StatusUnknown) {
jtsLogger.i18NLogger.info_recovery_transactions_RecoveredServerTransaction_6(get_uid());
_recoveryStatus = RecoveryStatus.REPLAY_FAILED;
} else {
jtsLogger.i18NLogger.warn_recovery_transactions_RecoveredServerTransaction_7(Utility.stringStatus(theStatus));
_recoveryStatus = RecoveryStatus.REPLAY_FAILED;
}
if (jtsLogger.logger.isDebugEnabled()) {
jtsLogger.logger.debug("RecoveredServerTransaction.replayPhase2: (" + get_uid() + ") finished");
}
}
Aggregations