事务的基本概念

事务控制也是Java EE应用中必须处理的问题、它可以保证一系列数据库操作能够准确完成。事务既是保证底层数据库完整性的重要手段,也是保证应用业务逻辑成功执行的重要基础。对于一个实际企业级应用而言,有的只需要采用局部事务控制即可,有的则需要全局事务控制

JTA(Java Transaction API)则提供了事务划分的标准接口,尤其是当应用程序执行两个需要依赖于不同数据库的操作时,应用程序就需要使用JTA来将这两个操作包合成一个全局事务。

事务是由一步或几步数据库操作序列组成的逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。程序寻事务是两个不同的概念。一般而言,一段程序中可能包含多个事务。

事务具备4个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这4个特性也简称为ACID性。

1、原子性(Atomicity):事务是应用中最小执行单位,就如原子是自然界最小颗粒,具有不可再分的特征一样。事务是应用中不可再分的最小逻辑执行体。

2、一致性(Consistency):事务执行的结果,必须使数据库从一个一致性状,变到另一个一致性状态。当数据库只包含事务成功提交的结果时,数据库处于一致性状态。如果系统运行发生中断,某个事务尚未完成而被迫中断,而该未完成的事务对数据库所做的修改已被写入数据库,此时,数据库就处于一种不正确的状态,比如银行在两个账户之间转账:从A账户向B账户转入1000元。系统先减少A账户的1000元,然后再为B 账户增加1000元。如果全部执行成功,数据库处于一致性状态;如果仅执行A账户金额的修改,而没有增加B账户的金额,则数据库就处于不一致性状态。因此,一致性是通过原子性来保证的。

3、隔离性(isolation):各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务都是隔离的。也就是说,并发执行的事物之间不能看到对方的中间状态,并发执行的事物之间不能互相影响。

4、持续性(Durability):持续性也称为持久性(Persistence),指事务一旦提交,对数据所做的住何改变都要记录到永久存储器中,通常就是保存进物理数据库。

Java EE应用中事务处理一般可以分为如下两类:

1、局部事务(Local Transaction Processing)

2、分布式事务(Distributed Transaction Processing,DIP)

对于绝大部分企业应用而言,它只需要涉及单一的数据库资源,因此只需要采用局部事务即可。局都事务通常采用单阶段提交;但也有一些更复杂的企业级应用,它们需要使用一个以上的事务性资源,比如应用程序需要访问多个数据库的数据,这就需要来用分布式事务处理进行管理。分布式事务处理的关键是必须有一种方法保证多个数据库所做的全部动作,它们也可以作为一个整体,要么全部提交,要么全部回滚,这样能保证当业务逻辑跨越多个数据库资源时让多个数据库的数据保持一致。

当应用程序需要访问多个事务性资源时,之间依赖于底层数据库提供的局部事务显然无法保证多个数据库之间的一致性。因为一个数据库无法知道其他数据库在做什么,因此必须借助于中间件的事务管理器来进行协调,中间件的事务管理器负责通知和协调所有参与事务的相关数据库的提交或回滚,最后由各个单独的数据库将自己所做的操作进行实质提交或回滚。

从应用程序的角度来看,中间件的事务管理器消除了底层事务处理的复杂性,从而简化了分布式事务处理的编程步骤——应用程序无须理会底层多个事务资源里局部事务的开始、提交或回滚操作,应用程序只要面向中间件的事务管理器编程,用全局是事务管理API来开始、提交或回滚事务即可,而事务管理器则负责管理底层的多个事物资源。但应用程序向事务管理器发出一个事务处理操作,而底层则可能转换为多个低级别的事物命令。

(来源:疯狂软件教育)