gpt4 book ai didi

java - EJB 3.0 异常处理

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:58 26 4
gpt4 key购买 nike

引自 EJB 规范:

If the bean method encounters a system exception or error, it should simply propagate the error from the bean method to the container (i.e., the bean method does not have to catch the exception).

但是我不明白。这是否意味着我不应该捕获所有类型的异常(即 try catch Exception 类)并将其作为我的应用程序异常重新抛出?

一个更清晰的例子:

public void beanMethod throws MyApplicationException {
try {
// do something
} catch (Exception e) {
throw new MyApplicationException(e); // Should I do it like this?
}
}

或者这不是针对 EJB 开发人员,而是仅针对 EJB 引用实现开发人员(容器开发人员):在后一种情况下,容器不得将系统异常传播到我的业务方法和我的 catch(Exception e) block 永远不会捕获任何系统异常?

最佳答案

还有更多类型的异常:

  • 系统异常(RuntimeExceptions 例如 NullPointerException)
  • 业务异常(你自己的异常,extends Exception,但不是 RuntimeException,eg. NotEnoughMoneyOnYourAccountException)
  • 错误(例如 OutOfMemoryError)

通常您应该捕获业务异常。但是当然你可以把它扔到客户端,如果你想在那里处理它。默认情况下,如果您抛出 BusinessException,EJB 容器不会回滚您的事务,但您可以通过以下方式注释您的异常来更改此行为:

@ApplicationException(rollback = true)
public class NotEnoughMoneyOnYourAccountException extends Exception {

如果您的程序抛出 RuntimeException,它将作为 RemoteException 包装发送到客户端,并且您的事务将被回滚。这些异常比业务异常少,因此我们通常不会在 EJB 端捕获它们。

错误是最不异常(exception)的,它们甚至可以关闭 JVM,通常我们不会捕获它们,因为通常我们无法在程序中处理它们。

关于java - EJB 3.0 异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14408369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com