2013-03-31 74 views
0

我可以註冊來自不同機器的同名對象嗎? 例如:假設我們有一個實現遠程接口的類X.然後我們有一個類服務器,它接受一個新的X對象並在rmiregistry上註冊名爲「Name」的對象。然後,我們有另一臺機器具有相同的類,並做同樣的事情。我們可以有多臺機器作爲服務器運行。在這個配置中,所有的機器都從不同的IP地址註冊它們的對象X,但是所有的對象都註冊了相同的名字。這可能嗎?如果一個客戶使用不同的IP和相同的對象名稱調用查找,是否有任何問題?java RMI - 多個主機註冊一個同名對象

回答

0

您描述的情況或多或少是不可能的。每個服務器都必須擁有自己的RMI註冊表,因此不會產生歧義。如果您可以在同一個註冊表中找到註冊來自不同服務器的對象的方法(並且存在一個,但它很少知道或使用),顯然它們必須全部使用不同的綁定名稱。

+0

你能給你提供一些有關這種情況的信息來源的參考(你告訴過不同的服務器是同一個註冊表)嗎? –

+0

這很簡單。除本地主機外,RMI註冊表不接受綁定/重新綁定/解除綁定。然而,它綁定/解除綁定的對象不一定要在本地主機上。因此,如果您擁有RMI註冊表,則可以在同一主機上查找其他主機的客戶端程序可將每個查找結果綁定到其自己的註冊表中。其他客戶端只需要查看該註冊表:實際上他們不需要知道實際的遠程對象在哪裏。每個導出遠程對象的主機仍然需要一個註冊表:額外的註冊表和綁定客戶端是最上面的一個額外的薄層。 – EJP

+0

好的,我相信我明白這一點。我的項目基本上是同行之間的溝通(所以我在每臺機器上都有一臺服務器和一臺客戶機)。我的第一個想法是,每個同行都可以創建自己的RMI註冊表並綁定一個對象(爲了簡單起見,使用相同的名稱),但是有人告訴我只有一個RMI註冊表是個好主意。正如我現在所看到的,這是不可能的。正如你告訴我的,我需要爲每臺機器和另一臺中央機器安裝Rmi Registry。 –

0

只要服務器有其單獨的RMI註冊表,它們就可以使用相同的名稱進行綁定。如果他們共享相同的RMI註冊表,則不可能使用相同的名稱綁定對象