一、问题
1需要原子操作
2.网络或机器故障
3.因多用户共享数据 ,所以可能会同时操作同一数据。
二、引出事务来解决问题
1.ACID属性(Atomicity、Consistency、Isolation、Durability)
事务中存在若干参与者:事务性对象(事务性组件)、事务管理器、资源、资源管理器。
三、事务的工作机制
首先研究事务模型。平面(Flat)事务和嵌入式(Nested)事务是最常见的两种事务模型。
EJB事务管理器仅支持平面事务。嵌入式事务对于解决大量的事务性问题提供了很好的解决办法。
EJB规范不强制要求支持嵌入式事务。
其他事务模型:Chained事务、Sagas事务。
事务回滚原因:
1)某个组件接受到无效参数。
2)侵犯了某个系统常量。
3)硬件或软件故障。
当平面事务的all-or-nothing不行时,嵌入式事务可考虑。
嵌入式事务的特征:子事务可以独立回滚,而不会影响到树中上一级事务的执行。他能够解决著名的旅行商问题。
四、分布式事务
下列场合需要使用分布式平面事务
1.在同一事务中涉及到多个应用服务器。
2.在同一事务中需要完成对多个RDBMS的更新操作。
3.需要在同一事务中完成对数据库的更新、(从目的地)接受消息或发送消息(到目的地)。
4.在同一事务中要操作到多种资源,其中包括遗留系统、若干存储源(比如,数据库、消息Queue、其他遗留系统等)
Two-Phase Commit Protocol,2PC为支持分布式事务提供了重要的支撑,它是被广泛使用的技术。
借助于2PC,事务能够保证操作的持久性。持久性是ACID中的重要属性。
五、Java Transaction API
六、EJB事务
根据界定事务边界方式的不同,事务管理方式分为Bean管理、容器管理、客户控制。
Bean管理方式是最传统的做法。
使用@TransactionManagement来设置EJB组件的事务管理方式。
开发者可在如下类型的客户中启动和结束事务:java Servlet、jsp标签库、单独客户应用、JavaApplet、CORBA客户、其他EJB组件。
如何选择事务管理方式?
Bean管理灵活性最好,能最大程度的控制事务边界
容器管理:简单,可以避免EJB组件客户使用了不合适的事务设置来调用EJB组件。为EJB组件提供者省去许多麻烦。
七、容器管理事务(CMT)
事务属性-6。