分布式事务 java代码_Java分布式事务概念与实现示例[通俗易懂]

分布式事务 java代码_Java分布式事务概念与实现示例[通俗易懂]在java中有如下三种事务,简单的JDBC级的事务JTA-在EJB环境下,用户得到事务并进行控制CMP-完全由容器控制事务,用户通过Bean配置文件来定义事务行为二三种都支持分布式事务,但只支持Java环境下的分布式事务。下面讨论如何在Java程序里实现分布式事务,即在同一个事务里访问多个数据源。实际上就是如何使用JTA.这里假设使用oracle数据库,使用webLogic部署应用,所要做…

大家好,又见面了,我是你们的朋友全栈君。

在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 搞代码

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

e7ce419cf2d6ad34d01da2ceb8829eed.png

微信 赏一包辣条吧~

023a57327877fb4402bcc76911ec18ea.png

支付宝 赏一听可乐吧~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141001.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Ubuntu18.04 修改gcc/g++版本

    Ubuntu18.04 修改gcc/g++版本

  • AC餐饮指的是什么_餐饮tc和ac的区别

    AC餐饮指的是什么_餐饮tc和ac的区别奶牛们在吃饭方面十分挑剔。每头奶牛都有自己喜欢的食物和饮料,并且不会食用其他不喜欢的食物和饮料。农夫约翰为他的奶牛们做了美味的饭菜,但他忘了对照他们的喜好来检查菜单。虽然他可能无法令所有奶牛满意,但他想给尽可能多的奶牛提供一顿完整的用餐—-既有食物可吃,也有饮料可喝。农夫约翰一共烹制了 F 种食物,并提供了 D 种饮料。约翰共有 N 头奶牛,其中第 i 头奶牛有 Fi 种喜欢的食物以及 Di 种喜欢的饮料。约翰需要给每头奶牛分配一种食物和一种饮料,并使得有吃有喝的奶牛数量尽可能大。每种食物

  • Lighttpd 插件mod_h264 streaming (mp4)安装

    Lighttpd 插件mod_h264 streaming (mp4)安装

  • 数据库表分区的作用_oracle数据库分区

    数据库表分区的作用_oracle数据库分区分区表分区表用途分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中。分区完全对应用透明。Oracle的分区表可以包括多个分区,每个分区都是一个独立的段(SEGMENT),可以存放到不同的表空间中。查询时可以通过查询表来访问各个分区中的数据,也可以通过在查询时直接指定分区的方法来进行查询。分区表的优点:(1)由于将数据分散到各个分区中,减少了数据损坏的可能性;(2)可…

  • 薅羊毛利器—Loon,Cookie放在本地一点也不担心[通俗易懂]

    LoonLoon是一款在iOS系统下的代理工具(目前还没有Android版本),它支持在本地执行js脚本,只需简单配置即可成为薅羊毛利器ps之前的羊毛脚本已经失效了下载可以去美区AppStore下载,价格$4.99,需要有一个美区的AppleId账号,并且充值美元可以去某宝或拼夕夕搜索并购买,价格大概在¥9.99配置然后将下面框里面的配置赋值粘贴进去,点击保存[General]#IPv6支持ipv6=false##skip-proxy和bypass-tun一般不需

  • Response.ContentType

    Response.ContentType说明一下,类中的HttpContext.Current.Response.ContentType表示要导出文件的类型,下面是对Response.ContentType类型的汇总在ASP.NET中使用R

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号