Package org.jboss.jbossts.xts11.recovery.participant.ba

Source Code of org.jboss.jbossts.xts11.recovery.participant.ba.BAParticipantRecoveryRecord

package org.jboss.jbossts.xts11.recovery.participant.ba;

import com.arjuna.ats.arjuna.state.OutputObjectState;
import com.arjuna.ats.arjuna.state.InputObjectState;
import com.arjuna.webservices11.wsba.State;
import com.arjuna.webservices11.wsba.processors.ParticipantCompletionParticipantProcessor;
import com.arjuna.webservices11.wsba.processors.CoordinatorCompletionParticipantProcessor;
import com.arjuna.wst.BusinessAgreementWithParticipantCompletionParticipant;
import com.arjuna.wst.BusinessAgreementWithCoordinatorCompletionParticipant;
import com.arjuna.wst11.messaging.engines.ParticipantCompletionParticipantEngine;
import com.arjuna.wst11.messaging.engines.CoordinatorCompletionParticipantEngine;

import javax.xml.ws.wsaddressing.W3CEndpointReference;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import java.io.IOException;
import java.io.StringReader;

/**
* recovery record specific to WS-AT 1.1 protocol participants. this implements the behaviours
* necessary to save and restore a 1.1 participant to or from the TX object store
*/
public class BAParticipantRecoveryRecord extends org.jboss.jbossts.xts.recovery.participant.ba.BAParticipantRecoveryRecord {

    /**
     * constructor used during prepare processing to create an AT 1.1 participant record
     * for saving to the object store
     * @param id the id of the application-specific participant
     * @param participant the application-specific participant
     * @param
     */
    public BAParticipantRecoveryRecord(String id, BusinessAgreementWithParticipantCompletionParticipant participant, boolean isParticipantCompletion, W3CEndpointReference endpoint)
    {
        super(id, participant, isParticipantCompletion);
        this.endpoint = endpoint;
    }

    /**
     * constructor used during recovery processing to create a record whose contents will be
     * recovered from the object store
     */
    public BAParticipantRecoveryRecord()
    {
        super(null, null, false);
    }

    /**
     * save the endpoint reference to the coordinator for this participant
     */
    protected void saveEndpointReference(OutputObjectState oos) throws IOException {
        // the toString method will do what we need
        oos.packString(endpoint.toString());
    }

    /**
     * restore the endpoint reference to the coordinator for this participant
     */
    protected void restoreEndpointReference(InputObjectState ios) throws IOException {
        String endpointString = ios.unpackString();
        Source source = new StreamSource(new StringReader(endpointString));
        endpoint = new W3CEndpointReference(source);
    }

    /**
     * create a participant engine to manage commit or rollback processing for the
     * participant and install it in the active participants table
     */
    public void activate() {
        if (isParticipantCompletion) {
            ParticipantCompletionParticipantEngine engine = new ParticipantCompletionParticipantEngine(id, endpoint,  participant, State.STATE_COMPLETED, true);
            ParticipantCompletionParticipantProcessor.getProcessor().activateParticipant(engine, getId());
            engine.recovery();
        } else {
            BusinessAgreementWithCoordinatorCompletionParticipant coordinatorCompletionParticipant = (BusinessAgreementWithCoordinatorCompletionParticipant) participant;
            CoordinatorCompletionParticipantEngine engine = new CoordinatorCompletionParticipantEngine(id, endpoint,  coordinatorCompletionParticipant, State.STATE_COMPLETED, true);
            CoordinatorCompletionParticipantProcessor.getProcessor().activateParticipant(engine, getId());
            engine.recovery();
        }
    }

    /**
     * test whether a participant is currently activated with the id of this recovery record.
     *
     * @return true if a participant is currently activated with the id of this recovery record
     */
    public boolean isActive()
    {
        if (isParticipantCompletion) {
            return ParticipantCompletionParticipantProcessor.getProcessor().isActive(getId());
        } else {
            return CoordinatorCompletionParticipantProcessor.getProcessor().isActive(getId());
        }
    }


    private W3CEndpointReference endpoint;
}
TOP

Related Classes of org.jboss.jbossts.xts11.recovery.participant.ba.BAParticipantRecoveryRecord

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.