传统的J2EE应用中,事务管理是跟EJB绑定在一起来的,那个时候大部分人使用EJB的
Local SLSB仅仅是为了使用它的声明式事务管理罢了。随着技术不断向前发展,例如Spring
的出现使得很多J2EE的核心理念不得不开始自省,在Spring的冲击之下完善自我变得更合
理。于是JTA不在专属于EJB、与之相对的Local Transaction也在更适合的情况下得到重视。
这里简单总结一下Spring的事务管理,先回顾传统的J2EE中事务管理解决方案是全局容器
管理事务,事务由应用服务器来协调,服务器登记所有参与事务的资源,在业务方法结束之
后根据需要进行提交或者回滚。典型的例子就是EJB CMT,其优点是把繁琐的事务管理功
能挪到了EJB部署描述符上,事务管理成了一个无需硬编码的横切面,当然它也有致命的
缺点:只有EJB才能使用、必须使用重量级的全局事务管理、对于仅仅使用少量的事务就
未免大材小用……
Spring的事务管理涉及初衷:(What we need?)
1、 可编程的事务管理和一致的异常处理机制。
2、 在POJO上面实现的声明式事务、无需要绑定到重量级组件模型上
3、 可插拔的事务策略、以及让资源能够自由加入事务的手段
4、 为分布式容器而准备的JTA支持
5、 针对各种ORM框架集成而提供的数据源组件
下面正式介绍Spring的事务框架组成,主要核心为3个接口:TransactionDefinition、
TransactionStatus、PlatformTransactionManager。它们分别的职能如下:
TransactionDefinition
封装所有事务相关属性的设定。针对事务隔离性级别提供的属性有ISOLATION_DEFAULT、
ISOLATION_READ_UNCOMMITTED、ISOLATION_READ_COMMITTED、
…… …… 余下全文