JTA和JTS
Java事务API(JTA:Java Transaction API)和它的同胞Java事务服务(JTS:Java Transaction Service),为J2EE平台提供了分布式事务服务(distributed transaction)。
一个资源管理器(resource manager)是任意类型的持久化数据存储。
事务管理器(transaction manager)承担着所有事务参与单元者的相互通讯的责任。
JTA与JDBC
JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中:JDBC连接、JDO PersistenceManager 对象、JMS 队列、JMS 主题、企业JavaBeans(EJB)、一个用J2EE Connector Architecture 规范编译的资源分配器。
划分
要用JTA来划分一个事务,应用程序调用javax.transaction.UserTransaction接口中的方法。
示例4显示了一个典型的JNDI搜索的UseTransaction对象。
import javax.transaction.*;
import javax.naming.*;
// ...
InitialContext ctx = new InitialContext();
Object txObj = ctx.lookup(";java:comp/UserTransaction";);
UserTransaction utx = (UserTransaction) txObj;
应用程序有了UserTransaction对象的引用之后,就可以象示例5那样来起动事务。
utx.begin();
// ...
DataSource ds = obtainXADataSource();
Connection conn = ds.getConnection();
pstmt = conn.prepareStatement(";UPDATE MOⅥES ...";);
pstmt.setString(1, ";Spinal Tap";);
pstmt.executeUpdate();
// ...
utx.commit();
// ...
|
当应用程序调用commit()时,事务管理器使用两段提交协议来结束事务。
JTA事务控制的方法:
.javax.transaction.UserTransaction接口提供
使用
应用程序调用begin()来起动事务,即可调用commit()也可以调用rollback()来结束事务。
开发人员经常使用JDBC来作为DAO类中的底层数据操作。
如果计划使用JTA来划分事务,你将需要一个实现了javax.sql.XADataSource,javax.sql.XAConnection和javax.sql.XAResource接口JDBC的驱动。
实现了这些接口的驱动将有能力参与到JTA事务中。
一个XADataSource对象是一个XAConnection对象的工厂。XAConnections是参与到JTA事务中的连接。你需要使用应用程序服务器管理工具来建立XADataSource对象。
特殊指令
对于特殊的指令请参考应用程序服务器文档和JDBC驱动文档。
J2EE应用程序使用JNDI来查找数据源。
一旦应用程序有了一个数据源对象的引用,这会调用javax.sql.DataSource.getConnection()来获得数据库的连接。
连接
XA 连接区别于非XA连接。要记住的是XA连接是一个JTA事务中的参与者。这就意味着XA连接不支持JDBC的自动提交特性。也就是说应用程序不必在XA连 接上调用java.sql.Connection.commit()或java.sql.Connection.rollback()。相反,应用程序应 该使用UserTransaction.begin()、UserTransaction.commit()和 UserTransaction.rollback().
注意
让我们来关注下面的话:
“用 JTA 界定事务,那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。XAConnection s 是参与 JTA 事务的 JDBC 连接。”
要使用JTA事务,必须使用XADataSource来产生数据库连接,产生的连接为一个XA连接。
XA连接(javax.sql.XAConnection)和非XA(java.sql.Connection)连接的区别在于:XA可以参与JTA的事务,而且不支持自动提交。
Note:
Oracle,Sybase,DB2,SQL Server等大型数据库才支持XA,支持分布事务。
My SQL 连本地都支持不好,更别说分布事务了。
MySql 在5.0的版本后增加了对xa的支持
参考:
http://baike.baidu.com/link?url=XyJuG3vKGXVEXAwGWZygdistGMIHKZe4sUvA4X9WzC8hbR0b7nKcjZ9YciAv0cmS#1_1
http://www.ibm.com/developerworks/cn/java/j-lo-jta/
相关推荐
JDBC和JTA访问数据库和管理事务的方法实例:JDBC访问数据库的一般方法、及JTA事务管理的方法介绍。
JTA配置文件请看applicationContext-jta.xml 博文链接:https://liran-email.iteye.com/blog/227990
跨数据库的事务管理配置jta,xml的详细配置
春天jta-narayana JTA,JPA,Hibernate和Narayana的Spring项目 ... 在tx:annotation-driven的applicationContext.xml中指示事务管理器。 另外包含:Log4J(根据: ://spring.io/blog/2009/12/04/logging-dep
JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。 要用 JTA 进行事务界定,应用程序要调用 javax.transaction.UserTransaction 接口中的方法。
-- JTA事务管理器 --> class="org.springframework.transaction.jta.JtaTransactionManager"> <!-- 数据源A --> ...
在Spring中使用JTA事务管理 1 通过集成JOTM,直接在Spring中使用JTA事务 1.1. 将JOTM以下类库添加到类路径中 1.2. 编写JOTM配置文件,放到类路径下 1.3. 在MySQL上建立两个数据库 1.4. 在Spring配置文件中配置JOTM ...
在tomcat 中配置JTA 事务,方便管理web项目
博客上有很多类似的,很多都有点小错误。还是自己搭建测试的好用。resource中有sql,自己创建两个数据库导入sql,即可运行test测试
JTS则规定了支持JTA的事务管理器的实现规范,在高层API之下实现了OMG Object Transaction Service(OTS) 1.1规范的Java映射。JTS使用Internet Inter-ORB Protocol(IIOP)来传播事务。本例子将介绍JTA与JTS在具体应用中...
SpringBoot集成Atomikos使用Oracle数据库mybatisSpringBoot集成Atomikos使用Oracle数据库mybatisSpringBoot集成Atomikos使用Oracle数据库mybatisSpringBoot集成Atomikos使用Oracle数据库mybatis
介绍了Spring的事务机制、事物抽象、内部事务和外部事物,以及常用的几种事务管理的实现,包括DataSource、JPA、JMS、JTA都通过实例进行说明。还有XA以及两阶段提交,并通过实例演示了使用JTA,通过两阶段提交,实现...
atomikos实现多数据源支持分布式事务管理(spring、tomcat、JTA) 结合spring 和durid进行配置,
springboot+jta+atomikos Springboot+atomikos+jta实现分布式事务统一管理
Java Web即Java EE,它是面向企业级的网络系统,其中的“企业级”和“网络”(分布式)代表了Java Web开发的核心目标。在Java EE最新的规范中提供了进行企业级开发的框架组件EJB,并同时提供了多种分布式服务开发...
Jtom(java open Transaction Manager)是java写的事务管理器并实现了jta接口,而且是开源项目。
ByteTCC Transaction Manager旨在提供一个兼容JTA的基于TCC机制的分布式事务管理器。兼容JTA,可以很好的与EJB、Spring等容器(本文档下文说明中将以Spring容器为例)进行集成。
内容包括事务及其控制的基本概念,Oracle中的事务处理,以及JDBC,EJB,JTA事务管理内容的总结,最后还介绍了事务管理的技巧,是了解和学习JAVA事务处理不可多得的第一手资料!
事务管理器 Bitronix 事务管理器 (BTM) 是 JTA 1.1 API 的简单但完整的实现。 它是一个完全工作的 XA 事务管理器,它提供 JTA API 所需的所有服务,同时尝试使代码尽可能简单以便于理解 XA 语义。 什么是新的 BTM ...
此代码是springboot项目,该项目内集成了多数据源和分布式事物,集合mybatis数据库持久层,集成了mybatis分页插件,事物拦截配置,页面模板引擎