程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> RMI(Remote Method Invocation)

RMI(Remote Method Invocation)

編輯:J2EE
什麼是RMI 分布式計算系統要求運行在不同地址空間不同主機上的對象互相調用。各種分布式系統都有自己的調用協議,如CORBA的IIOP(Internet InterORB Protocol), MTS的DCOM。那麼EJB組件呢?在Java裡提供了完整的sockets通訊接口,但sockets要求客戶端和服務端必須進行應用級協議的編碼交換數據,采用sockets是非常麻煩的。 一個代替Sockets的協議是RPC(Remote Procedure Call), 它抽象出了通訊接口用於過程調用,使得編程者調用一個遠程過程和調用本地過程同樣方便。RPC 系統采用XDR來編碼遠程調用的參數和返回值。 但RPC 並不支持對象,而EJB構造的是完全面向對象的分布式系統,所以,面向對象的遠程調用RMI(Remote Method Invocation)成為必然選擇。采用RMI,調用遠程對象和調用本地對象同樣方便。RMI采用JRMP(Java Remote Method Protocol)通訊協議,是構建在TCP/IP協議上的一種遠程調用方法。 RMI調用機制 RMI 采用stubs 和 skeletons 來進行遠程對象(remote object)的通訊。stub 充當遠程對象的客戶端代理,有著和遠程對象相同的遠程接口,遠程對象的調用實際是通過調用該對象的客戶端代理對象stub來完成的。 stub 每個遠程對象都包含一個代理對象stub,當運行在本地Java虛擬機上的程序調用運行在遠程Java虛擬機上的對象方法時,它首先在本地創建該對象的代理對象stub, 然後調用代理對象上匹配的方法,代理對象會作如下工作: 與遠程對象所在的虛擬機建立連接 打包(marshal)參數並發送到遠程虛擬機 等待執行結果 解包(unmarshal)返回值或返回的錯誤 返回調用結果給調用程序 stub 對象負責調用參數和返回值的流化(serialization)、打包解包,以及網絡層的通訊過程。 skeleton 每一個遠程對象同時也包含一個skeleton對象,skeleton運行在遠程對象所在的虛擬機上,接受來自stub對象的調用。當skeleton接收到來自stub對象的調用請求後,skeleton會作如下工作: 解包stub傳來的參數 調用遠程對象匹配的方法 打包返回值或錯誤發送給stub對象 遠程對象的stub和skeleton對象都是由rmic編譯工具產生的。 RMI-IIOP RMI能夠很好解決Java語言中分布式對象的調用問題,但RMI不是一個標准的調用協議,所以RMI不能調用非Java語言編寫的對象。 IIOP(Internet Inter-ORB Protocol)是CORBA的通訊協議。CORBA是由OMG(Object Management Group)組織定義的一種分布式組件標准,通過和各種編程語言相匹配的IDL(Interface Definition Language),CORBA可以作到和語言無關,也就是說,用不同編程語言編寫的CORBA對象可以互相調用。 JavaIDL定義了Java語言到CORBA之間的匹配,通過JavaIDL,用Java語言編寫的應用程序可以和任何CORBA對象通訊。 RMI-IIOP結合了RMI的易用性和CORBA/IIOP的語言無關性,通過RMI-IIOP,RMI對象可以采用IIOP協議和CORBA對象通訊。RMI-IIOP對RMI的調用參數作了一些很輕微的限制,在調用CORBA對象時,必須遵循這些限制。JDK1.3已經提供對RMI-IIOP的支持。 Apusic Application Server對RMI-IIOP的支持 Apusic Application Server目前采用RMI,對RMI-IIOP的支持正在開發中,預計不久即會推出完全支持RMI-IIOP的新版本。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved