CORBA的基本內(nèi)容(上)
(本文轉(zhuǎn)載自軟件工程專家網(wǎng) www.21cmm.com )
蘇洋
回顧上一講中在介紹CORBA體系結(jié)構(gòu)時,曾強(qiáng)調(diào)CORBA在提高組件重用性、增強(qiáng)分布計算功能方面具有的突出特點:
● 引入中間件作為事務(wù)代理;
● 客戶程序與服務(wù)器程序完全分離;
● 與面向?qū)ο蟮慕8拍钕嘟Y(jié)合;
● 引入接口定義語言描述服務(wù)對象功能。
CORBA規(guī)范只是描述了CORBA系統(tǒng)中各個構(gòu)件的基本情況以及構(gòu)件在系統(tǒng)中承擔(dān)的任務(wù),并沒有從功能實現(xiàn)的細(xì)節(jié)上規(guī)定必須如何建立一個基于CORBA規(guī)范的軟件系統(tǒng)產(chǎn)品。這樣,對于基于CORBA的軟件產(chǎn)品開發(fā)而言,程序設(shè)計人員可以自由地選擇實現(xiàn)方式,但前提是遵循規(guī)范中各個構(gòu)件的實現(xiàn)原則。在本講和下一講中,將詳細(xì)介紹CORBA中各個構(gòu)件的主要內(nèi)容。
對象請求代理(ORB)
1. 對象請求代理(ORB,Object Request Broker)的作用
在傳統(tǒng)的基于客戶機(jī)/服務(wù)器模式的應(yīng)用程序開發(fā)過程中,項目開發(fā)人員遵循公開的標(biāo)準(zhǔn)或自由設(shè)計模塊間的協(xié)議,這樣的協(xié)議依賴于網(wǎng)絡(luò)類型、實現(xiàn)語言、應(yīng)用方式等。引入ORB后,客戶只要遵循服務(wù)對象的對外接口標(biāo)準(zhǔn)向服務(wù)對象提出業(yè)務(wù)請求,由ORB在分布式對象間建立客戶-服務(wù)對象關(guān)系。總結(jié)起來,ORB的作用包括:
● 接受客戶發(fā)出的服務(wù)請求,完成請求在服務(wù)對象端的映射;
● 自動設(shè)定路由尋找服務(wù)對象;
● 提交客戶參數(shù);
● 攜帶服務(wù)對象計算結(jié)果返回客戶端。
圖1 客戶服務(wù)請求示意圖
由圖1可以看出,客戶(Client)向服務(wù)對象的實現(xiàn)(Object Implementation)發(fā)出事務(wù)請求,其中客戶是欲對服務(wù)對象發(fā)出方法請求的實體,服務(wù)對象應(yīng)包括該方法的數(shù)據(jù)資源以及實現(xiàn)代碼。對象請求代理的作用就在于定位服務(wù)對象,接收客戶發(fā)出的服務(wù)請求并將服務(wù)對象的執(zhí)行結(jié)果返回給客戶。請求發(fā)出后,客戶對象采用輪詢等方式以獲取服務(wù)對象計算的結(jié)果。
2. ORB的結(jié)構(gòu)及類型
ORB通過一系列接口和接口定義中說明的要實現(xiàn)操作的類型,確定提供的服務(wù)和實現(xiàn)客戶與服務(wù)對象通信的方式。通過IDL接口定義、接口庫或適配器(Adapter)的協(xié)調(diào),ORB可以向客戶機(jī)和具備服務(wù)功能的對象實現(xiàn)(Object Implementation)提供服務(wù)。作為CORBA體系結(jié)構(gòu)的核心,ORB可以實現(xiàn)如下三種類型的接口:
● 對于所有的ORB實現(xiàn)具有相同的操作;
● 針對特定類型對象的操作;
● 與對象實現(xiàn)類型有關(guān)的操作。
基于ORB實現(xiàn)的不同類型接口,一個客戶端請求可以同時訪問多個由不同ORB實現(xiàn)通信管理的對象引用。在實際應(yīng)用中,只要遵循公共的ORB體系結(jié)構(gòu),程序設(shè)計可以選擇ORB的多種實現(xiàn)方式,其中包括:
(1)客戶和實現(xiàn)駐留(Client-Implementation Resident)ORB:采用駐留在客戶和服務(wù)對象實現(xiàn)程序的方式實現(xiàn)ORB。在這種實現(xiàn)方式下,客戶端可以通過樁(Stub)程序,以位置透明的方式向具體的實現(xiàn)對象提出服務(wù)請求,實現(xiàn)客戶與服務(wù)對象的通信。
(2)基于服務(wù)(Server-based)ORB:客戶對象和實現(xiàn)對象均可以與一個或多個服務(wù)對象進(jìn)行通信,服務(wù)對象的功能是將請求從客戶端發(fā)送到對象實現(xiàn)。在這種方式中,ORB的作用是完成客戶對象與實現(xiàn)對象的通信,為對象之間的交互提供服務(wù)。
(3)基于系統(tǒng)(System-based)ORB:在這種實現(xiàn)方式中,ORB被操作系統(tǒng)認(rèn)為是系統(tǒng)所提供的一項基本服務(wù)。由于操作系統(tǒng)了解調(diào)用方與服務(wù)對象的位置,因而可以充分地實現(xiàn)ORB功能的優(yōu)化。
(4)基于庫(Library-based)ORB:如果認(rèn)為對象實現(xiàn)可以共享,則可以將實現(xiàn)功能放入實現(xiàn)庫(Implementation Repository)中,從而創(chuàng)建基于庫的ORB。
3. ORB中的主要方法
客戶端和服務(wù)對象端均可以自由選擇使用ORB對象中定義的方法來實現(xiàn)操作。下面舉例說明ORB對象中的重要方法:
(1)ORB ORB_init(inout arg_list argv,in ORBid orb_identifier)
作用:ORB初始化方法。
(2)String object_to_string(in Object obj)
作用: 將對對象的引用轉(zhuǎn)換成客戶可以用字符串方式存儲的對象信息。
(3)Object string_to_object(in String str)
作用:上述方法的逆過程。將以字符串方式存儲的對象轉(zhuǎn)換成對對象類型的引用。
(4)Object resolve_initial_references(in ObjectID identifier)
作用:獲取初始對象引用。
(5)Policy get_policy(in PolicyType policy_type)
作用:返回指定類型的服務(wù)策略對象。
作為公共對象請求代理體系結(jié)構(gòu)中的核心內(nèi)容,ORB提供了相當(dāng)豐富的方法。讀者可以查閱相關(guān)資料詳細(xì)了解ORB中的方法。
4. 服務(wù)請求的實現(xiàn)方式
關(guān)于對象請求的實現(xiàn)方式,CORBA規(guī)范中定義客戶程序可以用動態(tài)調(diào)用接口(DII,Dynamic Invocation Interface)方式或通過OMG IDL文件經(jīng)編譯后在客戶端生成的樁(Stub)方式提出服務(wù)請求。這兩種實現(xiàn)方式的區(qū)別在于通過OMG IDL樁(Stub)文件方式實現(xiàn)的調(diào)用請求中,客戶能夠訪問的服務(wù)對象方法取決于服務(wù)對象所支持的接口;而動態(tài)調(diào)用接口調(diào)用方式則與服務(wù)對象的接口無關(guān)。盡管實現(xiàn)調(diào)用請求的方式有所區(qū)別,但客戶發(fā)出的請求服務(wù)調(diào)用的語義是相同的,服務(wù)對象不去分析服務(wù)請求提出的方式。
ORB通過IDL客戶樁(Stub)方式或動態(tài)調(diào)用接口(DII)方式定位服務(wù)對象的實現(xiàn)代碼、傳遞服務(wù)對象應(yīng)用參數(shù)以及完成對請求傳送方式的控制。服務(wù)對象的實現(xiàn)(Object Implementation)通過對象適配器(Object Adapter)提供對客戶請求的服務(wù)。客戶對服務(wù)器端方法的調(diào)用方式見圖2。
圖2 客戶調(diào)用服務(wù)請求的實現(xiàn)方式
從以上對服務(wù)請求調(diào)用方式的分析可以看出: 服務(wù)對象接口的定義在整個CORBA系統(tǒng)服務(wù)功能的實現(xiàn)中起著相當(dāng)重要的作用。那么如何實現(xiàn)服務(wù)對象的功能接口呢?CORBA規(guī)范中定義了兩種接口實現(xiàn)方式:第一種形式是利用OMG IDL接口定義語言對接口進(jìn)行描述。IDL語言有詳細(xì)的語法規(guī)則(講座將在第五講對該語言的語法規(guī)則進(jìn)行詳細(xì)講解)。這樣,經(jīng)過對所實現(xiàn)功能的系統(tǒng)分析,利用IDL,依據(jù)服務(wù)對象可能實現(xiàn)的服務(wù)以及服務(wù)中需要的參數(shù),對接口進(jìn)行定義。另外一種方式是將接口放入接口倉庫(Interface Repository)中,在運行期間對接口庫中的接口進(jìn)行訪問。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2311
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
