文档介绍:11/10/2017 9:56 PM
J2EE事务处理
基本概念
事务处理模型
EJB中的事务处理
事务的并发控制
11/10/2017 9:56 PM
基本概念
(1)事务处理对象
是一个应用程序组件,这一组件或者需要开始一个新的事务,或者加入一个正在进行的事务。这种组件在J2EE中是Enterprise Bean,,或是一人基于COBRA标准的组件。
(2)事务管理器
负责管理事务对象的事务操作,它在后台协调事务处理的相关操作。
(3)资源
主要指数据库、消息队列等。
(4)资源管理器
主要对资源进行管理,数据库驱动程序是一种资源管理器。
(5)ACID
A(Atomicity):它保证多个操作作为一个整体单元来完成。
C(Consistency):它保证系统状态在事务操作完成前后的一致性。
I(Isolation):一个事务处理不需要知道另一个事务也在处理同一数据。
D(Durability):保证对资源的修改不会因为故障而丢失(日志)。
11/10/2017 9:56 PM
事务处理模型
事务处理模型是进行事务处理的方式。最常用的事务处理模型是FLAT模型和NESTED模型。无论采用何种模型,系统必须提供这种服务,在EJB中并不是所有产品都支持NESTED模型,在Enterprise Bean中只使用FLAT事务处理模型。
(1)FLAT事务处理模型
(2)NESTED事务处理模型
11/10/2017 9:56 PM
FLAT事务处理模型
一个FLAT事务包含多个操作,这些操作作为一个整体来控制,当一个FLAT事务开始时,程序能执行任意多个操作,当事务结束的时候,只有两种结果,如果成功则事务被提交,如果失败则事务回退。
11/10/2017 9:56 PM
NESTED事务处理模型
以实例说明:
如编写一个完成旅行安排的程序,它为旅客安排旅行线路并购买机票、火车票或汽车票,如要完成以下操作:
(1)购买从北京到长沙的机票
(2)购买长沙到南昌的火车票
(3)购买南昌到九江的汽车票
如果程序在完成第二步操作时,发现火车票已购完,它不回退,而尝试购买长沙到九江的汽车票,如果买到汽车票,整个事务就不回退了。
在一个NESTED事务中,将一个小一些事务嵌入大事务中,如果一个小事务回退,并不会导致整个大事务回退。
类似于一个事务树,每节点都代表一个事务。
11/10/2017 9:56 PM
EJB中的事务处理
EJB中事务目前只支持FLAT模型。EJB容器为程序员实现了底层的事务处理细节,程序员在较高水平上处理事务,组件只需要告诉容器一个事务什么时候开始,是提交还是回退等,而具体实现细节则全部由容器来完成。EJB中有三种确定事务处理边界的方式:由Bean实现、由容器控制、由用户控制。
11/10/2017 9:56 PM
Bean实现的事务处理
由Bean实现,即要编程实现事务处理,程序员必须明确发出事务开始、事务提交或事务回退指令。
11/10/2017 9:56 PM
容器管理的事务处理
当客户端调用某一个对象(该对象包含一系列处理)时,EJB容器自动开始一个新的事务,即EJB容器代替Bean向事务处理系统发出开始指令,客户端完成对对象的调用,如果调用出错,Bean向容器发出错误信号,事务放弃,如果调用完毕,Bean把控制权返回给EJB容器,这时容器向底层的事务处理系统发出提交或回退的指令。
11/10/2017 9:56 PM
客户端控制的事务处理
Bean的客户端可以是Servlet/JSP、JSP自定义的标签库、应用程序、applet、COBRA客户端或其它的Bean,这些客户端负责开始和结束一个事务。
11/10/2017 9:56 PM
三种管理事务方式的比较
第1种方式的好处在于事务处理的边界完全控制在Bean手中,用户可在一个方法中启动多个事务,而其它两种方式中整个方法要么运行一个事务中,要么就不运行于一个事务中。
第2种方式的好处是简单,不需要任何编程就可实现事务处理。
第3种方式的好处是客户端知道调用的事务是否成功。