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本身的缺点非常大,以至于这不是一个有吸引力的建议,尤其是在面对声明式事务管理的令人信服的替代方案时。