我在我的项目中使用RMI,我们有一个RMI服务器和RMI客户端。客户端在web应用程序中,因此我们将服务器引用存储在公共常量中。
我想知道,每当我们需要服务器实例时,在注册表中查找服务器的成本是多少。或者最好只查看一次并将其存储在某个常数中。
如果我将其存储在常量中,则在重新启动RMI服务器时问题就会开始。因为该常量变量包含旧引用,它会抛出java.rmi.NoSuchObjectException: no such object in table
欢迎任何输入。
答案 0 :(得分:1)
如果您希望客户端应用程序能够承受所有服务器重启,那么无论如何都应该保护它免受通信故障的影响,包括java.rmi.NoSuchObjectException。请注意,尽管不太可能,但在查找和请求执行之间发生服务器重新启动是可能的。在这种情况下,即使您在每次请求之前进行了查找,也不会安全。所以建议如下:
执行一次查找并保留引用。这样做的另一个好处是,您的应用程序将能够发现错误配置或初始化时的其他问题。
如果发生NoSuchObjectException,请尝试刷新引用。