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 的负面影响总体上如此之大,以至于这不是一个有吸引力的主张,尤其是在面对声明式事务管理引人注目的替代方案时。