分布式事务 java代码_Java分布式事务概念与实现示例
在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分布式事务概念与实现示例相关推荐
- java代码中添加事务_C#和JAVA中编写事务代码
C# DAL层代码,执行多条增删改,使用事务操作: /// /// 执行 多条增删改 (非查询语句) /// /// /// /// public static int ExcuteNonQuery ...
- java中的事务是什么_java中事务的理解
转载:http://www.cnblogs.com/kristain/articles/2038397.html 一.什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库 ...
- 随机数生成java代码_Java Bullshifier –生成大量随机代码库
随机数生成java代码 生成大量随机Java应用程序的命令行工具 您一直在等待的命令行工具. 或不. 毕竟,这是很深奥的. 无论哪种方式,它对某些人都非常有用,而对其他人来说却是一个有趣的实用程序. ...
- c# mysql代码中写事务_代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性...
[c#]代码库代码中使用事务前提:务必保证一个功能(或用例)在同一个打开的数据连接上,放到同一个事务里面操作. 首先是在D层添加一个类为了保存当前操作的这一个连接放到一个事务中执行,并事务执行打开同一 ...
- java代码_Java 代码实现排序算法
阅读本文约需要8分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了下SpringBoot+Gradle+ MyBa ...
- 上传图片的表单java代码_java模拟post方式提交表单实现图片上传(示例代码)
转自:http://blog.csdn.net/5iasp/article/details/8669644 模拟表单html如下: java代码如下: [java] view plain copy p ...
- 线性查找法java代码_Java线性查找和二分查找
Java线性查找和二分查找. 一 线性查找 定义:在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程. 线性查找又称为顺序查找.如果查找池是某种类型的一个表,比如一个数组,简 ...
- 票据ticket实现方式java代码_Java代码实践12306售票算法(二)
周五闲来无事,基于上一篇关于浅析12306售票算法(java版)理论,进行了java编码实践供各位读者参考(以下为相关代码的简单描述) 1.订票工具类 1.1初始化一列车厢的票据信息 /** * 生成 ...
- 3D屏保JAVA代码_java编程加载窗口,制作动画(屏保泡泡)
1.整体的结构图: 2.编写GameFrame02.java代码: package cn.bjsxt.test; import java.awt.Frame; import java.awt.Grap ...
- qq邮箱格式的Java代码_java mail qq邮箱配置 实例
程序入口: Test_Email_N.java importjava.io.IOException;importjava.util.Date;importjava.util.Properties;im ...
最新文章
- 用Windows系统实现RAID功能
- vue访问完整外部链接数据_【Excel小技巧】链接外部数据的五个方法
- C# WPF MVVM开发框架Caliburn.Micro快速搭建③
- c语言程序排序的原理,几种常见排序算法原理C语言实现
- 关于两个list深层遍历
- insert时调用本身字段_多线程编程时,7件你必须知道的事情
- oracle安装无响应,求教 pl/sql连接本机数据库是未响应问题
- VS2010 IDE安装问题
- 模拟生产者-消费者问题和读者-写者问题
- 云智慧获 D 轮数 2500 万美元投资:全力推动智能运维落地
- POJ 2079 求最大三角形面积
- Pfam数据库转移至InterPro数据库导致HMMER模型下载不能用
- 微信Android热更新Tinker使用详解(by 星空武哥)
- “蔚来杯“2022牛客暑期多校训练营10补题
- Kafka设计解析(十三)Kafka消费组(consumer group)
- Android 屏幕常亮 背景常亮
- 关于openCV报错无法打开文件“opencv_world340d.obj”的配置问题
- wps文档一敲空格就换行_wps文档中第一行字后面有很多空格,可是第二行就是上不来,按删除键就会把第一行字删了,为什么...
- 京东末位淘汰:为什么末位淘汰不适合用在软件研发团队?
- 【mud】object增加颜色的代码以及参考
热门文章
- vmware Esxi 回收Thin模式磁盘空间
- buuctf misc部分wp
- debian8.4安装sqliteman总结
- VMware ESXi 8.0 SLIC 2.6 macOS Unlocker (Oct 2022 GA)
- 01 学习如鹏网的C语言免费课程
- Linux0.11内核详解,linux 内核0.11 学习(一)
- java:xml数据转json
- Word另存为pdf时提示“由于出现意外错误,导出失败”的解决方案
- Python爬虫用到的一些浏览器代理标识
- Agilent/安捷伦N6705B直流电源分析仪