JBoss Community

Re: JCA Adapter & Recovery

created by Ant Kutschera in IronJacamar - View the full discussion

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());

  }

}

Reply to this message by going to Community

Start a new discussion in IronJacamar at Community