好久都没有这么想了解新的知识了,今天在查资料时看到一篇关于简介JTA的文章,顿时java的博大精深。和大家分享下关于JTA的知识,虽然是理论的但我相信会很快掌握用法的。
一般来说JTA就是对数据库操作(也就是事务)进行管理的javaEE规范,既然说到JTA那么大家对JDBC需要有一定的了解,不知道JDBC的自己去查资料吧,我就不详解了。
以前我对于JTA的映像仅仅局限于对同一数据库管理,管理数据是否提交。
JTA对事物的管理其实是可以跨数据库的,而为了程序员对数据操作的方便快捷,能对事务能方便的管理,一般会使用中间件,weblogic就提供了这样的功能。
我大致描述一下对不同数据库管理的一个过程:
在weblogic中建立多个数据源,当然是使用不同的数据库。通过各自的JNDI来的到连接,这样就可以操作数据库中的数据了,在就是通过weblogic提供的各种接口来实现对对事物的管理。
先介绍一下事务的相关概念:
事务是由一步或者几步数据库操作序列组成的逻辑执行单元,这系列操作要么全部执行、要么全部放弃。事务具有4个特性:原子性、一致性、隔离性和持续性。
JavaEE中事务处理一般分为如下两类:局部事务和分布式事务。
局部事务也就是我们经常接触到的,而分布式事务就是对多个数据库进行管理。
因为在对多个数据库进行数据访问时,不同的数据库是不知道其他数据库在干什么的,因此必须借助中间件的事务管理器来进行协调。从应用程序的角度来看,中间件的事务管理器消除了底层事务处理的复杂性,从而简化了分布式事务处理的编程步骤。
为了协调���个事务资源的分布式事务处理,多个事务资源底层必须使用一种通用的事务协议,目前比较流行的就是XA规范。X/OpenDTP模型包括应用程序(AP),事务管理器(TM)、资源管理器(RM)、通信资源管理器(CRM)。一般来说,TM就是事务中间件,RM是数据库,CRM是消息中间件。
XA规范的理论基础是两阶段提交协议(2pc),该协议定义了单个事务管理器如何协调和管理一个或多个数据库的局部事务,大概分为5个步骤:
如果希望使用JTA,开发者可调用javax.transaction.UserTransaction接口的begin、commit、rollback等方法来控制事务。
JTA对于分布式事务管理应该能实现了,只差一些配置上的问题了。