一、概述
CORBA(Common Object Request Broker Architecture, 公共對象請求代理體系結構)是由OMG(對象管理組織,Object Management Group)提出的應用軟件體系結構和對象技術規范,其核心是一套標准的語言、接口和協議,以支持異構分布應用程序間的互操作性及獨立於平台和編程語言的對象重用。
CORBA經過近十多年的發展,已逐步走向成熟,並成功地應用在我國許多大型的軟件系統中,由此產生了對掌握CORBA技術的軟件開發人員的大量需求。在此,我們應廣大讀者的要求組織了本次講座。
二、CORBA產生的背景
近年來,隨著互聯網技術的日益成熟,公眾及商業企業正享受著高速、低價網絡信息傳輸所帶來的高品質數字生活。但是,由於網絡規模的不斷擴大以及計算機軟硬件技術水平的飛速提高,給傳統的應用軟件系統的實現方式帶來了巨大挑戰。
首先,在企業級應用中,硬件系統集成商基於性能、價格、服務等方面的考慮,通常在同一系統中集成來自不同廠商的硬件設備、操作系統、數據庫平台和網絡協議等,由此帶來的異構性給應用軟件的互操作性、兼容性以及平滑升級能力帶來了嚴重問題。
另外,隨著基於網絡的業務不斷增多,傳統的客戶/服務器(C/S)模式的分布式應用方式越來越顯示出在運行效率、系統網絡安全性和系統升級能力等方面的局限性。
為了解決分布式計算環境(DCE,Distributed Computing Environment)中不同硬件設備和軟件系統的互聯,增強網絡間軟件的互操作性,解決傳統分布式計算模式中的不足等問題,對象管理組織(OMG)提出了公共對象請求代理體系結構(CORBA),以增強軟件系統間的互操作能力,使構造靈活的分布式應用系統成為可能。
正是基於面向對象技術的發展和成熟、客戶/服務器軟件系統模式的普遍應用以及集成已有系統等方面的需求,推動了CORBA技術的成熟與發展。作為面向對象系統的對象通信的核心,CORBA為當今網絡計算環境帶來了真正意義上的互聯。
三、CORBA的發展歷程
1、對象管理組織(OMG)簡介
OMG成立於1989年,作為一個非營利性組織,集中致力於開發在技術上具有先進性、在商業上具有可行性並且獨立於廠商的軟件互聯規范,推廣面向對象模型技術,增強軟件的可移植性(Portability)、可重用性(Reusability)和互操作性(Interoperability)。該組織成立之初,成員包括Unisys、Sun、Cannon、Hewlett-Packard、Philips等在業界享有聲譽的軟硬件廠商,目前該組織擁有800多家成員。
2、CORBA主要版本的發展歷程
· 1990年11月,OMG發表《對象管理體系指南》,初步闡明了CORBA的思想;
· 1991年10月,OMG推出1.0版,其中定義了接口定義語言(IDL)、對象管理模型以及基於動態請求的API和接口倉庫等內容;
· 1991年12月,OMG推出了CORBA 1.1版,在澄清了1.0版中存在的二義性的基礎上,引入了對象適配器的概念;
· 1996年8月,OMG基於以前的升級版本,完成了2.0版的開發,該版本中重要的內容是對象請求代理間協議(IIOP,Internet Inter-ORB Protocol)的引入,用以實現不同廠商的ORB真正意義上的互通;
· 1998年9月,OMG發表了CORBA 2.3版,增加了支持CORBA對象的異步實時傳輸、服務質量規范等內容。目前,宣布支持CORBA 2.3規范的中間件廠商包括Inprise(Borland)、Iona、BEA System等著名的CORBA產品生產商。
· 2002年8月,CORBA規范3.0終於出來了,在CORBA3.0規范中去掉了MiniCORBA和實時CORBA。
四、CORBA體系結構
CORBA規范充分利用了現今軟件技術發展的最新成果,在基於網絡的分布式應用環境下實現應用軟件的集成,使得面向對象的軟件在分布、異構環境下實現可重用、可移植和互操作。其特點可以總結為如下幾個方面:
1、引入中間件(MiddleWare)作為事務代理,完成客戶機(Client)向服務對象方(Server)提出的業務請求(引入中間件概念後分布計算模式;
2、實現客戶與服務對象的完全分開,客戶不需要了解服務對象的實現過程以及具體位置;
3、提供軟總線機制,使得在任何環境下、采用任何語言開發的軟件只要符合接口規范的定義,均能夠集成到分布式系統中;
4、CORBA規范軟件系統采用面向對象的軟件實現方法開發應用系統,實現對象內部細節的完整封裝,保留對象方法的對外接口定義。
在以上特點中,最突出的是中間件的引入, 在CORBA系統中稱為對象請求代理(ORB,Object Request Broker)和采用面向對象的開發模式。
對象模型是應用開發人員對客觀事物屬性和功能的具體抽象。由於CORBA使用了對象模型,將CORBA系統中所有的應用看成是對象及相關操作的集合,因此通過對象請求代理(ORB),使CORBA系統中分布在網絡中應用對象的獲取只取決於網絡的暢通性和服務對象特征獲取的准確程度,而與對象的位置以及對象所處的設備環境無關。
CORBA體系的主要內容包括以下幾部分:
(1) 對象請求代理ORB(Object Request Broker):負責對象在分布環境中透明地收發請求和響應,它是構建分布對象應用、在異構或同構環境下實現應用間互操作的基礎。
(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技術是先進技術發展的結果,它將面向對象的概念揉合到分布計算中,使得CORBA規范成為開放的、基於客戶/服務器模式的、面向對象的分布計算的工業標准。整個CORBA平台的組成結構如下圖1所示:
圖1
在CORBA體系結構的中心部分是對象請求代理程序(Object Request Broker,ORB),它作為一個"軟件總線"來連接網絡上的不同對象。在客戶端,ORB提供一個發送操作調用的接口;而在服務器端,ORB提供一個將操作調用傳輸到服務器的API。ORB的任務是定位一個合適的服務器,並且通過一個對象適配器(Object Adapter,OA)將操作調用傳送給服務器。OA的目的是:給框架發送方法,調用並且支持服務器對象的生命周期(例如,對象的建立和刪除)。老版本的CORBA規范包含一個基本對象適配器(Basic Object Adapter,BOA),就像它的名字一樣,BOA是十分簡單的。它定制的也不是很好,它禁止CORBA應用程序的可移植性。作為CORBA標准的版本2.2,BOA被可對象適配器(Portable Object Adapter,POA)所取代。MICO支持BOA和POA。
在客戶端,ORB提供一個一般的API,它是一個動態調用接口(Dynamic Invocation Interface,DII)來發送操作調用。在服務器端,OA通過動態框架接口(Dynamic Skeleton Interface,DSI)來傳輸一個操作調用,它為服務器端鏡像DII的行為。一個在客戶和服務器之間的靜態接口通過一種接口定義語言(Interface Definition Language,IDL)來定義。雖然DII和DSI代表到ORB的一般接口,並且通常被用於橋,但一個IDL規范可以用於產生到ORB的類型安全的、應用特定的接口。
在客戶端,客戶與ORB之間的靜態接口被稱為靜態調用接口(Static Invocation Interface,SII),在服務器端,這個接口被稱為靜態框架接口(Static Skeleton Interface,SSI)。一個IDL編譯器從一個IDL規范來生成一個存根stub和一個框架skeketon。存根的功能類似於一個客戶代理,而框架負責發送一個操作調作給一個真正的此操作的實現程序。
CORBA也定義了兩個運行時的數據庫。接口存儲庫(Interface Repository,IR)包含運行時所需要的IDL規范。IR可以查詢用戶定義的IDL類型的詳細情況,從而提供一個基本類型映射機制。第二個數據庫被稱為實現存儲庫(Implementation Repository,IMR),並且它包含服務器的詳細信息(即,哪一個執行程序需要被放置到哪一個服務器上)。OA需要這個信息來自動激活服務器。
CORBA標准也包含一個ORB之間的協議,它被稱為互聯網ORB之間的協議(Internet Inter-ORB Protocol,IIOP),它描述了基本的和結構化的IDL類型的在線表示,以及協議所需的協議數據單元。設計IIOP的目的是使它保持簡單、可升級並且通作。IIOP使用TCP/IP來在不同的ORB之間傳輸操作調作和它們的參數。
最後,需要說明一點,CORBA是一個規范而不是一個程序實現。CORBA提供了一個允許在分布式和異構型環境中的應用程序之間進行互操作的框架,但是關於如何實現CORBA標准的特定技術,它並沒有給出任何規定。因此,目前在市場上有許許多的CORBA程序實現,如Iona的Orbix,Inprise的VisiBroker。
五、分布式對象技術-- COM、Java和COBRA之間特性比較
目前國際上,分布式對象技術有三大流派-- COBRA、COM/DCOM和Java。CORBA技術是最早出現的,1991年OMG頒布了COBRA 1.0標准,在當時來說做得非常漂亮;再有就是Microsoft的COM系列,從最初的COM發展成現在的DCOM,形成了Microsoft一套分布式對象的計算平台;而Sun公司的Java平台,在其最早推出的時候,只提供了遠程的方法調用,在當時並不能被稱為分布式對象計算,只是屬於網絡計算裡的一種,接著推出的JavaBean,也還不足以和上述兩大流派抗衡,而其目前的版本叫J2EE,推出了EJB,除了語言外還有組件的標准以及組件之間協同工作通訊的框架。於是,也就形成了目前的三大流派。
應該說,這三者之中,COBRA標准是做的最漂亮的。COBRA標准主要分為3個層次:對象請求代理、公共對象服務和公共設施。最底層是對象請求代理ORB,規定了分布對象的定義(接口)和語言映射,實現對象間的通訊和互操作,是分布對象系統中的"軟總線";在ORB之上定義了很多公共服務,可以提供諸如並發服務、名字服務、事務(交易)服務、安全服務等各種各樣的服務;最上層的公共設施則定義了組件框架,提供可直接為業務對象使用的服務,規定業務對象有效協作所需的協定規則。總之,CORBA的特點是大而全,互操作性和開放性非常好。目前CORBA的版本是2.3。CORBA 3.0也已完成了,增加了有關Internet集成和QoS控制等內容。CORBA的缺點是龐大而復雜,並且技術和標准的更新相對較慢,COBRA規范從1.0升級到2.0所花的時間非常短,而再往上的版本的發布就相對十分緩慢了。
相比之下,Java標准的制訂就快得多,Java是Sun公司自己定的,演變的很快。Java的優勢是純語言的,跨平台性非常好。Java分布對象技術通常指遠程方法調用(RMI)和企業級JavaBean(EJB)。RMI提供了一個Java對象遠程調用另一Java對象的方法的能力,與傳統RPC類似,只能支持初級的分布對象互操作。Sun公司於是基於RMI,提出了EJB。基於Java服務器端組件模型,EJB框架提供了像遠程訪問、安全、交易、持久和生命期管理等多種支持分布對象計算的服務。目前,Java技術和CORBA技術有融合的趨勢。---www.bianceng.cn
COM技術是Microsoft獨家做的,是在Windows 3.1中最初為支持復合文檔而使用OLE技術上發展而來,經歷了OLE 2/COM、ActiveX、DCOM和COM+等幾個階段,目前COM+把消息通訊模塊MSMQ和解決關鍵業務的交易模塊MTS都加進去了,是分布對象計算的一個比較完整的平台。Microsoft的COM平台效率比較高,同時它有一系列相應的開發工具支持,應用開發相對簡單。但它有一個致命的弱點就是COM的跨平台性較差,如何實現與第三方廠商的互操作性始終是它的一大問題。從分布對象技術發展的角度來看,大多數人認為COM競爭不過COBRA。
下面是三者在集成性和可用性方面的比較:
·CORBA/ORB ActiveX/DCOM EJB/RMI
·集成性:
·支持跨語言操作 好 好 一般
·支持跨平台操作 好 一般 好
·網絡通訊 好 一般 好
·公共服務構件 好 一般 好
可用性:
·事務處理 好 一般 一般
·消息服務 一般 一般 一般
·安全服務 好 一般 好
·目錄服務 好 一般 一般
·容錯性 一般 一般 一般
·產品成熟性 一般 一般 一般
·軟件開發商的支持度 一般 好 好
·可擴展性 好 一般 好
六、CORBA應用前景
CORBA規范的推出,重新調整了客戶機與服務器之間的關系。客戶機可以向服務器提出事務請求,同時也可以為下一個請求充當服務器角色。
由於CORBA系統引入了中間件的概念,即事務代理,由中間件完成客戶機與服務器之間的通信,使得服務器對於客戶機的位置相對透明,取消了原有分布式計算模型中客戶機、服務器之間的一一對應關系。CORBA客戶機可以在運行時動態獲得服務對象的位置,並且可以對多個服務對象提交事務請求,因此,極大推動了分布計算的發展。
分布計算是指網絡中兩個或兩個以上的軟件相互共享信息資源。這些軟件可以位於同一台計算機中,也可以部署在網絡節點的任意位置。基於分布式模型的軟件系統具有均衡運行系統負載、共享網絡資源的技術優勢。
另外,CORBA規范約束采用面向對象的分布式軟件的構造方法,以接口定義語言的形式實現對象內部細節的完整封裝,從而降低了軟件系統的復雜程度,增加了軟件功能的可重用性。CORBA提供到C/C++、Java、SmallTalk等高級語言的映射,很大程度地減小了對程序設計語言的依賴性,使軟件開發人員可以在較大范圍內共享已有成果。
正是以上特點推動了分布式多層軟件體系結構的發展。目前,CORBA技術在銀行、電信、保險、電力和電子商務領域都有廣泛的應用。對象中間件技術發展迅速,各大軟硬件廠商都在積極參與有關標准的制定和產品開發工作,像IBM、HP、DEC、AT&T、ICL、Microsoft等都制定了相應的戰略。許多對象中間件的專門廠商也相繼誕生,未來的對象中間件市場將會出現群雄逐鹿的局面。
附:學習CORBA應理解的一些基本概念
1、CORBA(Common Object Request Broker Architecture)公共對象請求代理程序體系結構)。CORBA是一個規范(specification)而不是程序實現(implementation)。它提供了一個允許在分布式和異構型環境中應用程序之間進行互操作的框架。
2、ORB(Object Request Broker)對象請求代理:它作為一個"軟件總線"來連接網絡上的不同對象,提供對象的定位和方法調用,它是CORBA實現的關鍵。
3、OA(Object Adapter)對象適配器:用於構造對象實現與ORB之間的接口。它給框架發送方法,調用並且支持服務器對象的生命周期(如:對象的創建和刪除)。
4、BOA(Basic Object Adapter)基本對象適配器:負責激活對象,即當客戶請求對象的服務時,激活對象實現的能力。
5、POA(Portable Object Adapter)可移植對象適配器:是BOA的替代方式,提供大量可擴展的接口,來處理一些對於BOA來說不合理的要求。特性:
(1)支持透明激活對象。
(2)允許單個服務者支持很多對象標識。
(3)允許一個服務者上有多個POA,每個都有自己的一套管理策略。
(4)將對不存在服務者的請求委托給默認服務者,或者向服務者的管理器請求一個合適的服務者。
6、DII(Dynamic Invocation Interface)動態調用接口:位於客戶端,發送客戶端的調用請求。
7、DSI(Dynamic Skeleton Interface)動態框架接口,位於服務器端,傳送客戶端的調用請求。
8、IDL(Interface Definition Language)接口定義語言:定義客戶和服務器之間的靜態接口,通過編譯器生成客戶存根、服務器框架,以及根據支持的語言映射,自動生成來自一個CORBA IDL的代碼。目前支持的語言映射包括:Java,C++,Ada,SmallTalk和COBOL等。
9、SII(Static Invocation Interface)靜態調用接口:位於客戶端,客戶與ORB之間的靜態接口。
10、SSI(Static Skeleton Interface)靜態框架接口:位於服務器端,ORB與服務器之間的靜態接口。
11、stub 存根:位於客戶端,由IDL編譯器編譯IDL文件生成,其功能類似一個客戶代理。
12、skeleton 框架:位於服務器端,由IDL編譯器編譯IDL文件生成,其功能是負責發送一個操作調用給能實現此操作的服務。
13、IR(Interface Repository)接口存儲庫:存儲運行時所需要的IDL規范。
14、IMR(Implementation Repository)實現存儲庫:存儲對象實現(一個服務器)的詳細信息(即一個執行程序需要被放置在哪一個服務器上)。
15、GIOP(General Inter-ORB Protocol)通用ORB之間的協議:定義了一個不同ORB之間的接口。
16、IIOP(Internet Inter-ORB Protocol)因特網ORB之間的協議:IIOP把GIOP消息數據映射為TCP/IP連接行為和輸入/輸出流讀/寫。
注意:IIOP不是完全從GIOP分離出來的協議,它更像是GIOP的一個實例。
17、IOR(Interoperable Object Reference)可操作對象引用:它包括所有客戶與服務器聯系所需的各種信息(包括CORBA服務器對象進程的IP地址和TCP端口等),ORB將通過它產生在網絡上唯一標識那個將被分布對象的消息。
18、ORBAservices-- CORBA服務:在ORB級別之上,定義了大多數分布式企業對象利用的公共服務。
如:命名服務、交易對象服務、關系服務、生命周期服務、外表化服務、持久性服務、查詢服務、對象集合服務、屬性服務、事件服務、許可證服務、時間服務、事務服務、並發控制服務和安全服務等
19、CORBAfacilities-- CORBA工廠:位於CORBAservices之上,定義了更高層次的分步式服務與框架。如:打印、電子郵件、文檔管理等。