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的负面影响如此之大,以至于这不是一个吸引人的建议,特别是在面对具有吸引力的声明式事务管理替代方案时。