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

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