Hi Tom,
It isn't being called. Why could that be?
The class is shown below - altho the recover method is returning null at the moment, it isn't printing the log, or if I use the debugger, it doesn't stop in that method.
-----------------------
package ch.maxant.jca_demo.sapresourceadapter;
import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.transaction.xa.XAException;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;
import org.jboss.security.Base64Utils;
public class XASAPResource
implements XAResource, Serializable
{
private final Logger log = Logger.getLogger(getClass().getName());
private SAPManagedConnection conn;
private int timeout = 300;
public XASAPResource(SAPManagedConnection conn) {
this.conn = conn;
}
public void commit(Xid xid, boolean onePhase)
throws XAException
{
this.log.log(Level.FINE, "COMMIT " + onePhase + "/" + gtid(xid));
try
{
this.conn.webService().confirm(gtid(xid));
this.conn.cleanup();
}
catch (Exception e)
{
this.log.log(Level.SEVERE, "Failed to CONFIRM", e);
throw new XAException(-3);
}
}
public void end(Xid xid, int flags)
throws XAException
{
String s = "-";
if (flags == 33554432)
s = "TMSUSPEND";
else if (flags == 536870912)
s = "TMFAIL";
else if (flags == 67108864) {
s = "TMSUCCESS";
}
this.log.log(Level.INFO, "END flags=" + s + "(" + flags + ")" + "/" + gtid(xid));
}
public void forget(Xid xid)
throws XAException
{
this.log.log(Level.INFO, "FORGET " + gtid(xid));
}
public int getTransactionTimeout()
throws XAException
{
return this.timeout;
}
public boolean isSameRM(XAResource xares)
throws XAException
{
this.log.log(Level.INFO, "isSameRM " + xares);
return equals(xares);
}
public int prepare(Xid xid)
throws XAException
{
this.log.log(Level.INFO, "PREPARE " + gtid(xid));
if (!this.conn.wasTrySuccessful().booleanValue()) {
throw new XAException(100);
}
return 0;
}
public Xid[] recover(int arg0)
throws XAException
{
this.log.log(Level.INFO, "RECOVER " + arg0);
return null;
}
public void rollback(Xid xid)
throws XAException
{
this.log.log(Level.INFO, "ROLLBACK " + gtid(xid));
try
{
this.conn.webService().cancel(gtid(xid));
this.conn.cleanup();
}
catch (Exception e)
{
throw new XAException(-3);
}
}
public boolean setTransactionTimeout(int timeout)
throws XAException
{
this.log.log(Level.INFO, "SET TRANSACTION TIMEOUT " + timeout);
this.timeout = timeout;
return true;
}
public void start(Xid xid, int arg1)
throws XAException
{
this.log.log(Level.INFO, "START " + arg1 + "/" + gtid(xid));
this.conn.setCurrentTxId(gtid(xid));
}
private String gtid(Xid xid)
{
return Base64Utils.tob64(xid.getGlobalTransactionId());
}
}