package org.jboss.jbossts.xts.recovery.participant.ba;
import com.arjuna.wst.BusinessAgreementWithParticipantCompletionParticipant;
import com.arjuna.wst.BusinessAgreementWithCoordinatorCompletionParticipant;
import java.io.ObjectInputStream;
/**
* an interface implemented by applications which wish to be involved in recovering
* saved participants after a crash.
*/
public interface XTSBARecoveryModule
{
/**
* called during recovery processing to allow an application to identify a participant id
* belonging to one of its participants and recreate the participant by deserializing
* it from the supplied object input stream. n.b. this is only appropriate in case the
* original was a ParticipantCompletion participant saved using serialization.
* @param id the id used when the participant was created
* @param stream a stream from which the application should deserialise the participant
* if it recognises that the id belongs to the module's application
* @return the deserialized ParticipantCompletion participant
* @throws Exception if an error occurs deserializing the ParticipantCompletion participant
*/
public BusinessAgreementWithParticipantCompletionParticipant
deserializeParticipantCompletionParticipant(String id, ObjectInputStream stream) throws Exception;
/**
* called during recovery processing to allow an application to identify a participant id
* belonging to one of its participants and use the saved recovery state to recreate the
* participant. n.b. this is only appropriate in case the original was a ParticipantCompletion
* participant saved after being converted to a byte array using the PersistibleBAParticipant
* interface.
* @param id the id used when the participant was created
* @param recoveryState a byte array returned form the original participant via a call to
* method getRecoveryState of interface PersistableBAParticipant
* @return the recreated ParticipantCompletion participant
* @throws Exception if an error occurs converting the recoveryState back to a
* ParticipantCompletion participant
*/
public BusinessAgreementWithParticipantCompletionParticipant
recreateParticipantCompletionParticipant(String id, byte[] recoveryState) throws Exception;
/**
* called during recovery processing to allow an application to identify a participant id
* belonging to one of its participants and recreate the participant by deserializing
* it from the supplied object input stream. n.b. this is only appropriate in case the
* original was a CoordinatorCompletion participant saved using serialization.
* @param id the id used when the participant was created
* @param stream a stream from which the application should deserialise the participant
* if it recognises that the id belongs to the module's application
* @return the deserialized ParticipantCompletion participant
* @throws Exception if an error occurs deserializing the CoordinatorCompletion participant
*/
public BusinessAgreementWithCoordinatorCompletionParticipant
deserializeCoordinatorCompletionParticipant(String id, ObjectInputStream stream) throws Exception;
/**
* called during recovery processing to allow an application to identify a participant id
* belonging to one of its participants and use the saved recovery state to recreate the
* participant. n.b. this is only appropriate in case the original was a CoordinatorCompletion
* participant saved after being converted to a byte array using the PersistibleBAParticipant
* interface.
* @param id the id used when the participant was created
* @param recoveryState a byte array returned form the original participant via a call to
* method getRecoveryState of interface PersistableBAParticipant
* @return the recreated ParticipantCompletion participant
* @throws Exception if an error occurs converting the recoveryState back to a
* CoordinatorCompletion participant
*/
public BusinessAgreementWithCoordinatorCompletionParticipant
recreateCoordinatorCompletionParticipant(String id, byte[] recoveryState) throws Exception;
/**
* participant recovery modules may need to perform special processing when the a recovery scan has
* completed. in particular it is only after the first recovery scan has completed they can identify
* whether locally prepared changes are accompanied by a recreated participant and roll back changes
* for those with no such participant.
*/
public void endScan();
}