1 5 package org.h2.jdbcx; 6 7 import java.sql.SQLException ; 8 import java.util.StringTokenizer ; 9 10 import javax.transaction.xa.Xid ; 12 14 import org.h2.message.Message; 15 import org.h2.message.TraceObject; 16 import org.h2.util.ByteUtils; 17 18 public class JdbcXid extends TraceObject 19 implements Xid 21 { 23 24 private static final String PREFIX = "XID"; 25 26 private int formatId; 27 private byte[] branchQualifier; 28 private byte[] globalTransactionId; 29 30 JdbcXid(JdbcDataSourceFactory factory, int id, String tid) throws SQLException { 31 setTrace(factory.getTrace(), TraceObject.XID, id); 32 try { 33 StringTokenizer tokenizer = new StringTokenizer (tid, "_"); 34 String prefix = tokenizer.nextToken(); 35 if(!PREFIX.equals(prefix)) { 36 throw Message.getSQLException(Message.WRONG_XID_FORMAT_1, tid); 37 } 38 formatId = Integer.parseInt(tokenizer.nextToken()); 39 branchQualifier = ByteUtils.convertStringToBytes(tokenizer.nextToken()); 40 globalTransactionId = ByteUtils.convertStringToBytes(tokenizer.nextToken()); 41 } catch(Throwable e) { 42 throw Message.getSQLException(Message.WRONG_XID_FORMAT_1, tid); 43 } 44 } 45 46 53 public String getAsString() { 54 StringBuffer buff = new StringBuffer (PREFIX); 55 buff.append('_'); 56 buff.append(formatId); 57 buff.append('_'); 58 buff.append(ByteUtils.convertBytesToString(branchQualifier)); 59 buff.append('_'); 60 buff.append(ByteUtils.convertBytesToString(globalTransactionId)); 61 return buff.toString(); 62 } 63 64 70 public int getFormatId() { 71 debugCodeCall("getFormatId"); 72 return formatId; 73 } 74 75 public byte[] getBranchQualifier() { 76 debugCodeCall("getBranchQualifier"); 77 return branchQualifier; 78 } 79 80 public byte[] getGlobalTransactionId() { 81 debugCodeCall("getGlobalTransactionId"); 82 return globalTransactionId; 83 } 84 85 } 86 | Popular Tags |