package org.jboss.jbossts.xts.recovery.participant.at; import com.arjuna.wst.Durable2PCParticipant; import java.io.Serializable; import java.io.ByteArrayOutputStream; import java.io.ObjectOutputStream; /** * helper to support retrieval of durable AT participant recovery state from participant */ public class ATParticipantHelper { /** * obtain a byte array containing the recovery state associated with the supplied * participant. * @param useSerialization true if the object should be converted to a byte array using * serialization otherwise it will be converted by casting to the PersistableATParticipant * interface and employing the getRecoveryState method. * @param participant the participant whose recovery state is to be obtained * @return the state to be saved ro null if no state needs to be saved * @throws Exception an exception occurred generating the required recoverable state */ public static byte[] getRecoveryState(boolean useSerialization, Durable2PCParticipant participant) throws Exception { if (useSerialization) { // serialize the object to a byte array via an object output stream final ByteArrayOutputStream baos = new ByteArrayOutputStream() ; final ObjectOutputStream oos = new ObjectOutputStream(baos) ; oos.writeObject(participant) ; oos.flush() ; return baos.toByteArray(); } else { PersistableATParticipant persistableParticipant = (PersistableATParticipant) participant; return persistableParticipant.getRecoveryState(); } } /** * @return true if the object can be saved and restored using serialization otherwise * @param participant */ public static boolean isSerializable(Durable2PCParticipant participant) { if (participant instanceof Serializable) { return true; } return false; } }