Java RMI对象未刷新

Java RMI对象未刷新,java,rmi,Java,Rmi,我在我的项目中使用RMI,我们有一个RMI服务器和RMI客户端。客户端位于webapplication中,所以我们将服务器引用存储在公共常量中 我想知道,每次我们需要服务器实例时,在注册表中查找服务器的成本有多高。或者最好只查找一次并将其存储在某个常量中 若我将其存储在常量中,那个么若RMI服务器重新启动,问题就开始了。因为该常量变量保存旧引用并抛出java.rmi.NoSuchObjectException:表中没有此类对象 欢迎任何输入。如果您希望您的客户端应用程序能够承受所有服务器重启,您

我在我的项目中使用RMI,我们有一个RMI服务器和RMI客户端。客户端位于webapplication中,所以我们将服务器引用存储在公共常量中

我想知道,每次我们需要服务器实例时,在注册表中查找服务器的成本有多高。或者最好只查找一次并将其存储在某个常量中

若我将其存储在常量中,那个么若RMI服务器重新启动,问题就开始了。因为该常量变量保存旧引用并抛出
java.rmi.NoSuchObjectException:表中没有此类对象


欢迎任何输入。

如果您希望您的客户端应用程序能够承受所有服务器重启,您无论如何都应该保护它不受通信故障的影响,包括java.rmi.NoSuchObjectException。请注意,在查找和请求执行之间可能会发生服务器重新启动,尽管可能性不大。在这种情况下,即使您在每个请求之前都进行了查找,您也不会安全。因此,建议如下:

  • 查找一次并保留引用。这样做的另一个好处是,您的应用程序将能够在初始化时发现错误配置或其他问题

  • 如果发生NoSuchObjectException,请尝试刷新引用


  • NoSuchObjectException
    在我们调用某个操作时发生,因此我将以冗余的RMI代码结束。@Mahendra代码中没有使应用程序正常工作所需的“冗余”代码。不要让关于美学的武断想法妨碍你实现必要的东西:只要试着找到一种优雅的方式来表达它。您可以将其构造为do/while循环,并在catch块中为NoSuchObjectException进行新的查找。