隨筆-128  評論-55  文章-5  trackbacks-0
           

          對象中間件之Java RMI

          作者:orangelizq   2007-11-30

          、中間件簡介

          1.1 中間件的定義

          中間件(middleware)是基礎(chǔ)軟件的一大類,屬于可復(fù)用的軟件范疇。中間件在操作系統(tǒng)軟件,網(wǎng)絡(luò)和數(shù)據(jù)庫之上,應(yīng)用軟件之下,總的作用是為處于自己上層的應(yīng)用軟件提供運行于開發(fā)的環(huán)境,幫助用戶靈活、高效的開發(fā)和集成復(fù)雜的應(yīng)用軟件。[1]

          IDC對中間件的定義為:中間件是一種獨立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源,中間件定位于客戶機(jī)服務(wù)器的操作系統(tǒng)之上,管理計算機(jī)資源和網(wǎng)絡(luò)通信。

          因而中間件是指一類軟件,是基于分布式處理的軟件,最突出的特點是其網(wǎng)絡(luò)通信功能。也可認(rèn)為中間件是位于平臺和應(yīng)用之間的通用服務(wù),這些服務(wù)具有標(biāo)準(zhǔn)的程序接口和協(xié)議。針對不同的操作系統(tǒng)和硬件平臺,可以有符合接口和協(xié)議的多種實現(xiàn)。

           

          1.1 中間件

          1.2 中間件的分類

          按照IDC的分類方法,中間件可分為六類:[1]

          1)        終端仿真/屏幕轉(zhuǎn)換

          2)        數(shù)據(jù)訪問中間件(UDA

          3)        遠(yuǎn)程過程調(diào)用中間件(RPC

          4)        消息中間件(MOM

          5)        交易中間件(TPM

          6)        對象中間件

          然而在實際應(yīng)用中,一般將中間件分為兩大類:一類是底層中間件,用于支撐單個應(yīng)用系統(tǒng)或解決一類問題,包括交易中間件、應(yīng)用服務(wù)器、消息中間件、數(shù)據(jù)訪問中間件等;另一類是高層中間件,更多的用于系統(tǒng)整合,包括企業(yè)應(yīng)用集成中間件、工作流中間件、門戶中間件等,他們通常會與多個應(yīng)用系統(tǒng)打交道,在系統(tǒng)中層次較高,并大多基于前一類的底層中間件運行。

          1.2.1 終端仿真/屏幕轉(zhuǎn)換

          此類中間件用于實現(xiàn)客戶機(jī)圖形用戶接口與已有的字符接口方式的服務(wù)器應(yīng)用程序之間的互操作,應(yīng)用與早期的大型機(jī)系統(tǒng),現(xiàn)在已很少使用。

          1.2.2 數(shù)據(jù)訪問中間件

          此類中間件是為了建立數(shù)據(jù)應(yīng)用資源互操作的模式,對異構(gòu)環(huán)境下的數(shù)據(jù)庫或文件系統(tǒng)實現(xiàn)聯(lián)接。

          1.2.3 遠(yuǎn)程過程調(diào)用中間件

          此類中間件可以使開發(fā)人員在需要時調(diào)用位于遠(yuǎn)端服務(wù)器上的過程,屏蔽了在調(diào)用過程中的通信細(xì)節(jié)。一個應(yīng)用程序使用RPC來遠(yuǎn)程執(zhí)行一個位于不同地址空間里的過程,在效果上看和執(zhí)行本地調(diào)用相同。

          1.2.4 交易中間件

          此類中間件是專門針對聯(lián)機(jī)交易系統(tǒng)而設(shè)計的。聯(lián)機(jī)交易系統(tǒng)需要處理大量并發(fā)進(jìn)程,處理并發(fā)涉及到操作系統(tǒng),文件系統(tǒng),編程語言,數(shù)據(jù)通信,數(shù)據(jù)庫系統(tǒng),系統(tǒng)管理,應(yīng)用軟件等。而交易中間件根據(jù)分布式交易處理的標(biāo)準(zhǔn)及參考模型,對資源管理,交易管理和應(yīng)用進(jìn)行了實現(xiàn),從而使得基于交易中間件開發(fā)應(yīng)用程序更為簡單。交易中間件基本上只適用于聯(lián)機(jī)交易系統(tǒng),是一種較為專用的中間件。

          1.2.5 消息中間件

          此類中間件是指利用高效可靠的消息傳遞機(jī)制進(jìn)行平臺無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進(jìn)行分布式系統(tǒng)的集成。通過提供消息傳遞和消息排隊模型,它可以在分布式環(huán)境下擴(kuò)展進(jìn)程間的通信。

          消息中間件可以即支持同步方式,又支持異步方式。異步中間件比同步中間件具有更強(qiáng)的容錯性,在系統(tǒng)故障時可以保證消息的正常傳輸。異步中間件技術(shù)又分為兩類:廣播方式和發(fā)布/訂閱方式。由于發(fā)布/訂閱方式可以指定哪種類型的用戶可以接受哪種類型的消息,更加有針對性,事實上已成為異步中間件的非正式標(biāo)準(zhǔn)。目前主流的消息中間件產(chǎn)品有IBMMQSeriesBEAMessageQSunJMS等。

          1.2.6 對象中間件

          傳統(tǒng)的對象技術(shù)通過封裝、繼承及多態(tài)提供了良好的代碼重用功能。但這些對象只存在與一個程序中,外界并不知道它們的存在,也無法訪問它們。對象中間件提供了一個標(biāo)準(zhǔn)的構(gòu)建框架,能使不同廠家的軟件通過不同的地址空間,網(wǎng)絡(luò)和操作系統(tǒng)實現(xiàn)交互訪問。對象中間件的目標(biāo)是為軟件用戶及開發(fā)者提供一種應(yīng)用級的即插即用的互操作性。目前主流的對象中間件有OMGCORBAMicrosoft COM以及IBMSOMSunRMI等。

          1.3 中間件的特點

          一般來講,中間件具有以下一些特點:滿足大量應(yīng)用的需求,運行于多種硬件和操作系統(tǒng)平臺,支持分布式計算,支持標(biāo)準(zhǔn)接口和協(xié)議。開發(fā)人員通過調(diào)用中間件提供的大量API,實現(xiàn)異構(gòu)環(huán)境的通信,從而屏蔽異構(gòu)系統(tǒng)中復(fù)雜的操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議。

          由于標(biāo)準(zhǔn)接口對于可移植性和標(biāo)準(zhǔn)協(xié)議對于互操作性的重要性,中間件已成為許多標(biāo)準(zhǔn)化工作的主要部分。分布式應(yīng)用軟件借助中間件可以在不同的技術(shù)之間共享資源。

          總的來說,中間件屏蔽了底層操作系統(tǒng)的復(fù)雜性,使程序開發(fā)人員面對一個簡單而統(tǒng)一的開發(fā)環(huán)境,減少了程序設(shè)計的復(fù)雜性,將注意力集中與自己的業(yè)務(wù)上,不必再為程序在不同軟件系統(tǒng)上的移植而重復(fù)工作,從而大大減少了技術(shù)上的負(fù)擔(dān)。
           

           

          二、Java RMI簡介

                 Java RMI(Remote Method Invocation)是一種分布式對象技術(shù),它允許一個Java虛擬機(jī)(JVM)調(diào)用運行在位于網(wǎng)絡(luò)中另一個地方的JVM上的對象方法。這種技術(shù)使得在多臺機(jī)器上分布資源和處理負(fù)載的想法成為可能。

              分布式對象技術(shù)正在成為分布式計算環(huán)境發(fā)展的主流方向,可以說是伴隨著網(wǎng)絡(luò)發(fā)展起來的一種面向?qū)ο蠹夹g(shù),其技術(shù)特點是:[2]

          1)       主要針對異構(gòu)環(huán)境下的應(yīng)用互操作問題。

          2)       系統(tǒng)核心的對象管理將客戶/服務(wù)器模型與面向?qū)ο蠹夹g(shù)結(jié)合在一起。

          3)       提供面向?qū)ο蟮?span lang="EN-US">API

          4)       已經(jīng)成為建立集成框架和軟件部件標(biāo)準(zhǔn)的核心技術(shù)。

                 目前主要的分布式互操作標(biāo)準(zhǔn)有OMG組織的CORBA標(biāo)準(zhǔn),Sun公司的Java RMI標(biāo)準(zhǔn)和MicrosoftOLE/COM/DCOM標(biāo)準(zhǔn)。

           

           

          2.1 Java RMI的體系結(jié)構(gòu)

          RMI的基本體系結(jié)構(gòu),概括起來說,由三個抽象層組成:

          1.         存根/框架層(Stubs/Skeletons Layer)

          RMI為我們引入了兩種特殊類型的對象,稱為存根(Stub)和框架(Skeleton),它們組成了RMI的第一層。

          在遠(yuǎn)程通信的時候,要利用TCP/IP協(xié)議,做很多底層數(shù)據(jù)的打包傳輸。運用Java技術(shù),我們先要把數(shù)據(jù)或者對象轉(zhuǎn)換成字節(jié)流(byte stream),便于網(wǎng)絡(luò)傳輸,這個過程叫匯集(marshaling);當(dāng)收到遠(yuǎn)程傳來的字節(jié)流后,我們要把流信息轉(zhuǎn)換成對象或者數(shù)據(jù),這個過程叫解讀(unmarshaling),它與匯集剛好相反。

          StubSkeleton層位于實際應(yīng)用程序之下,建立在Proxy(代理)設(shè)計方案之上。Stub類的作用是遠(yuǎn)程服務(wù)器實現(xiàn)的代理的角色,Stub是客戶方對象;Skeleton類用于幫助對象通過RMI鏈接與Stub通信,它從鏈路中讀取方法調(diào)用的參數(shù),向遠(yuǎn)程服務(wù)實現(xiàn)對象進(jìn)行調(diào)用,接受返回值,然后再把返回值寫回到Stub

          2.         遠(yuǎn)程引用層(Remote Reference Layer)

          遠(yuǎn)程引用層定義和支持著RMI連接的調(diào)用語義(semantics)

          RMI進(jìn)行遠(yuǎn)程訪問要用到JRMP(Java Remote Method Protocol,Java遠(yuǎn)程方法協(xié)議)

          這一層提供專用于JRMPRemoteRef對象,它位于java.rmi.server包內(nèi),代表著遠(yuǎn)程對象的一個句柄。RemoteRef使用遠(yuǎn)程引用來執(zhí)行遠(yuǎn)程對象的一個遠(yuǎn)程方法調(diào)用。

          3.         傳輸層(Transport Layer)

          傳輸層在JVM之間建立基于流的網(wǎng)絡(luò)連接,并且負(fù)責(zé)設(shè)置和管理這些連接。這時候,RMI使用一種線級(wire-level)協(xié)議進(jìn)行基于TCP/IP的連接,該協(xié)議就是Java遠(yuǎn)程方法協(xié)議(JRMP,Java Remote Method Protocol)

          JDK版本1.2開始,JRMP不再需要Skeleton,而是使用reflection來建立與遠(yuǎn)程服務(wù)的連接。為了生成Stub,我們須用rmic

          當(dāng)前的RMI實現(xiàn)中,傳輸層建立在TCP/IP基礎(chǔ)上,設(shè)計用于在客戶和服務(wù)器之間建立一條連接。

          2.2 Java RMIRPCJMS的比較

          遠(yuǎn)程對象方法調(diào)用并不是新概念,遠(yuǎn)程過程調(diào)用(RPC)已經(jīng)使用很多年了。遠(yuǎn)程過程調(diào)用被設(shè)計為在應(yīng)用程序間通信的平臺中立的方式,它不理會操作系統(tǒng)之間以及語言之間的差異。即RPC支持多種語言,而RMI只支持Java寫的應(yīng)用程序。[1]

          另外RMI調(diào)用遠(yuǎn)程對象方法,允許方法返回Java對象以及基本數(shù)據(jù)類型。而RPC不支持對象的概念,傳送到RPC服務(wù)的消息由外部數(shù)據(jù)表示(External Data Representation, XDR)語言表示,這種語言抽象了字節(jié)序類和數(shù)據(jù)類型結(jié)構(gòu)之間的差異。只有由XDR定義的數(shù)據(jù)類型才能被傳遞,RPC不允許傳遞對象。可以說RMI是面向?qū)ο蠓绞降?/span>Java RPC

          Java消息服務(wù) ( Java Messaging Service, JMS )是一種允許應(yīng)用程序創(chuàng)建、發(fā)送、接受和讀取消息的Java APIJMSRMI的區(qū)別在于,采用JMS服務(wù),對象是在物理上被異步從網(wǎng)絡(luò)的某個JVM上直接移動到另一個JVM上。而RMI對象是綁定在本地JVM中,只有函數(shù)參數(shù)和返回值是通過網(wǎng)絡(luò)傳送的。

          2.3 Java RMICORBADCOM的比較

          CORBA90年代初有OMG組織提出的一個分布式互操作標(biāo)準(zhǔn),屬于語言中立的。而RMI直接把分布式對象模型嵌入到Java語言的內(nèi)部,使得Java程序員可以自然的編寫分布式程序,不必離開Java環(huán)境,或者涉及CORBA IDL以及JavaCORBA的類型轉(zhuǎn)換。然而RMI不遵守CORBA標(biāo)準(zhǔn),基本上是Java-to-Java技術(shù),難以實現(xiàn)與其他語言編寫的對象之間的互操作。[1]

          RMI CORBA 常被視為相互競爭的技術(shù),因為兩者都提供對遠(yuǎn)程分布式對象的透明訪問。但這兩種技術(shù)實際上是相互補充的,一者的長處正好可以彌補另一者的短處。RMI CORBA 的結(jié)合產(chǎn)生了 RMI-IIOPRMI-IIOP 是企業(yè)服務(wù)器端 Java 開發(fā)的基礎(chǔ)。

          1997 年,IBM Sun Microsystems啟動了一項旨在促進(jìn) Java 作為企業(yè)開發(fā)技術(shù)的發(fā)展的合作計劃。兩家公司特別著力于如何將 Java 用作服務(wù)器端語言,生成可以結(jié)合進(jìn)現(xiàn)有體系結(jié)構(gòu)的企業(yè)級代碼。所需要的就是一種遠(yuǎn)程傳輸技術(shù),它兼有 Java RMIRemote Method Invocation,遠(yuǎn)程方法調(diào)用)較少的資源占用量和更成熟的 CORBACommon Object Request Broker Architecture,公共對象請求代理體系結(jié)構(gòu))技術(shù)的健壯性。出于這一需要,RMI-IIOP問世了,它幫助將 Java 語言推向了目前服務(wù)器端企業(yè)開發(fā)的主流語言的領(lǐng)先地位

          DCOM是從COM改造過來的,COM這一技術(shù)部分是作為規(guī)范,定義了對象實現(xiàn)的二進(jìn)制標(biāo)準(zhǔn),用于單機(jī)上應(yīng)用之間的通信,對象實現(xiàn)與使用的語言無關(guān)。DCOMCOM的分布式擴(kuò)展,在DCE RPC之上構(gòu)造對象的遠(yuǎn)程過程調(diào)用層支持對遠(yuǎn)程對象的訪問。一個DCOM對象是支持一個或多個接口的組件。DCOM對象不支持對象ID,因此,客戶程序不能與某個特定的對象發(fā)生聯(lián)系。



          Author: orangelizq
          email: orangelizq@163.com

          歡迎大家訪問我的個人網(wǎng)站 萌萌的IT人
          posted on 2007-12-01 20:45 桔子汁 閱讀(2040) 評論(0)  編輯  收藏 所屬分類: J2SE
          主站蜘蛛池模板: 十堰市| 乌拉特前旗| 泸州市| 古浪县| 睢宁县| 长垣县| 贺州市| 蚌埠市| 阿图什市| 同心县| 保康县| 海宁市| 新和县| 成武县| 察隅县| 金湖县| 通江县| 达尔| 玉环县| 邹城市| 新巴尔虎左旗| 华亭县| 汽车| 沿河| 开鲁县| 庆云县| 东山县| 马关县| 安龙县| 湟中县| 台东县| 山丹县| 岚皋县| 萨嘎县| 富民县| 无棣县| 九台市| 明星| 民乐县| 洪江市| 阿鲁科尔沁旗|