事务模型和事务策略

详见: http://www.ibm.com/developerworks/cn/java/j-ts2.html

 

一. 事务模型:

1. Local Transaction 模型

JDBC 本地事务,

dbConnection.setAutoCommit(true);

在本地事务模型中,事务由底层数据库(DBMS)或消息提供者(Message Provider)来管理维护,从开发者的角度来看,只需要管理使用连接(connections)而不需要管理事务。本地事务模型在小型工程的简单更新操作中能够很好地工作,但是在更加复杂的应用场景下,一个问题是在一个 XA 全局事务中难以协调各资源的工作。 一般情况下,EJB 工程不使用这样的事务模型.

 

2. Programmatic Transaction 模型

EJB中Bean管理事务

在编程式事务模型中,开发者不再面向连接而是面向事务进行开发。在 EJB 工程中这类事务模型体现为 Bean 管理的事务(Bean-Managed Transactions--BMT). 一般通过sessionContext或者JNDI中获取UserTransaction。编程式事务模型存在一个重大的架构上的限制:我们不能在两个都使用编程式事务模式的 Bean 之间传递事务上下文(transaction context)。不过,我们可以将一个使用编程式事务模型的 EJB 或客户端的事务上下文传递给一个使用声明式事务模型的 EJB。因此在一般情况下,我们仅在调用 EJB 的客户端中使用编程式事务模型。

 

Spring中获取平台事务管理程序,commit() or rollback()

 

3. Declarative Transaction 模型

在声明式事务模型中,由容器来管理维护事务,这意味着开发者不需要通过写 Java 代码来开始或提交一个事务,取而代之的是使用一定的“声明”告诉容器如何来管理事务。我们可以通过 ejb-jar.xml 配置文件来实现对容器的声明,同样也可以使用注释或部署描述符来声明使用事务。在 EJB 中,声明式的事务模型体现为容器管理的事务(Container-Managed Transactions--CMT)。

 

Container Managed Transactions (CMT)

Spring 使用 @Transactional 注释,而 EJB 3.0 使用 @TransactionAttribute 注释。在使用 Declarative Transaction 模型时,容器将不会针对检测到的异常自动回滚事务。开发人员必须指定出现异常时在何处以及何时回滚事务。在 Spring Framework 中,您通过使用 @Transactional 注释上的 rollbackFor 属性来指定它。在 EJB 中,您通过调用 SessionContext 上的 setRollbackOnly() 方法来指定它。

 

在大部分情况下,我们在实现 EJB 的时候使用声明式的事务模型(即 CMT),而在调用这些 EJB 的客户端代码中使用编程式的事务模型。

 

 

二. 事务策略

 

Client Orchestration 事务策略 API Layer 事务策略 High Concurrency 事务策略 High-Speed Processing 事务策略
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值