快速业务通道

Java Transaction API概述 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
是工作在某个特定的数据库上,这是因为关联在数据库上的一些内在的问题。

在使用JTA之前,你必须首先实现一个Xid类用来标识事务(在普通情况下这将由事务管理程序来处理)。Xid包含三个元素:formatID、gtrid(全局事务标识符)和bqual(分支修饰词标识符)。

formatID通常是零,这意味着你将使用OSI CCR(Open Systems Interconnection Commitment, Concurrency和Recovery 标准)来命名。如果你要是用另外一种格式,那么formatID应该大于零。-1值意味着Xid为无效。

gtrid和bqual可以包含64个字节二进制码来分别标识全局事务和分支事务。唯一的要求是gtrid和bqual必须是全局唯一的。此外,这可以通过使用指定在OSI CCR中的命名规则规范来完成。

下面的例子说明Xid的实现:

import javax.transaction.xa.*; public class MyXid implements Xid {   protected int formatId;   protected byte gtrid[];   protected byte bqual[];   public MyXid()   {   }   public MyXid(int formatId, byte gtrid[], byte bqual[])   {    this.formatId = formatId;    this.gtrid = gtrid;    this.bqual = bqual;   }   public int getFormatId()   {    return formatId;   }   public byte[] getBranchQualifier()   {    return bqual;   }   public byte[] getGlobalTransactionId()   {    return gtrid;   } }

Java Transaction API概述(4)

时间:2010-12-11

其次,你需要创建一个你要使用的数据库的数据源:

public DataSource getDataSource()   throws SQLException   {    SQLServerDataSource xaDS = new    com.merant.datadirect.jdbcx.sqlserver.SQLServerDataSource();    xaDS.setDataSourceName("SQLServer");    xaDS.setServerName("server");    xaDS.setPortNumber(1433);    xaDS.setSelectMethod("cursor");    return xaDS; }

例1—这个例子是用“两步提交协议”来提交一个事务分支:

XADataSource xaDS; XAConnection xaCon; XAResource xaRes; Xid xid; Connection con; Statement stmt; int ret; xaDS = getDataSource(); xaCon = xaDS.getXAConnection("jdbc_user", "jdbc_password"); xaRes = xaCon.getXAResource(); con = xaCon.getConnection(); stmt = con.createStatement(); xid = new MyXid(100, new byte[]{0x01}, new byte[]{0x02}); try {    xaRes.start(xid, XAResource.TMNOFLAGS);    stmt.executeUpdate("insert into test_table values (100)");    xaRes.end(xid, XAResource.TMSUCCESS);    ret = xaRes.prepare(xid);    if (ret == XAResource.XA_OK) {      xaRes.commit(xid, false);     } } catch (XAException e) {   e.printStackTrace(); } finally {   stmt.close();   con.close();   xaCon.close(); }

因为所有这些例子中的初始化代码相同或者非常相似,仅仅是一些重要的地方的代码由不同。

例2—这个例子,与例1相似,说明了一个返回过程:

xaRes.start(xid, XAResource.TMNOFLAGS); stmt.executeUpdate("insert into test_table values (100)"); xaRes.end(xid, XAResource.TMSUCCESS); ret = xaRes.prepare(xid); if (ret == XAResource.XA_OK) {   xaRes.rollback(xid); }

Java Transaction API概述(5)

时间:2010-12-11

例3—这个例子说明一个分布式事务分支如何中止,让相同的连接做本地事务处理,以及它们稍后该如何继续这个分支。分布式事务的两步提交作用不影

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号