package com.hp.mwtests.ts.jta.recovery; import java.util.ArrayList; import java.util.List; import javax.transaction.xa.XAException; import javax.transaction.xa.XAResource; import javax.transaction.xa.Xid; import com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule; public class XARXARMSyncer implements XAResource { private static List<Xid> xids = new ArrayList<Xid>(); private XARecoveryModule xarm; private static boolean orphanDetected; public static boolean isOrphanDetected() { return orphanDetected; } public XARXARMSyncer(XARecoveryModule xarm) { orphanDetected = false; this.xarm = xarm; } public XARXARMSyncer() { orphanDetected = false; } public int prepare(Xid xid) throws XAException { System.out.println("**prepare " + xid); xids.add(xid); xarm.periodicWorkFirstPass(); return XAResource.XA_OK; } public void commit(Xid xid, boolean onePhase) throws XAException { if (!xids.remove(xid)) { throw new XAException("unknown xid: " + xid); } System.out.println("**commit " + xid); } public void rollback(Xid xid) throws XAException { if (!xids.remove(xid)) { orphanDetected = true; // throw new XAException("unknown xid: " + xid); } System.out.println("**rollback " + xid); } public Xid[] recover(int flag) throws XAException { System.out.println("**xarecover " + flag); for (int i = 0; i < xids.size(); i++) { System.out.println(" **found " + xids.get(i)); } System.out.println("**xarecover returning"); return xids.toArray(new Xid[0]); } public void end(Xid xid, int flags) throws XAException { } public void forget(Xid xid) throws XAException { } public int getTransactionTimeout() throws XAException { return 0; } public boolean setTransactionTimeout(int seconds) throws XAException { return true; } public void start(Xid xid, int flags) throws XAException { } public boolean isSameRM(XAResource xares) throws XAException { return (xares == this); } }