public synchronized void participantFaulted (String participantId)
throws InvalidParticipantException, SystemException
{
if (participantId == null)
throw new SystemException(
wscfLogger.log_mesg
.getString("com.arjuna.mwlabs.wscf.model.sagas.arjunacore.ACCoordinator_2"));
int status = status();
// faulted is only legitimate when the TX is in these states
switch (status) {
case ActionStatus.RUNNING:
// if a participant notifies this then we need to mark the transaction as abort only
preventCommit();
// !!! deliberate drop through !!!
case ActionStatus.ABORT_ONLY:
case ActionStatus.COMMITTING:
case ActionStatus.COMMITTED: // this can happen during recovery processing
case ActionStatus.ABORTING:
changeParticipantStatus(participantId, FAILED);
break;
default:
throw new SystemException(
wscfLogger.log_mesg
.getString("com.arjuna.mwlabs.wscf.model.sagas.arjunacore.ACCoordinator_3"));
}
}