2010-02-26 74 views
1

处理指导我一直是多么不容易找到在网络上的这个最佳做法,因为它必须是这样一个共同的问题感到惊讶。异常在Java EE 5 Web应用程序

应用程序是基于Java 1.5 - JSF 1.2与Faclets时,Seam,JPA,休眠。一些Web服务调用。一些JMS。

我对异常处理的一般建议。大概有3种我见过的方法,但我从来没有确定哪种方法更好。假设您无法从错误中恢复,您是否: 1)记录发生错误并重新抛出错误?
2)当它发生时记录并抛出某种类型的异常?
3)让它冒出来,然后在一般的异常处理servlet或类似的处理它。

我倾向于在以前的系统在架构已经相当简单使用选项2 - 如果它得到回错误等等适配器层谈论各种第三方系统抛出和适配器例外。我们可以在屏幕上向用户显示一个干净的消息,并将详细信息保存在日志中。虽然这里的架构要复杂得多,我想知道它在实际中的工作能力。所以我很想知道你喜欢什么以及为什么。

回答

1

假设你不能从错误中恢复...

假设这个错误并不功能错误,我记录错误,敷例外的(自定义)未检查的异常,让框架/容器处理它(所以选项2)。 我喜欢做自己的方式,因为:

  • 我喜欢用容器管理的事务,我想容器来完成其工作(即回滚任何交易),因此抛出一个运行时异常是要走的路。
  • 它最大限度地减少了异常处理工作。
  • 它使报告以易于通用的方式处理用户。

如果它是一个功能性错误(即在一个用例的备选流程),我记录错误和包装该异常的(自定义)检查异常,因为我想调用者来专门处理它的问题是用例的一部分。

在这两种情况下,我使用一个根异常对每一层,即TechnicalExceptionFunctionalException和。

+0

感谢您的回复。任何人对此有任何其他意见? – charles 2010-02-26 16:16:32

+0

@charles在这里看到的只有一个答案,令人惊讶,我期待他们中的很多人。 – 2010-02-26 16:25:49

+0

是的 - 我很惊讶。尽管如此,我们已经把所有人都关闭了,这是一个很好的回答!实际上,当我进行代码审计时,我最常看到的方法是3 - 让它冒泡,然后在通用的异常处理servlet或类似的异常中处理它 - 虽然它可能不会构成最佳实践。 – charles 2010-03-01 09:08:54