ORB是一個(gè)中間件(middleware),它可以建立對(duì)象之間的client/server關(guān)系。通過(guò)ORB,一個(gè)client可以透明的引用同一臺(tái)機(jī)器上或網(wǎng)絡(luò)上的一個(gè)server對(duì)象的方法。ORB解釋該調(diào)用并負(fù)責(zé)查找一個(gè)實(shí)現(xiàn)該請(qǐng)求的對(duì)象,找到后,把參數(shù)傳給該對(duì)象,調(diào)用它的方法,最后返回結(jié)果。client并不清楚該對(duì)象的位置,它的編程語(yǔ)言,它的操作系統(tǒng)以及其它不是對(duì)象接口的系統(tǒng)信息。 ORB能實(shí)現(xiàn)分布環(huán)境中位于不同機(jī)器上的應(yīng)用之間的互操作以及多對(duì)象系統(tǒng)之間的無(wú)縫連接。
在傳統(tǒng)的client/server)應(yīng)用中,開(kāi)發(fā)者使用自己設(shè)計(jì)的標(biāo)準(zhǔn)或通用標(biāo)準(zhǔn)來(lái)定義設(shè)備之間的協(xié)議。協(xié)議定義與實(shí)現(xiàn)的語(yǔ)言、網(wǎng)絡(luò)傳輸及其它因素有關(guān)。ORB簡(jiǎn)化了這一過(guò)程,它使用IDL來(lái)定義應(yīng)用接口之間的協(xié)議。ORB允許程序員選擇通用操作系統(tǒng),運(yùn)行環(huán)境和編程語(yǔ)言。更重要的是,它能集成現(xiàn)存元素。
ORB結(jié)構(gòu)
圖 1 通過(guò)ORB傳遞請(qǐng)求
圖1顯示了一個(gè)client向?qū)ο髮?shí)現(xiàn)發(fā)送一個(gè)請(qǐng)求。Client是一個(gè)想對(duì)對(duì)象進(jìn)行操作的一個(gè)實(shí)體,對(duì)象實(shí)體是實(shí)現(xiàn)對(duì)象的代碼和數(shù)據(jù)。ORB負(fù)責(zé)根據(jù)一個(gè)請(qǐng)求來(lái)定位一個(gè)對(duì)象,安排對(duì)象實(shí)現(xiàn)準(zhǔn)備接受請(qǐng)求,與請(qǐng)求的數(shù)據(jù)通訊。Client的接口與對(duì)象的位置完全,實(shí)現(xiàn)對(duì)象的語(yǔ)言及其它不在對(duì)象接口反映出來(lái)的方面等無(wú)關(guān)。
圖2顯示了單個(gè)ORB的結(jié)構(gòu)。用斜條文的矩形框表示ORB的接口, 箭頭表示調(diào)用ORB或ORB使用接口把信息向上傳遞。

圖2 ORB接口結(jié)構(gòu)
Clinet使用Dynamic Invocation interface (與目標(biāo)對(duì)象的接口無(wú)關(guān))或OMG IDL stub (與目標(biāo)對(duì)象接口有關(guān)的stub)來(lái)發(fā)出請(qǐng)求。由于某種原因,Client也可以直接與ORB聯(lián)系。對(duì)象實(shí)現(xiàn)使用OMG IDL生成的skeleton或動(dòng)態(tài) skeleton以向上傳送(up-call)的方式接受請(qǐng)求。對(duì)象實(shí)現(xiàn)也可以調(diào)用Object Adapter和ORB。可以用兩種方式來(lái)定義對(duì)象接口:一是用OMG Interface Definition Language (OMG IDL)來(lái)定義接口。該語(yǔ)言根據(jù)可能對(duì)對(duì)象進(jìn)行的操作和這些操作使用的參數(shù)來(lái)定義對(duì)象類型。第二種方法是,把接口(interface)放入Interface Repository service中; 該服務(wù)把接口中的元素描述成一個(gè)對(duì)象。任何能實(shí)現(xiàn)ORB的軟件中,Interface Definition Language (可能根據(jù)文檔的內(nèi)容而改變)和Interface Repository具有相同的作用。一個(gè)client要使用Object Reference完成請(qǐng)求,它必須知道對(duì)象的類型的及具體的操作。Client初始化請(qǐng)求有兩種方法,一是通過(guò)調(diào)用目標(biāo)對(duì)象的stub routines,二是動(dòng)態(tài)的創(chuàng)造請(qǐng)求(如圖3所示)。

圖 3 Client使用Stub 或Dynamic Invocation Interface
不論使用Stub還是Dynamic Invocation Interface來(lái)發(fā)出請(qǐng)求具有相同的語(yǔ)義,信息的接收者不能分辨出該請(qǐng)求是使用哪種方法來(lái)傳遞的。ORB確定適當(dāng)?shù)膶?shí)現(xiàn)代碼,傳遞參數(shù),通過(guò)IDL skeleton或dynamic skeleton (如圖Figure 4 所示)把控制傳給Object Implementation。每一個(gè)接口和object adapter 使用不同的Skeletons。為了完成請(qǐng)求,object implementation 可能通過(guò)Object Adapter 使用來(lái)自O(shè)RB的服務(wù)。當(dāng)完成請(qǐng)求后,控制和輸出結(jié)果返回給client。

圖4 Object Implementation 接受請(qǐng)求 Object Implementation選擇使用何種Object Adapter。它是根據(jù)Object Implementation 需要服務(wù)的種類來(lái)確定的。圖5 顯示了clients和object implementations如何使用接口和實(shí)現(xiàn)信息。用OMG IDL或Interface Repository來(lái)定義接口;該定義用于產(chǎn)生client Stubs和object implementation Skeletons。

圖 5 Interface 和 Implementation Repositories
在安裝時(shí)把object implementation 信息放入Implementation Repository中,以備請(qǐng)求使用。
ORB結(jié)構(gòu)中的主要構(gòu)件

圖6.1 CORBA ORB結(jié)構(gòu)
1) Object Implementation(對(duì)象實(shí)現(xiàn)): 它定義了實(shí)現(xiàn)一個(gè)CORBA IDL接口的操作。它可以用各種語(yǔ)言來(lái)寫(xiě),如C, C++, Java, Smalltalk和Ada。

圖6.2 典型的Object Implementation 結(jié)構(gòu)
2) Client(客戶): 這是一個(gè)程序?qū)嶓w,它調(diào)用了某一個(gè)對(duì)象實(shí)現(xiàn)中操作。對(duì)調(diào)用這來(lái)講,訪問(wèn)遠(yuǎn)程對(duì)象server應(yīng)該是透明的。它應(yīng)該和調(diào)用對(duì)象中的方法一樣簡(jiǎn)單,如,obj->op(args)。
Client只能根據(jù)對(duì)象的接口了解對(duì)象的邏輯結(jié)構(gòu),雖然,我們一般都把client看作是一個(gè)程序或一個(gè)進(jìn)程,但是,知道一個(gè)client都是某一個(gè)對(duì)象有關(guān)的。例如,一個(gè)對(duì)象的實(shí)現(xiàn)可能是其他對(duì)象的client。

圖 7 典型的Client結(jié)構(gòu) Client通過(guò)語(yǔ)言映射(language mapping)來(lái)使用對(duì)象和ORB 接口。當(dāng)這種映射關(guān)系改變時(shí),不需要改變Client。Client不需要了解對(duì)象的實(shí)現(xiàn)方式,對(duì)象適配器及ORB。
3) Object Request Broker(ORB):
ORB提供了一種機(jī)制,能實(shí)現(xiàn)client請(qǐng)求與目標(biāo)對(duì)象實(shí)現(xiàn)之間的透明通信。它使得client請(qǐng)求就象一個(gè)本地過(guò)程調(diào)用一樣。當(dāng)一個(gè)client引用一個(gè)操作,ORB負(fù)責(zé)找到對(duì)象實(shí)現(xiàn),如果需要?jiǎng)t透明的激活它,然后把該請(qǐng)求遞交給該對(duì)象,最后返回應(yīng)答給調(diào)用者。實(shí)現(xiàn)時(shí),可以把ORB不作為單個(gè)成分,但它只能由它的接口來(lái)定義。任何ORB實(shí)現(xiàn)方式提供的接口都是可以接受的。可以把接口中的操作分為三類:
1. 對(duì)于所有的ORB實(shí)現(xiàn)都一樣的操作
2. 特定類型對(duì)象的操作
3. 與對(duì)象實(shí)現(xiàn)種特定類別有關(guān)的操作
不同的ORB有不同的實(shí)現(xiàn)方式,但都包括有:IDL 編譯器, 倉(cāng)庫(kù)(repositories),各種Object Adapters,給client提供各種服務(wù)集,具有不同屬性的對(duì)象實(shí)現(xiàn)等。
現(xiàn)在有各種不同的ORB實(shí)現(xiàn)。一個(gè)client可以同時(shí)訪問(wèn)兩個(gè)由不同ORB實(shí)現(xiàn)管理的對(duì)象引用(object references)當(dāng)這兩個(gè)ORB需要一起工作時(shí),它們能區(qū)分出各自的對(duì)象引用。Client不需要對(duì)此負(fù)責(zé)。ORB Core是ORB的一個(gè)組成部分,它提供對(duì)象的基本表示和與請(qǐng)求的通信。
有四種不同類型的ORB:
1.Client- and Implementation-resident ORB
2.Server-based ORB
3.System-based ORB
4.Library-based ORB
ORB Interface:
一個(gè)ORB是一個(gè)邏輯實(shí)體(logical entity),它可以用各種方法實(shí)現(xiàn)(如一個(gè)或多個(gè)過(guò)程,或一個(gè)libraries集合)。為了減輕編寫(xiě)程序的困難,CORBA規(guī)范定義了一個(gè)抽象的接口。該接口提供各種幫助函數(shù)。
CORBA IDL stubs and skeletons:
它相當(dāng)于client、server應(yīng)用程序和ORB之間的“膠水”。由CORBA IDL編譯器自動(dòng)實(shí)現(xiàn)CORBA IDL定義與目標(biāo)編程語(yǔ)言之間的轉(zhuǎn)換。
使用編譯器可以減少client stub和server skeletons之間的潛在矛盾。
Dynamic Invocation Interface(DII):
該接口允許client直接調(diào)用ORB所提供得最底層的請(qǐng)求機(jī)制。應(yīng)用程序使用DII動(dòng)態(tài)地把請(qǐng)求傳給對(duì)象而不需要IDL接口(包括特定stub)。與IDL stub(它只允許RPC模式的請(qǐng)求)不同,DII也允許clients使用無(wú)塊的延遲同步調(diào)用(non-blocking deferred synchronous)(發(fā)送操作是獨(dú)立的)和單向調(diào)用(send-only)。
Dynamic Skeleton Interface(DSI):
與client端的DII類似的,位于server端的接口。DSI允許ORB把請(qǐng)求發(fā)送給對(duì)象實(shí)現(xiàn),該對(duì)象實(shí)現(xiàn)不包含編譯時(shí)所需要的類型。發(fā)出請(qǐng)求的client不知道該實(shí)現(xiàn)是使用指定類型的IDL skeletons 還是使用動(dòng)態(tài)的skeletons。
Object Adapter:
它幫助ORB把請(qǐng)求傳給對(duì)象并激活該對(duì)象。更重要的是一個(gè)object adapter總是與一個(gè)對(duì)象實(shí)現(xiàn)(object implementations)聯(lián)系的。Object adapter可以被定義來(lái)支持特定的對(duì)象實(shí)現(xiàn)類型(如OODB object adapters用于持續(xù)對(duì)象(persistence)而library object adapters 用于非遠(yuǎn)程對(duì)象)。

圖8 典型的Object Adapter結(jié)構(gòu)
它的作用有:
(1)產(chǎn)生和解釋對(duì)象引用
(2)Method調(diào)用
(3)相互作用的安全性
(4)對(duì)象和激活實(shí)現(xiàn)及撤銷實(shí)現(xiàn)
(5)把對(duì)象引用映射到相應(yīng)的對(duì)象實(shí)現(xiàn)
(6)注冊(cè)對(duì)象實(shí)現(xiàn)
3 系統(tǒng)集成
圖9 不同對(duì)象系統(tǒng)集成的方法
4 互操作ORB 的互操作性提供了種易于理解的、方便的途徑來(lái)支持網(wǎng)絡(luò)中的對(duì)象,這些對(duì)象由多樣的,不同種類的(與CORBA 兼容的)ORB管理。由于CORBA中的元素能以很多方式結(jié)合在一起以滿足各種不同的需要,因此取得“interORBability”的方法很方便。
1) 支持互操作的元素
能支持互操作的元素有::
1. ORB 互操作結(jié)構(gòu)
2. Inter-ORB 橋支持(bridge support)
3. General and Internet inter-ORB Protocols (GIOPs and IIOPs)
而且,該結(jié)構(gòu)還支持environment-specific inter-ORB protocols (ESIOP),它能優(yōu)化特定領(lǐng)域如DCE)
2) ORB 互操作結(jié)構(gòu)
該結(jié)構(gòu)引入了ORB域中immediate and mediated bridging(直接橋接和間接橋接)這兩個(gè)概念。IIOP是廣域網(wǎng)橋接的基礎(chǔ)。而inter-ORB 橋接既能用于直接橋接,也能用于“半橋接”,使用半橋接能搭建用于間接橋接。使用這些橋接技術(shù),ORB能互操作,而不需要知道彼此的實(shí)現(xiàn)細(xì)節(jié),如,使用何種特殊的IPC或協(xié)議(如ESIOP)來(lái)實(shí)現(xiàn)CORBA規(guī)范。
使用能用IIOP通訊的“半橋接”, 兩個(gè)或多個(gè)ORB能相互橋接在一起。這種方法既能用于單機(jī)ORB,也能用于網(wǎng)絡(luò)ORB如ESIOP。IIOP也能用于實(shí)現(xiàn)ORB中的內(nèi)部消息機(jī)制。
3) Inter-ORB Bridge Support
互操作結(jié)構(gòu)明確指出ORB中不同域的作用,這些域包括對(duì)象引用域(object reference domain),類型域(type domain),安全域(safety domain)(如the scope of a Principal identifier), 事物域(transaction domain)等等。
當(dāng)兩個(gè)ORB位于同一個(gè)域中,它們能直接通訊,多數(shù)情況下,這是一個(gè)很好的方法。但由于各個(gè)機(jī)構(gòu)需要建造各自控制域,因此,這種方法不常使用。當(dāng)需要的信息離開(kāi)它的域時(shí),就必須使用橋接來(lái)傳遞信息。橋接的作用是確保信息能完整的從一個(gè)ORB映射到另一個(gè)ORB。inter-ORB 橋接支持也能提供與非CORBA系統(tǒng)(如Microsoft’s Component Object Model (COM))之間的互操作。
4) General Inter-ORB Protocol (GIOP)
General Inter-ORB Protocol (GIOP) 元件提供了一個(gè)標(biāo)準(zhǔn)傳輸語(yǔ)法(低層數(shù)據(jù)表示方法)和ORB之間通信的信息格式集。GIOP只能用在ORB與ORB之間,而且,只能在符合理想條件的面向連接傳輸協(xié)議中使用。它不需要使用更高一層的RPC機(jī)制。這個(gè)協(xié)議是簡(jiǎn)單的(盡可能簡(jiǎn)單,但不是簡(jiǎn)單化),可升級(jí)的,使用方便。它被設(shè)計(jì)為可移動(dòng)的、高效能的表現(xiàn)、較少依靠其它的低層傳輸協(xié)議。當(dāng)然,由于不同傳輸使用不同版本的GIOP,它們可能不能直接協(xié)作工作,但它能很容易的連接網(wǎng)絡(luò)域。
5) Internet Inter-ORB Protocol (IIOP)
Internet Inter-ORB Protocol (IIOP) 元件指出如何通過(guò)TCP/IP連接交換GIOP信息。IIOP為Internet提供了一個(gè)標(biāo)準(zhǔn)的協(xié)作工作協(xié)議,它使兼容的ORB能基于現(xiàn)在流行的協(xié)議和產(chǎn)品進(jìn)行“out of the box”方式的協(xié)作工作。它也能被用于兩個(gè)半橋(half-bridges )之間的協(xié)議。該協(xié)議能用于任何ORB與IP(Internet Protocol)域之間的協(xié)作工作,除非ORB選擇了特殊的協(xié)議。這時(shí),它是TCP/IP環(huán)境下基本的inter-ORB 協(xié)議,最普遍的傳輸層。
IIOP與GIOP的關(guān)系就象特特殊語(yǔ)言與OMG IDL之間的關(guān)系;GIOP能被映射到不同層,它能指定協(xié)議。就象IDL不能見(jiàn)招完整的程序一樣,GIOP 本身也不能提供完整的協(xié)作工作。IIOP和不同傳輸層上的其它相似映射,實(shí)現(xiàn)抽象的GIOP定義,如圖10所示。

圖 10 Inter-ORB Protocol 關(guān)系
6) Environment-Specific Inter-ORB Protocols (ESIOPs)
它為使用Environment-Specific Inter-ORB Protocols (ESIOPs)的條件提出了解決方案。Such protocols would be used for “out of the box” interoperation at user sites where a particular networking or distributing computing infrastructure is already in general use. Because of the opportunity to leverage and build on facilities provided by the specific environment, ESIOPs might support specialized capabilities such as those relating to security and administration. While ESIOPs may be optimized for particular environments, all ESIOP specifications will be expected to conform to the general ORB interoperability architecture conventions to enable easy bridging. The inter-ORB bridge support enables bridges to be built between ORB domains that use the IIOP and ORB domains that use a particular ESIOP.
7) Domain(域)
域把一個(gè)系統(tǒng)中的元素按照某種特征分成幾個(gè)部分。在本結(jié)構(gòu)中,域是一個(gè)范圍,一個(gè)對(duì)象的集合,對(duì)象是域的成員,這些成員有共同的特征。可以把域看作是一個(gè)對(duì)象,它本生也可能是其它域的一個(gè)成員。

圖11 各種類型的域
CORBA中的域分為以下幾個(gè)部分:
Referencing domain – 對(duì)象引用范圍
Representation domain – 信息傳輸語(yǔ)法和協(xié)議范圍
Network addressing domain –網(wǎng)絡(luò)地址范圍
Network connectivity domain – 可能的網(wǎng)絡(luò)信息范圍
Security domain – 特殊安全策略
Type domain – 特殊標(biāo)識(shí)符范圍
Transaction domain –特定事物服務(wù)范圍
有兩種方式使用域:一是嵌入,一個(gè)域包括在另一個(gè)域中;二是聯(lián)合,兩個(gè)域聯(lián)合起來(lái)使用。當(dāng)兩個(gè)域的邊界上發(fā)生交互作用時(shí),就需要使用一種映射機(jī)制(如橋接)在邊界處傳遞相關(guān)元素。這里有兩種方法,一是間接橋接(mediated bridging),一是直接橋接(immediate bridging)。

圖12 兩種橋接技術(shù), 都用于兩個(gè)域之間
7.1 Mediated Bridging
使用間接橋接時(shí),在每一個(gè)域的邊界上,以一種協(xié)商的、通用的格式來(lái)傳遞與域有關(guān)的元素。可以從以下幾個(gè)方面來(lái)觀察間接橋接:
(1)公共格式的應(yīng)用范圍可能與兩個(gè)ORB/域的私下約定不同。
(2)可能有多個(gè)公共格式,每一種格式對(duì)應(yīng)一個(gè)應(yīng)用目的。
(3)如果有多個(gè)可供選擇的公共格式,選擇方式可以分為兩種,一是靜態(tài)選擇(兩個(gè)ORB開(kāi)發(fā)商之間),二是動(dòng)態(tài)選擇(每一個(gè)對(duì)象各自選擇)。
(4)這種方法隨著嵌入式編譯(與stub相比)或普通的庫(kù)代碼(如加密例程)的不同,它的格式不同
7.2 Immediate Bridging
使用直接橋接時(shí),在每一個(gè)域的邊界上,相關(guān)的元素直接從一個(gè)域的內(nèi)部格式轉(zhuǎn)到另一個(gè)域的內(nèi)部格式。
可以從以下幾個(gè)方面來(lái)觀察間接橋接:
(1)這種方法有被優(yōu)化的可能性(這時(shí)交互不通過(guò)第三方)但它是以犧牲靈活性和通用性來(lái)取得的。
(2)一般只當(dāng)需要在與邊界傳遞純管理(不交換技術(shù))才使用這種方法。例如,當(dāng)需要在兩個(gè)相似ORB的安全管理域傳遞消息時(shí),就不需要使用通用的間接標(biāo)準(zhǔn)。
綜上所述,當(dāng)兩個(gè)ORB/域使用私有機(jī)制時(shí),就比較難于區(qū)分這兩種方法。
7.3 Inter-Domain Functionality的位置
從邏輯上講,不論是間接橋接還是直接橋接,只要是域間橋(inter-domain bridge),它在兩個(gè)域中都有元素。但是,一方面,域可以跨越ORB邊界,而ORB也可以跨越機(jī)器和系統(tǒng)邊界;另一方面,一個(gè)機(jī)器或一個(gè)進(jìn)程可能跨越多個(gè)ORB。從工程學(xué)的角度來(lái)講,這意味著一個(gè)域間橋中的元素根據(jù)ORB或系統(tǒng)的不同而采取分散或同處的分布方式。例如,如果一個(gè)ORB包括兩個(gè)安全域,那么,域間橋就可以在ORB的內(nèi)部實(shí)現(xiàn)。同樣的,也可能在一個(gè)進(jìn)程或系統(tǒng)中實(shí)現(xiàn)兩個(gè)ORB或域間的橋。從工程學(xué)來(lái)講,這種情況下,域間橋是有限的,它局限于單個(gè)系統(tǒng)或進(jìn)程。如果所有的橋都用這種方式實(shí)現(xiàn),那么系統(tǒng)或進(jìn)程之間的協(xié)作只能在單個(gè)域或ORB中發(fā)生。
7.4 橋接級(jí)別(Bridging Level)
橋接可以在ORB級(jí)或更高以及實(shí)現(xiàn)。它們分別叫做嵌入(in-line)級(jí)橋接和請(qǐng)求級(jí)(request-level)橋接。請(qǐng)求級(jí)橋接使用CORBA API,包括使用Dynamic Skeleton Interface,來(lái)接受和流出(issue)請(qǐng)求。但是,也存在“implicit context”類,它與某些引用聯(lián)合起來(lái),持有如事物信息和安全信息等的ORB Service信息,通常的API中部包括這種類。
7.5 網(wǎng)絡(luò)中橋接的結(jié)構(gòu)
在網(wǎng)絡(luò)情況中的ORB,我們將引入“backbone”O(jiān)RB的概念。不論是大型網(wǎng)絡(luò)還是小規(guī)模網(wǎng)絡(luò)倒要用到它。大型網(wǎng)絡(luò)的制造商可以定義自己的中樞ORB,而小規(guī)模網(wǎng)絡(luò)則選擇一個(gè)商業(yè)的ORB作為它的中樞。

圖 13 一個(gè)ORB作為中樞,它通過(guò)半橋和全橋連接其它的ORB
這種中樞結(jié)構(gòu)是一種標(biāo)準(zhǔn)的網(wǎng)絡(luò)管理技術(shù)。它能減少橋接又能滿足網(wǎng)絡(luò)館管理。對(duì)于大型網(wǎng)絡(luò)來(lái)講,增加ORB橋接并不需要給網(wǎng)絡(luò)線路增加新的節(jié)點(diǎn)(hop)。
8) 橋接的種類
8.1 In-line Bridging(嵌入橋接)
嵌入橋接的代碼位于ORB中,它完成必要的翻譯和映射功能。它是兩個(gè)ORB進(jìn)行橋接的最直接方法。它與單個(gè)ORB中的系統(tǒng)進(jìn)行僑界的結(jié)構(gòu)相似(例如,間接使用某些內(nèi)部處理通訊模式,如網(wǎng)絡(luò)協(xié)議)。這表明,實(shí)現(xiàn)嵌入橋接可能會(huì)修改ORB中的某些基本的元素,例如插入新的內(nèi)部處理通訊模式。(有一些ORB被設(shè)計(jì)成可以進(jìn)行某些修改)。使用這種方法時(shí),在不同級(jí)別上用軟件元素的集成來(lái)完成所需要的橋接功能:
(1)面的ORB提供附加的或可選擇的服務(wù)
(2)附加的或可選擇的stub和skeleton代碼

圖14 使用ORB內(nèi)部的API構(gòu)造 In-Line bridges
8.2 Request-Level Bridging(請(qǐng)求級(jí)橋接)
請(qǐng)求級(jí)橋接的代碼位于ORB的外面,它完成必要的翻譯和映射功能。它通過(guò)位于不同執(zhí)行環(huán)境中兩個(gè)ORB的元素(一個(gè)ORB一個(gè)元素)使用普通協(xié)議(如網(wǎng)絡(luò)、共享內(nèi)存和主機(jī)操作系統(tǒng)提供的其他IPC)來(lái)達(dá)到目的,這種方法也叫做“半橋”。
請(qǐng)求級(jí)橋接的基本原理:
(1)原始請(qǐng)求被傳給client ORB 中的代理對(duì)象(proxy object)。
(2)代理對(duì)象把請(qǐng)求內(nèi)容(包括目標(biāo)對(duì)象引用)翻譯成服務(wù)ORB(server ORB)能理解的格式
(3)代理引用透明服務(wù)對(duì)象上所需要的操作
(4)使用補(bǔ)充路徑把操作結(jié)果返回給客戶A

圖15 使用公共的ORB API構(gòu)造 Request-Level bridges
CORBA Core定義了如下接口,使用它們能構(gòu)造請(qǐng)求級(jí)橋接:
(1)Dynamic Invocation Interface (DII) 允許橋接能任意調(diào)用對(duì)象引用,而當(dāng)建立橋接時(shí)不需要知道對(duì)象引用的類型。
(2)Dynamic Skeleton Interface (DSI) 即使當(dāng)建立橋接時(shí)不知道對(duì)象引用的類型,也允許橋接手動(dòng)地調(diào)用代理對(duì)象引用。
(3Interface Repositories 橋接用來(lái)獲取信息以驅(qū)動(dòng)DII和DSI,這些信息包括操作參數(shù)的類型及返回值和意外。
(4)Object Adapters (例如Basic Object Adapter) 當(dāng)引導(dǎo)橋接和映射對(duì)象引用(從一個(gè)ORB動(dòng)態(tài)地傳給另一個(gè)ORB)時(shí),創(chuàng)建對(duì)象引用的代理器。
(5)CORBA Object References 提供操作,這些操作能完全描述它們接口和建造把對(duì)象引用映射到它們代理器(或反之)的表。Interface repositories 雖然半橋接使用的給定的池ID(如接口類型ID,意外ID)或操作ID必須一致,但是與半橋接相連的兩邊的接口池(Interface repositories )中的信息可以不一樣。