正如此链接Why throwing an EJBException is a "recommended" practice?
中所述具体来说,EJB规范说如果bean从业务方法抛出运行时异常(并且EJBException是运行时异常),那么bean将被丢弃,而不会在其上调用ejbRemove。
问题1:“豆子将被丢弃”是什么意思?在这种情况下我们需要再次查找吗?在EJB无法从遇到的异常中恢复的情况下,EJB规范(EJB 3中的14.2.2)建议抛出EJBException。 规范还说EJB可以合理地允许(未经检查)系统异常传播到容器
让我们考虑一下我的ejb方法会将数据插入到4个表中。 如果在2个表中插入数据后代码中发生异常,我将不会向用户提示异常,以获取用户的有效数据并对其进行处理并将数据插入第3个第4个表中。 相反,我将要求用户使用适当的数据再次调用EJB方法。
问题2:以下哪3个是更好的选择
代码中的已检查和未检查的异常都是customException
注意:customException继承自runtimeException,注释为“@ApplicationException(rollback = true)”
提前致谢..
答案 0 :(得分:2)
问题1 - 这取决于bean类型:
请注意,当发生未经检查的异常时,该事务将被标记为仅回滚,因此将丢弃所有数据库更新。
问题2 我通常做#2:将异常检查为自定义异常,将未检查的异常检查为EJBException。您希望使用自定义异常,以便调用代码可以捕获并处理它们。因为容器会将它映射到客户端的EJBException,因此将它用作未经检查的异常并不重要,因此EJBException很方便,但是对于未记录的日志记录异常,自定义异常类型可能有一些值目的。