我有一个要求,即RMI客户端需要获取远程RMI注册表中注册的所有远程对象。RMI客户端如何看到并获取在注册表中注册的所有动态远程对象?
第一个问题,我知道有一个registry.list()方法返回对象的所有名称。但是,如何获得我想要的类型的对象(实现我想要的接口),假定还有其他类型的对象也被注册。我应该遍历名称并使用try/catch语句,尝试实例化每个远程对象吗?
第二个问题,如果一个新的对象被注册,客户怎么会注意到?在我的要求中,服务器将动态注册到注册表中的新对象,并且客户端需要更新并更快访问新对象。我应该使用一个线程来定期列出所有的名字来找出新的对象吗?
请注意,远程对象将从不同节点导出,但不从同一节点导出。我知道它们是否来自同一个节点,可能我可以使用从实例化远程对象之一调用的回调功能。
谢谢你的明确答案。它有助于! –
没有'ClassCastExceptions'的更简单的方法是通过'javax.naming.Context.list()'方法,它返回一对枚举类型'{name,class-name},而不需要检索对象。 – EJP
当我试图查看javax.naming的用法时,发现了以下接口:javax.naming.event.NamingListener。从描述看来,它可以用于收听命名更改事件,如添加名称等。这是否适用于我的要求? –