关闭

Transactions and Exceptions

422人阅读 评论(0) 收藏 举报

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:175642次
    • 积分:2898
    • 等级:
    • 排名:第12183名
    • 原创:99篇
    • 转载:34篇
    • 译文:0篇
    • 评论:72条
    JavaEye
    在线书籍