做過UNIX下編程的朋友應該都聽說過RPC的概念了,RPC的全稱是Remote Procedure
Call;如果和RMI的全稱(Remote Method Invocation)比較,聰明的你應該知道了他們的
區別了:RPC是基於過程的,RMI是物件導向的.實際上,RMI是RPC的JAVA版本,因此,Java
RMI具有Java的"Write Once,Run Anywhere"的優點,是分布式應用系統的百分之百純
Java解決方案。
1)為什麼序列化
既然是分布式應用系統,就涉及多JRE的問題.在A JRE中的對象,它的記憶體位址是
0xabcdef,該地址存放的值,和B JRE中的該地址放的值是不同的,所以,RMI不支援序列
化是不行的.我們在RMI的包中可以看到支援 Serializable(可序列化)的介面.
2)RMI系統運行機制
RMI應用程式通常包括兩個獨立的程式:伺服器程式和客戶機程式,這和一般的C/S開發
模式沒有什麼區別.RMI也是基於ORB標準的,包括stub和skeleton.調用stub的方法時將
執行下列操作:(1) 初始化與包含遠程對象的遠程虛擬機器的串連;(2) 對遠程虛擬機器
的參數進行編組(寫入並傳輸),序列化就是這裡做的;(3) 等待方法調用結果;(4) 解編
(讀取)傳回值或返回的異常;(5) 將值返回給調用程式。skeleton調用過程就不用說了吧.stub和
skeleton不用自己寫,它由rmic編譯器產生。
3)編寫Java RMI分布式應用程式的步驟
(1) 將遠程類的功能定義為Java介面。參考java.rmi.Remote,注意異常的拋出問題。
(2) 編寫伺服器類。用物件導向的觀點來考慮這個問題。
(3) 編寫使用遠程服務的客戶機程式。用java.rmi.Naming中的lookup()方法獲得對遠
程對象的引用,依據需要調用該引用的遠程方法,其調用方式和對本機物件方法的調
用相同。
?
4)編譯和運行RMI分布式應用程式的步驟
(1) 使用javac編譯遠程介面類,遠程介面實作類別和客戶機程式。按自己的商務邏輯寫代碼.。
(2) 使用rmic編譯器產生實作類別的stub和skeleton。 自動實現的啦,不用我們去管。.
(3) 啟動RMI註冊服務程式rmiregistry。使用CORBA系統時能看到這個視窗.。
(4) 啟動伺服器端程式。
(5) 啟動客戶機程式。
說明:最好看看java.rmi的包來理解上面的概念;最好看看>的附錄的
講解.