Jboss 4.2吞噬了EJB异常导致的堆栈跟踪,如何防止这种情况?

时间:2009-06-24 19:47:54

标签: java exception-handling jboss

在JBoss 4.2.2(在JDK5上),我注意到了这种行为。是否有配置或其他方法来阻止它?

如果我有这样的代码:

try {
  doSomething();
} catch (Exception e) {
  throw new EJBException(e);
}

生成的堆栈跟踪(捕获并记录时)将为:

EJBException ....
   at(.....
   at(.....

caused by: NullPointerException

NullPointerException没有堆栈跟踪。有没有办法防止吞咽堆栈跟踪,并实际上有完整的堆栈跟踪作为由?引起的一部分?

2 个答案:

答案 0 :(得分:3)

这是一个实现决策,它们没有将原始原因设置为ejbException的原因。你可以访问那个看方法getCausedByException()。 你有一个关于它的JIRA [1](看看这个,因为有一个痛苦的解决方法),你可以看看JBoss AS实现[2]。

[1]:https://jira.jboss.org/jira/browse/EJBTHREE-337

[2]:http://viewvc.jboss.org/cgi-bin/viewvc.cgi/jbossas/trunk/jboss-j2ee/src/main/javax/ejb/EJBException.java?revision=39121&view=markup&sortby=rev&pathrev=39121

答案 1 :(得分:0)

可能是EJBException不可链接。

我不知道您的示例是否代表您的真实代码,但我会问您为什么要捕获异常,将其包装为EJBException并重新抛出它?这样做不会添加任何有意义的新信息。您的catch块甚至没有记录原始异常的最小值。所以 - 为什么要抓住?为什么不在方法签名中声明异常并让客户端处理它?我能想到的唯一理由是EJBException不是一个经过检查的异常,因此您可以减轻客户捕获它的义务。但即使这样也很危险。我认为您希望确保异常不会跨层边界传播。用户界面看到原始未捕获的异常会有什么用呢?