如何获取java.rmi.Remote实例的状态
我有一个类如何获取java.rmi.Remote实例的状态,java,rmi,Java,Rmi,我有一个类a的实例,该类实现了java.rmi.Remote 为了检查到RMI服务器的连接的运行状况,我调用了a实例的一个定制的普通成员函数,并查看是否引发了异常。那可不是很优雅。因此,我的问题是: 是否有任何本机方法来检查连接是否可用于A实例上的方法调用,即无需实际尝试调用成员函数 一种特殊情况是:如果RMI服务器在客户端A实例的生存期内重新启动,则A实例将无效和失效(尽管服务器可能已备份且运行正常)。发件人: F.1客户端和客户端之间在什么时候有“实时”连接 服务器以及如何管理连接? 当客户
a
的实例,该类实现了java.rmi.Remote
为了检查到RMI服务器的连接的运行状况,我调用了a
实例的一个定制的普通成员函数,并查看是否引发了异常。那可不是很优雅。因此,我的问题是:
是否有任何本机方法来检查连接是否可用于A
实例上的方法调用,即无需实际尝试调用成员函数
一种特殊情况是:如果RMI服务器在客户端A
实例的生存期内重新启动,则A
实例将无效和失效(尽管服务器可能已备份且运行正常)。发件人:
F.1客户端和客户端之间在什么时候有“实时”连接
服务器以及如何管理连接?
当客户端执行“查找”操作时,将连接到
指定主机上的注册表。通常情况下,新连接可能会或
不能为远程调用创建。连接由
Java RMI传输供将来使用,因此如果连接到
远程呼叫的正确目的地,然后使用它。客户不能
显式关闭与服务器的连接,因为连接是
在Java RMI传输级别进行管理。如果出现以下情况,连接将超时:
它们有一段时间没有使用
您的问题:
当客户端在远程方法上执行操作时,查找将一直正常工作,直到服务器启动,而不是停机。您必须在此处决定对等机重新启动时应用程序的行为。此外,RMI中没有会话这样的概念
我希望这能回答你所有的问题。你的问题是建立在谬论基础上的 提前知道状态对你一点帮助都没有。状态测试之后是一个计时窗口,随后是您对服务器的使用。在正时窗口期间,状态可以更改。测试时服务器可能会启动,使用时服务器可能会关闭。或者,当您测试时,它可能处于下降状态,而当您使用时,它可能处于上升状态 确定任何资源是否可用的正确方法是尝试使用它。这适用于输入文件、RMI服务器、Web系统等 如果RMI服务器在客户端A实例的生存期内重新启动,则A实例将变得无效和失效(尽管服务器可能已备份且运行正常)
在这种情况下,您将获得
java.rmi.ConnectException
或java.rmi.NoSuchObjectException
,这取决于远程对象是在不同端口还是在同一端口重新启动。这不取决于您的代码吗?如果您的实例正在执行某项操作,但尚未返回,则立即无法执行另一个方法调用。正如它从上一次调用返回一样,它将处理其他方法调用。谢谢您的评论!对于我的问题,让我们假设实例没有忙着做某事,即没有陷入方法中。我的问题只与实例的连接状态有关。如果应用程序当前正在实例的范围内运行,那么是的,GC不会回收该对象。所以,我相信,您可以安全地假设该对象可用于执行其任何方法调用。所以,我将它标记为可能的副本的副本:?