gpt4 book ai didi

java - 我可以将 EJB 中的所有异常作为自定义未经检查的异常抛出吗?

转载 作者:行者123 更新时间:2023-11-30 03:49:21 25 4
gpt4 key购买 nike

正如此链接中提到的 Why throwing an EJBException is a "recommended" practice?

具体而言,EJB 规范规定,如果某个 Bean 从业务方法中抛出运行时异常(EJBException 是运行时异常),则该 Bean 将被丢弃,而不对其调用 ejbRemove。 p>

问题1:“bean 将被丢弃”在这里意味着什么?在这种情况下我们需要再次查找吗?

EJB 规范(EJB 3 中的 14.2.2)建议在 EJB 无法从遇到的异常中恢复的情况下抛出 EJBException。规范还规定 EJB 可以合理地允许(未经检查的)系统异常传播到容器

让我们考虑一下我的 ejb 方法会将数据插入到 4 个表中。如果在2个表中插入数据后代码中出现异常,我不会提示用户从用户处获取有效数据并处理它并将数据插入到第3个第4个表中。相反,我只会要求用户使用正确的数据再次调用 EJB 方法。

问题 2:以下 3 个选项中哪一个更好

  • 代码中的已检查和未检查异常均为 EJBException

  • 检查异常为 customException,非检查异常为 EJBException

  • 代码中的已检查和未检查异常均作为 customException

    注意:customException继承自runtimeException,并注释为“@ApplicationException(rollback=true)”

提前致谢..

最佳答案

问题 1 - 这取决于 Bean 类型:

  • 无状态 - 特定的 bean 实例将被丢弃,因此后续请求将使用新实例。由于无状态本质上没有客户端关联性,因此不会对调用代码产生任何影响
  • Stateful/MDB - bean 实例将被丢弃,并且由于实例与客户端引用是一对一的,所以存储在 bean 中的任何数据都将丢失,并且客户端需要通过创建新 bean 来重新开始.
  • Singleton - 忽略丢弃并使用相同的实例,无论是否存在未经检查的异常。 Bean 提供者必须小心,不要允许未经检查的异常破坏 Bean 状态。

请注意,当发生未经检查的异常时,事务将被标记为仅回滚,因此任何数据库更新都将被丢弃。

问题 2 我通常执行 #2:将检查异常作为自定义异常,将未检查异常作为 EJBException。您希望使用自定义异常,以便调用代码可以捕获并处理它们。使用什么作为未经检查的异常并不重要,因为容器无论如何都会将其映射到客户端的 EJBException,因此 EJBException 很方便,但出于日志记录目的,自定义异常类型中可能有一些值用于未经检查的异常。

关于java - 我可以将 EJB 中的所有异常作为自定义未经检查的异常抛出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24817906/

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