文档章节

JTA 二(Jotm 与StandardXADataSource )

 独行侠
发布于 2016/04/14 16:11
字数 650
阅读 17
收藏 0
点赞 1
评论 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
成都
spring+hibernate+jotm 配置

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

奋斗的小牛 ⋅ 2012/03/21 ⋅ 2

spring分布式事务(jotm)

分布式事务是指操作多个数据库之间的事务,在tomcat下,是没有分布式事务的,不过可以借助于第三方软件jotm(Java Open Transaction Manager )和AtomikosTransactionsEssentials实现, (PS:...

光石头 ⋅ 2011/04/28 ⋅ 2

【分布式事务系列七】Atomikos的分布式案例

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

陶邦仁 ⋅ 2015/12/21 ⋅ 0

【分布式事务系列五】jotm的分布式案例

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

陶邦仁 ⋅ 2015/12/14 ⋅ 2

分布式事务系列(3.1)jotm的分布式案例

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

乒乓狂魔 ⋅ 2015/05/25 ⋅ 5

Spring 集成 JOTM 的 JTA 事务管理

Spring 中集成 JOTM 配置 JTA 事务: 假如业务中要用到多个数据库,我们希望在业务方法中,当对某一个数据库的数据表进行操作的事务失败并回退(rollback),另外某一个数据库的数据表的操作...

崔耀升 ⋅ 2010/06/12 ⋅ 1

分布式事务系列(4.1)Atomikos的分布式案例

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

乒乓狂魔 ⋅ 2015/06/01 ⋅ 3

【分布式事务系列六】jotm分布式事务源码分析

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

陶邦仁 ⋅ 2015/12/18 ⋅ 0

DruidXADataSource 分布式事务问题

@wenshao 你好,想跟你请教个问题: 原项目 是org.enhydra.jdbc.standard.StandardXADataSource 配合 jotm+JtaTransactionManager 完成分布式事务的 如果要 切换到 com.alibaba.druid.pool.x...

JuST4iT ⋅ 2014/03/20 ⋅ 1

Spring引用Tomcat的 JTA事务

Spring引用Tomcat的 JTA事务 Tomcat是Servlet容器,但它提供了JNDI的实现,因此用户可以象在Java EE应用程序服务器中一样,在Tomcat中使用JNDI查找JDBC数据源。在事务处理方面,Tomcat本身并...

崔耀升 ⋅ 2010/06/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Day 17 vim简介与一般模式介绍

vim简介 vi和Vim的最大区别就是编辑一个文件时vi不会显示颜色,而Vim会显示颜色。显示颜色更便于用户编辑,凄然功能没有太大的区别 使用 yum install -y vim-enhanced 安装 vim的三种常用模式...

杉下 ⋅ 29分钟前 ⋅ 0

【每天一个JQuery特效】根据可见状态确定是否显示或隐藏元素(3)

效果图示: 主要代码: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>根据可见状态确定 是否显示或隐藏元素</title><script src="js/jquery-3.3.1.min.js" ty......

Rhymo-Wu ⋅ 38分钟前 ⋅ 0

OSChina 周四乱弹 —— 初中我身体就已经垮了,不知道为什么

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @加油东溪少年 :下完这场雨 后弦 《下完这场雨》- 后弦 手机党少年们想听歌,请使劲儿戳(这里) @马丁的代码 :买了日本 日本果然赢了 翻了...

小小编辑 ⋅ 57分钟前 ⋅ 8

浅谈springboot Web模式下的线程安全问题

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,所以并不存在线程安全问题。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,...

算法之名 ⋅ 今天 ⋅ 0

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部