bean创建异常_快速提示:消息驱动Bean中的异常处理

bean创建异常

让我们快速回顾一下关于消息驱动Bean的特殊处理。

MDB的入口点是重写的onMessage方法。 它不提供引发检查异常的作用域,因此,如果要处理错误情形,则需要从代码中传播未检查异常(java.lang.RuntimeException的子类)。

异常类型

EJB规范定义了两类异常,并且容器根据明确陈述的语义(同样,在EJB规范中)将一种与另一种区别。

应用例外

如果您抛出不是java.rmi.RemoteException或其子类的已检查异常(对于MDB而言是不可能的,但其他EJB可以使用此异常),或者它不是以@ javax.ejb.ApplicationException注释的RuntimeException(未检查),则该容器是将其视为应用程序异常。 因此,如果由@ javax.ejb.ApplicationException rollback属性指定,它将回滚事务,并保留MDB实例以供重用–这是非常重要的注意事项。

@ApplicationException(rollback = true)
public class InvalidCustomerIDException extends RuntimeException {
    public InvalidCustomerIDException(){
        super();
    }
}
系统异常

如果抛出java.rmi.RemoteException (已检查的异常)或其子类,或者抛出了未使用@ javax.ejb.ApplicationException注释的RuntimeException(未检查),则容器会将其视为系统异常。 结果,它执行某些操作,例如事务回滚,并丢弃MDB实例(这很关键)

public class SystemExceptionExample extends Exception {
    public SystemExceptionExample(){
        super();
    }
}

重要的是要考虑到MDB实例的丢弃 。 如果发生系统异常,容器将始终丢弃该实例–因此,请确保您出于预期的原因使用这些异常。 如果您使用的是应用程序异常,并且它们是未经检查的(对于MDB,则必须是它们),请确保使用@ javax.ejb.ApplicationException对其进行注释–这将确保不丢弃 MDB实例本身。

在高负载下,您可能希望池中有尽可能多的MDB,并且希望避免MDB实例退出服务状态。 明智的异常处理可以帮助您实现此目标。 就像用@ javax.ejb.ApplicationException注释异常类并将其余的留给容器一样简单:-)

参考资料

EJB(3.2)规范是465页的PDF,乍一看可能令人生畏,但它仍然是一个很好的资源,而且并不难掌握。 如果您想更详细地了解异常处理语义,请查阅第9章 ,该主题专门针对该主题。

干杯!

翻译自: https://www.javacodegeeks.com/2015/06/quick-tip-exception-handling-in-message-driven-beans.html

bean创建异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值