在JBoss 4.2.2(在JDK5上),我注意到了这种行为。是否有配置或其他方法来阻止它?
如果我有这样的代码:
try {
doSomething();
} catch (Exception e) {
throw new EJBException(e);
}
生成的堆栈跟踪(捕获并记录时)将为:
EJBException ....
at(.....
at(.....
caused by: NullPointerException
NullPointerException没有堆栈跟踪。有没有办法防止吞咽堆栈跟踪,并实际上有完整的堆栈跟踪作为由?引起的一部分?
答案 0 :(得分:3)
这是一个实现决策,它们没有将原始原因设置为ejbException的原因。你可以访问那个看方法getCausedByException()。 你有一个关于它的JIRA [1](看看这个,因为有一个痛苦的解决方法),你可以看看JBoss AS实现[2]。
答案 1 :(得分:0)
可能是EJBException不可链接。
我不知道您的示例是否代表您的真实代码,但我会问您为什么要捕获异常,将其包装为EJBException并重新抛出它?这样做不会添加任何有意义的新信息。您的catch块甚至没有记录原始异常的最小值。所以 - 为什么要抓住?为什么不在方法签名中声明异常并让客户端处理它?我能想到的唯一理由是EJBException不是一个经过检查的异常,因此您可以减轻客户捕获它的义务。但即使这样也很危险。我认为您希望确保异常不会跨层边界传播。用户界面看到原始未捕获的异常会有什么用呢?