關鍵詞: Web 分布式對象 CORBA IDL PDMS
1 引言
Internet/Intranet 的飛速發展使得 World Wide Web 應用日益廣泛,從而引發了一場 Web 技術的革命。目前,各種新型的 Web 應用,如電子出版,電子商務等層出不窮,許多應用系統也紛紛集成了 Web 瀏覽器和服務器, Web 技術正以日新月異的速度變化著。 Web 已不再僅僅是超媒體信息的瀏覽工具,它正逐步成為人們事務處理的通用前端。在分布式環境中,異構性是一個十分明顯的特點,一個典型的分布環境包括有大型主機、 UNIX 工作站和 PC 機,各種機器所采用的操作系統和網絡通信協議也是千差萬別。在這樣的異構環境下實現信息和軟件資源的共享將十分困難,而一個健壯的分布式計算框架將為分布式應用軟件的開發帶來巨大的好處。由于分布式對象技術,特別是 CORBA 技術對于提高 Web 的網絡計算能力有著無可比擬的巨大作用,它已開始進入 Web 領域并投入應用。
2 分布式對象技術
分布式對象技術主要是在分布式異構環境下建立應用系統框架和對象構件,在應用系統框架的支撐下,開發者可以將軟件功能包裝為更易管理和使用的對象,這些對象可以跨越不同的軟硬件平臺進行互操作。目前主要的分布式互操作標準有 Microsoft 的 OLE/COM/DCOM 標準、 Sun 公司的 Java RMI 標準和 OMG 組織的 CORBA 標準。下面以 CORBA 為代表論述分布式對象技術的體系結構,并對三種標準加以比較。
2.1 CORBA 體系結構
CORBA 的體系結構如圖 1 所示。在該體系結構中主要描述了以下內容:
(1) 接口與 IDL 語言
接口是 CORBA 系統中一個非常重要的概念,因為它代表了對象的服務能力,為客戶提供了操作對象的唯一方法。簡單的說,接口就是一組相關函數的集合,接口中每一個函數都給出了詳細的說明,包括函數名、參數個數、參數類型、返回類型以及可能拋出的異常。必須指出的是接口只定義了函數的原型,并沒有給出具體的實現,這就留給開發者足夠的靈活性來提供他們自己的函數實現。接口是通過一種中性的接口描述語言( IDL , Interface Description Language )來定義的。雖然 IDL 語言只提供了被 ORB 操作的對象的概念框架,但是 ORB 在運行時并不需要 IDL 的源代碼。只要樁例程或運行狀態下接口庫中的等價信息是可用的, ORB 就能通過特定的方式完成其功能。
(2) 樁和構架
樁( Stub )可以看成是實際對象在客戶進程中的映像,其中的接口必須是預先定義好的,因此它為客戶提供了一種靜態的調用方式。與樁相對應的構架( Skeleton )為服務器提供了一種靜態的實現方式。 IDL 編譯器翻譯描述對象接口的 IDL 文件,生成對應具體編程語言的 IDL 樁和 IDL 構架。樁負責將客戶請求進行編碼,發送到對象實現端,并對收到的結果進行解釋,然后把結果或異常返回給客戶。與此相反,構架對客戶的請求進行解碼,定位目標對象和請求執行的對象方法,激活該方法,然后把結果或異常信息編碼返回給客戶端。
(3) 動態調用接口和動態構架接口
與樁和構架不同,動態調用接口( DII , Dynamic Invocation Interface )和動態構架接口( DSI , Dynamic Skeleton Interface )提供了動態調用的方式和動態實現的方式,它們使得用戶可以在事先不知道對象接口信息的情況下通過查詢接口庫或采取其它手段動態地獲得對象接口信息,然后使用 ORB 核心接口中的 DII 動態調用方法構造客戶請求并發送到對象實現。在對象實現方可以使用 DSI 的動態分發機制處理客戶方的請求。與靜態方式相比,動態方式提供了很大的靈活性,但是它的工作效率沒有靜態方式高。另外,實現系統的接口大多可以預先確定,所以大部分情況下都是采用靜態方式。
客戶方與服務器方所采用的方式并不一定要一一對應,也就是說,客戶方支持靜態和動態兩種調用方式,服務器方也支持靜態和動態兩種實現方式,經過組合得到的四種方式都可能出現,例如,客戶方使用靜態調用方式,而服務器方使用動態構架接口是允許的,反之亦然。
(4) ORB 核心和對象適配器
與 Unix 的實現機制相類似, CORBA 規范將那些相對固定的、單一的功能提取出來交由 ORB 內核實現以保證它的可靠性、高效性與可重用性。作為整個 CORBA 系統的基礎, ORB 內核通過屏蔽諸如服務器位置、實現方式、通信協議等具體細節為客戶方與服務器方之間的通信提供了透明的傳輸機制。當前的應用系統存在著各種不同的對象實現方式,例如可執行程序、面向對象的數據庫等,他們有不同的定位對象、解釋對象、激活對象的方法。因此,如果將現存的所有對象實現的解決方案都包含在 ORB 內核中,它必將非常龐大、冗余并且難以移植。為了確保 ORB 內核的高效與可移植性,一個稱為對象適配器( OMA )的中間層加入到 ORB 與對象實現之間。定位目標對象的任務從 ORB 內核中分離出來交給對象適配器來完成。
2 .2 CORBA 與 RMI 和 DCOM 的比較
RMI 直接把分布式對象模型嵌入到 Java 語言內部,使得 Java 程序員可以自然地編寫分布式程序,不必離開 Java 環境,或者涉及 CORBA IDL 以及 Java 到 CORBA 的類型轉換。然而 RMI 不遵守 CORBA 標準,基本上是 Java-to-Java 技術,它需要客戶方程序和服務方程序都用 Java 編寫,難以實現與其它語言編寫的對象之間的互操作。
DCOM 則是從 COM 改造過來的。 Microsoft 把 DCOM 作為開發 Internet 和組件的基礎,目前已搭載到 Windows NT 4.0 以上版本和 Windows 98 中。 COM 這一技術部分是作為規范,它定義對象實現的二進制標準,用于單機上應用之間的通信,對象實現與使用的語言無關。 DCOM 是 COM 的分布式擴展,在 DCE RPC 之上構造對象的遠程過程調用層支持對遠程對象的訪問。一個 DCOM 對象(又稱為 ActiveX 對象)是支持一個或多個界面的組件, DCOM 界面指預先規定的一組相關函數。 DCOM 類實現一個或多個界面,由一個又一個 128-bit 類 ID 唯一標識??蛻舫绦蛲ㄟ^獲得指向 DCOM 對象的界面的指針與該對象交互,通過指針調用其操作??蛻舫绦驈牟恢苯釉L問對象。 DCOM 對象不支持對象 ID ,因此,客戶程序不能與某個特定的對象發生聯系。
3. 分布式對象技術與 Web 技術 的集成
Web 的發展已經歷了兩個發展階段。 ①靜態的信息發布階段。服務器只提供信息的存儲和發布功能,用戶通過 瀏覽器被動地獲取信息,功能單一,缺乏交互性。 ②動態的信息發布階段。用戶可以通過 CGI 或 JDBC 等多種手段與 Web 服務器,甚至后端數據庫直接交互,極大地增強了客戶方的可操作性。但是, HTTP 協議是一種無狀態的協議,很難支持聯機處理和系統集成。分布式對象技術與 Web 之間并不存在著內在的必然聯系,但是這兩者相結合后,卻產生了誘人的技術魅力。
第一,它可以消除 CGI 的瓶頸,使客戶端能直接調用服務器上的方法??蛻舳丝梢岳妙A編譯過的樁( Stub )傳遞參數或利用 CORBA 的動態調度服務在運行中產生參數,服務器通過一個預編譯的程序直接接受調用。與 HTTP/CGI 比較起來,客戶 / 服務器的開銷非常小。在 CGI 中,一個 Applet 每次調用服務器上的方法必須要啟動一個新的進程請求,而 CORBA 不需要, CGI 不能維護客戶端調用間的狀態, CORBA 則可以做到。
第二, CORBA 可以提供可伸縮的服務器到服務器的基礎結構,對象也可以利用 CORBA ORB 進行通信。這樣,為了均衡來自客戶機上的請求負荷, ORB 可以讓這些對象運行在多個服務器上,而且, ORB 還可以根據各個服務器的負荷情況進行調度。而 CGI 面對要響應的成百上千個請求,無法將負載分散到多個進程或多個服務器上,這就是 CGI 運用的瓶頸。
第三, CORBA 可以采用分布式對象結構擴充 Java ,目前, Java Applet 還不能利用遠程方法調用進行跨地址空間的通信,而 CORBA 可以使 Java Applet 能夠和用不同語言編寫的其它對象進行跨地址空間及網絡的通信,同時還可以提供強大的分布式對象服務。
CORBA 和 Web 相結合產生了面向對象的 Web 體系結構,如圖 2 所示,它由客戶層( Web 瀏覽器)、應用層( Web 服務器和應用服務器)和資源層(數據庫服務器)三層構成??蛻魧油ㄟ^ HTTP 協議訪問 Web 服務器,從 Web 服務器下載 HTML 頁面,頁面中內嵌的 Java Applet 通過 CORBA 內部通信機制( IIOP )訪問應用層的對象和服務。應用層由 Web 服務器和應用服務器構成,主要提供安全管理,事務處理和各種訪問服務。 Web 服務器提供常規的頁面訪問請求。應用服務器利用對象通信協議在 Web 瀏覽器和資源層之間提供事務處理和數據庫訪問的功能。資源層中主要包括數據庫服務器和數據庫。數據庫服務器由會話管理、公共語言組件、數據存儲和訪問組件構成。會話管理處理來自應用層的請求。公共語言組件解釋來自客戶端的請求,并將它們轉換成一種適于傳遞到數據存儲的形式。數據訪問和存儲執行請求包括訪問數據庫和進行事務處理。
4 基于 CORBA 的 Web 計算模式實例分析
受國家 863 計劃 CIMS 專家組的委托,由東南大學和同創集團軟件事業部聯合開發研制的“基于 CORBA/Web 技術的企業級和部門級產品數據管理系統”,此項目得到八六三計劃專家委員會的高度重視,被列為八六三重大目標產品項目。
產品數據管理系統( PDMS , Product Data Management System )以產品為中心,通過計算機網絡和數據庫技術,把企業生產過程中所有與產品相關的信息和過程集成起來,統一管理,使產品數據在其生命周期內保持一致、最新和安全,實現整個企業信息的集成,為工程技術人員提供一個協同工作的環境,從而縮短產品研發周期、降低成本、提高質量,為企業贏得競爭優勢。
下面簡要介紹基于 CORBA/Web 技術的 PDMS 的研制開發步驟:
( 1 )通過對應用需求的分析,歸納得到 PDMS 的服務功能及其描述。在功能模塊上, OMG 組織提出了“ PDM 使能器”規范,將 PDM 的功能通過八個使能器(工程活動需求、工程變更、制造實現、文檔管理、產品結構定義、配置管理和測試維護等)封裝起來。使它們能夠支持企業制造過程模型中的產品開發過程。本系統的開發參照“ PDM 使能器”規范,保證了與其它 PDMS 的交互性和通用性。
( 2 )根據得到的服務功能描述,使用標準的 IDL 語言進行描述,從而得到應用系統服務功能的 IDL 文件。 IDL 文件中包括了 PDMS 服務的數據類型和服務接口,服務接口又可以分為屬性和操作。 IDL 語言是 CORBA 規范中定義的一種中性語言,它用來描述對象的接口,而不涉及對象的具體實現。通過 CORBA 軟件總線系統提供的 IDL 編譯器工具對 PDMS 服務的 IDL 描述文件進行轉換,得到客戶端樁文件和服務器端構架文件。在 CORBA 中定義了 IDL 語言到 C 、 C++ 、和 Java 等語言的映射。本系統中服務器端的構架文件采用 C++ 的映射形式,以充分利用 C++ 語言在對象實現方面的優勢;客戶端的樁文件采用 Java 的映射形式,以充分利用 Java Applet 在 Web 上的獨特功能。
( 3 )完成服務器端方主程序的編寫,通過將服務器端功能實現代碼與所生成的服務端構架代碼聯合編譯得到實現相應系統服務功能的軟構件,隨后使用對象管理工具將該軟構件注冊到 CORBA 軟件總線支持環境中,以供其它應用調用和訪問。
( 4 )完成客戶方 Java Applet 的編寫,該 Applet 根據用戶的需求向服務器方發出請求,并把請求結果返回給用戶。由于絕大多數的瀏覽器對從網上下載的 Java Applet 采取一種稱為“ Sand-Box ”的安全模型,使得 Java Applet 既不能與宿主機以外的計算機建立網絡連接,也不能訪問本地文件系統、本地設備。而 CORBA 系統的特點是服務對象的分布性和遠程對象定位的透明性。本系統通過 CORBA 系統提供的 IIOP 代理( Gatekeeper )來解決安全限制的約束,它負責接受 Applet 發來的 IIOP 報文,分析報文內容,將其轉發給位于其他主機上的 Applet 無法直接調用的 CORBA 服務對象實現,并將服務對象實現返回的 IIOP 報文送交 Applet 。
( 5 )將客戶方程序( Java Applet )與前面生成的客戶端樁代碼聯合編譯。編寫客戶方的 Web 網頁并在其中嵌入 Java Applet 。網頁制作工具采用 FrontPage2000 ,利用 VbScript 實現與用戶及 PDMS 對象實現的交互。
( 6 )發布制作好的網頁至 Web 服務器上,即可以通過 Web 瀏覽器使用該 PDMS 。
5 結束語
分布式對象技術與 Web 的結合,大大地方便了 Web 應用的開發、發布和維護,有助于在 Web 上建立分布式對象環境,推動 Web 進入動態的應用發布階段,從而極大的提高了 Web 的分布計算能力。
參考文獻
[1]Object Management Group. Common Object Request Broker: Architecture and Specification (Revision 2.2), 1998
[2]Microsoft Corporation InfoView [M]. 微軟公司, 1997.
[3]Randy Otte, Paul Patrick, Mark Roy. Understanding CORBA. prentice Hall, 1996
[4]OMG CORBA/IIOP 2.2 Specification.http:\\www.omg.org, 1998.2
[5] 汪蕓 .CORBA 技術及其應用 [M]. 南京 : 東南大學出版社 , 1999
原文轉自:http://www.anti-gravitydesign.com