db-derby-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Myrna van Lunteren" <m.v.lunte...@gmail.com>
Subject Re: Help with creating XA transaction Ids
Date Wed, 27 Sep 2006 02:52:39 GMT
On 9/26/06, Mick Jordan <Mick.Jordan@sun.com> wrote:
> I'm trying to run a distributed transaction on two Derby instances using
> a my application program as the transaction manager. I'm stuck on how to
> create a global transaction id that I can pass to the start method of
> the XAResource object  that I get from the XAConnection object (an
> instance of NetXAResource).
>
> I've searched for examples but both that I found used external classes
> to create the Xid. Looking at the Derby code the most likely candidate
> seemed to be org.apache.derby.client.ClientXid but I have no idea what
> to pass to the constructor. The best example I found on an IBM site used
> com.ibm.db2.jcc.DB2Xid. I've not found any Derby-specific examples of
> how to create an Xid.
>
> Any pointers much appreciated.
>
> Thanks
> Mick Jordan
>
>
Hi Mick,

I'm a complete novice, but by coincidence I've been staring at the
Derby functional test
org.apache.derbyTesting.functionTests.tests.jdbcapi.checkDataSource.java.
In this test, the author(s) have made an internal class which
implements javax.transaction.xa.Xid that creates the Xid:

-------------------------
class cdsXid implements Xid, Serializable
{
  private static final long serialVersionUID = 64467338100036L;

	private final int format_id;
	private byte[] global_id;
	private byte[] branch_id;


	cdsXid(int xid, byte b1, byte b2)
	{
		format_id = xid;
		global_id = new byte[Xid.MAXGTRIDSIZE];
		branch_id = new byte[Xid.MAXBQUALSIZE];

		for (int i = 0; i < global_id.length; i++) {
			global_id[i] = b1;
		}

		for (int i = 0; i < branch_id.length; i++) {
			branch_id[i] = b2;
		}
	}

    /**
     * Obtain the format id part of the Xid.
     * <p>
     *
     * @return Format identifier. O means the OSI CCR format.
     **/
    public int getFormatId()
    {
        return(format_id);
    }

    /**
     * Obtain the global transaction identifier part of XID as an array of
     * bytes.
     * <p>
     *
	 * @return A byte array containing the global transaction identifier.
     **/
    public byte[] getGlobalTransactionId()
    {
        return(global_id);
    }

    /**
     * Obtain the transaction branch qualifier part of the Xid in a byte array.
     * <p>
     *
	 * @return A byte array containing the branch qualifier of the transaction.
     **/
    public byte[] getBranchQualifier()
    {
        return(branch_id);
    }
}
----------------------------
A new Xid is then obtained as follows:

	Xid xid = new cdsXid(1, (byte) 35, (byte) 47);
or
	Xid xid = new cdsXid(1, (byte) 93, (byte) 103);

HTH
Myrna

Mime
View raw message