Package com.arjuna.ats.internal.arjuna.utils

Source Code of com.arjuna.ats.internal.arjuna.utils.XATxConverter

/*
* JBoss, Home of Professional Open Source
* Copyright 2006, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags.
* See the copyright.txt in the distribution for a
* full listing of individual contributors.
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License, v. 2.1.
* This program is distributed in the hope that it will be useful, but WITHOUT A
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License,
* v.2.1 along with this distribution; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA  02110-1301, USA.
*
* (C) 2005-2006,
* @author JBoss Inc.
*/
/*
* Copyright (C) 2002,
*
* Hewlett-Packard Arjuna Labs,
* Newcastle upon Tyne,
* Tyne and Wear,
* UK. 
*
* $Id: XATxConverter.java 2342 2006-03-30 13:06:17Z  $
*/

package com.arjuna.ats.internal.arjuna.utils;

import com.arjuna.ats.arjuna.common.Uid;
import com.arjuna.ats.arjuna.xa.XID;
import com.arjuna.ats.arjuna.coordinator.TxControl;

/**
* @author Mark Little (mark.little@arjuna.com)
* @version $Id: XATxConverter.java 2342 2006-03-30 13:06:17Z  $
* @since JTS 1.0.
*/

public class XATxConverter
{

    public static final int FORMAT_ID = 131075; // different from JTS ones.
    public static final char NODE_SEPARATOR = '-';

    public static XID getXid (Uid uid, boolean branch) throws IllegalStateException
    {
  return getXid(uid, branch, FORMAT_ID);
    }

    public static XID getXid (Uid uid, boolean branch, int formatId) throws IllegalStateException
    {
  if (branch)
      return getXid(uid, new Uid(), formatId);
  else
      return getXid(uid, Uid.nullUid(), formatId);
    }

    public static XID getXid (Uid uid, Uid branch, int formatId) throws IllegalStateException
    {
  if (uid == null)
      throw new IllegalStateException();
 
  byte[] nodeName = TxControl.getXANodeName();
  String s = uid.stringForm();
  int uidLen = s.length()+nodeName.length+1;
   
  if (uidLen > com.arjuna.ats.arjuna.xa.XID.MAXGTRIDSIZE// Uid is too long!!!!
  {
      throw new IllegalStateException();
  }
  else
  {
      try
      {
    XID xid = new XID();
       
    xid.formatID = formatId;
    xid.gtrid_length = uidLen;

    /*
     * Copy in the XA node identifier first.
     */

    System.arraycopy(nodeName, 0, xid.data, 0, nodeName.length);
   
    xid.data[nodeName.length] = NODE_SEPARATOR;
   
    byte[] b = s.getBytes();

    /*
     * Which way round do we fill in the structure?
     */

    System.arraycopy(b, 0, xid.data, nodeName.length+1, b.length);
       
    if (branch.notEquals(Uid.nullUid()))
    {
        String bs = branch.stringForm();
        int bsLen = bs.length();
       
        b = bs.getBytes();

        if (bsLen > XID.MAXBQUALSIZE) // Uid is too long!!!!
      throw new IllegalStateException();
        else
        {
      xid.bqual_length = bsLen;
       
      System.arraycopy (b, 0, xid.data, xid.gtrid_length, bsLen);
        }
   
        bs = null;
    }
    else
    {
        /*
         * Note: for some dbs we seem to be able to get
         * away with setting the size field to the size
         * of the actual branch. However, for Oracle,
         * it appears as though it must always be 64.
         * (At least for zero branches.)
         */

        xid.data[xid.gtrid_length] = (byte) 0;
        xid.bqual_length = 64;
    }
       
    b = null;
    s = null;

    return xid;
      }
      catch (Exception e)
      {
    e.printStackTrace();
   
    throw new IllegalStateException(e.toString());
      }
  }
    }

    public static Uid getUid (com.arjuna.ats.arjuna.xa.XID xid)
    {
  if (xid == null)
      return Uid.nullUid();
 
  if ((xid.formatID == -1) || (xid.gtrid_length <= 0)) // means null XID
      return Uid.nullUid();
  else
  {
      int nodeNameIndex = 0;
     
      for (int i = 0; i < xid.gtrid_length; i++)
      {
    if (xid.data[i] == NODE_SEPARATOR)
    {
        nodeNameIndex = i+1;
        break;
    }
      }
     
      byte[] buff = new byte[xid.gtrid_length-nodeNameIndex];

      System.arraycopy(xid.data, nodeNameIndex, buff, 0, buff.length);

      Uid tx = new Uid(new String(buff), true);

      buff = null;

      return tx;
  }
    }

    public static Uid getBranch (com.arjuna.ats.arjuna.xa.XID xid)
    {
  return null;
    }
   
}
TOP

Related Classes of com.arjuna.ats.internal.arjuna.utils.XATxConverter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.