全局事务和局部事务

对于事务管理,J2EE开发者有两种选择:全局事务和局部事务。

1、全局事务
      全局事务由应用服务器通过JTA进行管理。以前,使用全局事务比较流行的方法是采用EJB CMT,CMT是声明式事务管理的一种形式(区别于编程式事务管理)。尽管使用EJB本身就需要使用JNDI,EJB CMT不需要事务相关的JNDI lookups。EJB CMT不需要编写大量的Java代码来控制事务。使用CMT最大的不足之处是它被束缚在JTA和应用服务器上。CMT只有当在EJB中实现业务逻辑时才可以发挥作用,或者至少处于事务性EJB Façade中。由于EJB存在诸多的不足并且目前存在其他可选的声明式事务管理的解决方案,所以不太建议使用EJB方式。

1.1、全局事务的优点:
(1)全局事务支持多个事务性资源间的相互工作(如:关系型数据库和消息队列)。

1.2、全局事务的缺点:
(1)采用全局事务需要使用JTA,而JTA是一个笨重的API。

(2)通常情况下,JTA UserTransaction需要从JNDI获取。这意味着,如果我们使用JTA,就需要同时使用JTA和JNDI。

(3)通常JTA只能在应用服务器环境下使用,因此使用JTA会限制代码的复用性。

2、局部事务
      局部事务是资源特有的(resource-specific),最常见的例子是与JDBC连接相关联的事务。使用局部事务,应用服务器不参与事务管理并且不能保证访问多个资源的正确性。值得注意的是:大多数应用程序使用单个的事务性资源。  

2.1、局部事务的优点:
(1)易用

2.2、局部事务的缺点:
(1)局部事务不支持多个事务性资源间的相互工作,比如:使用JDBC连接来管理事务的代码不能在全局JTA事务上运行。

(2)局部事务趋向于编程模型,编程模型具有侵入性。

Spring可以使应用程序开发者在任何环境下使用统一的编程模型。应用程序开发者只需要编写一次代码,就可以使用不同环境下的不同事务管理策略。Spring既支持声明式事务管理,也支持编程式事务管理。

我们推荐使用声明式事务管理。采用编程式事务管理,开发者需要使用Spring提供的事务抽象(它可以在任何基础的事务架构上运行)。采用声明式事务管理,开发者仅需要编写少量甚至不需要编写与事务管理相关的代码,因此它不依赖于Spring的事务API。

3、术语
全局事务:Global Transactions

局部事务:Local Transactions

JTA:Java Transaction API

CMT:Container Managed Transaction

声明式事务管理:Declarative Transaction Management

编程式事务管理:Programmatic Transaction Management

你可能感兴趣的:(事务)