- 相關(guān)推薦
用RMI開(kāi)發(fā)基于Java的企業(yè)分布式應用
摘要由于Java具有跨平臺、代碼可移植性、安全高效等廣泛而強大的功能,因而在開(kāi)發(fā)網(wǎng)絡(luò )分布式應用的時(shí)候,可以用它自身的機制實(shí)現分布式計算,一種基于Java的遠程方法調用(RMI)為我們開(kāi)發(fā)企業(yè)分布式應用提供了行之有效的解決方案。
關(guān)鍵詞JavaRMI企業(yè)分布式應用
1概述
隨著(zhù)電力企業(yè)信息化建設的不斷深入和發(fā)展,企業(yè)內部和企業(yè)與企業(yè)之間對信息、對數據的交換量大大增加,這些信息與數據越來(lái)越需要在不同的計算機網(wǎng)絡(luò )間傳送和交流。同時(shí),由于各單位、各部門(mén)之間的現存的計算機網(wǎng)絡(luò )硬件設備與操作系統千差萬(wàn)別,應用水平也參差不齊,因此,開(kāi)發(fā)出跨平臺、可移植、高效安全的網(wǎng)絡(luò )分布式應用來(lái)服務(wù)于電力企業(yè),就顯得尤為重要。
在當今的編程術(shù)語(yǔ)里,分布式計算已經(jīng)成為很常見(jiàn)的詞,它將企業(yè)的業(yè)務(wù)數據和程序分布在網(wǎng)絡(luò )的不同物理位置上,通過(guò)調動(dòng)網(wǎng)絡(luò )上多臺計算機的處理能力,發(fā)揮遠程調用數據的功能。
遠程方法調用(RemoteMethodInvocation,RMI),可以在不同的Java虛擬機(JVM)之間實(shí)現對象與對象的通信。JVM可以位于相同或不同計算機上,在多個(gè)JVM中,一個(gè)JVM可以調用存儲在其它JVM的對象的方法。
本文主要介紹RMI的特點(diǎn),分析應用RMI進(jìn)行企業(yè)分布式計算的原理,以及利用RMI實(shí)現基于Java的企業(yè)分布式應用的具體步驟。
2遠程方法調用(RMI)的特點(diǎn)
2.1TCP編程的缺點(diǎn)
由于Java編程語(yǔ)言設計之初就是面向對象和支持網(wǎng)絡(luò )的,因此,基于對象的RMI機制已經(jīng)內置在Java平臺中。
我們經(jīng)常會(huì )在網(wǎng)絡(luò )開(kāi)發(fā)中使用TCP/IP編程,這樣,自然而然地就會(huì )涉及到Socket(套接字)編程。但是,使用Socket編程需要大量重復編碼,在復雜分布式操作時(shí)顯得非常麻煩,而且易于出錯。因此,如何快速、高效、安全、可擴展地進(jìn)行網(wǎng)絡(luò )分布式計算,是開(kāi)發(fā)者們一貫追求和倡導的主題。直到RMI的出現,這種繁雜、低效的開(kāi)發(fā)情況才有很大改觀(guān)。
2.2RMI編程的特點(diǎn)
當我們利用對象序列化在網(wǎng)絡(luò )上分配對象時(shí),RMI提供了非Java平臺無(wú)法匹敵的獨特而強大的分布式計算模型,RMI主要有以下特點(diǎn):
?客戶(hù)機可以向本地方法一樣調用遠程服務(wù)器上的方法;
?可以根據接口指定客戶(hù)機/服務(wù)器編程合約;
?可以從服務(wù)器對象缺省二進(jìn)制類(lèi)文件,自動(dòng)生成調動(dòng)/反調動(dòng)代碼;
?將Java編程模型擴展到機器邊界(和Java虛擬機(JVM)邊界之外),不需要任何特殊語(yǔ)法;
?還可以和一個(gè)遠程方法調用中的數據同時(shí)傳輸行為(代碼)。
盡管RMI不是唯一的企業(yè)級遠程對象訪(fǎng)問(wèn)方案,但它卻是最容易實(shí)現的。
2.3RMI與CORBA
作為分布式應用程序框架的規范,COBRA首當其沖,它是由對象管理組織(OMG)開(kāi)發(fā)的。與CORBA不同的是,CORBA能夠利用不同編程語(yǔ)言(例如C/C 、Basic等)開(kāi)發(fā)實(shí)現分布式應用,而RMI是一種純Java解決方案。在RMI中,程序的所有部分都由Java語(yǔ)言編寫(xiě),這樣,開(kāi)發(fā)出來(lái)的程序完全符合Java規范,便于實(shí)現跨平臺訪(fǎng)問(wèn)、擴展和移植。按照筆者所在西北電力建設集團公司的情況看,服務(wù)器操作系統主要有Linux和Windows2000Server,分別存在于公司和部門(mén)當中,它們是不同的系統平臺;同時(shí),公司下屬各個(gè)工程項目部又距離很遠,近的幾十公里,遠則達到上千公里甚至位于國外,因此跨平臺和遠程訪(fǎng)問(wèn)這兩大功能在開(kāi)發(fā)企業(yè)應用系統時(shí)就必須考慮,而RMI恰恰能夠用它的自身特點(diǎn)來(lái)滿(mǎn)足編程需要。
3RMI基本體系結構簡(jiǎn)介
RMI通過(guò)TCP/IP在內部使用Socket,象其名稱(chēng)暗示的那樣,它能夠幫助我們查找并執行遠程對象的方法。RMI的目的是讓位于不同JVM中的對象,在外觀(guān)及行為上都像是本地的對象。
通常,我們把調用這種遠程對象的JVM,稱(chēng)為客戶(hù)機;而把包括這種遠程對象的JVM,稱(chēng)為服務(wù)器。
盡管對一個(gè)遠程對象的引用和獲得對本地對象的引用有所不同,但我們可以把遠程對象像本地對象一樣使用。應用程序并不知道一個(gè)對象是遠程的還是本地的。實(shí)際上,遠程對象上被調用的方法與本地對象上調用的方法,具有相同的語(yǔ)法結構。
作為RMI的底層(會(huì )包含復雜的Socket操作),它會(huì )自動(dòng)截獲方法調用,找到遠程對象,然后處理遠程請求。筆者認為,RMI設計的重要之處,就在于不但在設計上實(shí)現了遠程訪(fǎng)問(wèn)功能,而且實(shí)現了設計的透明性。
RMI的基本體系結構,概括起來(lái)說(shuō),由三個(gè)抽象層組成:
3.1存根/框架層(Stubs/SkeletonsLayer)
RMI為我們引入了兩種特殊類(lèi)型的對象,稱(chēng)為存根(Stub)和框架(Skeleton),它們組成了RMI的第一層。
在遠程通信的時(shí)候,要利用TCP/IP協(xié)議,做很多底層數據的打包傳輸。運用Java技術(shù),我們先要把數據或者對象轉換成字節流(bytestream),便于網(wǎng)絡(luò )傳輸,這個(gè)過(guò)程叫匯集(marshaling);當收到遠程傳來(lái)的字節流后,我們要把流信息轉換成對象或者數據,這個(gè)過(guò)程叫解讀(unmarshaling),它與匯集剛好相反。
Stub和Skeleton層位于實(shí)際應用程序之下,建立在Proxy(代理)設計方案之上。Stub類(lèi)的作用是遠程服務(wù)器實(shí)現的代理的角色,Stub是客戶(hù)方對象;Skeleton類(lèi)用于幫助對象通過(guò)RMI鏈接與Stub通信,它從鏈路中讀取方法調用的參數,向遠程服務(wù)實(shí)現對象進(jìn)行調用,接受返回值,然后再把返回值寫(xiě)回到Stub。
3.2遠程引用層(RemoteReferenceLayer)
遠程引用層定義和支持著(zhù)RMI連接的調用語(yǔ)義(semantics)。
RMI進(jìn)行遠程訪(fǎng)問(wèn)要用到JRMP(JavaRemoteMethodProtocol,即Java遠程方法協(xié)議),
這一層提供專(zhuān)用于JRMP的RemoteRef對象,它位于java.rmi.server包內,代表著(zhù)遠程對象的一個(gè)句柄。RemoteRef使用遠程引用來(lái)執行遠程對象的一個(gè)遠程方法調用。
3.3傳輸層(TransportLayer)
傳輸層在JVM之間建立基于流的網(wǎng)絡(luò )連接,并且負責
【用RMI開(kāi)發(fā)基于Java的企業(yè)分布式應用】相關(guān)文章:
開(kāi)發(fā)基于路由器VR功能的寬帶應用03-07
基于Java的應用編程-視頻點(diǎn)播系統JSP+TOMCAT+SQL11-23
基于CS管理的房地產(chǎn)企業(yè)開(kāi)發(fā)設計01-11
淺談基于Pushlet推技術(shù)的網(wǎng)絡(luò )應用程序開(kāi)發(fā)的研究03-01
開(kāi)發(fā)基于SQL SERVER 的C/S數據庫應用系統?03-18
分布式發(fā)電系統的應用及前景03-18
基于CPRI標準的分布式基站研究與設計03-07
基于后綴數組的分布式串匹配算法11-14