【JavaEE】经典JAVA EE企业应用实战-读书笔记11

本文介绍了Java EE中Bean管理事务的实现,通过UserTransaction进行开始、提交、回滚等操作,并详细阐述了UserTransaction的各种方法。此外,还讨论了EJB的BMT和CMT事务管理,以及EJB注入和拦截器的使用,强调了EJB3中@EJB注解的作用和配置选项。
摘要由CSDN通过智能技术生成

Bean管理事务,主要就是通过UserTransaction来控制事务开始、结束。

首先需要获得UserTransaction,有三种方式

1)使用@Resource执行依赖注入

2)通过JNDI查找来获取,代码如下

UserTransaction tx=(UserTransaction)ctx.lookup(“UserTransaction”);

3)使用EJBContextgetUserTransaction方法,代码如下

UserTransaction tx=ctx.getUserTransaction();

其中第一中比较简单,接着在代码使用

tx.begin();tx.commit();tx.rollback();

 

下面是UserTransaction所包含方法的简单解释

begin:用于开始新的事务,创建一个新的事务,并将他关联到当前执行线程中。

commit:用于提交事务,将会结束当前线程关联的事务

getStatus:用于获取当前线程关联的事务状态

rollback:用于回滚事务,同样结束当前线程关联的事务

setRollbackOnly:只能在CMT事务管理器中使用,用于通知容器回滚当前事务。

setTransactionTimeout(int secondes):用于修改当前线程所关联事务的超时时长

上面的方法中getStatusEJBContextgetRollbackOnly方法的复杂版,getRollbackOnly只能返回一个boolean值,而getStatus方法则返回代表当前事务状态的值,包括

javax.transaction.Status.STATUS_ACTIVE:当前线程处于活动阶段

javax.transaction.Status.STATUS_COMMITTED:当前线程已经被提交

javax.transaction.Status.STATUS_COMMITTING:当前线程正处于提交过程中

javax.transaction.Status.STATUS_MARKED_ROLLBACK:当前线程已被标记为回滚。可能是由于当前线程调用了UserTransactionsetRollback(true)方法。

javax.transaction.Status.STATUS_NO_TRANSACTION:当前线程没有事务支持

javax.transaction.Status.STATUS_PREPARED:当前事务正准备提交,正在等待从属资源的响应

javax.transaction.Status.STATUS_PREPARING:当前事务处于预备阶段,所有从属资源都已经同意提交

这两个状态值与两段式提交有关,两段式提交协议方式在正式提交事务之前,需要先尝试提交该事务的多个从属源,只有当从属源尝试提交都返回成功时,JTA全局事务才会正式提交。在第一阶段中尝试提交了多个从属资源,当这些从属资源的结果尚未返回时,事务处于STATUS_PREPARING状态;当这些从属资源都返回了提交成功时,这意味着JTA全局事务可以真正提交了,那么事务处于STATUS_PREPARED状态。

javax.transaction.Status.STATUS_ROLLEDBACK:当前事务已经被回滚了<

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值