RMI上的异常处理

T3r*_*rm1 4 java exception-handling rmi

我有一个共同的问题,我想听听你对最佳方法的看法.

假设您有一个在分布式服务器系统上运行的应用程序.让我们说前端和后端服务器.后端服务器上的方法通过RMI调用.

后端java进程通常需要不同于前端java进程的库.后端可能会发生运行时异常.抛出的异常不会被后端捕获,因此它会传输到前端服务器.现在的问题是前端不知道异常,因为包不在类路径中(例如EJBTransactionRolledBackException).抛出另一个异常 - ClassNotFoundException.这使得无法查看execption发生的位置,因为stacktrace不包含来自后端服务器的堆栈.我能想到的另一种情况是异常无法序列化.

你怎么解决这个问题?我可以以某种方式记录抛出的任何运行时异常,而无需构建try ... catch和rethrow块吗?

Stu*_*rks 5

后端服务器上的方法通过RMI调用.

你的问题.:-)

说真的,最简单的方法是在服务器上设置以下属性:

-Dsun.rmi.server.exceptionTrace=true
Run Code Online (Sandbox Code Playgroud)

这将为您提供服务器端的异常堆栈跟踪.它不会修复ClassNotFoundException客户端,但至少在发生这种情况时,您知道要通过服务器日志来查找更多信息.

其他有用的RMI属性在此处记录:

http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/javarmiproperties.html

http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/sunrmiproperties.html