遠程方法調用(RMI)是java中最早的關于處理對象分布的機制,了解其工作原理為今后學習RMI-IIOP,XML-RPC以及SOAP等都有較大的幫助。
簡單歸納如下:
1.RMI允許一個JVM實例中的所有對象調用另一個JVM實例中所有對象的方法;
這兩個JVM可以運行在同一臺機器的不同進程上,也可以運行在不同的機器上。
2.可以被遠程訪問的對象必須創建一個接口,并extends java.rmi.Remote接口;
接口中定義的所有方法必須拋出java.rmi.RemoteException。
3.可以被遠程訪問的對象除了要實現該接口外,還要extends java.rmi.server.UnicastRemoteObject;
4.使用rmic工具生成_Stub類和_Skel類;
在cmd窗口中,輸入:rmic 編譯好的實現類名
若出現Class Not Found錯,則檢查class路徑設置是否正確。
這樣,客戶端實際是在對_Stub對象進行操作,而不是對實際的遠程對象操作。服務器端則用_Skel對象和實際的遠程對象進行通信。
5.編寫服務器端應用程序;
需要用Naming.rebind()方法將注冊名與對象綁定在一起。
6.編寫客戶端程序;
首先要用Naming.lookup()方法搜索注冊名,之后cast成遠程接口。
這里,如果是在不同的機器上分別開發客戶端和服務器端的話,則需要將接口復制到兩邊。
最后,就是象調用本地方法一樣,調用該遠程接口的方法,實現分布計算的功能了。
7.要運行RMI的話,需要啟動三個程序:
7.1.在第一個cmd中,啟動rmiregistry,注意要在遠程實現類所在的目錄下運行;
7.2.在第二個cmd中,啟動服務器端程序;
注意點:a).java參數(-Djava.security.policy)中要指定策略文件名(包含路徑)
b).路徑中若目錄名里含有空格,須將整個路徑用""包起來,否則會報Class Not Found錯
c).如果機器上安裝有防火墻軟件,可能會導致connect超時,異常中斷,須關閉防火墻
7.3.在第三個cmd中,啟動客戶端程序;
8.下面介紹如何在eclipse中運行一個簡單的RMI程序:
8.1.先在eclipse里新建一個java項目,然后,創建RMI接口,實現類,服務器端程序,客戶端程序;
8.2.打開cmd窗口,啟動rmiregistry;
8.3.在eclipse里,右鍵點擊服務器端程序,打開“運行...”配置窗口,切換到“Arguments”,在“VM arguments”里輸入:-Djava.security.policy=xxxxxxx

8.4.點擊“運行”,在控制臺里可以看到服務器程序正確運行;
8.5.最后,右鍵點擊客戶端程序,運行;