程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> CORBA(通用對象請求代理體系結構)

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

編輯:關於C++

CORBA(通用對象請求代理體系結構)是在當今快速發展的軟件與硬件資源的情況下發展出的一種新技術。它可以讓分布的應用程序完成通信,無論這種應用程序是什麼廠商生產的,只要符合CORBA標准就可以相互通信。CORBA 1.1於1991年由OMG提出,同時還提出了接口定義語言Interface Definition Language,IDL)以及能夠讓客戶/服務器對象在特定的ORB(對象請求代理)實現中進行通信。而1994年提出並被采納的CORBA 2.0標准才真正實現了不同生產廠商間的互操作性。

ORB是一個在對象間建立客戶/服務器聯系的中件。使用ORB,客戶可以調用服務器的對象或對象中的應用,被調用的對象不要求在同一台機器上。由ORB負責進行通信,同時ORB也負責尋找適於完成這一工作的對象,並在服務器對象完成後返回結果。客戶對象完全可以不關心服務器對象的位置,實現它所采用的具體技術和工作的硬件平台,甚至不必關心服務器對象的與服務無關的接口信息,這就大大簡化了客戶程序的工作。既然能夠這麼方便,那ORB就需要提供在不同機器間應用程序間的通信,數據轉換,並提供多對象系統的無縫連接。

我們通常編制客戶/服務器程序時,常常需要自己定義通信協議,而協議的制定往往與硬件和實現的方法有關,而ORB能夠簡化這一過程。在ORB下,協議通過IDL語言進行定義,保證了一致性,為了照顧到靈活性,ORB允許程序員選擇相應的操作系統,執行環境和編程語言。更重要的是它可以使原來的代碼通過一定的方式重用。CORBA是面向對象標准的第一步,有了這個標准,軟件的實現與工作環境對用戶和開發者不再重要,可以把精力更多地放在本地系統的實現與優化上。

下面我們來看看CORBA的一些具體情況。CORBA被設計用來對不同對象系統進行集成,提供靈活的的對象調用與功能實現。下圖是客戶對象通過ORB調用服務器對象。

對象請求代理結構的大體工作過程就象上面的工作過程一樣。客戶將需要完成的工作交給ORB,由ORB決定由哪一個對象實例完成這個請求,然後激活這個對象,將完成請求所需要的參數傳送給這個激活的對象。除了客戶傳送參數的接口外,客戶不需要了解其它任何信息,這就大大節省了用戶的開發精力。在提出請求時,客戶可以使用動態調用接口或者OMG IDL句柄。當然用戶也可以直接調用一些ORB內部的功能。對象實現通過OMG IDL產生的框架或通過動態框架接收到調用請求,在處理這些請求時,對象實現可以調用對象適配器和ORB。

對象的接口有兩種定義方式,可以使用接口定義語言(稱為OMG接口定義語言,OMG IDL)進行靜態定義,這種語言根據進行的操作和傳送的參數定義對象。另一種方法,可以將接口加入接口庫服務中,這種服務代表作為對象的接口的組件,允許在運行時對這些成為組件的接口進行訪問,這兩種方法是等效的。下圖表示的是客戶使用句柄或動態調用接口進行訪問的情況。

客戶知道對象的類型和希望進行的操作(一般客戶都知道這個,如果連需要進行什麼操作都不知道,那就可笑了)客戶可以通過訪問一個對象的對象參考提出請求。客戶可以通過調用句柄函數初始化調用,也可以動態提出請求。動態發出的請求和通過句柄接口發出的靜態請求兩者在格式是一樣的,請求的接收者不可能知道這種請求是動態發出的還是靜態發出的。

ORB定位合適的可以實現這個功能的代碼,通過IDL框架或動態框架傳向對象實現傳送參數,並將控制權交給對象實現。框架是指定於接和對象適配器的,在實現請求的過程中,對象實現可以通過對象適配器獲取一些ORB服務。在完成請求時,將控制權和輸出數據返回給客戶。不要被圖給迷惑了,對象實現可以根據自己的需要選擇需要的對象適配器使用。

接口可以在OMG IDL或在接口庫中實現,這種對接口的定義用於產生客戶句柄和對象實現框架。對象實現信息在安裝時提供,保存於實現庫中,在傳送請求時可以使用這個信息庫中的內容。

對象請求代理這個結構在上圖中並不需要作為組件單獨實現,它由接口定義。任何提供正確接口的ORB實現都是可被接受的。接口可分為以下幾大類:

1.對於所有ORB實現均相同的接口;

2. 指定於特定對象類型的操作;

3. 指定於對象實現的特定形式的操作;

不同的ORB可以采用不同的實現策略,加上IDL編譯器,庫和不同的對象適配器,這一切提供了一系列對客戶的服務和對具有不同屬性對象的實現。可以存在多個ORB實現,它們有不同的名稱和不同的實現方法與調用方法,對於客戶而言,客戶可以同時訪問由不同ORB實現管理的對象,當幾個ORB共同工作時,它們必須能夠區別它們各自的對象名(也就是對象參考),客戶不管區別只管使用。ORB內核是ORB的一部分,它提供了對象的基本命名和請求通信機制。CORBA設計得可以支持不同的對象機制,它是通過在ORB內核上建立ORB來完成這一點的。

一個對象的客戶可以訪問此對象參考,並對對象進行操作。客戶不清楚對象的內部結構,它只知道對象的接口和執行操作所需要的時間和空間等資源。雖然我們可以把客戶想象為一個調用對象的進程,但是我們也不要忘記了對象也可以調用另外對象的服務。客戶看到的ORB接口和人觀念中的接口有差不多,這就為編程提供了幫助。客戶不需要對代碼進行改變就可以通過ORB實現功能,對象適配器只能由ORB或對象實現調用。

對象實現提供了對象的表現形式。通常實現由另一對象提供或由相應的軟件提供,當然也可以自己編程實現。在某些情況下,對象的主要功能是非對象實體產生作用。在CORBA中可以支持對象的不同實現。通常,對象實現不依賴於ORB或客戶請求,對象實現可以通過選擇對象適配器選擇和ORB相關服務來選擇接口。

對象參考是需要在ORB內指定的信息,客戶和對象實現相應於語言映射有對象參考的一個透明定義,這樣就把實現的表示與參考隔離開了。兩個ORB實現可能在選擇對象參考表示時是不同的。所有的ORB必須提供相對於對象參考一致的語言映射,這使得程序能夠獨立於ORB對對象參考進行訪問。

OMG接口定義語言(OMG IDL)通過對象的接口定義了對象的類型。一個接口由一些命名的操作和與這些操作相關的參數組成。請注意,雖然IDL提供概念框架用於描述對象,但不需要有IDL源代碼供ORB工作。只要相同的信息以句柄函數或運行接口庫的形式提供,特定的ORB就可以正常工作。IDL是一種方法,它使對象實現能夠告訴潛在的客戶,什麼樣的操作可以執行。從IDL的定義上可以將CORBA對象映射為特定的編程語言或對象系統。

不同的面向對象語言和非面向對象語言可以以不同的方式訪問CORBA對象。對於面向對象語言而言,它希望看到的是對象的形式,即使對非面向對象語言來說,它所希望看到的也不包括具體的內部實現。將OMG IDL映射為編程語言的方法對於所有的ORB實現應該是一致的。這些映射可能包括數據類型的映射和調用ORB的過程(或函數)接口的映射。語言映射還定義了對象調用和客戶(或實現)中的控制線程之間的相互作用。最普通的映射提供了同步調用,結果可以在過程完成時返回。其它的映射可以用來初始化調用並將控制權返回給程序,在這些情況下,附加的函數必須相應的同步功能。

為了映射非面向對象語言,將有一個對每個接口類型的程序接口。通常,句柄將提供訪問OMG IDL定義的操作的機制。句柄調用對於ORB核心是私有的那部分ORB。如果有多於一個ORB,將會有對應於不同ORB的接口。在這種情況下,需要ORB和語言映射相互協調以訪問正確的對象參考句柄。面向對象語言不需要句柄接口。接口允許對象動態調用,用戶可以不必調用一個特定對象上的操作,他可以指定調用特定的對象。客戶程序提供關於操作和參數類型的信息就可以了。

允許動態處理對象調用的接口是非常有用的,不是由與特殊操作相關的框架來訪問對象實現,而是由一個提供訪問操作名和參數的界面用一種類似於動態調用接口的方式來訪問對象實現。動態框架界面可以由客戶句柄或動態調用接口來調用,它們向動態框架接口發出對象請求。動態框架接口的基本思想是讓所有的對象請求通過調用同一組例程來達到調用對象實現中方法的目的,這組例程便叫做動態調用例程DIR。

對象適配器是對象實現訪問ORB提供的服務的主要方式由ORB提供的服務在一個對象適配器中經常包括:對象引用的產生和解釋、方式調用、交互性安全、對象和實現的激活與釋放、對象引用到實現的映射及實現的定位由於各個不同對象的對象粒度、生命周期等等。ORB內核無法為所有的對象提供一個統一、方便有效的界面。通過對象適配器的作用,可以將目的對象分成若干組,每組通過特定的對象適配器來滿足其特定的需要,但這樣一來,對象適配器的種類便會急劇膨脹,為了減少對象適配器的種類,CORBA給出了基本對象適配器(BOA),以滿足大多數對象的需要,BOA提供了產生和解釋對象引用、對請求進行認證、激活/去活實現 、激活/去活單個對象、通過框架調用方法等功能. 在提供這些功能時 ,BOA要用到一些與操作系統有關的知識 ,這些知識由實現倉庫提供,實現倉庫還存放對象實現的有關信息。

ORB接口一種直接對應於ORB的接口,它對於所有的對象接口,對象適配器都是一樣的。大部的操作都由對象適配器,句柄,框架或動態調用實現,對於所有對象都需要的操作很少。接口庫是一種服務,其中保存著接口信息,這些信息在ORB執行請求時會用得上。而且,當一個應用程序在調用一個未知接口的對象時,可以通過接口庫了解能夠在其上進行的操作。除了,它可以充當ORB功能外,實現庫通常還保存與ORB對象實現相關的信息。實現庫包括了一些信息,這些信息讓ORB可以定位並激活對象的實現。實現庫中的信息是特定於ORB或實現環境的,通常,實現的安裝和控制策略是通過實現庫實現的。除了,它可以充當ORB功能外,實現庫通常還保存與ORB對象實現相關的信息。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved