Java分布式事务概念与实现示例
2008-02-23 09:46:14来源:互联网 阅读 ()
在Java中有如下三种事务,
- 简单的JDBC级的事务
- JTA - 在EJB环境下,用户得到事务并进行控制
- CMP - 完全由容器控制事务,用户通过Bean配置文件来定义事务行为
二三种都支持分布式事务,但只支持Java环境下的分布式事务。
下面讨论如何在Java程序里实现分布式事务,即在同一个事务里访问多个数据源。实际上就是如何使用JTA.
这里假设使用Oracle数据库,使用WebLogic部署应用,所要做的是如下几步:
1. 配置
1.1 确认数据库支持分布式事务 - oracle是支持分布式事务的,JDBC驱动也支持分布式事务
1.2 在WebLogic里配置DataSource
1.2.1. 配置连接池,注意这里应该选择驱动是Thin XA而不是Thin
1.2.2. 配置数据源,使用前面配好的XA的连接池
2. 程序实现
2.1. 实现自己的Xid
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;
}
}
public XADataSource getXADataSource()
throws Exception
{
InitialContext ctx = new InitialContext( mgr.getProps());
XADataSource ds = (XADataSource)ctx.lookup("jdbc/xaDS");
return ds;
}
XADataSource xaDS;
XAConnection xaCon;
XAResource xaRes;
Xid xid;
Connection con;
Statement stmt;
int ret;
xaDS = getXADataSource();
xaCon = xaDS.getXAConnection();
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();
}
上一篇: J2ME程序与Servlet通讯访问Access数据库
下一篇: java.net.MulticastSocket翻译
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash