文档章节

JTA 二(Jotm 与StandardXADataSource )

 独行侠
发布于 2016/04/14 16:11
字数 650
阅读 17
收藏 0

Jotm是一个open source的JTA实现(可以google或者百度其下载连接),下面就用例子来说明其应用,并且在代码中说明一些问题.(后面我都将主要的code写出来,方法名,或者类名之类的,我都省略)


前面提到JTA可以处理的,是符合XA接口的资源,而我们通常的资源不是XA接口的,那么我们可以做的是:

1) 将非XA的资源通过某种方式转为XAResource(这种方式我并不推荐,因为其实质还是非XA的Resource,其并不能从jta中获益),

2) 利用实现方提供的XA实现,常见的商用数据库或者一些open source的database,jms等都有提供xa的实现


jotm提供了一种将非xa的jdbc转为xadatasource的接口,代码如下:


        StandardXADataSource xaDataSource=new StandardXADataSource();            
        xaDataSource.setUser("sa");
        xaDataSource.setPassword("");
        xaDataSource.setDriverName("org.h2.Driver");
        xaDataSource.setUrl("jdbc:h2:~/test");
        XAConnection xaConnection=xaDataSource.getXAConnection();

        XAResource xaResource=xaConnection.getXAResource();

        java.sql.Connection conn=xaConnection.getConnection();

        Statement sta=conn.createStatement();
       sta.executeUpdate("insert into Test(id,name)values(5,'xiaoming')");



之后呢,我们就可以对conn进行数据库的操作了,在上面的代码中,我们只是将一个非XA的数据库连接,封装为了一个XA的Resource以方便后面进行与JTA相关的操作。

怎么样操作呢?我们需要一个JTA的TransactionManager,这个对象是用来对XAResource事务管理的,jotm作为一个JTA的实现,可以在脱离javaee的容器的环境中,来使用JTA。

下面是如何获得TransactionManager(很简单):

Jotm jotm=new Jotm(true,false);//除了将jotm的所依赖包放入classpath之外,记得一定将jotm的一个属性文件 carol.properties也要复制到src下
 TransactionManager transactionManager=jotm.getTransactionManager();

这样子我们就有了进行事务管理的两个重要资源TransactionManager,XAResource


完全的代码如下


public static void main(String[]args)throws Exception{


try{

        StandardXADataSource xaDataSource=new StandardXADataSource();            
        xaDataSource.setUser("sa");
        xaDataSource.setPassword("");
        xaDataSource.setDriverName("org.h2.Driver");
        xaDataSource.setUrl("jdbc:h2:~/test");
        XAConnection xaConnection=xaDataSource.getXAConnection();

        XAResource xaResource=xaConnection.getXAResource();


       Jotm jotm=new Jotm(true,false);
       TransactionManager transactionManager=jotm.getTransactionManager();

        transactionManager.begin();//事务开始
       Transaction transaction=transactionManager.getTransaction();/整个事务的过程,也是一个对象Transaction

        transaction.enlistResource(xaResource);


        java.sql.Connection conn=xaConnection.getConnection();

        Statement sta=conn.createStatement();
       sta.executeUpdate("insert into Test(id,name)values(5,'xiaoming')");

       try{

             transaction.commit();//事务提交

       }catch(Exception e){

             transaction.rollback;//事务提交

      }       
      jotm.stop();//停止jotm

}finally{

     System.exit(0);//退出

}


以上就是整个例子了,网上jotm+spring的例子有很多,可以参考.

说明的是,对于JTA的事务管理,有点类似与jdbc中将Connection AutoCommit设置为false,也就是说,如果不进行最后的commit,那么对于数据所做的更改,是不会反应到数据库的。


© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 19
码字总数 9797
作品 0
成都
【分布式事务系列七】Atomikos的分布式案例

分布式事务 【分布式事务系列一】提出疑问和研究过程 【分布式事务系列二】Spring事务管理器PlatformTransactionManager 【分布式事务系列三】Spring的事务体系 【分布式事务系列四】分布式事...

陶邦仁
2015/12/21
246
0
【分布式事务系列五】jotm的分布式案例

分布式事务 【分布式事务系列一】提出疑问和研究过程 【分布式事务系列二】Spring事务管理器PlatformTransactionManager 【分布式事务系列三】Spring的事务体系 【分布式事务系列四】分布式事...

陶邦仁
2015/12/14
317
2
分布式事务系列(3.1)jotm的分布式案例

1 系列目录 - 分布式事务系列(开篇)提出疑问和研究过程- 分布式事务系列(1.1)Spring事务管理器PlatformTransactionManager源码分析- 分布式事务系列(1.2)Spring事务体系- 分布式事务系...

乒乓狂魔
2015/05/25
0
5
spring+hibernate+jotm 配置

项目开始的时候用的是Spring+hibernate+struts的架构,没有汲及JDBC编程,新加了一个工作流组件时,由于它是用JDBC编程的。问题就来了,JDBC的事务与spring的事务怎么结合呢。在网上搜了一下...

奋斗的小牛
2012/03/21
0
2
分布式事务系列(4.1)Atomikos的分布式案例

1 系列目录 - 分布式事务系列(开篇)提出疑问和研究过程- 分布式事务系列(1.1)Spring事务管理器PlatformTransactionManager源码分析- 分布式事务系列(1.2)Spring事务体系- 分布式事务系...

乒乓狂魔
2015/06/01
0
3

没有更多内容

加载失败,请刷新页面

加载更多

Kafka如何做到1秒处理1500万条消息?

Apache Kafka 是一款流行的分布式数据流平台,它已经广泛地被诸如 New Relic(数据智能平台)、Uber、Square(移动支付公司)等大型公司用来构建可扩展的、高吞吐量的、且高可靠的实时数据流系统...

架构师springboot
7分钟前
0
0
如何清理Nexus Repository Manager

随着开发运维一体化的理念逐渐深入,持续集成流水线已经成为软件开发的标配。持续集成通过高度自动化的方式,使得构建发布变得非常简单,构建发布次数随之变的越来越多。我们在享受高频次的构...

JasonSE
20分钟前
0
0
聊聊storm的ack机制

序 本文主要研究一下storm的ack机制 实例 SentenceSpout public class AckSentenceSpout extends BaseRichSpout { private ConcurrentHashMap<UUID, Values> pending; private Spo......

go4it
29分钟前
0
0
《netty入门与实战》笔记-05:netty内置的channelHandler

Netty 内置了很多开箱即用的 ChannelHandler。下面,我们通过学习 Netty 内置的 ChannelHandler 来逐步构建我们的 pipeline。 ChannelInboundHandlerAdapter 与 ChannelOutboundHandlerAdap...

Funcy1122
49分钟前
3
0
帧动画(wifi信号动态动画)

准备六张wifi不同信号强度的素材图片,复制到drawable目录中 在drawable目录中新建frame文件,并编写代码 <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> ...

lanyu96
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部