CORBA

CORBA

CORBA(Common Object Request Broker Architecture,公共對象請求代理體系結構,通用對象請求代理體系結構)是由OMG組織制訂的一種標準的面向對象應用程序體系規範。或者說 CORBA體系結構是對象管理組織(OMG)為解決分散式處理環境(DCE)中,硬體和軟體系統的互連而提出的一種解決方案;OMG組織是一個國際性的非盈利組織,其職責是為應用開發提供一個公共框架,制訂工業指南和對象管理規範,加快對象技術的發展。

簡介


基本情況

OMG成立於1989年,作為一個非營利性組織,集中致力於開發在技術上具有先進性、在商業上具有可行性並且獨立於廠商的軟體互聯規範,推廣面向對象模型技術,增強軟體的可移植性(Portability)、可重用性(Reusability)和互操作性(Interoperability)。該組織成立之初,成員包括Unisys、Sun、Cannon、Hewlett-Packard和Philips等在業界享有聲譽的軟硬體廠商,目前該組織擁有800多家成員。
CORBA
CORBA
OMG組織成立后不久就制訂了OMA(Object Management Architecture,對象管理體系結構)參考模型,該模型描述了OMG規範所遵循的概念化的基礎結構。OMA由對象請求代理ORB、對象服務、公共設施、域介面和應用介面這幾個部分組成,其核心部分是對象請求代理ORB(Object Request Broker)。
CORBA體系的主要內容包括以下幾部分。
(1)對象請求代理(Object Request Broker,ORB)。負責對象在分佈環境中透明地收發請求和響應,它是構建分佈對象應用、在異構或同構環境下實現應用間互操作的基礎。
(2)對象服務(Object Services)。為使用和實現對象而提供的基本對象集合,這些服務應獨立於應用領域。主要的CORBA服務有:名錄服務(Naming Service)、事件服務(Event Service)、生命周期服務(Life Cycle Service)、關係服務(Relationship Service)以及事務服務(Transaction Service)等。這些服務幾乎包括分佈系統和面向對象系統的各個方面,每個組成部分都非常複雜。
(3)公共設施(Common Facilitites)。向終端用戶提供一組共享服務介面,例如系統管理、組合文檔和電子郵件等。
(4)應用介面(Application Interfaces)。由銷售商提供的可控制其介面的產品,相應於傳統的應用層表示,處於參考模型的最高層。
(5)領域介面(Domain Interfaces)。為應用領域服務而提供的介面,如OMG組織為PDM系統制定的規範。

開發環境

通常來說,CORBA把用其他語言開發的程序碼和關於該程序碼能力和如何調用該程序碼的資訊包到一個套裝(package)中,包成套裝的物件則可以在網路上被其他程序(或CORBA物件)調用。在這個意義上來講,CORBA可以被看作是一個機器可讀的文件檔格式,類似於標頭檔(header),但是具有相當多的資訊。
CORBA
CORBA
CORBA使用一種介面定義語言用於刻畫物件將呈現出來的介面。CORBA又規定了從IDL到特定程序語言,如C++或Java,實現的映射。這個映射精確的描述了CORBA資料類型是如何被用戶端和伺服器端實現的。標準映射的有Ada、C、C++、Smalltalk、Java、以及Python。還有一些非標準的映射,為Perl和Tcl的映射由這些語言寫的ORB實現。
ORB是一個在對象間建立客戶/伺服器聯繫的中件。使用ORB,客戶可以調用伺服器的對象或對象中的應用,被調用的對象不要求在同一台機器上。由ORB負責進行通信,同時ORB也??象完成後返回結果。客戶對象完全可以不關心伺服器對象的位置,實現它所採用的具體技術和工作的硬體平台,甚至不必關心伺服器對象的與服務無關的介面信息,這就大大簡化了客戶程序的工作。既然能夠這麼方便,那ORB就需要提供在不同機器間應用程序間的通信,數據轉換,並提供多對象系統的無縫連接。
通常編製客戶/伺服器程序時,常常需要自己定義通信協議,而協議的制定往往與硬體和實現的方法有關,而ORB能夠簡化這一過程。在ORB下,協議通過IDL語言進行定義,保證了一致性,為了照顧到靈活性,ORB允許程序員選擇相應的操作系統,執行環境和編程語言。更重要的是它可以使原來的代碼通過一定的方式重用。CORBA是面向對象標準的第一步,有了這個標準,軟體的實現與工作環境對用戶和開發者不再重要,可以把精力更多地放在本地系統的實現與優化上。

控制系統

CORBA標準由對象管理組織(OMG)設立並進行控制,CORBA定義了一系列API,通信協議,和物件/服務信息模型用於使得異質應用程序能夠互相操作,這些應用程序用不同的程序語言編寫,運行在不同的平台上。CORBA因此為定義明確的物件提供了平台和位置的透明性,這些物件是分散式計算平台的基礎。
CORBA分佈計算技術,是由絕大多數分佈計算平台廠商所支持和遵循的系統規範技術,具有模型完整、先進,獨立於系統平台和開發語言,被支持程度廣泛的特點,已逐漸成為分佈計算技術的標準。COBRA標準主要分為3個層次:對象請求代理、公共對象服務和公共設施。最底層是對象請求代理ORB,規定了分佈對象的定義(介面)和語言映射,實現對象間的通訊和互操作,是分佈對象系統中的"軟匯流排";在ORB之上定義了很多公共服務,可以提供諸如併發服務、名字服務、事務(交易)服務、安全服務等各種各樣的服務;最上層的公共設施則定義了組件框架,提供可直接為業務對象使用的服務,規定業務對象有效協作所需的協定規則。 CORBA的IDL只是IDL的一個例子。在提供用戶語言和平台中性的遠端程序呼叫規範的同時,CORBA也定義了通常需要的服務,例如事務和安全。

技術創新

CORBA(通用對象請求代理體系結構)是在當今快速發展的軟體與硬體資源的情況下發展出的一種新技術。它可以讓分佈的應用程序完成通信,無論這種應用程序是什麼廠商生產的,只要符合CORBA標準就可以相互通信。CORBA 1.1於1991年由OMG提出,同時還提出了介面定義語言Interface Definition Language,IDL)以及能夠讓客戶/伺服器對象在特定的ORB(對象請求代理)實現中進行通信。而1994年提出並被採納的CORBA 2.0標準才真正實現了不同生產廠商間的互操作性。
CORBA(公共對象請求代理架構):這是個和微軟com,com+齊名的同類軟體技術規範,由OMT提出。
用於在不同進程(程序)之間,甚至是不同物理機器上的進程(程序)之間通訊。底層技術依靠RPC[遠程過程調用]實現。

來源


●CORBA體系結構是對象管理組織(OMG)為解決分散式處理環境(DCE)中,硬體和軟體系統的互連而提出的一種解決方案;
●OMG是一個世界性的非贏利論壇組織,成立於1989年,最初有3Com、AmericanAirlines、Cannon Inc、DataGeneral、HP、Philips Telecommunication N.M、SUN、Unisys八個成員,2013年已超過700個成員,其目標是開發一種技術上先進和商業上可用,獨立於廠商的軟體工業規範;
●1991年OMG提出了CORBA1.1,定義了IDL介面定義語言,開發出對象請求代理ORB中間件,在客戶機/伺服器結構中,ORB通過一定的應用程序介面(API),實現對象之間的交互;
●1994年12月OMG完成了CORBA2.0,提出了IIOP(Internet Inter Object Protocol),用以規範不同廠家的ORB之間的真正互通,同時增加了互操作性和對C++及SmallTalk的匹配,OMG期望通過上述規範,建立一種“連接世界的體系結構”;
●CORBA 在面向對象的標準化和互操作上邁出了堅實的一步。使用CORBA,用戶能在不知道軟體和硬體平台以及網路位置的情況下透明的獲取信息;
●CORBA自動進行許多網路規劃任務如對象註冊、定位、激活;多路徑請求;分幀和錯誤處理機制;并行處理以及執行操作;
●作為面向對象系統中的通信核心, CORBA為當代的計算環境中帶來了真正意義上的互聯;
二、CORBA的含義及特點
●CORBA定義了一種面向對象的軟體構件構造方法,使不同的應用可以共享由此構造出來的軟體構件;
●每個對象都將其內部操作細節封裝起來,同時又向外界提供了精確定義的介面,從而降低了應用系統的複雜性,也降低了軟體開發費用;
●CORBA的平台無關性實現了對象的跨平台引用,開發人員可以在更大的範圍內選擇最實用的對象加入到自己的應用系統之中;
●CORBA的語言無關性使開發人員可以在更大的範圍內相互利用別人的編程技能和成果,是實現軟體復用的實用化工具

用途


●存取來自現行桌面應用程序的分佈信息和資源;
●使現有業務數據和系統成為可供利用的網路資源;
●為某一特定業務用的定製的功能和能力來增強現行桌面工具和應用程序;
●改變和發展基於網路的系統以反映新的拓撲結構或新資源;

背景


●面向對象技術的興起;
●客戶/伺服器模式的普遍應用;
●集成已有系統及通信和實現細節的需求;
●現有分佈處理機制和方法存在著不足之處。

優點


面向對象的軟體,以數據為中心設計,對象類既具有模塊的封裝性和類屬等特性,還具有繼承特性,極大地提高了類的可擴充性和可再用能力。對象類較之於傳統軟體的功能模塊而另具有的優點是:
(1)易於理解,具有完整的語義特徵;
(2)易於擴充和修改,具有較高的通用性和適應性;
(3)易於構造組裝,具有規範的外部介面。開發應用組件必須遵循標準,以保證軟體組件的互操作性,只有遵循統一的標準,不同廠商的、不同時期的、不同程序設計風格的、不同編程語言的、不同操作系統的、不同平台上的軟體或軟體部件才能進行交流與合作。為此,OMG(ObjectManageGroup)提供了一個對象標準CORBA,它定義了一個網連對象的介面,使得對象可以同時工作。基於CORBA的對象請求代理ORB為客戶機/伺服器開發提供了中間件的新格式。
作為OMG成員的微軟公司撇開CORBA而另闢了COM(ComponetObjectModel),即組件對象模型,並把COM定位成基於對象的軟體開發模型,儘管COM被認為是微軟鼓噪出來的技術,但支持COM的開發工具卻不斷增多,其中大部分來自於微軟,包括VisualBasic和VisualC ++。
公共對象請求代理結構:CORBA標準
全球性網路使線上的所有設備和軟體成為全球共享的浩瀚的資源,計算機環境也從集中式發展到分散式環境,開放式系統的發展使用戶能夠透明地應用由不同廠商製造的不同機型不同平台所組成的異構型計算資源,因此,分散式處理和應用集成自然而然地成為人們的共同要求,那麼什麼是分散式處理和應用集成呢?它們的功能和關鍵技術是什麼呢?簡單地講,分散式處理和應用集成就是指在異構的、網路的、物理性能差別很大的、不同廠商的、不同語言的信息資源的基礎上構建信息共享的分散式系統,並且能夠有效地進行應用系統和分散式處理的集成。分散式處理的關鍵在於定義可管理的軟體構件,即面向對象技術中的“對象”。應用集成的關鍵在於為跨平台、跨機種、跨編程語言的產品提供統一的應用介面。OMG組織針對當今信息產業的要求,公布了CORBA標準,即公共對象請求代理體系結構(Common Object Request Broker Architecture),這是一個具有互操作性和可移植性的分散式面向對象的應用標準。
CORBA的核心是對象請求代理ORB,它提供對象定位、對象激活和對象通訊的透明機制。客戶發出要求服務的請求,而對象則提供服務,ORB把請求發送給對象、把輸出值返回給客戶。ORB的服務對客戶而言是透明的,客戶不知道對象駐留在網路中何處、對象是如何通訊、如何實現以及如何執行的,只要他持有對某對象的對象引用,就可以向該對象發出服務請求。
CORBA允許用戶以兩種不同的方式提出對象請求:
1)靜態調用:
通過給定介面的存根,在編譯了對象代碼后,進入客戶端的程序。因此,靜態調用必須在編譯時就知道對象及其類型。
2)動態調用:
通過ORB的動態調用介面DII,在運行時生成訪問對象的代碼。
不管客戶以哪一種形式提出請求,ORB的任務是:找出所要對象的位置,激活該對象,向對象傳遞此請求。對象執行所請求的服務后,把輸出值返回給ORB,然後再由ORB返回給客戶。

概念


對象連接

CORBA廣泛地支持對象的實現,在單伺服器系統中也可以實現由介面定義語言定義的介面。ORB的靈活性既可以直接集成已有的應用,又不會使新對象受某些原則的制約。對象連接提供了有不同類型對象實現時,使用ORB服務的方法,服務包括:對象引用、方法調用、安全控制、對象實現的激活與靜候等。

介面定義語言

(IDL)
CORBA用IDL來描述對象介面,IDL是一種說明性語言,它的語法類似於C++。
IDL提供的數據類型有:基本數據類型、構造類型、模板類型、和複合類型、操作說明。這些類型可以用來定義變元的類型和返回類型,操作說明則可以用來定義對象提供的服務。
IDL還提供模塊構造,其中可以包含介面,而介面是IDL各類型中最重要的,它除了描述CORBA對象以外,還可以用作對象引用類型。
IDL提供了介面繼承性,派生介面可以繼承其基類介面所定義的操作與類型。IDL的介面繼承性有其特殊性,此處不贅述。
總之,CORBA的IDL是一種說明性語言,描述面向對象系統開發所遵循的介面與實現相分離的基本原則。

動態調用介面

把IDL說明編譯成面向對象程序設計語言的實代碼后,客戶可以調用已知對象的操作。在某些應用中,用戶並不了解應用介面編譯信息,但也要求調用對象的操作,這時就要動態調用介面來調用用戶的操作了。例如,圖形用戶介面應支持用戶瀏覽介面公共庫,以獲得每個對象所支持的操作信息,用戶可根據自己的需求從瀏覽對象中挑選出所需的對象操作,具體的對象操作的調用實際上是用動態調用介面來完成的。

介面公用庫

介面公用庫持久地存儲IDL的介面說明,藉助於介面公用庫,可以實現對象繼承性層次結構的導航,並且提供了有關對象支持的所有操作的描述。介面公用庫最常見的功能是為介面瀏覽器提供信息,幫助應用開發者找出潛在的可重用的軟體部件。ORB可以利用介面公用庫檢查運行時的操作參數類型,但介面公用庫的基本功能是提供類型信息,為動態調用介面發送請求提供信息支持。

不足


儘管有多家供應商提供CORBA產品,但是仍找不到能夠單獨為異種網路中的所有 環境提供實現的供應商。不同的CORBA實現之間會出現缺乏互操作性的現象,從而造成一些問題;而且,由於供應商常常會自行定義擴展,而CORBA又缺乏針對多線程環境的規範,對於像C或C++這樣的語言,源碼兼容性並未完全實現。
CORBA過於複雜,要熟悉CORBA,並進行相應的設計和編程,需要許多個月來掌握,而要達到專家水平,則需要好幾年。

分散式


●在CORBA環境中,應用程序的集成是基於面向對象模型的;
●CORBA通過分散式對象計算,即分散式計算和面向對象計算的結合,以實現軟體重用,這是開發下一代軟體的基礎;
●分散式對象計算的組成
分散式計算和對象模型的結合:CORBA是這兩者的完美結合,這兩部分不僅帶來了自身的優點,而且完善了對方的優點;
代理器的使用:CORBA使用代理器來處理系統中客戶機與伺服器之間的消息;
●什麼是分散式計算
分散式計算是兩個或多個軟體互相共享信息;
大部分分散式計算是基於客戶/伺服器模型的;
分散式計算可以擁有稀有資源共享、平衡機器負載等優點,使計算機資源的使用更為有效;
CORBA採用一定的手段增強分散式計算:
●CORBA採用增強分散式計算的手段
允許客戶機與器間靈活變化的關係;
加入一個稱為代理的中介;
允許伺服器有多個進程;
支持同步及非同步兩種通信形式;
●對象模型是對象計算中的概念,是考慮問題及其可能解決方案的概念性框架;對象模型的基礎是對象概念之上的,對象提供了把行為和屬性結合成一單獨實體的手段;
●使用對象模型具有以下優點:定義一個基於現實世界的系統模型
把系統邏輯地分成能完成特定任務的對象
當需求改變時擴展模塊
● 在CORBA中分散式計算和對象模型的結合實現了相互促進,CORBA在分散式計算和對象模型環境中加入了下列內容:
●分散式計算方面的增強:對分散式計算環境,CORBA在環境中加入了特定對象的引用。在CORBA中,要完成某個操作,所需要做的僅僅是請求某個有能力完成該操作的對象去完成它,客戶機不需要知道更多的信息;
對象模型方面的增強:對於對象模型,CORBA加入了代理器的概念。代理器使應用程序不需要知道對象在網路上哪個地方和對方是如何工作的就可以進行交互,只有代理器需要知道CORBA伺服器和客戶機在網路上的位置

中間件


●中間件是處於應用程序及應用程序所在系統的內部工作方式之間的軟體;
●中間件把應用程序與系統所依附軟體的較低層細節和複雜性隔離開來,使應用程序開發者只處理某種類型的單個API――其他細節則可以由中間件處理;
●CORBA可以被稱為通信中間件,它可以看成是把應用程序和通信核心的細節分離的軟體

技術


●引入了代理的概念;
●所實現的客戶方程序與伺服器方程序的完全分離;
●將分佈計算同面向對象的概念相互結合;
●提供了軟體匯流排的機制;
●分層的設計原則與實現方法

服務


在CORBA體系規範中定義了多種類型的服務(Service),如命名(Naming)、生存期(LifeCycle)、事件(Event)、事務(Transaction)、對象持久化(Persistent Objects)、查詢(Query)、特徵(Property)、時間(Time)等服務功能。在CORBA規範中,沒有明確說明不同廠商的中間件產品要實現所有的服務功能,並且允許廠商開發自己的服務類型。因此, 不同廠商的ORB產品對CORBA服務的支持能力不同,使在針對待開發系統的功能進行中間件產品選擇時,有更多的選擇餘地。
下面介紹與分散式應用程序設計和開發關係密切的CORBA服務內容:

對象命名服務

(Naming Service)
在命名服務中,通過將服務對象賦予一個在當前網路空間中的惟一標識來確定服務對象的實現。在客戶端,通過指定服務對象的名字,利用綁定(Bind)方式,實現對服務對象實現的查找和定位,進而可以調用服務對象實現中的方法。

對象安全性服務

(Security)
在分散式系統中,服務對象的安全性和客戶端應用的安全性一直是一個比較敏感的問題,安全性要求影響著分散式應用計算的每個方面。對於分佈在網際網路中的分散式應用來講,為了防止惡意用戶或未經授權的方法調用對象的服務功能,CORBA提供了嚴格的安全策略,並制定了相應的對象安全服務。安全服務可以實現如下功能:
● 服務請求對象的識別與認證;
● 授權和訪問控制;
● 安全監聽;
● 通信安全的保證;
● 安全信息的管理;
● 行為確認。
CORBA系統將對象請求的安全性管理的功能交由ORB負責,系統組件只需負責系統本身的安全管理,使得基於分散式應用在安全性控制方面的責任十分明確。

併發控制服務

(Concurrency Control)
CORBA規範中定義併發控制服務的目的在於實現多客戶訪問情況下的併發性控制和對共享資源的管理。
併發控制服務由多個介面構成,能夠支持訪問方法的事務模型和非事務模型。由於兩種模型的引入,使得非事務型客戶在訪問共享資源時,如果該資源被擁有事務模型的方法鎖定(Lock),則該客戶轉入阻塞狀態,直到事務型方法執行結束,將共享資源鎖打開,非事務模型的客戶才能夠訪問該共享資源。
併發控制服務使多個對象能夠利用資源鎖定(Lock)的方式來對共享資源進行訪問。在訪問共享資源之前,客戶對象必須從併發控制服務中獲得鎖定。在確認資源目前正在空閑時,獲得資源的使用權。每個鎖定是一個資源-客戶對,說明哪個客戶正在訪問何種類型的資源。

對象生命期服務

(LifeCycle)
CORBA中的生命期服務定義和描述了創建、刪除、拷貝和移動對象的方法。通過生命期服務,客戶端應用可以實現對遠程對象的控制。
利用命名(Naming)服務實現分散式應用 在上篇文章中介紹的利用JavaIDL開發分散式應用時曾採用命名服務的方式。對象命名服務是ORB查找服務對象實現的一種簡單的方式。
1. 功能需求分是模擬電話用戶註冊及電話號碼查詢業務,開發基於命名服務的分散式應用程序,中間件產品採用VisiBroker 4.5.1 for Java。
根據系統功能的定義,兩種業務均屬於電信業務的經營範圍,因此定義模塊名TeleCom。電話號碼註冊為電信業務管理功能範圍,需定義該功能介面Registry,該介面內包含用戶註冊方法register();電話號碼查詢為用戶服務功能範圍,需定義介面User,該介面內包含查詢個人電話號碼方法getNumber()。經過上述分析后編寫的IDL介面定義文件TeleCom.idl如下:
module TeleCom
{ interface User //介面User聲明
{ //介面中getNumber方法的定義
long getNumber();
};
interface Registry //介面Registry聲明
{ //介面中register方法定義,其中以string類型變數作為輸入參數 ’方法返回User對象
User register(in string name);
};
};
上述介面定義文件經idl2java編譯后,在當前介面文件目錄中生成TeleCom子目錄,該目錄中包括UserPOA.java、RegistryPOA.java等文件。這些文件是客戶端和服務對象實現功能的框架以及相關的支持文件。有興趣的讀者可以實際創建IDL文件,經IDL到Java語言的映射后,分析生成文件的格式。
2. 實現服務功能
(1)實現User介面的類UserImpl
根據系統分析確定的功能,定義介面User對應的實現類UserImpl的代碼如下:
// UserImpl類繼承定義在UserPOA.java中的UserPOA類
public class UserImpl extends TeleCom
.UserPOA
{ private int aNumber;
//

應用


在CIMS環境下,應用通常是分佈的,應用之間需要交換信息和數據,例如CAD和CAM之間,CAD、CAM和MRP II之間,甚至是不同的CAD應用之間都會發生數據的交互。分散式應用的開發,尤其是面向對象的分散式應用的開發,對於系統開發者而言是極具挑戰性的。CORBA、C OM/OLE Automation和JavaBeans是針對此類應用的主要分佈對象計算模型和支持系統。一般來說,如果所開發的應用只面向Windows平台(Windows 3.x/95/NT),那麼使用COM 是最佳的選擇;如果所開發的應用完全是使用Java語言編製的,那麼就應該採用JavaBeans 的方案。但是,如果所開發的應用需要集成異構的平台,那麼無疑應該選擇CORBA。通過C ORBA系統的支持,分佈應用的開發者可以採用不同的語言、操作系統和硬體平台來開發面向對象的分散式應用。當然,首要的條件是存在支持該種平台、操作系統和語言的CORBA系統。? 利用CORBA系統進行分佈對象應用的開發具有下面三個特點:①開發代價小、效率高。系統開發者只需要編寫描述服務對象介面的IDL語言文件並安裝描述文件,實現服務對象的功能即完成了全部的任務。其它的相關代碼或者是由IDL編譯器自動創建,或者是由ORB 類庫提供,應用程序員並不需要編寫例如網路通信、數據編碼/解碼、名址映射和安全管理的程序代碼,從而可以把工作重點放到服務對象實現的過程中去。②通過CORBA系統的支持,一個服務對象可以透明地被分佈在本地和網路上的客戶所調用,擴大了服務對象的使用範圍,為分佈的客戶所共享。③CORBA系統作為“軟體匯流排”,可以為服務對象提供“即插即用”的功能,而且當對象實現改進或升級時,只要介面保持不變,客戶代碼無需作任何改動。?
在CIMS的應用環境之下,CORBA系統的另一個十分重要的作用是集成已有的應用系統,這樣的應用系統通常稱為“遺留系統”(Legacy System)。“面向CIMS的并行工程集成框架關鍵技術”課題就是一個很好的例子。各個領域框架的應用系統,例如,機械領域的Pro Engi neer、電子領域的Mentor Graphics等等,需要通過CORBA系統集成到一起實現信息的交互和共享。集成的關鍵在於對遺留系統的封裝和包裹(wrap),經過包裹,遺留系統就能夠以OMG IDL的形式提供給用戶,從而和新開發的面向對象的分散式應用同樣處理。包裹的形式視不同的遺留系統而不同,對於能夠提供用戶調用介面的遺留系統,只要利用原有的調用來構造新的界面(必要時需要進行一定的擴充)即可;而對於比較封閉的遺留系統,集成的難度就大得多了,通常是利用文件作為中介來集成。不過,CAD、CAM和MRP II 的系統廠商在發展過程中也在逐步使自身的應用系統更加開放,向用戶提供更靈活的控制手段,完全封閉的系統已經十分少見了,從而使集成工作也變得相對簡單。