2011-10-20 52 views
1

我有一個RMI客戶端連接到一些RMI服務器,只是爲了讓它知道它可以使用這個新的客戶端。將方法中的遠程對象傳遞給RMI服務器?

我可以直接通過一些遠程對象,以便:

serverRemoteObject.registerClient(theClientRemoteObjectTheServerShouldUse); 

實際上給服務器的一些對象,他可以在不連接到我的客戶使用? 下面的問題說,這是可能的,但被賦予沒有真正的例子:

Is it possible to use RMI bidirectional between two classes?

安德魯

+0

'沒有連接到我的客戶端'部分是不可能的,當然不知道那是幹什麼的。 – EJP

+0

這確實是不正確的。我的意思是「不必在客戶端的註冊表中詢問對象」。 – AndrewBourgeois

回答

3

是的,可以。這就是RMI的回調工作方式。你發送一個對象到服務器,當服務器調用你的對象的方法時,它將在「客戶端」JVM中執行,而不是在服務器上執行。查看UnicastRemoteObject.export方法用於將實現接口的任何對象導出爲可傳遞到服務器的遠程對象。

interface UpdateListener extends Remote { 

    public void handleUpdate(Object update) throws RemoteException; 

} 

class UpdateListenerImpl implements UpdateListener { 

    public void handleUpdate(Object update) throws RemoteException { 
    // do something 
    } 

} 

//somewhere in your client code 
final UpdateListener listener = new UpdateListenerImpl(); 
UnicastRemoteObject.export(listener);