package org.jboss.jbossts.xts.recovery.participant.at; import com.arjuna.wst.Durable2PCParticipant; import com.arjuna.wst.PersistableParticipant; import com.arjuna.mwlabs.wscf.model.twophase.arjunacore.subordinate.SubordinateATCoordinator; import com.arjuna.ats.arjuna.state.InputObjectState; import java.io.ObjectInputStream; /** * A recovery module which recovers durable participants registered by subordinate coordinators */ public class XTSATSubordinateRecoveryModule implements XTSATRecoveryModule { public Durable2PCParticipant deserialize(String id, ObjectInputStream stream) throws Exception { if (id.startsWith(SubordinateATCoordinator.PARTICIPANT_PREFIX)) { // throw an exception because we don't expect these participants to use serialization throw new Exception("XTSATSubordinateRecoveryModule : invalid request to deserialize() subordinate WS-AT coordinator durable participant " + id); } return null; } public Durable2PCParticipant recreate(String id, byte[] recoveryState) throws Exception { if (id.startsWith(SubordinateATCoordinator.PARTICIPANT_PREFIX)) { InputObjectState ios = new InputObjectState(); ios.setBuffer(recoveryState); String className = ios.unpackString(); Class participantClass = this.getClass().getClassLoader().loadClass(className); Durable2PCParticipant participant = (Durable2PCParticipant)participantClass.newInstance(); ((PersistableParticipant)participant).restoreState(ios); return participant; } return null; } /** * we don't need to use this because the AT recovery manager tracks whether a subordinate AT scan has happened */ public void endScan() { // do nothing } }