CORBA(通用對象請求代理體系結構)

字號:

CORBA(通用對象請求代理體系結構)是在當今快速發(fā)展的軟件與硬件資源的情況下發(fā)展出的一種新技術。它可以讓分布的應用程序完成通信,無論這種應用程序是什么廠商生產的,只要符合CORBA標準就可以相互通信。CORBA 1.1于1991年由OMG提出,同時還提出了接口定義語言Interface Definition Language,IDL)以及能夠讓客戶/服務器對象在特定的ORB(對象請求代理)實現中進行通信。而1994年提出并被采納的CORBA 2.0標準才真正實現了不同生產廠商間的互操作性。
    ORB是一個在對象間建立客戶/服務器聯系的中件。使用ORB,客戶可以調用服務器的對象或對象中的應用,被調用的對象不要求在同一臺機器上。由ORB負責進行通信,同時ORB也負責尋找適于完成這一工作的對象,并在服務器對象完成后返回結果??蛻魧ο笸耆梢圆魂P心服務器對象的位置,實現它所采用的具體技術和工作的硬件平臺,甚至不必關心服務器對象的與服務無關的接口信息,這就大大簡化了客戶程序的工作。既然能夠這么方便,那ORB就需要提供在不同機器間應用程序間的通信,數據轉換,并提供多對象系統(tǒng)的無縫連接。
    我們通常編制客戶/服務器程序時,常常需要自己定義通信協(xié)議,而協(xié)議的制定往往與硬件和實現的方法有關,而ORB能夠簡化這一過程。在ORB下,協(xié)議通過IDL語言進行定義,保證了一致性,為了照顧到靈活性,ORB允許程序員選擇相應的操作系統(tǒng),執(zhí)行環(huán)境和編程語言。更重要的是它可以使原來的代碼通過一定的方式重用。CORBA是面向對象標準的第一步,有了這個標準,軟件的實現與工作環(huán)境對用戶和開發(fā)者不再重要,可以把精力更多地放在本地系統(tǒng)的實現與優(yōu)化上。
    下面我們來看看CORBA的一些具體情況。CORBA被設計用來對不同對象系統(tǒng)進行集成,提供靈活的的對象調用與功能實現。下圖是客戶對象通過ORB調用服務器對象。
    對象請求代理結構的大體工作過程就象上面的工作過程一樣??蛻魧⑿枰瓿傻墓ぷ鹘唤oORB,由ORB決定由哪一個對象實例完成這個請求,然后激活這個對象,將完成請求所需要的參數傳送給這個激活的對象。除了客戶傳送參數的接口外,客戶不需要了解其它任何信息,這就大大節(jié)省了用戶的開發(fā)精力。在提出請求時,客戶可以使用動態(tài)調用接口或者OMG IDL句柄。當然用戶也可以直接調用一些ORB內部的功能。對象實現通過OMG IDL產生的框架或通過動態(tài)框架接收到調用請求,在處理這些請求時,對象實現可以調用對象適配器和ORB。
    對象的接口有兩種定義方式,可以使用接口定義語言(稱為OMG接口定義語言,OMG IDL)進行靜態(tài)定義,這種語言根據進行的操作和傳送的參數定義對象。另一種方法,可以將接口加入接口庫服務中,這種服務代表作為對象的接口的組件,允許在運行時對這些成為組件的接口進行訪問,這兩種方法是等效的。下圖表示的是客戶使用句柄或動態(tài)調用接口進行訪問的情況。
    客戶知道對象的類型和希望進行的操作(一般客戶都知道這個,如果連需要進行什么操作都不知道,那就可笑了)客戶可以通過訪問一個對象的對象參考提出請求??蛻艨梢酝ㄟ^調用句柄函數初始化調用,也可以動態(tài)提出請求。動態(tài)發(fā)出的請求和通過句柄接口發(fā)出的靜態(tài)請求兩者在格式是一樣的,請求的接收者不可能知道這種請求是動態(tài)發(fā)出的還是靜態(tài)發(fā)出的。
    ORB定位合適的可以實現這個功能的代碼,通過IDL框架或動態(tài)框架傳向對象實現傳送參數,并將控制權交給對象實現??蚣苁侵付ㄓ诮雍蛯ο筮m配器的,在實現請求的過程中,對象實現可以通過對象適配器獲取一些ORB服務。在完成請求時,將控制權和輸出數據返回給客戶。不要被圖給迷惑了,對象實現可以根據自己的需要選擇需要的對象適配器使用。
    接口可以在OMG IDL或在接口庫中實現,這種對接口的定義用于產生客戶句柄和對象實現框架。對象實現信息在安裝時提供,保存于實現庫中,在傳送請求時可以使用這個信息庫中的內容。
    對象請求代理這個結構在上圖中并不需要作為組件單獨實現,它由接口定義。任何提供正確接口的ORB實現都是可被接受的。接口可分為以下幾大類:
    1.對于所有ORB實現均相同的接口;
    2. 指定于特定對象類型的操作;
    3. 指定于對象實現的特定形式的操作;
    不同的ORB可以采用不同的實現策略,加上IDL編譯器,庫和不同的對象適配器,這一切提供了一系列對客戶的服務和對具有不同屬性對象的實現??梢源嬖诙鄠€ORB實現,它們有不同的名稱和不同的實現方法與調用方法,對于客戶而言,客戶可以同時訪問由不同ORB實現管理的對象,當幾個ORB共同工作時,它們必須能夠區(qū)別它們各自的對象名(也就是對象參考),客戶不管區(qū)別只管使用。ORB內核是ORB的一部分,它提供了對象的基本命名和請求通信機制。CORBA設計得可以支持不同的對象機制,它是通過在ORB內核上建立ORB來完成這一點的。