【发布时间】:2014-11-22 07:24:28
【问题描述】:
我有两个关于 Java RMI 的单独问题,在一个简单的 hello-world 客户端-服务器应用程序中使用 RMI,http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/hello/hello-world.html
(1) 在Server代码中,是registry.bind("Hello", stub);阻塞呼叫? 我希望最终使我的程序点对点,所以我需要我的服务器在导出接口后继续。导出界面后,有没有办法在我的服务器主服务器中继续执行?
(2) 在服务器上执行的远程方法中,我返回一个字符串。假设我的客户端在服务器上的远程方法想要返回之前崩溃。我可以在我的服务器远程方法中检测到这一点吗?具体可以在远程方法中使用 -
..
try {
return str;
} catch (Exception e) {
System.err.println("Client seems to be down so cannot return"); return str;
}
以上大致是我想要实现的,似乎没有触发异常: (a) 我需要抛出特定类型的异常吗? http://www.cis.upenn.edu/~bcpierce/courses/629/jdkdocs/guide/rmi/spec/rmi-exceptions.doc.html (b) 如果这甚至可以工作,我仍然需要在 catch {} 块中返回一些内容,以免出现编译错误。这似乎在逻辑上不正确。
我可以做相反的事情,即在客户端我收到一个异常是服务器崩溃,所以我的远程方法无法返回,但在这里我需要在服务器中检测客户端是否在服务器中的远程方法返回之前已经死亡。
【问题讨论】: