考虑这种情况:
远程调用无状态会话bean(来自不同的应用程序,甚至可能在不同的服务器上运行):
public void test() throws MyPublicException {
// ... Business logic
try {
someDependency.perform();
} catch (Exception ex) {
// "ex" may be an instance of "MyPrivateException"
throw new MyPublicException("Exception encountered", ex);
}
}
MyPublicException
是bean的公共API的正式部分。它可以在调用者的类加载器中使用。
MyPrivateException
不不是bean的公共API的一部分。它由bean在业务逻辑处理期间最终调用的一些内部代码进行实例化和抛出。
因此,现在容器将异常传播回调用者,这是一个小问题。异常的根本原因是MyPrivateException
类型,在调用者的类加载器中不可用。
我的问题是 - 是否有关于在这种情况下该怎么做的最佳做法?我唯一能想到的就是捕获bean方法中的每个异常,并构造一个等效的异常而不用根本原因。然而,这是一个负担,因为它需要相当多的代码。
还有其他想法吗?