我遇到問題:Java rmi導出對象
我做了一個有Map對象的服務器。 我想註冊rmi,從服務器對象到任何地方都可以訪問。我想要rmi註冊的方法是Map Get()和Set(Map)。第一個必須返回服務器的地圖,第二個必須更換新服務器的地圖。
非常感謝
我遇到問題:Java rmi導出對象
我做了一個有Map對象的服務器。 我想註冊rmi,從服務器對象到任何地方都可以訪問。我想要rmi註冊的方法是Map Get()和Set(Map)。第一個必須返回服務器的地圖,第二個必須更換新服務器的地圖。
非常感謝
首先你必須定義如下所示的界面:
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的簡要介紹。
大多數(如果不是所有的)JDK中的Map實現已經實現了'Serializable.' – EJP
糟糕的設計。每個客戶都會得到他自己的副本,以他自己的方式更新它,將其發送到服務器,並且打破之前客戶端的更新。它不會工作。 – EJP