在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

import javax.transaction.xa.*;

public class MyXid implements Xid

{

protected int formatId;

protected byte gtrid[];

protected byte bqual[];

http://www.gaodaima.com/40332.htmlJava分布式事务概念与实现示例

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;

}

}2.2. 通过JNDI找到WebLogic中配置好的数据源

public XADataSource getXADataSource()

throws Exception

{

InitialContext ctx = new InitialContext( mgr.getProps());

XADataSource ds = (XADataSource)ctx.lookup("jdbc/xaDS");

return ds;

}2.3. 使用XADataSource得到XAConnection,使用XAConnection得到XAResource,基于XAResource进行具体数据访问。如果我们这里lookup多个XADataSource,然后得到多个XAResource,就可以实现多数据源的事务控制。

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();

}

欢迎大家阅读《Java分布式事务概念与实现示例》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码

原创文章,转载请注明: 转载自搞代码

微信 赏一包辣条吧~

支付宝 赏一听可乐吧~

分布式事务 java代码_Java分布式事务概念与实现示例相关推荐

  1. java代码中添加事务_C#和JAVA中编写事务代码

    C#  DAL层代码,执行多条增删改,使用事务操作: /// /// 执行 多条增删改 (非查询语句) /// /// /// /// public static int ExcuteNonQuery ...

  2. java中的事务是什么_java中事务的理解

    转载:http://www.cnblogs.com/kristain/articles/2038397.html 一.什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库 ...

  3. 随机数生成java代码_Java Bullshifier –生成大量随机代码库

    随机数生成java代码 生成大量随机Java应用程序的命令行工具 您一直在等待的命令行工具. 或不. 毕竟,这是很深奥的. 无论哪种方式,它对某些人都非常有用,而对其他人来说却是一个有趣的实用程序. ...

  4. c# mysql代码中写事务_代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性...

    [c#]代码库代码中使用事务前提:务必保证一个功能(或用例)在同一个打开的数据连接上,放到同一个事务里面操作. 首先是在D层添加一个类为了保存当前操作的这一个连接放到一个事务中执行,并事务执行打开同一 ...

  5. java代码_Java 代码实现排序算法

       阅读本文约需要8分钟  大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了下SpringBoot+Gradle+ MyBa ...

  6. 上传图片的表单java代码_java模拟post方式提交表单实现图片上传(示例代码)

    转自:http://blog.csdn.net/5iasp/article/details/8669644 模拟表单html如下: java代码如下: [java] view plain copy p ...

  7. 线性查找法java代码_Java线性查找和二分查找

    Java线性查找和二分查找. 一 线性查找 定义:在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程. 线性查找又称为顺序查找.如果查找池是某种类型的一个表,比如一个数组,简 ...

  8. 票据ticket实现方式java代码_Java代码实践12306售票算法(二)

    周五闲来无事,基于上一篇关于浅析12306售票算法(java版)理论,进行了java编码实践供各位读者参考(以下为相关代码的简单描述) 1.订票工具类 1.1初始化一列车厢的票据信息 /** * 生成 ...

  9. 3D屏保JAVA代码_java编程加载窗口,制作动画(屏保泡泡)

    1.整体的结构图: 2.编写GameFrame02.java代码: package cn.bjsxt.test; import java.awt.Frame; import java.awt.Grap ...

  10. qq邮箱格式的Java代码_java mail qq邮箱配置 实例

    程序入口: Test_Email_N.java importjava.io.IOException;importjava.util.Date;importjava.util.Properties;im ...

最新文章

  1. 用Windows系统实现RAID功能
  2. vue访问完整外部链接数据_【Excel小技巧】链接外部数据的五个方法
  3. C# WPF MVVM开发框架Caliburn.Micro快速搭建③
  4. c语言程序排序的原理,几种常见排序算法原理C语言实现
  5. 关于两个list深层遍历
  6. insert时调用本身字段_多线程编程时,7件你必须知道的事情
  7. oracle安装无响应,求教 pl/sql连接本机数据库是未响应问题
  8. VS2010 IDE安装问题
  9. 模拟生产者-消费者问题和读者-写者问题
  10. 云智慧获 D 轮数 2500 万美元投资:全力推动智能运维落地
  11. POJ 2079 求最大三角形面积
  12. Pfam数据库转移至InterPro数据库导致HMMER模型下载不能用
  13. 微信Android热更新Tinker使用详解(by 星空武哥)
  14. “蔚来杯“2022牛客暑期多校训练营10补题
  15. Kafka设计解析(十三)Kafka消费组(consumer group)
  16. Android 屏幕常亮 背景常亮
  17. 关于openCV报错无法打开文件“opencv_world340d.obj”的配置问题
  18. wps文档一敲空格就换行_wps文档中第一行字后面有很多空格,可是第二行就是上不来,按删除键就会把第一行字删了,为什么...
  19. 京东末位淘汰:为什么末位淘汰不适合用在软件研发团队?
  20. 【mud】object增加颜色的代码以及参考

热门文章

  1. vmware Esxi 回收Thin模式磁盘空间
  2. buuctf misc部分wp
  3. debian8.4安装sqliteman总结
  4. VMware ESXi 8.0 SLIC 2.6 macOS Unlocker (Oct 2022 GA)
  5. 01 学习如鹏网的C语言免费课程
  6. Linux0.11内核详解,linux 内核0.11 学习(一)
  7. java:xml数据转json
  8. Word另存为pdf时提示“由于出现意外错误,导出失败”的解决方案
  9. Python爬虫用到的一些浏览器代理标识
  10. Agilent/安捷伦N6705B直流电源分析仪