遠程方法調用

遠程方法調用

增強了Java應用的網絡開發語言
遠程方法調用(Remote Method Invocation,RMI)是用Java在JDK1.1中實現的,它大大增強了Java開發分布式應用的能力。Java作為一種風靡一時的網絡開發語言,其巨大的威力就體現在它強大的開發分布式網絡應用的能力上,而RMI就是開發百分之百純Java的網絡分布式應用系統的核心解決方案之一。
  • 中文名:遠程方法調用
  • 外文名:
  • 用途:
  • 英文:Remote Method Invocation
  • 别名:RMI
  • 功能:實現遠程對象之間的無縫遠程調用

簡介

背景

Java Remote Method Invocation ( RMI -- Java遠程方法調用)允許您使用Java編寫分布式對象。本文将介紹RMI的優點以及如何将其連接到現有的和原有的系統中,以及與用Java編寫的組件的連接。

RMI為采用Java對象的分布式計算提供了簡單而直接的途徑。這些對象可以是新的Java對象,也可以是圍繞現有API的簡單的Java包裝程序。Java體現了“編寫一次就能在任何地方運行的模式。而RMI可将Java模式進行擴展,使之可在任何地方運行”。

因為RMI是以Java為核心的,所以,它将Java的安全性和可移植性等強大功能帶給了分布式計算。您可将代理和梢?務邏輯等屬性移動到網絡中最合适的地方。如果您要擴展Java在系統中的使用,RMI将使您充分利用其強大功能。

RMI可利用标準Java本機方法接口JNI與現有的和原有的系統相連接。RMI還可利用标準JDBC包與現有的關系數據庫連接。RMI/JNI和RMI/JDBC相結合,可幫助您利用RMI與目前使用非Java語言的現有服務器進行通信,而且在您需要時可擴展Java在這些服務器上的使用。RMI可幫助您在擴展使用時充分利用Java的強大功能。

組成

一個正常工作的RMI系統由下面幾個部分組成:

·遠程服務的接口定義

·遠程服務接口的具體實現

·樁(Stub)和框架(Skeleton)文件

·一個運行遠程服務的服務器

·一個RMI命名服務,它允許客戶端去發現這個遠程服務

·類文件的提供者(一個HTTP或者FTP服務器)

·一個需要這個遠程服務的客戶端程序

工作原理

RMI系統結構,在客戶端和服務器端都有幾層結構。

方法調用從客戶對象經占位程序(Stub)、遠程引用層(RemoteReferenceLayer)和傳輸層(TransportLayer)向下,傳遞給主機,然後再次經傳輸層,向上穿過遠程調用層和骨幹網(Skeleton),到達服務器對象。占位程序扮演着遠程服務器對象的代理的角色,使該對象可被客戶激活。遠程引用層處理語義、管理單一或多重對象的通信,決定調用是應發往一個服務器還是多個。傳輸層管理實際的連接,并且追追蹤可以接受方法調用的遠程對象。

服務器端的骨幹網完成對服務器對象實際的方法調用,并獲取返回值。返回值向下經遠程引用層、服務器端的傳輸層傳遞回客戶端,再向上經傳輸層和遠程調用層返回。最後,占位程序獲得返回值。

要完成以上步驟需要有以下幾個步驟:

1、生成一個遠程接口

2、實現遠程對象(服務器端程序)

3、生成占位程序和骨幹網(服務器端程序)

4、編寫服務器程序

5、編寫客戶程序

6、注冊遠程對象

7、啟動遠程對象

優點

從最基本的角度看,RMI是Java的遠程過程調用(RPC)機制。與傳統的RPC系統相比,RMI具有若幹優點,因為它是Java面向對象方法的一部分。傳統的RPC系統采用中性語言,所以是最普通的系統--它們不能提供所有可能的目标平台所具有的功能。

RMI以Java為核心,可與采用本機方法與現有系統相連接。這就是說,RMI可采用自然、直接和功能全面的方式為您提供分布式計算技術,而這種技術可幫助您以不斷遞增和無縫的方式為整個系統添加Java功能。

RMI的主要優點如下:

面向對象:RMI可将完整的對象作為參數和返回值進行傳遞,而不僅僅是預定義的數據類型。也就是說,您可以将類似Java哈希表這樣的複雜類型作為一個參數進行傳遞。而在目前的RPC系統中,您隻能依靠客戶機将此類對象分解成基本數據類型,然後傳遞這些數據類型,最後在服務器端重新創建哈希表。RMI則不需額外的客戶程序代碼(将對象分解成基本數據類型),直接跨網傳遞對象。

可移動屬性:RMI可将屬性(類實現程序)從客戶機移動到服務器,或者從服務器移到客戶機。例如,您可以定義一個檢查雇員開支報告的接口,以便察看雇員是袷亓斯灸殼笆敵械惱摺T诳Пǜ娲唇ê螅突Щ突岽臃衿鞫嘶竦檬迪指媒湧诘畝韻蟆H绻叻⑸浠衿鞫司突峥擠禱厥褂昧誦掄叩母媒湧诘牧硪桓鍪迪殖縧颉D槐卦谟沒低成習滄叭魏渦碌娜砑湍茉诳突Ф思觳橄拗鋪跫?--從而向用戶提供爍?快的反饋,并降低服務器的工作量。這樣就能具備最大的靈活性,因為政策改變時隻需要您編寫一個新的Java類,并将其在服務器主機上安裝一次即可。

設計方式

對象傳遞功能使您可以在分布式計算中充分利用面向對象技術的強大功能,如二層和三層結構系統。如果您能夠傳遞屬性,那麼您就可以在您的解決方案中使用面向對象的設計方式。所有面向對象的設計方式無不依靠不同的屬性來發揮功能,如果不能傳遞完整的對象--包括實現和類型--就會失去設計方式上所提供的優點。

安全:RMI使用Java内置的安全機制保證下載執行程序時用戶系統的安全。RMI使用專門為保護系統免遭惡意小應用程序侵害而設計的安全管理程序,可保護您的系統和網絡免遭潛在的惡意下載程序的破壞。在情況嚴重時,服務器可拒絕下載任何執行程序。

便于編寫和使用:RMI使得Java遠程服務程序和訪問這些服務程序的Java客戶程序的編寫工作變得輕松、簡單。遠程接口實際上就是Java接口。服務程序大約用三行指令宣布本身是服務程序,其它方面則與任何其它Java對象類似。這種簡單方法便于快速編寫完整的分布式對象系統的服務程序,并快速地制做軟件的原型和早期版本,以便于進行測試和評估。因為RMI程序編寫簡單,所以維護也簡單。

可連接現有/原有的系統:RMI可通過Java的本機方法接口JNI與現有系統進行進行交互。利用RMI和JNI,您就能用Java語言編寫客戶端程序,還能使用現有的服務器端程序。在使用RMI/JNI與現有服務器連接時,您可以有選擇地用Java重新編寫服務程序的任何部分,并使新的程序充分發揮Java的功能。類似地,RMI可利用JDBC、在不修改使用數據庫的現有非Java源代碼的前提下與現有關系數據庫進行交互。

編寫一次,到處運行:RMI是Java“編寫一次,到處運行”方法的一部分。任何基于RMI的系統均可100%地移植到任何Java虛拟機上,RMI/JDBC系統也不例外。如果使用RMI/JNI與現有系統進行交互工作,則采用JNI編寫的代碼可與任何Java虛拟機進行編譯、運行。

分布式垃圾收集:RMI采用其分布式垃圾收集功能收集不再被網絡中任何客戶程序所引用的遠程服務對象。與Java虛拟機内部的垃圾收集類似,分布式垃圾收集功能允許用戶根據自己的需要定義服務器對象,并且明确這些對象在不再被客戶機引用時會被删除。

并行計算:RMI采用多線程處理方法,可使您的服務器利用這些Java線程更好地并行處理客戶端的請求。Java分布式計算解決方案:RMI從JDK1.1開始就是Java平台的核心部分,因此,它存在于任何一台1.1Java虛拟機中。所有RMI系統均采用相同的公開協議,所以,所有Java系統均可直接相互對話,而不必事先對協議進行轉換。

相關詞條

相關搜索

其它詞條