Corba的原理和實(shí)現(xiàn)與IDL_第1頁
Corba的原理和實(shí)現(xiàn)與IDL_第2頁
Corba的原理和實(shí)現(xiàn)與IDL_第3頁
Corba的原理和實(shí)現(xiàn)與IDL_第4頁
Corba的原理和實(shí)現(xiàn)與IDL_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Corba的原理和實(shí)現(xiàn)編寫人:杜航航編寫時(shí)間:2011/1/18目錄引言31CORBA歷史32Corba的原理和特性42.1CORBA體系結(jié)構(gòu)43IDL(InterfaceDefinitionLanguage)53.1OMGIDL的語法規(guī)那么63.2OMGIDL詞法規(guī)那么63.3數(shù)據(jù)類型63.4常量73.5構(gòu)造數(shù)據(jù)類型73.6數(shù)組類型73.7模板〔template〕類型73.8接口〔interface〕84java環(huán)境下的Corba實(shí)現(xiàn)84.1環(huán)境84.2編碼84.2.1IDL接口定義和實(shí)現(xiàn)84.2.2接口實(shí)現(xiàn)類的編碼94.2.3效勞器端編碼94.2.4客戶端編碼104.3運(yùn)行10引言愛立信的很多產(chǎn)品都廣泛采用Corba協(xié)議作為系統(tǒng)集成的標(biāo)準(zhǔn)接口,比方OSS產(chǎn)品內(nèi)部是Corba,OSS和NBI以及NBI和綜合網(wǎng)管之間也是corba接口。因此研究一下Corba接口對以后的工作會(huì)有極大的幫助。1CORBA歷史CORBA是由OMG〔ObjectManagementGroup〕負(fù)責(zé)制定和維護(hù)的一組標(biāo)準(zhǔn)。OMG成立于1989年,是一個(gè)非營利的國際性軟件組織,主要致力于為分布式計(jì)算提供解決方案并制定標(biāo)準(zhǔn)。除CORBA外,OMG還制定了如UML(UnitedModelingLanguage,統(tǒng)一建模語言)、CWM等其他重要標(biāo)準(zhǔn)。OMG目前已有世界上760多個(gè)成員,東南大學(xué)是中國唯一的OMG成員。CORBA自1990提出并被OMG采納以來,已歷經(jīng)多個(gè)版本。分別稱為CORBA1、CORBA2和CORBA3。其中CORBA1是對CORBA1.x的統(tǒng)稱,CORBA2是對CORBA2.x的統(tǒng)稱。目前CORBA3標(biāo)準(zhǔn)還在制訂中,不久便可面世。下面是CORBA版本的更新歷史。CORBA1:CORBA1.090-12,提出CORBA框架CORBA1.191早期,定義了IDL及ORBInterface。CORBA1.292-93,修訂CORBA定義了ORB的一些根本特性,但是沒有定義而ORB間的通用協(xié)議。CORBA2主要解決這一問題。CORBA2:CORBA2.094-12,定義了GIOP和IIOPCORBA2.197-08CORBA2.298-02,增加了POA。CORBA2.398-12CORBA2.3.199-10,一些Changebars.CORBA2.400-10,具備CORBA3的雛形,包括:QoSSpecification,AsynchronousMessaging,MinimumCORBA,Real-TimeCORBA,CORBAComponents,NotificationServices,FirewallSpecification等。CORBA2.4.100-11CORBA2.4.201-02因此,可以說,CORBA1提出ORB和IDL等CORBA根本概念,CORBA2主要奉獻(xiàn)是IIOP,而在制訂中CORBA3那么集中于CORBAComponents技術(shù)及Real-time特性等。對CORBA的簡要介紹就到這里。關(guān)于OMG及CORBA的更多信息,可訪問OMG站點(diǎn):.2Corba的原理和特性CORBA〔CommonObjectRequestBrokerArchitecture〕是為了實(shí)現(xiàn)分布式計(jì)算而引入的。為了說明CORBA在分布計(jì)算上有何特點(diǎn),我們從它與其它幾種分布計(jì)算技術(shù)的比擬中進(jìn)行說明。與過去的面向過程的RPC(RemoteProcedureCall)不同,CORBA是基于面向?qū)ο蠹夹g(shù)的,它能解決遠(yuǎn)程對象之間的互操作問題。MicroSoft的DCOM(DistributedComponentObjectModel)也是解決這一問題的,但它基于Windows操作系統(tǒng),盡管到本書編寫時(shí),DCOM已有在其他操作系統(tǒng)如SunSolaris,DigitalUnix,IBMMVS上的實(shí)現(xiàn),但毫無疑問,只有在微軟的操作系統(tǒng)上才會(huì)實(shí)現(xiàn)得更好。而只有CORBA是真正跨平臺(tái)的,平臺(tái)獨(dú)立性正是CORBA的初衷之一。另一種做到平臺(tái)無關(guān)性的技術(shù)是JavaRMI〔RemoteMethodInvocation〕,但它只能用JAVA實(shí)現(xiàn)。CORBA與此不同,它通過一種叫IDL〔InterfaceDefinitionLanguage〕的接口定義語言,能做到語言無關(guān),也就是說,任何語言都能制作CORBA組件,而CORBA組件能在任何語言下使用。因此,可以這樣理解CORBA:CORBA一種異構(gòu)平臺(tái)下的語言無關(guān)的對象互操作模型。2.1CORBA體系結(jié)構(gòu)CORBA的體系結(jié)構(gòu)如下:圖2.1CORBA體系結(jié)構(gòu)CORBA上的效勞用IDL描述,IDL將被映射為某種程序設(shè)計(jì)語言如C++或Java,并且分成兩分,在客戶方叫IDLStub〔樁〕,在效勞器方叫IDLSkeleton〔骨架〕。兩者可以采用不同的語言。效勞器方在Skeleton的根底上編寫對象實(shí)現(xiàn)(ObjectImplementation),而客戶方要訪問效勞器對象上的方法,那么要通過客戶樁。而雙方又要通過而ORB〔ObjectRequestBroker,對象請求代理〕總線通信。與傳統(tǒng)的Client/Server模式〔我們稱為Two-tierclient/server〕不同,CORBA是一種multi-tierclient/serverarchitecture,更確切的說,是一種three-tierclient/server模式。雙重客戶/效勞器模式存在的問題是兩者耦合太緊,它們之間采用一種私有協(xié)議通信,效勞器的改變將影響到客戶方。多重客戶/效勞器與此不同,兩者之間的通信不能直接進(jìn)行,而需要通過中間的一種叫代理的方式進(jìn)行。在CORBA中這種代理就是ORB。通過它,客戶和效勞器不再關(guān)心通信問題,它們只需關(guān)心功能上的實(shí)現(xiàn)。從這個(gè)意義上講,CORBA是一種中間件(Middleware)技術(shù)。下面列出CORBA中的一些重要概念,或者說CORBA中的幾個(gè)重要名詞,有助于讀者了解CORBA的一些重要的方面。3IDL(InterfaceDefinitionLanguage)IDL,接口定義語言,是CORBA體系中的另一個(gè)重要概念。如果說ORB使CORBA做到平臺(tái)無關(guān),那么IDL,那么使CORBA做到語言無關(guān)。正像其名字中顯示的那樣,IDL僅僅定義接口,而不定義實(shí)現(xiàn),類似于C中的頭文件。實(shí)際上它不是真正的編程語言。要用它編寫應(yīng)用,需要將它映射它相應(yīng)的程序設(shè)計(jì)語言上去,如映射到C++或JAVA上去。映射后的代碼叫ClientStubCode和ServerSkeletonCode。IDL的好處是使高層設(shè)計(jì)人員不必考慮實(shí)現(xiàn)細(xì)節(jié)而只需關(guān)心功能描述。IDL可以說是描述性語言。設(shè)計(jì)IDL的過程也是設(shè)計(jì)對象模型的過程。它是編寫CORBA應(yīng)用的第一步,在整個(gè)軟件設(shè)計(jì)過程中至關(guān)重要。IDL的語法很像C++,當(dāng)然也像Java。很難想像一個(gè)程序設(shè)計(jì)人員是不懂C或Java的,所以,幾乎所有的程序設(shè)計(jì)人員都能迅速理解IDL。而這正是IDL設(shè)計(jì)者所希望的。IDL(InterfaceDefinitionLanguage)即接口定義語言,是CORBA標(biāo)準(zhǔn)的一局部,是跨平臺(tái)開發(fā)的根底。IDL提供一套通用的數(shù)據(jù)類型,并以這些數(shù)據(jù)類型來定義更為復(fù)雜的數(shù)據(jù)類型??勺兓疘DL根本類型整數(shù)類型OMGIDL摒棄int類型在不同平臺(tái)上取值范圍不同帶來的多義性的問題。常數(shù)定義常數(shù)可以是整數(shù)、字符、浮點(diǎn)數(shù)、字符串、Boolean、octet或枚舉型,不能是any類型或用戶定義的類型。OMGIDL數(shù)組類型IDLarray和sequence,可以輕易地被映射到實(shí)現(xiàn)語言中。序列可以包含所有類型的元素,不管是根本類型還是用戶定義的類型。IDL(InterfaceDefinitionLanguage)即接口定義語言,是CORBA標(biāo)準(zhǔn)的一局部,是跨平臺(tái)開發(fā)的根底。IDL提供一套通用的數(shù)據(jù)類型,并以這些數(shù)據(jù)類型來定義更為復(fù)雜的數(shù)據(jù)類型。可變化IDL根本類型整數(shù)類型OMGIDL摒棄int類型在不同平臺(tái)上取值范圍不同帶來的多義性的問題。常數(shù)定義常數(shù)可以是整數(shù)、字符、浮點(diǎn)數(shù)、字符串、Boolean、octet或枚舉型,不能是any類型或用戶定義的類型。OMGIDL數(shù)組類型IDLarray和sequence,可以輕易地被映射到實(shí)現(xiàn)語言中。序列可以包含所有類型的元素,不管是根本類型還是用戶定義的類型。3.1OMGIDL的語法規(guī)那么moduleCompute{typedefdoubleradius;typedeflongtimes;interfacePI{doublegetResult(inradiusaRadius,intimestime);}}上述接口定義文件主要用于客戶端向效勞對象提出請求:計(jì)算π值。因此,模塊中定義了一個(gè)方法getResult(),以圓的直徑〔aRadius〕和迭代次數(shù)〔times〕作為該方法的輸入?yún)?shù)。3.2OMGIDL詞法規(guī)那么OMGIDL采用ASCII字符集構(gòu)成接口定義的所有標(biāo)識(shí)符。標(biāo)識(shí)符由字母、數(shù)字和下劃線的任意組合構(gòu)成,但第一個(gè)字符必須是ASCII字母。IDL認(rèn)為大寫字母和小寫字母具有相同的含義,例如anExample和AnExample是相同的。與C++和Java類似,采用以“/*〞開始,以“*/〞結(jié)束來注釋一段代碼,以“//〞開始注釋從“//〞開始直至行尾的所有內(nèi)容。另外,IDL保存了47個(gè)關(guān)鍵字,程序設(shè)計(jì)人員不能將關(guān)鍵字用作變量或方法名。需要注意的是關(guān)鍵字的大小寫,例如:typedefdoublecontext;//錯(cuò)誤:定義的變量context是關(guān)鍵字typedefdoubleCONTEXT;//錯(cuò)誤:CONTEXT與關(guān)鍵字context沖突3.3數(shù)據(jù)類型〔1〕根本數(shù)據(jù)類型:OMGIDL根本數(shù)據(jù)類型包括short、long和相應(yīng)的無符號(hào)〔unsigned〕類型,表示的字長分別為16、32位?!?〕浮點(diǎn)數(shù)類型:OMGIDL浮點(diǎn)數(shù)類型包括float、double和longdouble類型。其中float表示單精度浮點(diǎn)數(shù),double表示雙精度浮點(diǎn)數(shù),longdouble表示擴(kuò)展的雙精度浮點(diǎn)數(shù)?!?〕字符和超大字符類型:OMGIDL定義字符類型char為面向字節(jié)的碼集中編碼的單字節(jié)字符;定義類型wchar為從任意字符集中編碼的超大字符?!?〕邏輯類型:用boolean關(guān)鍵字定義的一個(gè)變量,取值只有true和false?!?〕八進(jìn)制類型:用octet關(guān)鍵字定義,在網(wǎng)絡(luò)傳輸過程中不進(jìn)行上下位轉(zhuǎn)換的位元序列?!?〕any數(shù)據(jù)類型:引入該類型用于表示OMGIDL中任意數(shù)據(jù)類型。3.4常量OMGIDL用const關(guān)鍵字聲明一個(gè)常量,用于模塊〔module〕或接口〔interface〕中定義保持不變的量,如:constdoublePI=3.1415926;在IDL中,可以定義long、unsignedlong、unsignedshort、char、boolean、float、double、string類型的常量。3.5構(gòu)造數(shù)據(jù)類型類似于C和C++的語法規(guī)那么,OMGIDL中構(gòu)造數(shù)據(jù)類型包括結(jié)構(gòu)、聯(lián)合、枚舉等形式。如下例:〔1〕結(jié)構(gòu)類型:typedeflongGoodsNumber;struct{GoodsNumbernumber;stringname;floatprice;}〔2〕聯(lián)合類型:unionstockInswitch(short){case1:stocker:long;case2:goodsName1:string;case3:goodsName2:string;}〔3〕枚舉類型:enumGoodsStatus{GOODS_SALED,GOODS_INSTOCK};3.6數(shù)組類型OMGIDL的數(shù)組類型提供了多維定長、統(tǒng)一數(shù)據(jù)格式的數(shù)據(jù)存儲(chǔ)方式——數(shù)組。每一維的長度必須在定義時(shí)給定,所有數(shù)據(jù)單元必須存儲(chǔ)相同類型的元素。如下例定義一個(gè)長度為20×100的整數(shù)數(shù)組:typedeflongaDimension[20][100];3.7模板〔template〕類型OMGIDL提供兩種類型的模板:(1)序列〔sequence〕類型:用該方法定義長度可變的任意數(shù)值類型的存儲(chǔ)序列,通常在定義時(shí)可以指定長度,也可以不指定,如:typedefsequence<long,80>aSequence;//長度定義為80typedefsequence<long>anotherSequence;//長度不定(2)字符串〔string〕序列:同樣對于字符串序列類型,也有兩種定義方式:typedefstring<80>aName;//長度定義為80typedefstringanotherName;//長度不定3.8接口〔interface〕在前幾講中,均提到了CORBA接口,接口作為效勞對象功能的詳細(xì)描述,封裝了效勞對象提供效勞方法的全部信息,客戶對象利用該接口獲取效勞對象的屬性、訪問效勞對象中的方法。接口用關(guān)鍵字interface聲明,其中包含的屬性和方法對所有提出效勞請求的客戶對象是公開的,如下例:interfaceJobManager{readonlyattributestringFirstName;attributestringstatus;stringQueryJo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論