Java RMI客户端如何查看和获取注册在注册表中的所有动态远程对象?
我要求RMI客户端需要在远程RMI注册表中注册所有远程对象 第一个问题,我知道有一个registry.list()方法返回所有对象的名称。但是,如果还注册了其他类型的对象,那么如何获得我想要的类型的对象(实现我想要的接口)。我是否应该遍历名称并使用try/catch语句,尝试实例化每个远程对象 第二个问题,如果注册了一个新对象,客户机如何引起注意?在我的要求中,服务器将动态地在注册表中注册新对象,客户机需要更新并更快地访问新对象。我是否应该使用线程定期列出所有名称以查找新对象 请注意,远程对象将从不同节点导出,但不能从同一节点导出。我知道如果它们来自同一个节点,可能我可以使用从实例化的远程对象之一调用的回调功能 RMI客户端如何查看和获取注册在注册表中的所有动态远程对象 通过调用Java RMI客户端如何查看和获取注册在注册表中的所有动态远程对象?,java,rmi,rmiregistry,Java,Rmi,Rmiregistry,我要求RMI客户端需要在远程RMI注册表中注册所有远程对象 第一个问题,我知道有一个registry.list()方法返回所有对象的名称。但是,如果还注册了其他类型的对象,那么如何获得我想要的类型的对象(实现我想要的接口)。我是否应该遍历名称并使用try/catch语句,尝试实例化每个远程对象 第二个问题,如果注册了一个新对象,客户机如何引起注意?在我的要求中,服务器将动态地在注册表中注册新对象,客户机需要更新并更快地访问新对象。我是否应该使用线程定期列出所有名称以查找新对象 请注意,远程对象将
Naming.list()
或Registry.list()。
我要求RMI客户端需要在远程RMI注册表中注册所有远程对象
见上文
如果还注册了其他类型的对象,那么如何获得我想要的类型的对象(实现我想要的接口)?我是否应该遍历名称并使用try/catch语句,尝试实例化每个远程对象
只需遍历list()
返回的名称<代码>查找()每一个;并使用instanceof
确定它是否属于您需要的类型。如果注册表包含的存根在客户端没有所有必需的类,则需要捕获ClassNotFoundException
。一个简单的方法是通过JNDI方法,以较少的步骤完成所有这些
第二个问题,如果注册了一个新对象,客户机如何引起注意
不可能。没有为RMI注册表定义侦听器系统。客户必须进行投票
在我的要求中,服务器将动态地在注册表中注册新对象,客户机需要更新并更快地访问新对象。我是否应该使用线程定期列出所有名称以查找新对象
对
请注意,远程对象将从不同节点导出,但不能从同一节点导出
您会发现这很难安排,因为您只能从与注册表相同的主机调用bind()
和friends。您必须组织一些中间远程对象来为每个非本地节点进行注册
我知道如果它们来自同一个节点,可能我可以使用从实例化的远程对象之一调用的回调功能
来自同一个节点不是这样做的先决条件。您可以在防火墙不妨碍的任何拓扑中执行RMI回调
RMI客户端如何查看和获取注册在注册表中的所有动态远程对象
通过调用Naming.list()
或Registry.list()。
我要求RMI客户端需要在远程RMI注册表中注册所有远程对象
见上文
如果还注册了其他类型的对象,那么如何获得我想要的类型的对象(实现我想要的接口)?我是否应该遍历名称并使用try/catch语句,尝试实例化每个远程对象
只需遍历list()
返回的名称<代码>查找()每一个;并使用instanceof
确定它是否属于您需要的类型。如果注册表包含的存根在客户端没有所有必需的类,则需要捕获ClassNotFoundException
。一个简单的方法是通过JNDI方法,以较少的步骤完成所有这些
第二个问题,如果注册了一个新对象,客户机如何引起注意
不可能。没有为RMI注册表定义侦听器系统。客户必须进行投票
在我的要求中,服务器将动态地在注册表中注册新对象,客户机需要更新并更快地访问新对象。我是否应该使用线程定期列出所有名称以查找新对象
对
请注意,远程对象将从不同节点导出,但不能从同一节点导出
您会发现这很难安排,因为您只能从与注册表相同的主机调用bind()
和friends。您必须组织一些中间远程对象来为每个非本地节点进行注册
我知道如果它们来自同一个节点,可能我可以使用从实例化的远程对象之一调用的回调功能
来自同一个节点不是这样做的先决条件。您可以在防火墙不妨碍的任何拓扑中执行RMI回调。没有
ClassCastExceptions
的一种更简单的方法是通过javax.naming.Context.list()
方法,该方法返回对{name,class name}的枚举,而无需检索对象。当我试图研究javax.naming的用法时,我找到了以下接口:javax.naming.event.NamingListener。从描述来看,它似乎可以用来侦听命名更改事件,如添加名称等。这是否适用于我的要求?我尝试了javax.naming.Context.list(),但不知道getClassName()总是返回java.lang.object而不是实际运行的类名的原因。。。如果我尝试listBindings(),它总是返回com.sun.proxy.$proxy,其中#是一个数字