2015-04-30 50 views
-3

我遇到問題:Java rmi導出對象

我做了一個有Map對象的服務器。 我想註冊rmi,從服務器對象到任何地方都可以訪問。我想要rmi註冊的方法是Map Get()和Set(Map)。第一個必須返回服務器的地圖,第二個必須更換新服務器的地圖。

非常感謝

+0

糟糕的設計。每個客戶都會得到他自己的副本,以他自己的方式更新它,將其發送到服務器,並且打破之前客戶端的更新。它不會工作。 – EJP

回答

0

首先你必須定義如下所示的界面:

public interface RmiMap extends Remote { 
     Map<K, E> get() throws RemoteException; 
     void set(Map<K, E> map) throws RemoteException; 
} 

的importent部分是Remote接口和RemoteException。此外,Map -Object必須實現Serializable,因此我建議將Map -Object封裝在自己的對象中。

另一個類必須實現這個接口,然後在RMI-Registry上註冊這個實現。

LocateRegistry.createRegistry(Registry.REGISTRY_PORT); 
Registry registry = LocateRegistry.getRegistry(); 

RmiMap stub = (RmiMap) UnicastRemoteObject.exportObject(RmiMapImplementation, 0); 
registry.rebind("RmiMap", stub); 

然後您可以從遠程主機訪問該接口。

RmiMap rmiMap = (RmiMap) remoteRegistry.lookup("RmiMap"); 

這應該會給你一個RMI的簡要介紹。

+0

大多數(如果不是所有的)JDK中的Map實現已經實現了'Serializable.' – EJP