All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.atomikos.icatch.imp.CommitMessage Maven / Gradle / Ivy

/**
 * Copyright (C) 2000-2020 Atomikos 
 *
 * LICENSE CONDITIONS
 *
 * See http://www.atomikos.com/Main/WhichLicenseApplies for details.
 */

package com.atomikos.icatch.imp;

import com.atomikos.icatch.HeurHazardException;
import com.atomikos.icatch.HeurMixedException;
import com.atomikos.icatch.HeurRollbackException;
import com.atomikos.icatch.Participant;
import com.atomikos.icatch.RollbackException;
import com.atomikos.logging.Logger;
import com.atomikos.logging.LoggerFactory;

/**
 * A commit message implementation.
 */

class CommitMessage extends PropagationMessage
{
	private static final Logger LOGGER = LoggerFactory.createLogger(CommitMessage.class);

    private boolean onephase_ = false;

    
    public CommitMessage ( Participant participant , Result result ,
            boolean onephase )
    {
        super ( participant , result );
        onephase_ = onephase;
    }

    /**
     * A commit message.
     * 
     * @return Boolean null.
     * @exception PropagationException
     *                If problems. If heuristics, this will be a heuristic
     *                exception; otherwise, commit has to be retried since
     *                participant can be indoubt. Hence, if not heuristic in
     *                nature, then the error is transient.
     */

    protected Boolean send () throws PropagationException
    {
        Participant part = getParticipant ();
        try {
            part.commit ( onephase_ );
            return null;
        } catch ( RollbackException rb ) {
            throw new PropagationException ( rb, false );
        } catch ( HeurMixedException heurm ) {
            throw new PropagationException ( heurm, false );
        } catch ( HeurRollbackException heurr ) {
            throw new PropagationException ( heurr, false );
        } catch ( Exception e ) {
            // heuristic hazard or not, participant might be indoubt.
            String msg = "Unexpected error in commit";
            LOGGER.logError ( msg, e );
            HeurHazardException heurh = new HeurHazardException();
            boolean retry = !onephase_; // cf case 175451
            throw new PropagationException ( heurh, retry );
        }
    }

    public String toString ()
    {
        return ("CommitMessage to " + getParticipant ());
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy