繁体   English   中英

AroundInvoke和检查的异常

[英]AroundInvoke and checked exceptions

我有一个关于AroundInvoke注释的问题。 假设我有一个带有方法a的bean,它通过某些Interceptor中带有注解AroundInvoke的方法得到了增强。 方法a在签名中没有任何异常,而'enhancing'方法可以抛出一些已检查的异常。 没有编译错误,但是当发生这种情况时(如在@AroundInvoke方法中抛出此检查的异常),在运行时会发生什么? 它会转换为某个运行时异常吗?

拦截器1.2规范 (本文中的最新内容)未指定此方案的行为,因此行为将是特定于产品的。 我不建议您依赖于该行为,除非该产品记录了该行为,并且您对特定于产品的依赖项感到满意。 我怀疑大多数实现都会抛出某种未经检查的异常(很可能是EJBException或UndeclaredThrowableException)。 我知道WebSphere Application Server抛出EJBException。

拦截器在aroundinvoke处被标记为引发已检查的异常的原因是,因为我们真的不知道被拦截的方法会抛出什么,无论是检查的还是未检查的异常。 请考虑以下情况:用户定义了被拦截方法引发的ApplicationException ,然后拦截器在正常情况下应将此异常传播给客户端。

在极少数情况下,拦截方法应该引发异常,除非该方法执行了一些横切逻辑(尽管这并不意味着要使用拦截器)。

但是,如果通过拦截器或被拦截的方法引发了异常,并且该异常未添加注释,则ApplicationException ejb运行时必须将其包装到EJBException然后将其重新抛出。 如果它是ApplicationException则ejb容器不得包装到EjBException而必须按EjBException传播到客户端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM