Transactions and Exceptions

Exceptions and Transactions
异常对事务的结果有很大的影响。
Application Exceptions Versus System Exceptions

系统异常代表未知的内部错误。当应用服务器发生内部错误时,EJB容器就会抛出系统异常。如

果希望终止业务流程的执行,业务逻辑也是可以抛出系统异常的。应用异常通常是业务逻辑的一

部分。他们代表了经过强类型定义之后的业务领域的特定问题或错误,这些问题或错误是不需要

终止或回滚的业务流程的。

系统异常
系统异常包括java.lang.RuntimeException及其子类(EJBException是RuntimeException的一个

子类)和java.rmi.RemoteException及其子类。RuntimeException子类和RemoteException子类

的区别在于,前者可藉由@java.ejb.ApplicationException注解转化为应用异常。

不标注@ApplicationException的RuntimeException都将由容器自动从方法中抛出,并引起事务

回滚。所以我们无需抛出也无需捕获。

容器在自动处理系统异常时,通常会做如下几件事情:
1.回滚事务
2.将异常记录到日志中,以警示系统管理员
3.丢弃EJB实例
丢弃EJB实例对SLSB影响不大,对SFSB影响非常严重。

作为经验法则,请将非业务子系统的异常(比如JDBC抛出的SQLException,或者JMS抛出

JMSException)作为EJBException(或者是可以引起回滚的@ApplicationException异常)重新

抛出,并允许EJB容器自动回滚事务,将bean实例丢弃。

应用异常
我们可以使用@java.ejb.ApplicationException注解来强制要求应用异常自动回滚事务:
此注解同样也可用于RuntimeException和RemoteException的子类。这一点非常有价值,因为你

可能并不希望将抛出的RuntimeException包装成EJBException,或者不希望某个

RemoteException的子类回滚事务。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值