Spring 框架事务支持模型的优势
传统上,EE 应用开发者在事务管理方面只有两种选择:全局事务或本地事务,两者都存在着严重的局限性。接下来的两节将回顾全局和本地事务管理,并讨论 Spring 框架的事务管理支持如何解决全局和本地事务模型的局限性。
全局事务
全局事务允许您操作多个事务资源,通常是关系型数据库和消息队列。应用服务器通过 JTA 管理全局事务,JTA 是一个笨重的 API(部分原因是其异常模型)。此外,JTA 的 UserTransaction
通常需要从 JNDI 获取,这意味着您还需要使用 JNDI 才能使用 JTA。全局事务的使用限制了应用程序代码的潜在重用,因为 JTA 通常只在应用服务器环境中可用。
以前,使用全局事务的首选方式是通过 EJB CMT(容器管理事务)。CMT 是一种声明式事务管理形式(与编程式事务管理相区别)。EJB CMT 消除了对事务相关 JNDI 查找的需要,尽管使用 EJB 本身需要使用 JNDI。它消除了大部分(但不是全部)编写 Java 代码来控制事务的需要。显著的缺点是 CMT 与 JTA 和应用服务器环境绑定。此外,只有在选择在 EJB 中(或至少在事务性 EJB 门面后面)实现业务逻辑时,它才可用。EJB 的总体负面影响非常大,以至于这并不是一个有吸引力的选择,尤其是在面对声明式事务管理的令人信服的替代方案时。