JavaEE里的事务

事务是一系列操作,这些操作必须同时执行生效或同时取消执行。事务中的所有操作都执行生效称为事务的提交,事务中的所有操作都取消执行称为事务的回滚。一个事务的结束只有提交或回滚两种情况。事务具有ACID四特性。

JavaEE提供了如下两种对事务的管理机制:

容器管理的事务CMT
Bean管理的事务(也称为应用管理的事务)BMT

  1. CMT

CMT是声明式事务,对应用代码没有侵入性。如果一个EJB被声明为CMT,则由EJB容器负责该EJB的事务管理,即事务的特性对于EJB是透明的,EJB类中没有任何事务相关的代码。事实上,CMT实现的底层也是依赖于JTA事务API的。

对于CMT的EJB,对EJB的一个业务方法的执行就对应一个事务。执行进入到EJB业务方法时就立刻开始一个事务,当EJB业务方法执行完毕时自动提交或回滚事务。

CMT不支持嵌套事务或多事务,即在执行一个EJB业务方法时,不可能同时有两个或以上的事务执行,执行的事务中也不能再包含其他事务。但是,可以暂停一个事务,然后执行另一个事务,等第二个事务执行完毕后再执行第一个事务。

1)事务的声明

在CMT的JEB中,并非EJB的所有业务方法都支持事务,这决定于EJB中声明事务的方式。JavaEE提供了@javax.ejb.TransactionAttribute标注用以声明事务。如果该标注作用于EJB类,则整个EJB类中的业务方法都支持事务。该标注还可以只作用于EJB类中的某些业务方法,则使用该标注的业务方法才支持事务,在事务中执行;而没有使用该标注的业务方法不会在事务中执行。

@javax.ejb.TransactionAttribute标注在声明事务的时候,可以带一个javax.ejb.TransactionAttributeType类型的枚举参数如下,具体规定了业务方法执行过程中的事务:

javax.ejb.TransactionAttributeType.Required(默认)
    如果调用业务方法前已经处于事务中,则将该业务方法的执行加入到当前事务;

如果调用业务方法前未处于事务中,则创建事务,并将该业务方法的执行加入事务

javax.ejb.TransactionAttributeType.RequiresNew
    如果调用业务方法前已经处于事务中,则挂起当前事务,创建新事务并将该业务方法的执行加入新事务;该业务方法执行完毕新事务结束,再恢复被挂起的事务

如果调用业务方法前未处于事务中,则创建事务,并将该业务方法的执行加入事务

javax.ejb.TransactionAttributeType.Mandatory
    如果调用业务方法前已经处于事务中,则将该业务方法的执行加入当前事务;

如果调用业务方法前未处于事务中,则EJB container抛出TransactionRequiredException

javax.ejb.TransactionAttributeType.Never
    如果调用业务方法前已经处于事务中,则EJB container抛出RemoteException

如果调用业务方法前未处于事务中,则继续在事务之外执行该业务方法

javax.ejb.TransactionAttributeType.NotSupported
    如果调用业务方法前已经处于事务中,则挂起当前事务,在事务之外执行该业务方法,该业务方法执行完毕后,再恢复被挂起的事务

如果调用业务方法前未处于事务中,则继续在事务之外执行该业务方法

javax.ejb.TransactionAttributeType.Supports
    如果调用业务方法前已经处于事务中,则在事务之中执行该业务方法
————————————————
版权声明:本文为CSDN博主「易生一世」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/taiyangdao/article/details/50634421

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值