文档章节

JTA 二(Jotm 与StandardXADataSource )

 独行侠
发布于 2016/04/14 16:11
字数 650
阅读 19
收藏 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,那么对于数据所做的更改,是不会反应到数据库的。


© 著作权归作者所有

共有 人打赏支持
上一篇: JTA 三 (XADataSource)
下一篇: JTA 一(简介)
粉丝 1
博文 19
码字总数 9797
作品 0
成都
私信 提问
【分布式事务系列七】Atomikos的分布式案例

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

陶邦仁
2015/12/21
246
0
分布式事务系列(3.1)jotm的分布式案例

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

乒乓狂魔
2015/05/25
0
5
【分布式事务系列五】jotm的分布式案例

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

陶邦仁
2015/12/14
317
2
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

没有更多内容

加载失败,请刷新页面

加载更多

[LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

描述 设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。 如何反序列化或序列化二叉树是没有限制的,你...

honeymose
今天
5
0
java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
23
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
18
0
my.ini

1

architect刘源源
今天
16
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部