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