CORBA的基本內容(下)
(本文轉載自軟件工程專家網 www.21cmm.com )
蘇洋
接口倉庫
CORBA引入接口倉庫(Interface Repository)的目的在于使服務對象能夠提供持久的對象服務。將接口信息存入接口倉庫后,如果客戶端應用提交動態調用請求(Dynamic Invocation),ORB可以根據接口倉庫中的接口信息及分布環境下數據對象的描述,獲取請求調用所需的信息。接口倉庫作為CORBA系統的組成部分,管理和提供到OMG IDL映射接口定義的訪問。接口倉庫中信息的重要作用是連接各個ORB,當請求將對象從一個ORB傳遞給另一個ORB時,接收端ORB需要創建一個新對象來代表所傳遞的對象,這就需要在接收端ORB的接口倉庫中匹配接口信息。通過從服務請求端ORB的接口倉庫中獲得接口標識,就可以在接收端的接口倉庫中匹配到該接口。
接口倉庫由一組接口倉庫對象組成,代表接口倉庫中的接口信息。接口倉庫提供各種操作來完成接口的尋址、管理等功能。在實現過程中,可以選擇對象永久存在還是引用時再創建等方式。
在接口倉庫的實現形式中,接口倉庫中對象定義的形式是公開的,庫中對象定義的信息可以供客戶端和服務端使用。應用程序開發人員可以在如下方面使用接口功能:
● 管理接口定義的安裝和部署;
● 提供到高級語言編譯環境的接口信息;
● 提供終端用戶環境的組件。
1、接口倉庫的管理
接口倉庫包含對象請求調用時所需的對象信息。一旦信息裝入庫中,客戶端存根(Stub)程序就依賴接口倉庫提供對象的信息,因此,必須選擇相應的策略以保證接口倉庫中信息的一致性和完整性。
接口倉庫中內容的一致性通常表現為一組有效的OMG IDL定義。由于在接口加載過程中通信延遲等原因,有可能導致接口名字沖突或方法定義沖突等問題。在分布式環境下,為了解決這種問題,通常采用復制技術來增加接口信息的一致性和可用性。另外,接口倉庫對象通常采用服務對象定義的事務處理和并發控制方法來完成對接口倉庫的更新。
2、接口倉庫對象
接口倉庫對象提供的特征及方法取決于具體的CORBA產品,開發人員應視產品的不同選擇使用。在接口倉庫中包括如下對象,各對象提供相應的方法用于管理接口倉庫中的對象信息:
● Repository:表示接口倉庫細節;
● ModuleOf:模塊定義對象;
● InterfaceOf:接口定義對象;
● ValueOf:值類型定義;
● ExceptionOf: 由操作引發異常的定義。
對象適配器
對象適配器(Object Adapter)是為服務對象端管理對象引用和實現而引入的。CORBA規范中要求系統實現時必須有一種對象適配器。對象適配器完成如下功能:
● 生成并解釋對象的引用,把客戶端的對象引用映射到服務對象的功能中;
● 激活或撤消對象的實現;
● 注冊服務功能的實現;
● 確保對象引用的安全性;
● 完成對服務對象方法的調用。
作為CORBA設計中常用的對象適配器——基本對象適配器(BOA,Basic Object Adapter),在分布式應用程序設計中是必要的元素。ORB將服務請求的參數及操作控制權傳遞給BOA,由BOA將執行結果返回給ORB。BOA用服務對象骨架(Skeleton)將ORB和對象實現中的方法聯系在一起,服務對象骨架中相應的方法將對BOA方法的請求調用映射為服務對象中的方法。調用請求過程中BOA的作用如圖1所示。
動態調用接口
動態調用接口(DIID,Dynamic Invacation Interface)允許在客戶端動態創建和調用對服務對象的請求。一個請求包括對象引用、操作和參數列表。其中參數列表的定義如下:
typedef unsigned long Flags;
struct NamedValue
{ Identifier name;
Any arguments;
Long len;
Flags arg_modes;}
其中name表示傳遞的參數名;arguments表示傳遞的參數;len表示參數長度;arg_modes代表參數模式標識。
動態調用請求操作包括豐富的方法,下面就有關動態請求的相應方法進行簡單介紹:
1. void create_request( in Context ctx;
in Identifier operation;
in NVList arg_list;
inout NamedValue result;
out Request request;
in Flags req_flags;
)
作用:創建動態請求;
方法參數: 該方法中包含的參數依次為操作中使用的context對象、對象的操作類型、操作中使用的參數、方法結果、返回的調用請求和請求中使用的標志。
2. void get_response() raises (WrongTransaction)
作用: 返回請求執行的結果。調用該方法后將一直等待直到請求方法完成。
3. void get_next_response( RequestSeq* & ) raises ( WrongTransaction )
作用:返回完成的下一個請求;
方法參數:對象請求序列標識。
上下文對象
上下文對象(Context)包含客戶機、運行環境或者在請求中沒有作為參數進行傳遞的信息,上下文對象是一組由標識符和相應字符串對構成的列表,程序設計人員可以用定義在上下文接口上的操作來創建和操作上下文對象。
上下文對象可以以永久或臨時方式存儲,客戶機應用程序用上下文對象來獲取運行環境;而ORB用上下文對象中的信息來決定服務器的定位及被請求方法激活。下面介紹上下文對象中的方法:
1. void get_default_context(out Context ctx)
作用:創建上下文對象;
方法參數:獲得的上下文對象。
2. void get_values( in Identifier start_scope,
in Flags op_flags,
in Identifier prop_name,
out NVList values )
作用:返回上下文對象中的特征值;
返回類型:返回特征值;
方法參數:start_scope為搜索范圍標識;op_flags為操作標志;prop_name為特征名;values為相應的特征值。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2312
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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