EJB事务管理服务!!!

最有用的容器服务可能就是事务管理服务,当应用出现失败或异常时,它保证了数据库的完整性。你可以简单地将为一个POJO 方法申明它的事务属性。这样容器就可以在合适的上下文中运行这个方法。最常见的事务是定义在session bean 的方法上,方法中所有的数据库操作只有在方法正常退出时才会提交,如果方法抛出未捕获的异常,事务管理将回滚所有的变更。

 

一个事务的属性控制了事务的使用范围。比如method-A开始一个事务然后调用Bean-2中的method-B。它运行在method-A开始的事务中还是重新执行一个新的事务?结果要看method-B中的事务属性。

 

经过验证表明当抛出一个继承自RutimeException的自定义异常时EJB容器会自动回滚该事务。抛出普通的继承自Exception的应用程序异常容器不回自动回滚该事务。

 

可以看出TransactionAttribute既可以为类做注释,又可以为方法做注释。@TransactionAttribute 注释用作定义一个需要事务的方法。它可以有以下参数:

 

1.REQUIRED:如果客户端正运行在某个EJB事务中运行,且调用了EJB中的方法,则该方法在客户端的EJB事务中运行。如果客户端没有与某个EJB事务相关联,则容器在运行方法前先启动一个新EJB事务。Required属性适合绝大多数EJB事务,建议把它设置成默认的,至少在开发阶段。EJB事务属性是声明式的,后期也可以很容易的修改。如果没有指定参数,@TransactionAttribute 注释使用REQUIRED 作为默认参数。

 

2.REQUIRESNEW:方法将在一个新的事务中执行,如果调用的方法已经在一个事务中,则暂停旧的事务。在调用结束后恢复旧的事务。如果客户端没有与某个EJB事务相关联,则容器在运行方法前先启动一个新EJB事务。如果确保方法始终在一个新EJB事务中运行,应该使用EJB事物属性中的RequiresNew属性。

 

3.MANDATORY:如果运行于事务中的客户调用了该方法,方法在客户的事务中执行。如果客户没有关联到事务中,容器就会抛出TransactionRequiredException。如果EJB中的方法必须使用客户端的EJB事务,则应该使用EJB事物属性中的 Mandatory属性。

 

4.NOT_SUPPORTED:如果方法在一个事务中被调用,容器会在调用之前中止该事务。在调用结束后,容器会恢复客户事务。如果客户没有关联到一个事务中,容器不会在运行入该方法前启动一个新的事务。用NotSupported 属性标识不需要事务的方法。因为事务会带来更高的性能支出,所以这个属性可以提高性能。

 

5.SUPPORTS:如果客户端运行在某个EJB事务中且调用了EJB中的方法,则该方法运行在客户端的EJB事务中。如果客户端没有与某个EJB事务关联,则容器运行方法前不启动新的EJB事务。

 

6.Never:如果客户端运行在某个EJB事务中且调用了EJB中的方法,则容器抛出RemoteException异常。如果客户端没有与某个EJB事务关联,则容器运行方法之前不启动新的EJB事务。

 

 

事务属性          客户端事务  容器事务 


REQUIRED             有         加入 
                             无         有  

 

REQUIRES_NEW   有          新建 

                             无          新建  


SUPPORTS            有          加入
                             无         无   


 MANDATORY         有          加入
                             无          异常   


 NOT_SUPPORTED 有          无 
                             无          无   


 NEVER                  有          异常 
                              无          无   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值