Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * 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) 1998, 1999, 2000,
  *
  * Arjuna Solutions Limited,
  * Newcastle upon Tyne,
  * Tyne and Wear,
  * UK.
  *
  * $Id: XidImple.java 2342 2006-03-30 13:06:17Z  $
  */
 
 package com.arjuna.ats.jta.xa;
 
 
 
Implementation of javax.transaction.xa.Xid.

Author(s):
Mark Little (mark@arjuna.com)
Version:
$Id: XidImple.java 2342 2006-03-30 13:06:17Z $
Since:
JTS 1.2.4.
 
 
 public class XidImple implements javax.transaction.xa.XidSerializable {
 	private static final long serialVersionUID = -8922505475867377266L;
 
 	public XidImple() {
 		 = null;
 	}
 
 	public XidImple(Xid xid) {
 		 = null;
 
 		copy(xid);
 		
 	}
 
 	public XidImple(AtomicAction c) {
 		this(c.get_uid(), falsenull);
 	}
 
 	public XidImple(Xid xidboolean branchInteger eisName) {
 		this(xid);
 		if (branch) {
 			XATxConverter.setBranchUID(new Uid());
 		}
 		XATxConverter.setEisName(eisName);
 	}
 
 	public XidImple(Uid id) {
 		this(idfalsenull);
 	}
 
 	public XidImple(Uid idboolean branchInteger eisName) {
 		try {
 			 = XATxConverter.getXid(idbrancheisName);
 		} catch (Exception e) {
 			 = null;
 
 			// abort or throw exception?
 		}
	}
	public XidImple(XID x) {
		 = x;
	}
	public final boolean isSameTransaction(Xid xid) {
		if (xid == null)
			return false;
		if (xid instanceof XidImple) {
		}
		if (getFormatId() == xid.getFormatId()) {
			byte[] gtx = xid.getGlobalTransactionId();
			if (. == gtx.length) {
				if (equals(xid))
					return true;
				else {
					for (int i = 0; i < .i++) {
						if (.[i] != gtx[i])
							return false;
					}
					return true;
				}
			}
		}
		return false;
	}
	public int getFormatId() {
		if ( != null) {
else
			return -1;
	}

These operations critically rely on the fact that we unpack the array in the order we packed it!
	public byte[] getGlobalTransactionId() {
		if ( != null) {
			byte b[] = new byte[.];
			System.arraycopy(., 0, b, 0, b.length);
			return b;
else
			return null;
	}
	public byte[] getBranchQualifier() {
		if ( != null) {
			byte b[] = new byte[.];
			System.arraycopy(..b, 0, b.length);
			return b;
else
			return null;
	}
	public final Uid getTransactionUid() {
		return XATxConverter.getUid();
	}
	public final XID getXID() {
		return ;
	}
	public final void copy(Xid xid) {
		 = new XID();
		if (xid != null) {
			if (xid instanceof XidImple)
			else {
				byte[] gtx = xid.getGlobalTransactionId();
				byte[] bql = xid.getBranchQualifier();
				final int bqlength = (bql == null ? 0 : bql.length);
				. = gtx.length;
				. = bqlength;
				System.arraycopy(gtx, 0, ., 0, gtx.length);
				if (bqlength > 0) {
					System.arraycopy(bql, 0, .gtx.length,
							bql.length);
				}
			}
		}
	}
	public boolean equals(Xid xid) {
		if (xid == null)
			return false;
		if (xid == this)
			return true;
		else {
			if (xid instanceof XidImple)
				return ((XidImplexid)..equals();
			else {
				if (xid.getFormatId() == .) {
					byte[] gtx = xid.getGlobalTransactionId();
					byte[] bql = xid.getBranchQualifier();
					final int bqlength = (bql == null ? 0 : bql.length);
					if ((. == gtx.length)
							&& (. == bqlength)) {
						int i;
						for (i = 0; i < .i++) {
							if (.[i] != gtx[i])
								return false;
						}
.i++) {
							if (.[i] != bql[i])
								return false;
						}
						return true;
					}
				}
			}
		}
		return false;
	}
	public final boolean packInto(OutputObjectState os) {
		boolean result = false;
		try {
			result = true;
catch (Exception e) {
			result = false;
		}
		return result;
	}
	public final boolean unpackFrom(InputObjectState os) {
		boolean result = false;
		try {
			if ( == null)
				 = new XID();
			result = true;
catch (Exception e) {
			result = false;
		}
		return result;
	}
	public static final void pack(OutputObjectState osXid xid)
			throws IOException {
		if (xid instanceof XidImple) {
			XidImple x = (XidImplexid;
			os.packBoolean(true);
			if (!x.packInto(os))
else {
			os.packBoolean(false);
			o.close();
		}
	}
	public static final Xid unpack(InputObjectState osthrows IOException {
		if (os.unpackBoolean()) {
			XidImple x = new XidImple();
			return x;
else {
			try {
				byte[] b = os.unpackBytes();
				Xid x = (Xido.readObject();
				return x;
catch (Exception e) {
				IOException ioException = new IOException(e.toString());
				ioException.initCause(e);
				throw ioException;
			}
		}
	}
	public String toString() {
		if ( != null)
			return .toString();
		else
	}

Is the specified object equal to this one?

Parameters:
obj The object to test.
Returns:
true if they are equal, false otherwise.
	public boolean equals(final Object obj) {
		if (obj instanceof Xid) {
			return equals((Xidobj);
		}
		return false;
	}

Return the hash code for this Xid.

Returns:
the hash code.
	public int hashCode() {
		return ;
	}

Generate the hash code for the xid.

Parameters:
xid The xid.
Returns:
The hash code.
	protected int getHash(final XID xid) {
		if (xid == null) {
			return 0;
		}
		final int hash = generateHash(xid.formatIDxid.data, 0,
				xid.gtrid_length);
		return generateHash(hashxid.dataxid.gtrid_lengthxid.bqual_length);
	}

Generate a hash code for the specified bytes.

Parameters:
hash The initial hash.
bytes The bytes to include in the hash.
Returns:
The new hash code.
	protected static int generateHash(int hashfinal byte[] bytes,
			final int startfinal int length) {
		for (int count = startcount < lengthcount++) {
			hash = 31 * hash + bytes[count];
		}
		return hash;
	}
	protected XID _theXid;
	private int hashCode;
New to GrepCode? Check out our FAQ X