對COM/DCOM、CORBA和Java Beans的全面比較

本文分別對COM/DCOM、CORBA和Java Beans在“相關背景”、“基本概念”、“技術內容及特點”三個方面進行對比。

 一、相關背景的比較

 COM/DCOM

 爲了適應更加複雜應用的需要,Microsoft公司推出了構件對象模型COM,COM支持同一臺計算機上不同進程間對象的調用;由於分佈式處理系統的廣泛應用和與CORBA競爭的需要,Microsoft公司於1997年推出了COM的分佈式版本,即DCOM,支持對象間通過網絡(包括局域網、廣域網、因特網)進行通信。

CORBA

 CORBA(Common Object Request Broker Architecture公共對象請求代理體系結構)是由OMG工業集團定義的分佈對象計算模型和系統結構。OMG與1990年提出了一個對象管理結構(OMA),這是CORBA的最原始的構想及基礎。在OMA的基礎上,1991年一些大公司聯合提出了CORBA1.1版。目前有不少公司從事CORBA的實現工作,並推出了基於CORBA的產品。
CORBA僅是一個分佈對象規範,沒有限定使用何種程序設計語言,其目的是不使CORBA束縛在某種特定程序設計語言上。用不同語言書寫的對象,只要符合CORBA規範,就可以相互調用。但由於CORBA規範僅是一個書面的說明,各公司對其理解未必一致,規範中也有不少部分沒有做統一規定,由廠家自行決定,因此各廠家基於CORBA的產品未必相互兼容。

Java Beans

 Java Beans是於1996年提出的基於Java語言的分佈對象模型,其構件叫Bean。Bean就是以Java語言中的類和對象爲基礎定義的。當初,Java Beans主要爲一些軟件構造工具提供一些可視化構件。後經不斷擴充,發展成爲一種通用分佈對象模型。但是,Java Beans不如CORBA、DCOM成熟,還在不斷完善之中。

二、基本概念的比較

 COM/DCOM

 COM/DCOM對象模型設計的指導思想是健壯、高效和切實可行。COM對象具有多個接口,通過每個接口可以訪問一組成員函數。成員函數相當於方法。每個對象擁有自己的數據,表示對象的狀態。數據只能通過接口訪問,用戶和應用程序不能越過接口訪問數據。每個接口僅包含其所屬成員變量函數的調用說明及引用它的指針。成員函數的實現不是對象的一部分,一般可以有兩種方法實現:一是用動態鏈接庫DLL實現,二是作爲一個可執行模塊EXE實現。不管哪一種實現,成員函數都可以動態調用,直接執行,不需要編譯連接。甚至調用者所用的程序設計語言與實現成員函數所用的程序設計語言也可以是不同的。用DLL實現時,在調用成員函數前必須將DLL加載到本地進程的地址空間,不能跨進程空間進行訪問。而EXE模塊不受這個限制,可以跨進程訪問。

 在COM對象的多個接口中,有一個接口是每個對象必備的該接口被命名爲Iunknown,接口名前面加字母I,以便識別。

 COM/DDCOM也有類的概念,類也看成是一種對象,稱爲類對象。由於COM/DCOM不支持繼承的概念,一個對象的所有接口及其成員函數都已在對象中定義,在引用對象時不必到其所屬的類或其祖先類中查詢有關的內容。只有在創建一個對象(即類的一個實例)時,纔用到類中的內容。在COM中,除了類以外,還有類型(type)的概念。類型比類更抽象,它與實現無關。而類中可含有一些與實現有關的屬性,諸如支持它的軟件名稱、所用的圖表等。例如一個複合文件可以定義成一個類型,但這種類型可用不動的字處理軟件、電子表格軟件、多媒體軟件來實現,形成不同的類,可用不同的圖表表示。用戶可以根據運行環境在同一類型中選擇合適的類。

軟件開發網 www.mscto.com

CORBA

 CORBA的對象模型基本上按OMG所定義的公共對象模型COM(不同於微軟的COM),支持類、封裝、繼承和多態,是一個功能比較完備的對象模型。對象或類之間可按客戶/服務器方式互相調用。每個對象或類即可以作爲客戶,也可以作爲服務器,有時還可以兼作客戶和服務器。
客戶對象和服務器對象只通過消息交互作用。客戶對象向服務器對象發出請求,服務器對象響應客戶對象的請求完成一定的操作,並返回操作結果和必要的信息。它們只通過消息往來,不必瞭解與請求無關的功能。即使客戶對象或服務對象重新實現,只要接口的語法和語義不變,不影響用戶的使用。

 客戶和服務器的通信方式一般有兩種:常用的是同步方式,即客戶提交請求後,客戶要等到服務器放操作執行完畢並返回操作結果或信息後,才繼續運行;另一種方式是異步方式,即客戶提交請求後,可繼續運行。

Java Beans

 與其它分佈對象模型一樣,Java Beans是以對象作爲基本構件。類是對象的模板,而對象(即Bean)是有類生成的一個實例。類中可有多種構造對象的函數。如果生成對象時,不指明具體的構造函數,僅指明類名,則用下面的接口調用:new <Class nama> ()。這就表示用類中的缺省構造函數Constructor()生成對象。在Java Beans中,一組對象相互聯繫,相互作用,有公共的接口,服務於某一應用目的,則這組對象組成一個容器。以上的概念和方法與CORBA、DCOM相類似。

三、技術內容及特點的比較

 COM/DCOM

 1. 全局唯一標識符
   在COM/DCOM對象模型中,對象的每個接口、每個類對象、每個類型都有一個全局唯一標識符,爲了保證標識符的唯一性,COM/DCOM用128位的整數作爲全局的唯一標識符。
 
 2. 代碼複用和繼承
   從健壯性考慮,COM/DCOM對象模型中沒有采用繼承的概念,但是並不影響代碼的複用,它的包含/委託機制就可以體現代碼複用的作用。從長遠來看,作爲一個通用系統對象模型,COM/DCOM增加繼承機制是必要的,問題在於克服繼承帶來的負面影響。

 3. 多接口和對象的演化
   由於COM/DCOM的接口是不可改變的,所以要有變化,只能新增一個接口。COM/DCOM允許多個接口並存,這樣也就不用使用版本的概念,而用同一個對象的多個接口來區分。多接口也增強了對象的開放性,任何用戶可以在自己選擇的對象上定義其需要的新接口。

 4. 持久數據及其操作
   這裏的持久數據指存儲在磁盤上的數據,在COM/DCOM中,仍借用文件系統中的功能,不過要把文件系統的有關功能映射成對象的接口。在COM/DCOM中有兩種持久數據對象:一是存儲對象;二是流對象。存儲對象和流對象的數據可有兩種訪問模式:一是直接方式;二是事務方式。

 5. 持久數據智能名
   在訪問磁盤上的持久數據時,用戶往往只給出數據名,而由文件系統或數據庫系統根據數據名去尋找數據,這個過程叫做數據名與數據的綁定。爲了在COM/DCOM中實現數據的綁定功能,專門創建了一個類對象,叫Moniker。

 6. COM/DCOM庫
   COM/DCOM庫與所用的平臺有關,對不同的平臺,有相應的COM/DCOM庫。

CORBA

 1. 結構概況
   CORBA的結構分爲客戶方、服務方、ORB、對象服務、公共設施、IDL源文件、實現倉庫等部分。ORB是連接各方的核心。客戶應用程序的請求交給ORB(客戶方),ORB可爲客戶選擇合適的服務器和方法代碼,在服務方執行。服務方返回用戶的操作結果或信息也由ORB轉交。

 2. 調用方式
   在CORBA中,客戶向服務器提交請求的過程叫調用。爲了形成請求,客戶程序至少提供兩種數據:一是操作名稱及其參數;二是對象引用。應用程序設計者須按IDL的格式將操作的接口定義於OMG IDL文件中。爲了用這些數據形成請求,CORBA提供了存根型調用和動態調用兩種機制。
 3. 服務器方的CORBA軟件
   當客戶的請求提交給ORB後,ORB按其所選的服務器和方法,通過對象適配器OA引導到相應方法的實現程序。對象適配器OA通過服務器構架調用方法。下面是對這些構件的功能的描述:

  • 對象適配器OA:是ORB與服務器中具體實現通信的連接軟件;
  • 服務器構架:當對象適配器OA選擇並激活相應的類以後,服務器構架通過服務器構架中的子程序,將請求的操作映射成相應方法的實現並通知服務器,在服務器控制下執行方法。
  • 實現倉庫:實現倉庫中含有定位和激活對象的信息,是對象訪問和具體實現相結合的手段,正像接口倉庫是對象訪問與具體接口相結合的手段。

 4. 在異構數據集成中的應用 軟件開發網 www.mscto.com
   由於各種數據源有各自的用戶接口,若要通過ORB相互訪問,必須提供面向對象的接口。爲此,對每種數據源,都要加上一個包裝器。包裝器實質上就是一個用戶接口轉換器。因爲對象模型是很通用的模型,各種數據源都可以用等效的對象接口替代。不過包裝器實現起來有簡單和複雜之分。例如,OODB的包裝器實現起來就比較簡單,而WWWDE的包裝器實現起來就比較複雜。

 5.CORBA規範的技術特點

  • 引入了代理的概念
  • 所實現的客戶方程序與服務器方程序的完全分離
  • 將分佈計算同面向對象的概念相互結
  • 提供了軟件總線的機制
  • 分層的設計原則與實現方法

Java Beans

 1. 對象級的狀態保留
 Java Beans生成的對象若不特別申明,則只存在於內存中。當對象中斷運行時,對象的狀態可能從內存消失,如果對象再恢復運行,則需重新生成並初始化。爲此,Java Beans提供了狀態保留功能,只要在生成對象時加上申明implements java.io.serializable或implements java.io.Externalizable。前一種申明表示在對象中斷運行時調用運行環境中的工具軟件保留對象狀態,在對象中並無保留對象狀態的方法;後一種申明表示在對象中斷運行時有對象本身的方法保留對象狀態,主要用於對保留方式有特殊要求的場合,例如有些屬性值可以免於保留。

 2. 內省和核心反射
 Java Beans通過Introspector類的Core Reflection API到類中直接讀取類及方法的定義,通過Introspector類所獲得的類的屬性、事件和方法的定義都保存在名爲Bean Info的對象中。若要查詢一個類的定義,只要訪問Bean Info對象即可。

 3. 多線程控制
 Java語言具有多線程控制功能,爲了解決臨界區訪問衝突的問題,在Java Beans中用Synchronized語句定義臨界區。當線程執行到臨界區時,它必須先取得臨界區的鎖,才能執行臨界區中的代碼。如果沒有申請到鎖,該線程須排隊等待,從而實現臨界區的互斥功能。

 4. 安全措施
 當運行來源不明的Beans時,很可能使用戶的計算機系統遭到有意無意的破壞。爲了防止破壞,Java Beans在下面四個環節採取了安全措施:
Java語言及其編譯器;字節碼檢測器;類加載器;安全管理軟件。

以上在“相關背景”、“基本概念”、“技術內容及特點”三個方面分別對COM/DCOM、CORBA和Java Beans進行了對比,隨着技術的進步,它們還會產生更多的共性和特色,同時也會爲我們系統的開發帶來更多的便利。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章