我有一個要求,即RMI客戶端需要獲取遠程RMI註冊表中註冊的所有遠程對象。RMI客戶端如何看到並獲取在註冊表中註冊的所有動態遠程對象?
第一個問題,我知道有一個registry.list()方法返回對象的所有名稱。但是,如何獲得我想要的類型的對象(實現我想要的接口),假定還有其他類型的對象也被註冊。我應該遍歷名稱並使用try/catch語句,嘗試實例化每個遠程對象嗎?
第二個問題,如果一個新的對象被註冊,客戶怎麼會注意到?在我的要求中,服務器將動態註冊到註冊表中的新對象,並且客戶端需要更新並更快訪問新對象。我應該使用一個線程來定期列出所有的名字來找出新的對象嗎?
請注意,遠程對象將從不同節點導出,但不從同一節點導出。我知道它們是否來自同一個節點,可能我可以使用從實例化遠程對象之一調用的回調功能。
謝謝你的明確答案。它有助於! –
沒有'ClassCastExceptions'的更簡單的方法是通過'javax.naming.Context.list()'方法,它返回一對枚舉類型'{name,class-name},而不需要檢索對象。 – EJP
當我試圖查看javax.naming的用法時,發現了以下接口:javax.naming.event.NamingListener。從描述看來,它可以用於收聽命名更改事件,如添加名稱等。這是否適用於我的要求? –