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

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