chapter3-面向?qū)ο蟮姆植加?jì)算環(huán)境3CORBA_第1頁
chapter3-面向?qū)ο蟮姆植加?jì)算環(huán)境3CORBA_第2頁
chapter3-面向?qū)ο蟮姆植加?jì)算環(huán)境3CORBA_第3頁
chapter3-面向?qū)ο蟮姆植加?jì)算環(huán)境3CORBA_第4頁
chapter3-面向?qū)ο蟮姆植加?jì)算環(huán)境3CORBA_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

分布計(jì)算環(huán)境鄒華北京郵電大學(xué)網(wǎng)絡(luò)技術(shù)研究院2015.9

Chapter3

面向?qū)ο蟮姆植加?jì)算環(huán)境分布式系統(tǒng)中的面向?qū)ο蠹夹g(shù)開放式分布處理ODPCORBA技術(shù):CommonObjectRequestBrokerArchitecture主要內(nèi)容緒論

OMG組織制定的一個(gè)工業(yè)規(guī)范,是一個(gè)體系結(jié)構(gòu)和一組規(guī)范。目的:在分布式環(huán)境下實(shí)現(xiàn)應(yīng)用的集成,使基于對象的軟件成員,在分布的、異構(gòu)的環(huán)境下可重用、可移植、可互操作。OMG的理念:不存在統(tǒng)一的硬件平臺(tái)、不存在統(tǒng)一的操作系統(tǒng)、編程語言、網(wǎng)絡(luò)協(xié)議、應(yīng)用模式,必須在互操作上達(dá)成一致。方法:提供一個(gè)框架,如果符合這一框架,就可以在主要的硬件平臺(tái)和操作系統(tǒng)上建立一個(gè)異質(zhì)的分布式應(yīng)用。CORBA結(jié)合了計(jì)算機(jī)工業(yè)中的兩個(gè)重要趨勢:面向?qū)ο筌浖_發(fā)和客戶機(jī)/服務(wù)器計(jì)算。主要內(nèi)容

綜述基于CORBA的軟件開發(fā)基本過程RM-ODP與CORBA總結(jié)綜述

對象管理體系結(jié)構(gòu)OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務(wù)ORB之間的互操作綜述

對象管理體系結(jié)構(gòu)OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務(wù)ORB之間的互操作對象管理體系結(jié)構(gòu)OMA

定義異構(gòu)環(huán)境下對象透明地發(fā)送請求和接收響應(yīng)的基本機(jī)制。支持客戶程序與對象實(shí)現(xiàn)在一個(gè)分布式環(huán)境中通信?;诜植际綄ο蟮乃袘?yīng)用程序都可能用到的通用服務(wù)的接口可用于大多數(shù)應(yīng)用領(lǐng)域的面向終端用戶的工具接口水平公用設(shè)施:領(lǐng)域間可共享垂直公用設(shè)施:面向某個(gè)領(lǐng)域由CORBA支持的頂層業(yè)務(wù)對象和應(yīng)用系統(tǒng),是針對特定應(yīng)用開發(fā)的接口OMACORBA不只定義了面向?qū)ο蟮倪h(yuǎn)程調(diào)用機(jī)制,它還定義了不同抽象層次的框架。OSORBServicesFacilitiesObjectObjectObject核心ORB提供了網(wǎng)絡(luò)編程復(fù)雜性的抽象以面向?qū)ο蟮姆绞教峁┝说湫偷南到y(tǒng)級功能。提供了領(lǐng)域間共享或面向特定領(lǐng)域的服務(wù)綜述

對象管理體系結(jié)構(gòu)OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務(wù)ORB之間的互操作OMG接口定義語言IDL

僅定義接口,不定義實(shí)現(xiàn)分隔“對象作什麼(WHAT)”與“如何做(HOW)”強(qiáng)類型、面向?qū)ο?、語言中立的說明(描述)型語言ANSIC++的子集支持多繼承支持到多種語言的映射ORBCC++AdaIDLIDLIDLIDLIDLIDLClientSideObjectImplementationSideCOBOLCAdaC++SmalltalkJAVAIDLIDLIDLIDLIDLIDLORBCOBOLSmalltalkJAVARoleofCORBAIDLIDL

&Stub

一個(gè)實(shí)例(1)ModuleBANK{

InterfaceBANKAccount{

enumaccount_kind{checking,saving};

exceptionaccount_not_available{string,reason};

exceptionincorrect_PIN{};

readonly

attributefloatbalance;

attribueaccount_kindkind_of_account;

voidaccess(instringaccount,instringpin)

raises(accout_not_available,incorrect_pin);一個(gè)實(shí)例(2)voiddeposit(in

floatf,out

floatnew_balance)

raises(account_not_available);

voidwithdraw(infloatf,outfloatnew_balance)

raises(account_not_available);

onewayop1(ininti); }}IDL到編程語言的映射定義相應(yīng)編程語言所用到的數(shù)據(jù)類型的定義,如:

OMGIDL Java short short longlong longlong octet byte……目前有:Ada、C、C++、Java、Lisp、COBOL、Python、Smalltalk。IDL的使用綜述

對象管理體系結(jié)構(gòu)OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務(wù)ORB之間的互操作對象請求代理ORB

對象請求代理ORB(ObjectRequestBroker):定義異構(gòu)環(huán)境下對象透明地發(fā)送請求和接收響應(yīng)的基本機(jī)制。ORB為客戶隱藏:對象位置對象實(shí)現(xiàn)方式對象執(zhí)行狀態(tài)對象通信機(jī)制ORB并不需要作為一個(gè)單獨(dú)的組件來實(shí)現(xiàn)。它定義了一系列的接口,任何一種支持了該接口的實(shí)現(xiàn)方式都是可行的。ORB體系結(jié)構(gòu)

主要內(nèi)容

接口對象引用客戶和對象實(shí)現(xiàn)ORB核心接口庫和實(shí)現(xiàn)庫動(dòng)態(tài)調(diào)用和靜態(tài)調(diào)用對象適配器主要內(nèi)容

接口對象引用客戶和對象實(shí)現(xiàn)ORB核心接口庫和實(shí)現(xiàn)庫動(dòng)態(tài)調(diào)用和靜態(tài)調(diào)用對象適配器接口接口:客戶程序與對象實(shí)現(xiàn)之間的界面,描述了客戶可訪問的對象操作的一個(gè)集合;完全獨(dú)立于對象所處的位置、實(shí)現(xiàn)對象的程序設(shè)計(jì)語言以及對象接口中未反映的其他特性;客戶程序只能通過對象的接口定義掌握對象的邏輯結(jié)構(gòu),并通過發(fā)送請求來影響對象的行為與狀態(tài)對象接口采用接口定義語言IDL定義;ORB的各種接口主要內(nèi)容

接口對象引用客戶和對象實(shí)現(xiàn)ORB核心接口庫和實(shí)現(xiàn)庫動(dòng)態(tài)調(diào)用和靜態(tài)調(diào)用對象適配器對象引用對象引用-臨時(shí)的不透明的句柄,標(biāo)識(shí)ORB中的一個(gè)對象實(shí)例。它用于定位響應(yīng)請求的對象實(shí)現(xiàn)??苫ゲ僮鞯膶ο笠肐OR:在異構(gòu)ORB間傳遞OR。對象引用的獲取從命名服務(wù)或交易服務(wù)中獲取使用工廠對象使用對象引用字符串。轉(zhuǎn)換為字符串,在文件中、email等中傳遞。Object_to_string()和string_to_object();特定ORB實(shí)現(xiàn)的方法獲取初始引用,如:CORBA::ORB::resolve_initial_references()作為方法調(diào)用的返回值主要內(nèi)容

接口對象引用客戶和對象實(shí)現(xiàn)ORB核心接口庫和實(shí)現(xiàn)庫動(dòng)態(tài)調(diào)用和靜態(tài)調(diào)用對象適配器客戶和對象實(shí)現(xiàn)客戶(Client)客戶訪問對象的對象引用,并且調(diào)用對象上的操作客戶只知道對象的接口,通過調(diào)用感受對象的行為對象實(shí)現(xiàn)(ObjectImplementation)通過為對象實(shí)例定義數(shù)據(jù)和為對象方法定義代碼提供對象的語義;對象可以具有不同的實(shí)現(xiàn)方式;對象實(shí)現(xiàn)不依賴于ORB或者客戶調(diào)用對象的方式;一個(gè)對象的實(shí)現(xiàn)可以是其它對象的客戶;對象實(shí)現(xiàn)的實(shí)例Servant:譯為伺服對象或者仆從服務(wù)器服務(wù)器是一個(gè)(或一組)組件,能為其它組件提供某種服務(wù)。即,如果某個(gè)組件創(chuàng)建了一個(gè)對象,并能被其它組件通過對象引用來訪問,則擁有對象的組件就是該對象的服務(wù)器,其它組件對這個(gè)對象的請求操作都將由創(chuàng)建該組件的服務(wù)器來執(zhí)行。例如一個(gè)進(jìn)程;客戶客戶服務(wù)器服務(wù)器對象實(shí)現(xiàn)的實(shí)例:Servant主要內(nèi)容

接口對象引用客戶和對象實(shí)現(xiàn)ORB核心接口庫和實(shí)現(xiàn)庫動(dòng)態(tài)調(diào)用和靜態(tài)調(diào)用對象適配器ORB核心ORB核心提供的接口ORB內(nèi)核提供的服務(wù)對象接口,同時(shí)為客戶方和對象實(shí)現(xiàn)方所見,可直接為應(yīng)用程序所使用:對象引用操作:提供對象引用的串化和反串化及對象引用復(fù)制、刪除、比較及探測對象引用存在與否等操作。如object_to_string();release();ORB和對象適配器初始化:使應(yīng)用得到指向ORB的對象引用。如ORB_init();獲取初始對象引用:ORB規(guī)定了客戶對象在ORB初始時(shí)獲取初始對象引用的方法,如resolve_initial_references();主要內(nèi)容

接口對象引用客戶和對象實(shí)現(xiàn)ORB核心接口庫和實(shí)現(xiàn)庫動(dòng)態(tài)調(diào)用和靜態(tài)調(diào)用對象適配器接口庫和實(shí)現(xiàn)庫主要功能接口庫(IFR,InterFaceRepository)ORB的一個(gè)組件,提供服務(wù),用于接口定義的存儲(chǔ)、查找和管理;CORBA對其接口進(jìn)行了定義;實(shí)現(xiàn)庫(IR,ImplemetationRepository)ORB的一個(gè)組件,用于存儲(chǔ)對象實(shí)現(xiàn)的相關(guān)信息,如;如何定位對象實(shí)現(xiàn),如何激活對象實(shí)現(xiàn),以及其它的與ORB和操作系統(tǒng)相關(guān)的信息;OMG沒有對其進(jìn)行詳細(xì)規(guī)范,與具體實(shí)現(xiàn)相關(guān);如OrbixWeb:

putit-hHostNameServerName-jServerAbsoluteClassName主要內(nèi)容

接口對象引用客戶和對象實(shí)現(xiàn)ORB核心接口庫和實(shí)現(xiàn)庫動(dòng)態(tài)調(diào)用和靜態(tài)調(diào)用對象適配器靜態(tài)和動(dòng)態(tài)調(diào)用從IDL到存根和骨架靜態(tài)調(diào)用:存根和骨架OMGIDL編譯器根據(jù)接口定義來產(chǎn)生客戶方的存根和服務(wù)方的骨架。靜態(tài)IDL存根(IDLstubs):

編譯時(shí)確定的的靜態(tài)接口,位于客戶對象本地,對客戶來說相當(dāng)于遠(yuǎn)程的執(zhí)行對象。由存根向ORB提交請求。負(fù)責(zé)對請求參數(shù)的封裝和發(fā)送,以及對返回結(jié)果的接收和解封裝,并以適當(dāng)?shù)母袷竭M(jìn)行通信傳輸。靜態(tài)IDL骨架(IDLskeletons):在本地調(diào)用執(zhí)行對象服務(wù),并與ORB通信。針對執(zhí)行對象來說,代表了遠(yuǎn)程客戶。骨架接收經(jīng)ORB來的請求,將請求參數(shù)解封裝,識(shí)別客戶所請求的服務(wù),(向上)調(diào)用服務(wù)器中的對象實(shí)現(xiàn),把執(zhí)行結(jié)果封裝,并將結(jié)果返回給客戶程序。主要內(nèi)容

接口對象引用客戶和對象實(shí)現(xiàn)ORB核心接口庫和實(shí)現(xiàn)庫動(dòng)態(tài)調(diào)用和靜態(tài)調(diào)用對象適配器對象適配器CORBA對象和伺服對象CORBA對象:可看作是一個(gè)具有對象標(biāo)識(shí)、對象接口及對象實(shí)現(xiàn)的抽象實(shí)體。從客戶程序的角度看,IOR中包含了對象的標(biāo)識(shí)、接口類型及其他信息以查找對象實(shí)現(xiàn)。伺服對象(Servant):指具體程序設(shè)計(jì)語言的對象實(shí)例或?qū)嶓w,通常存在于一個(gè)服務(wù)程序進(jìn)程之中。對象適配器(ObjectAdaptor):一個(gè)重要的ORB組件,它負(fù)責(zé)將抽象的CORBA對象映射到具體的伺服對象。主要功能服務(wù)器利用對象實(shí)現(xiàn)創(chuàng)建伺服對象,然后將這些服務(wù)端本地的對象實(shí)例轉(zhuǎn)換為可供遠(yuǎn)程使用的CORBA對象:給該本地對象實(shí)例關(guān)聯(lián)了對象標(biāo)識(shí)、對象引用;對象引用=宿主服務(wù)器地址端口+POA標(biāo)識(shí)+ObjectID例:CORBA Hello_implhelloImpl=newHello_impl(); Hellohello=helloImpl._this(orb);對象適配器是管理服務(wù)端伺服對象、對象標(biāo)識(shí)、對象引用及它們之間關(guān)聯(lián)的主要工具。它負(fù)責(zé)決定在收到客戶請求時(shí)應(yīng)調(diào)用哪個(gè)伺服對象,然后調(diào)用該伺服對象上的合適操作;例:POA:PortableObjectAdapterPOA概貌P101存儲(chǔ)允許ORB的定位和激活對象實(shí)現(xiàn)的信息,如Server支持的類、實(shí)例化對象、這些對象的ID等運(yùn)行時(shí)信息。對象引用的生成、維護(hù),方法調(diào)用、對象的激活與終止、對象定位等功能。BOA:BasicObjectAdapterPOA:PortableObjectAdapterDII在Server方的對應(yīng)。DSI從進(jìn)入的消息找出調(diào)用的目標(biāo)對象及相應(yīng)的方法,并提供運(yùn)行時(shí)的連接機(jī)制。允許動(dòng)態(tài)地構(gòu)造對象調(diào)用。客戶機(jī)可推遲到運(yùn)行時(shí)選擇對象的實(shí)現(xiàn)接口和操作。靜態(tài)IDL存根在Server側(cè)的對應(yīng)。由IDL編譯程序自動(dòng)生成。服務(wù)的靜態(tài)接口。由IDL編譯程序自動(dòng)生成。在客戶端,如同一本地調(diào)用,是遠(yuǎn)程SERVER對象的代理。訪問某個(gè)對象實(shí)現(xiàn)所提供的服務(wù)的程序。根據(jù)其接口了解其邏輯結(jié)構(gòu),并通過調(diào)用掌握對象的行為所定義的IDL接口的真正實(shí)現(xiàn)??捎谜Z言:C,C++,Java,Smalltalk,Ada…是ORB最關(guān)鍵的部分,負(fù)責(zé)請求的通信設(shè)施:對象的定位編組與解組啟動(dòng)初始服務(wù)屏蔽底層網(wǎng)絡(luò)細(xì)節(jié)提供接口庫和其它的APIORB體系結(jié)構(gòu)回顧

對象的IDL接口定義的存儲(chǔ)、分布和管理??蛻魧ο罂梢栽谶\(yùn)行時(shí)查閱接口倉庫的內(nèi)容,獲得對象實(shí)現(xiàn)的IDL接口信息,從而向?qū)ο髮?shí)現(xiàn)發(fā)出請求。當(dāng)客戶程序要調(diào)用遠(yuǎn)程對象上的方法時(shí),首先要得到這個(gè)遠(yuǎn)程對象的引用,之后就可以像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程對象的方法。當(dāng)發(fā)出一個(gè)調(diào)用時(shí),實(shí)際上ORB會(huì)截取這個(gè)調(diào)用(通過客戶Stub完成),因?yàn)榭蛻艉头?wù)器可能在不同的網(wǎng)絡(luò)、不同的操作系統(tǒng)上甚至用不同的語言實(shí)現(xiàn),ORB還要負(fù)責(zé)將調(diào)用的名字、參數(shù)等編碼成標(biāo)準(zhǔn)的方式(稱Marshaling)通過網(wǎng)絡(luò)傳輸?shù)椒?wù)器方(有時(shí)在同一臺(tái)機(jī)器上也如此),并通過將參數(shù)Unmarshaling的過程,傳到正確的對象上(這整個(gè)過程叫重定向,Redirecting),服務(wù)器對象完成處理后,ORB通過同樣的Marshaling/Unmarshaling方式將結(jié)果返回給客戶。ORB內(nèi)核提供的服務(wù)對象接口,同時(shí)為客戶方和對象實(shí)現(xiàn)方所見,可直接為應(yīng)用程序所使用。綜述

對象管理體系結(jié)構(gòu)OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務(wù)ORB之間的互操作CORBA服務(wù)公共對象服務(wù):系統(tǒng)級的對象框架。擴(kuò)展了基本的CORBA體系結(jié)構(gòu)。CORBA服務(wù)代表了一組預(yù)先實(shí)現(xiàn)的,軟件開發(fā)商通常需要的分布式對象。CORBA服務(wù)清單例命名服務(wù)(NamingService):為客戶程序通過名字查找對象實(shí)現(xiàn)提供支持。事件服務(wù)(EventService):使對象間的通信能夠以松耦合的方式進(jìn)行。生命周期服務(wù)(LifeCycleService):為對象的創(chuàng)建、刪除、拷貝和移動(dòng)提供支持。持久狀態(tài)服務(wù)(PersistentStateService):為對象持久狀態(tài)的維護(hù)和管理提供支持。事務(wù)服務(wù)(TransactionService):為事務(wù)處理提供支持。并發(fā)服務(wù)(ConcurrencyService):為多個(gè)客戶協(xié)調(diào)一致地同時(shí)訪問共享資源提供支持。CORBA服務(wù)清單例(2)關(guān)系服務(wù)(RelationshipService):為實(shí)體和它們之間地關(guān)系的外在表示提供支持。外部服務(wù)(ExternalizationService):為對象的外部化(externalizing)和內(nèi)在化(internalizing)提供支持.查詢服務(wù)(QueryService)::為客戶在對象集合中查找滿足某種查詢標(biāo)準(zhǔn)的對象提供支持。許可證服務(wù)(LicensingService):為軟件許可證的管理提供支持。屬性服務(wù)(PropertyService):為對象屬性的定義和操縱提供支持。時(shí)間服務(wù)(TimeService):為客戶獲取當(dāng)前時(shí)間以及可能的誤差提供支持。安全服務(wù)(SecurityService):為基于CORBA的整個(gè)系統(tǒng)的安全提供支持。CORBA服務(wù)清單例(3)交易對象服務(wù)(TradingObjectService):為提供和查找具有特定屬性的對象提供支。集合服務(wù)(CollectionsService):為創(chuàng)建以及操縱各種常用集合類型提供支持。通知服務(wù)(NotificationService):對事件服務(wù)的擴(kuò)展,支持事件的類型定義、過濾條件的設(shè)定、服務(wù)質(zhì)量的設(shè)定等。增強(qiáng)的時(shí)間視圖服務(wù)(EnhancedViewofTimeService

):為一致地使用具有各種自身特點(diǎn)的時(shí)鐘提供支持。

命名服務(wù)目的:為通過名字查找對象提供支持。方法:定義了一系列的接口,使客戶可以管理對象的命名空間、在命名空間中查找對象?;靖拍睿好舷挛腘amingcontext:一種命名空間,在該范圍內(nèi),所有名字是唯一的。名字Name:一個(gè)有序的由組件(component)構(gòu)成的序列,也叫對象的復(fù)合名。在這個(gè)序列中,除最后一個(gè)組件以外,其它都是一個(gè)命名空間的名字。最后的組件是這個(gè)對象的簡單名。名字綁定Namebinding:名字到對象的關(guān)連。支持分層命名的CORBA對象命名服務(wù)的使用使用NamingContext接口提供的API,可以:將一個(gè)對象與一個(gè)名字綁定:voidbind(inNamen,inObjectobj);在一個(gè)命名空間中,刪除一個(gè)對象綁定:voidunbind(inNamen);通過名字查找一個(gè)對象:Objectresolve(inNamen);創(chuàng)建一個(gè)命名空間:NamingContextbind_new_context(inNamen);等等.使用BindingIterator接口,可以在一個(gè)給定的命名空間中漫游(Navigate)。CORBA服務(wù)小結(jié)OMG為每個(gè)服務(wù)定義了標(biāo)準(zhǔn)API通過IDL定義實(shí)現(xiàn)廠商提供支持這些API的具體產(chǎn)品,它們的實(shí)現(xiàn)方法可能不同,但接口是一致的用戶購買、部署需要的服務(wù)產(chǎn)品買源代碼或者可執(zhí)行代碼安裝并在需要的時(shí)候?qū)嵗诔绦蛑惺褂脮r(shí),首先獲取服務(wù)中相應(yīng)對象的IOR,然后調(diào)用它的操作即可。綜述

對象管理體系結(jié)構(gòu)OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務(wù)ORB之間的互操作ORB的互操作可互操作性(interoperability)是指在一個(gè)系統(tǒng)中用不同工具或不同供應(yīng)商的產(chǎn)品開發(fā)出來的兩個(gè)組件是否可以協(xié)調(diào)工作。ORB之間的互操作與基于DCE、DCOM等的系統(tǒng)的互操作GIOP、IIOP和ESIOP為了不同的ORB間可以互操作,有必要制訂傳輸請求的統(tǒng)一標(biāo)準(zhǔn),規(guī)定傳輸?shù)讓拥臄?shù)據(jù)表示方法與消息格式,GIOP:通用ORB間協(xié)議,定義了傳送語法和消息格式的標(biāo)準(zhǔn)集,能夠在任何面向連接的傳輸上實(shí)現(xiàn)ORB間的互操作性。IIOP:InternetORB間協(xié)議,定義了如何在TCP/IP傳輸上構(gòu)建GIOP。GIOP和IIOP之間的關(guān)系類似于接口定義及其實(shí)現(xiàn)。ESIOP:能夠針對已使用特定分布式計(jì)算基礎(chǔ)結(jié)構(gòu)的特殊情況(例如DCE-CIOP)構(gòu)建ORB。GIOP的基本組成部分

TheCommonDataRepresentation(CDR)definition:通用數(shù)據(jù)表示定義,它實(shí)際上是IDL數(shù)據(jù)類型在網(wǎng)上傳輸時(shí)的編碼方案。它對所有IDL數(shù)據(jù)類型的映射都作了規(guī)定。GIOPMessageFormats:規(guī)定了Client和Server兩個(gè)角色之間要傳輸?shù)南⒏袷健?種消息格式:Request、Reply、CancelRequest、LocateRequest、LocateReply、CloseConnection、MessageError、Fragment。GIOPTransportAssumptions:主要規(guī)定在任何面向連接的網(wǎng)絡(luò)傳輸層上的一些操作規(guī)則。如:傳輸應(yīng)該是面向連接的;傳輸應(yīng)是可靠的;在非正常情況下斷開連接時(shí),傳輸應(yīng)能提供某種通知機(jī)制等;綜述

對象管理體系結(jié)構(gòu)OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務(wù)ORB之間的互操作主要內(nèi)容

綜述基于CORBA的軟件開發(fā)基本過程RM-ODP與CORBA總結(jié)ORBacus簡介什么是ORBacus:

ORBacus是IONA公司的ORB產(chǎn)品。ORBacus小巧但功能齊全,尤其是性能很高,提供實(shí)時(shí)CORBA特性,非常適合于電信領(lǐng)域。另外,ORBacus提供源代碼,這對我們進(jìn)一步揭開CORBAORB內(nèi)幕、提高程序性能、解決棘手問題都有好處。同時(shí)它還是免費(fèi)的,當(dāng)然商業(yè)用途例外。支持Java、C++本節(jié)使用Java

環(huán)境安裝本節(jié)使用ORBacus4.0.5ORBacus不需要安裝過程,只需將它拷貝到某個(gè)目錄下就行。這里假設(shè)在C:\ORBacus目錄下。ORBacus的bin\目錄,存放可執(zhí)行文件,如jidl.exe(ORBacus的IDL編譯器)。其lib\目錄,存放ORBacus的庫文件,以壓縮包(.jar)的形式存在為CLASSPATH增加:C:\Orbacus\lib\ob.jar;.\;.\classes為PATH增加:C:\Orbacus\bin需要安裝Java環(huán)境,如JDK1.3等。示例來源ORBacus附帶的一個(gè)例子:src\ob\demo\hello需要使用的文件:Hello.idl idl定義文件Hello_Impl.java 對象實(shí)現(xiàn)Client.java 客戶程序Server.java 服務(wù)器程序拷貝hello目錄到某一個(gè)工作目錄,如D:\mywork基于ORB的軟件開發(fā)過程回顧第一步:定義IDLHello.idl定義如下:interfaceHello{voidsay_hello();};第二步:編譯IDL為JavaStub和

Skeleton打開DOS窗口,轉(zhuǎn)到D:\mywork\hello目錄下鍵入:jidl--packagehelloHello.idl編譯后生成以下幾個(gè)文件:Client側(cè):HelloOperations.java:定義publicinterfaceHelloOperationsHello.java:定義接口InterfaceHello_HelloStub.java:樁代碼,定義了class_HelloStub HelloHelper.java:定義publicclassHelloHelper對象Server側(cè):HelloOperations.java:定義publicinterfaceHelloOperationsHelloHolder.java:定義publicfinalclassHelloHolderHelloPOA.java:定義類abstractpublicclassHelloPOA第三步:編寫對象實(shí)現(xiàn)對象實(shí)現(xiàn)代碼所在的類名字可由程序員自由掌握,只要不與IDL編譯器自動(dòng)產(chǎn)生的Java類產(chǎn)生名字沖突即可??蛻舫绦蛞矡o須了解對象實(shí)現(xiàn)是由哪一個(gè)Java類完成的。CORBA應(yīng)用程序的對象實(shí)現(xiàn)最常用、最簡單的實(shí)現(xiàn)方式是使用繼承,即直接繼承由IDL編譯器生成的xxxPOA類。當(dāng)對象實(shí)現(xiàn)需要利用繼承機(jī)制達(dá)到其他目的時(shí),就必須改用CORBA對象實(shí)現(xiàn)的另一種實(shí)現(xiàn)方式──紐帶機(jī)制(tiemechanism)。我們的例子程序采用簡單的繼承方式編寫對象實(shí)現(xiàn),即繼承xxxPOA類。HelloPOA類HelloPOA.java是Hello對象的服務(wù)端框架代碼。xxxPOA類的主要功能:解包in類型的參數(shù)并將參數(shù)傳遞給對象實(shí)現(xiàn)。打包返回值與所有out類型的參數(shù)。打包(marshal):指將特定程序設(shè)計(jì)語言描述的數(shù)據(jù)類型轉(zhuǎn)換為CORBA的IIOP流格式。解包(unmarshal):從IIOP流格式轉(zhuǎn)換為依賴于具體程序設(shè)計(jì)語言的數(shù)據(jù)結(jié)構(gòu)。編寫對象實(shí)現(xiàn)的最簡單途徑是繼承這些POA類,即把它們作為對象實(shí)現(xiàn)的基類。對象實(shí)現(xiàn)類packagehello;publicclassHello_implextendsHelloPOA{publicvoid;say_hello(){ System.out.println("HelloWorld!");}}第四步:編寫ServerServer用來創(chuàng)建相應(yīng)的Servant對象,準(zhǔn)備接受來自Client的請求。本例主要包括兩個(gè)方法。run()方法:1.獲取RootPOAManager的引用。2.創(chuàng)建實(shí)現(xiàn)對象,并將其引用保存在某個(gè)適當(dāng)?shù)牡胤?,以便客戶程序獲取。3.激活POA管理器,以允許接受請求。4.將控制權(quán)交給ORB,并處于運(yùn)行狀態(tài)。Main()方法:初始化ORB;調(diào)用run()方法運(yùn)行結(jié)束后,撤銷ORB對象,退出;第五步:編寫ClientClient程序發(fā)起CORBA調(diào)用,本例定義了兩個(gè)方法。Run()方法:1.獲取遠(yuǎn)程對象的引用;2.調(diào)用遠(yuǎn)程對象上的方法;Main()方法:初始化ORB;調(diào)用run()方法;運(yùn)行結(jié)束后,撤銷ORB對象,退出;第六步:編譯和運(yùn)行轉(zhuǎn)到D:\mywork\hello目錄下,創(chuàng)建classes目錄:mkdirclasses編譯Java文件:javac–dclasseshello\*.javajavac–dclassesClient.javajavac–dclassesHello_impl.javajavac–dclassesServer.java進(jìn)入classes目錄,先運(yùn)行Server:javahello.Server重開一個(gè)DOS窗口,進(jìn)入D:\mywork\hello\classes目錄,運(yùn)行Client:javahello.Client運(yùn)行結(jié)果在Client運(yùn)行的DOS窗口,輸入:Enter‘h’forhelloor‘x’forexit:>h>在Server運(yùn)行的DOS窗口運(yùn)行結(jié)果如下:>HelloWorld!主要內(nèi)容

綜述基于CORBA的軟件開發(fā)基本過程RM-ODP與CORBA總結(jié)RM-ODP是分布式計(jì)算領(lǐng)域內(nèi)容最廣泛的一個(gè)國際標(biāo)準(zhǔn),是功能最強(qiáng)的分布計(jì)算“元標(biāo)準(zhǔn)”。CORBA是開放式分布處理思想的一個(gè)實(shí)現(xiàn)。體系結(jié)構(gòu)的比較--語言語言:CORBA沒有企業(yè)語言、信息語言和技術(shù)語言計(jì)算語言RM-ODP的每個(gè)對象都可以調(diào)用其它對象在接口上所提供的操作。系統(tǒng)分布的特性對系統(tǒng)設(shè)計(jì)者應(yīng)該是透明的。CORBA支持RM-ODP計(jì)算語言中的接口類型概念,由OMGIDL表示。

RM-ODP主要支持兩種類型的操作:詢問型和公告型。CORBA支持三種類型的調(diào)用:同步調(diào)用、單向調(diào)用和延遲調(diào)用.前兩種方式分別對應(yīng)于

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論