Search in sources :

Example 1 with HeuristicException

use of org.jboss.narayana.rest.integration.api.HeuristicException in project narayana by jbosstm.

the class RecoveryManager method recreateParticipantInformation.

private ParticipantInformation recreateParticipantInformation(final RecoveryStore recoveryStore, final Uid uid) throws ObjectStoreException, IOException {
    final InputObjectState inputObjectState = recoveryStore.read_committed(uid, PARTICIPANT_INFORMATION_RECORD_TYPE);
    final String id = inputObjectState.unpackString();
    if (ParticipantsContainer.getInstance().getParticipantInformation(id) != null) {
        // Participant is already loaded.
        return null;
    }
    final String applicationId = inputObjectState.unpackString();
    if (!deserializers.containsKey(applicationId)) {
        // There is no appropriate deserializer.
        return null;
    }
    final String status = inputObjectState.unpackString();
    final String recoveryUrl = inputObjectState.unpackString();
    final Participant participant = recreateParticipant(inputObjectState, applicationId);
    if (participant == null) {
        // Deserializer failed to recreate participant.
        return null;
    }
    final ParticipantInformation participantInformation = new ParticipantInformation(id, applicationId, recoveryUrl, participant, status);
    if (!synchronizeParticipantUrlWithCoordinator(participantInformation)) {
        try {
            participant.rollback();
            removeParticipantInformation(participantInformation);
        // TODO is it OK to leave participant not rolled back in case of Exception?
        } catch (HeuristicException e) {
            LOG.warn(e.getMessage(), e);
        } catch (ParticipantException e) {
            LOG.warn(e.getMessage(), e);
        }
        return null;
    }
    return participantInformation;
}
Also used : InputObjectState(com.arjuna.ats.arjuna.state.InputObjectState) HeuristicException(org.jboss.narayana.rest.integration.api.HeuristicException) Participant(org.jboss.narayana.rest.integration.api.Participant) PersistableParticipant(org.jboss.narayana.rest.integration.api.PersistableParticipant) ParticipantException(org.jboss.narayana.rest.integration.api.ParticipantException)

Example 2 with HeuristicException

use of org.jboss.narayana.rest.integration.api.HeuristicException in project narayana by jbosstm.

the class InboundBridgeParticipant method commitOnePhase.

@Override
public void commitOnePhase() {
    if (LOG.isTraceEnabled()) {
        LOG.trace("InboundBridgeParticipant.commitOnePhase: xid=" + xid);
    }
    startBridge();
    final Vote outcome = prepareSubordinate();
    if (LOG.isTraceEnabled()) {
        LOG.trace("InboundBridgeParticipant.commitOnePhase: xid=" + xid + ", outcome=" + outcome);
    }
    if (outcome instanceof Prepared) {
        try {
            commitSubordinate();
        } catch (HeuristicException e) {
        }
    }
    cleanup();
}
Also used : HeuristicException(org.jboss.narayana.rest.integration.api.HeuristicException) Vote(org.jboss.narayana.rest.integration.api.Vote) Prepared(org.jboss.narayana.rest.integration.api.Prepared)

Example 3 with HeuristicException

use of org.jboss.narayana.rest.integration.api.HeuristicException in project narayana by jbosstm.

the class ParticipantResource method rollback.

private void rollback(final ParticipantInformation participantInformation) throws HeuristicException {
    if (isHeuristic(participantInformation)) {
        rollbackHeuristic(participantInformation);
    } else {
        final String previousStatus = participantInformation.getStatus();
        participantInformation.setStatus(TxStatus.TransactionRollingBack.name());
        try {
            participantInformation.getParticipant().rollback();
        } catch (HeuristicException e) {
            if (!e.getHeuristicType().equals(HeuristicType.HEURISTIC_ROLLBACK)) {
                participantInformation.setStatus(e.getHeuristicType().toTxStatus());
                RecoveryManager.getInstance().persistParticipantInformation(participantInformation);
                throw new HeuristicException(e.getHeuristicType());
            }
        } catch (ParticipantException e) {
            participantInformation.setStatus(previousStatus);
            throw e;
        }
        participantInformation.setStatus(TxStatus.TransactionRolledBack.name());
        RecoveryManager.getInstance().removeParticipantInformation(participantInformation);
        ParticipantsContainer.getInstance().removeParticipantInformation(participantInformation.getId());
    }
}
Also used : HeuristicException(org.jboss.narayana.rest.integration.api.HeuristicException) ParticipantException(org.jboss.narayana.rest.integration.api.ParticipantException)

Example 4 with HeuristicException

use of org.jboss.narayana.rest.integration.api.HeuristicException in project narayana by jbosstm.

the class ParticipantResource method commit.

private void commit(final ParticipantInformation participantInformation) throws HeuristicException {
    if (isHeuristic(participantInformation)) {
        commitHeuristic(participantInformation);
    } else {
        participantInformation.setStatus(TxStatus.TransactionCommitting.name());
        try {
            participantInformation.getParticipant().commit();
        } catch (HeuristicException e) {
            if (!e.getHeuristicType().equals(HeuristicType.HEURISTIC_COMMIT)) {
                participantInformation.setStatus(e.getHeuristicType().toTxStatus());
                RecoveryManager.getInstance().persistParticipantInformation(participantInformation);
                throw new HeuristicException(e.getHeuristicType());
            }
        } catch (ParticipantException e) {
            participantInformation.setStatus(TxStatus.TransactionPrepared.name());
            throw e;
        }
        participantInformation.setStatus(TxStatus.TransactionCommitted.name());
        RecoveryManager.getInstance().removeParticipantInformation(participantInformation);
        ParticipantsContainer.getInstance().removeParticipantInformation(participantInformation.getId());
    }
}
Also used : HeuristicException(org.jboss.narayana.rest.integration.api.HeuristicException) ParticipantException(org.jboss.narayana.rest.integration.api.ParticipantException)

Aggregations

HeuristicException (org.jboss.narayana.rest.integration.api.HeuristicException)4 ParticipantException (org.jboss.narayana.rest.integration.api.ParticipantException)3 InputObjectState (com.arjuna.ats.arjuna.state.InputObjectState)1 Participant (org.jboss.narayana.rest.integration.api.Participant)1 PersistableParticipant (org.jboss.narayana.rest.integration.api.PersistableParticipant)1 Prepared (org.jboss.narayana.rest.integration.api.Prepared)1 Vote (org.jboss.narayana.rest.integration.api.Vote)1