我有一个关于AroundInvoke注释的问题。让我们说我有一个带有方法a的bean,它在一些Interceptor中使用注释AroundInvoke的方法进行了增强。方法a在签名中没有任何例外,而增强'方法可以抛出一些检查异常。没有编译错误,但是在运行时会发生什么情况(如@AroundInvoke方法抛出此检查的异常)?是否会转换为某个运行时异常?
答案 0 :(得分:1)
interceptor 1.2 specification(本文最新内容)未指定此方案的行为,因此行为将特定于产品。我不建议依赖该行为,除非产品记录了该行为,并且您对产品特定的依赖项没有问题。我怀疑大多数实现都会抛出某种未经检查的异常(很可能是EJBException或UndeclaredThrowableException)。我知道WebSphere Application Server会抛出EJBException。
答案 1 :(得分:0)
将aroundinvoke上的拦截器标记为抛出已检查异常的原因是因为我们确实不知道截获的方法可以抛出什么,无论是已检查还是未经检查的异常。
考虑用户定义了被拦截方法抛出的ApplicationException
的场景,然后拦截器应该在正常情况下将此异常传播给客户端。
在极少数情况下,截取方法应该抛出异常,除非它做了一些交叉逻辑(虽然这不是拦截器)。
但是,如果通过拦截器或截获的方法抛出异常,并且异常未注释ApplicationException
ejb运行时必须将其包装到EJBException
中并重新抛出它。如果它是ApplicationException
,则ejb容器不能包装到EjBException
中,并且必须按原样将其传播到客户端。