2012-12-12 95 views
3

我在IP:192.168.133.2 虛擬機(運行Windows XP)上運行RMI Regitry並試圖綁定RMI服務器(運行在不同的vm XP IP:192.168.133.3) 使用此代碼:rmi註冊表綁定問題

Naming.rebind("//192.168.133.2/rmi.2", new RMI()); 

其中

public class RMI extends UnicastRemoteObject 

,但我得到這個異常:

java.rmi.AccessException: Registry.Registry.rebind disallowed; origin /192.168.133.3 is non-local host 

我認爲RMI註冊表不接受任何rmi服務器在RMI註冊表運行機器上沒有運行相同的 。

但如何使此註冊表接受我的rmi服務器?

p.s:我使用JBuilder X作爲IDE。

我試圖實現,這將運行一些RMI服務器上做對他們的一些工作,並將結果返回到起點站移動代理等等RMI服務器實現了承載此代理做其工作環境並將其發送到它會通過註冊表

回答

1

RMI定位不提供任何形式的「聯合」或分佈式命名服務的下一站。

RMI的結構允許您在服務器上運行RMI註冊表。它託管可通過網絡訪問的服務,但服務在該服務器上本地運行。

正在提供的服務必須在服務器上啓動 - 和「重新綁定」 - 不在任何客戶端系統上。僅限本地地址。然後

您的客戶應該接觸到該服務器...

+0

我試圖實現一個移動代理,它將在一些rmi服務器上運行,對它們做一些工作並將結果返回到起始站 ,以便RMI服務器實現承載此代理的環境,以執行其工作併發送它到它將通過註冊表找到的下一個站.. 所以你說我不能創建一個多主機服務器(每臺服務器運行在不同的機器上,但在同一個網絡上)。 對不對? –

+0

我在說你的'多主機'集合中的每個服務器都必須單獨運行一個本地的rmiregistry,你的服務的本地副本必須綁定到該rmiregistry。如果您希望您的客戶端能夠輪換到不同的RMI服務,那麼這是RMI提供的層數;您必須想出一些方法來在RMI之外執行此操作(JNDI命名在這裏可能會有所幫助:-) –

+0

但是如果代理在A機上運行並且想要移動到機器B 它如何找到B if沒有包含所有服務的統一註冊表? –

4

試圖綁定一個RMI服務器(在不同的虛擬機XP運行IP:192.168.133.3)

停在那兒。你不能那樣做。您只能將RMI服務器綁定到與執行綁定的代理程序在同一主機上運行的註冊表。

請注意,而不是必然意味着與運行遠程對象本身相同的主機。例如,客戶端可以查找遠程註冊表並將檢索到的存根綁定到本地註冊表中。但是你不能將任何東西綁定到遠程註冊表。

+0

感謝您的信息! –