2014-06-29 33 views
0

我只是想知道客戶端是否必須知道服務器上對象的實際實現。我認爲客戶端只需要知道服務器上對象的接口。客戶端是否必須知道RMI服務器返回的對象的Impl?

(服務器側)實施例:

public class AccountImpl implements Account { 
    //lots of Code 
} 

public class AccountManagerImpl implements AccountManager { 
    public Account login() { 
     return new AccountImpl(); 
    } 
} 

在客戶端:

AccountManager accMan = (AccountManager) registry.lookup("accMan"); 

Account myAccount = accMan.login(); 

所以客戶端具有的界面帳戶。他是否也需要知道類AccountImpl的實現?由於每個用戶都應該擁有自己的帳戶,我不認爲我可以導出並將其綁定到註冊表中......通常如何完成此操作?

在此先感謝

回答

1

否客戶端只使用遠程接口。需要部署到客戶端的類只包括遠程接口本身以及它依賴的任何類,等等直到關閉爲止。如果您正在生成1.5之前的存根,它們也需要部署,或者通過RMI代碼庫功能提供。

您不需要將帳戶綁定到註冊表。你在這裏發佈的內容已經有效。

+0

我得到以下錯誤在客戶端: 線程「主」異常java.rmi.UnmarshalException:錯誤解組返回; 對我來說,這聽起來像客戶需要AccountImpl。我怎樣才能解決這個問題? – KrawallKurt

+0

立即工作。 AccountImpl實現帳戶,可序列化 – KrawallKurt

+0

這可能不是你想要的。你幾乎肯定希望Account是一個遠程對象。否則,客戶端對它所做的任何更改都將丟失,並且客戶端不會看到服務器發生的對其發生的併發更改。 – EJP

相關問題