1 引言
??? 互聯網技術及電子商務應用技術的跳躍式發展,極大地推動了能夠處理商家對商家(B2B)和商家對客戶(B2C)之間交互的新一代企業應用程序" title="應用程序">應用程序的開發。Java作為創建這種應用程序的主要語言而出現,它能夠被大量的分布式應用" title="分布式應用">分布式應用系統所采用的主要原因在于其面向對象的編程思想和跨平臺的移植性以及完善的安全性管理,同時它還提供了一個具有豐富的基礎類庫和開發工具的應用平臺。CORBA是目前最具生命力的跨平臺技術,它獨立于網絡協議、編程語言和軟硬件平臺、支持異構的分布式計算" title="分布式計算">分布式計算和不同編程語言的對象重用。基于目前流行的C++和Java等面向對象的程序設計語言,中間件軟件開發商開發了相應的CORBA規范實現產品,如Borland公司的VisiBroker、Sun公司的Joe、INOA的Orbix、IBM的ComponentBorker等。正是基于CORBA產品的編程語言無關性和Java語言的平臺無關性,目前眾多的分布式應用軟件系統采用“Java+CORBA產品+WEB”的設計模式。本文在作者研究開發工作的基礎上,總結出了一個用CORBA改進的三層WEB應用模型,并以“配電自動化中的操作票生成系統”為例進行進一步說明。
2 現有三層WEB應用的弊端
?? 目前多數B/S" title="B/S">B/S系統的工作原理為:客戶端" title="客戶端">客戶端以瀏覽器的形式提供基本的圖形用戶界面(GUI)。用戶通過瀏覽器創建用戶邏輯并且向由URL(Uniform Recourse Locator)所指定Web服務器提出服務申請。在Web服務器對用戶進行身份驗證后,用HTTP協議把所需的文件資料傳送給用戶,客戶端只是接受文件資料,并顯示在WWW瀏覽器上。在Web服務器中使用CGI、ISAPI/NSAPI、JSP等技術編寫全部應用邏輯,再配合后臺數據庫實現系統功能。這種應用結構目前被絕大部分企業信息系統所采用。但隨著分布式技術的不斷發展,這種結構暴露出了許多問題:
(1) 重復開發成本昂貴。當系統需要提供Internet/Intranet的存取形式時,舊的MIS系統都必須以新的軟件技術編寫一次,造成重復開發,而且當企業的運作流程改變時必須同時修改JavaServer和JDBC Servlet,又增加了系統運作的成本。
?(2) 延展性問題。由于三層結構的WEB系統所有的邏輯都必須在Web服務器中實現,因此系統的延展性不佳,而服務器能夠支持的客戶端用戶數目有一定的限度,當數目超過時,應用系統的執行效率便會下降,對于Internet和電子商務等的應用系統而言,這種客戶端用戶數目的限制是無法忍受的,所以需要使用更具有延展性的分布式結構,可以隨著客戶端用戶數目的增加,進行負載平衡的調整。
3 用CORBA改進的三層WEB模型
3.1 CORBA是三層WEB結構的良好補充
CORBA現在已經成為公認的增強分布式計算的工具。CORBA的實現提供了開發下一代軟件的基礎,即開發可重用軟件,就如同我們插上或拔下硬盤設備和內存條一樣,我們也差不多可以在CORBA上插上或拔下網絡,類庫和應用程序。CORBA通過分布式對象計算,即分布式計算和和面向對象的結合,以實現軟件重用。分布式對象計算有兩個重要組成部分:
☉ 分布式計算和對象模型的結合
?? CORBA是這兩者的完美結合,CORBA使應用程序能共享和訪問其他應用程序的對象,效果是使這些對象對于所有實現了CORBA的應用程序來說都是一樣的。
☉ 代理器的使用
?? CORBA使用代理器,或稱中介,來處理系統中客戶機與服務器間的消息(稱為請求)。代理器能選中一個最符合客戶機請求的服務器,并把客戶機上所看到的接口從服務器的實現中分離出來。只要接口及其行為沒變,就可以構造一個新的服務器或修改已有的服務器而無需改變客戶機。
CORBA的這些特性,恰好能補充三層WEB結構的不足,為實現新型的三層結構提供了條件。
3.2 用CORBA改進了的三層WEB模型
??? 在該模型中,第一層表示層采用Web瀏覽器提供用戶界面,并通過從Web服務器上下載的Applet與CORBA中間件聯系。第二層應用服務層主體為Web服務器和CORBA服務器。Web服務器向客戶端提供HTML頁面和Applet下載,當系統外部Internet/Intranet要訪問數據庫時則充當CORBA的另一個客戶端。CORBA服務器負責與數據庫服務器進行交互,它是脫離Web服務器而存在的,以一個獨立的服務器形式與Web服務器一起運行。模型見圖1
??? 系統的工作過程如下:
(1) 客戶端發送請求至Web服務器的Servlet,Servlet根據用戶請求返回給用戶包含Applet的HTML頁面。Applet作為三層體系結構的表示層,用于與用戶進行交互。
(2)當客戶程序Applet要使用某個對象所提供的服務時,它首先要找到該對象實現的對象標識相應的STUB,并通過該STUB向本地的ORB核心發出請求,本地ORB再通過IIOP協議與遠程ORB進行通信,遠端ORB核心將請求發送給相應的對象適配器。
(3)對象適配器接受到請求后,查找相應的SKELETON,通過該SKELETON激活目標CORBA對象,CORBA對象執行相應的請求,進行相應的應用邏輯處理和數據庫訪問。
(4)執行結果經SKELETON打包后,按照對象請求傳遞和執行路徑逆向地返回給客戶。至此完成一次完整的請求調用。
(5)當用戶通過Internet/Intranet訪問數據庫時,Web服務器根據用戶權限把相應的Applet提供給STUB,再由相應的CORBA對象從數據庫中檢索相應的數據返回給用戶。
4 具體應用實例
??? 作者在近期參與開發了一個大型項目“配電自動化中的操作票生成系統”,其中就應用了基于CORBA的三層WEB模型。操作票生成系統主要目的是根據操作員對一段線路的動作(例如停電)從數據庫檢索出操作順序,自動產生操作票,并提供瀏覽操作票歷史數據,打印操作票,刪除操作票等功能。由于基站(服務器)下面要帶50~100個分站(客戶端),而且各個分站的業務流量很大,而且根據不同用戶的不同需求,需要經常改換業務邏輯。我們經過認真的研究,決定采用此WEB應用模型。
4.1 系統實現的主要步驟
4.1.1 ORB的選取
??? ORB雖然是一個中間件,但是它卻是CORBA的基礎。它可以建立對象之間的Client/Server關系。通過ORB,表示層的OMG IDL Stub可以透明的引用CORBA服務器上的一個Server skeleton對象的方法。ORB解釋該調用并負責查找一個實現該請求的對象,找到后,把參數傳給該對象,調用它的方法,最后返回結果。VisiBroker是Borland公司基于CORBA規范開發的分布式應用中間件軟件產品,目前比較流行的是基于CORBA2.3版規范的VisiBroker for C++4.0、VisiBroker for java4.5.1。由于能夠和先進的Java和C++開發環境互操作,VisiBroker強大的開發能力使關鍵任務應用的開發更容易、全面,降低了開發風險。所以我們選用VisiBroker作為ORB的基礎結構。整個系統也是基于java編程的。
4.1.2 接口定義
??? 基于VisiBroker開發分布式應用程序首先要對開發的分布式應用進行系統分析,確定需要在服務對象端實現的功能,編寫IDL接口定義文件對需要在服務器對象端實現的對象以及對象中的方法、應用屬性以及方法的異常等內容進行描述。其中的一段IDL語言描述如下:
//Piaos.idl
module Piaos
{
? enum Piaoifo? {Piao_date,Piao_man};
?? …
?? interface Piaos
???? {
???????? void delet? (in Piaoifo reason, in string description);
???????? string browsePiao (in short PiaoID);
???????? …
????? }
????? …
}
??? 在安裝了VisiBroker中間件軟件系統并設置相應路徑后,利用下面的命令對IDL接口定義進行映射:prompt>idl2java Piaos.idl,分別生成服務對象框架代碼和客戶端存根代碼,用于編寫服務對象端應用程序以及客戶端應用程序。
4.1.3 ORB客戶機端的構建
??? 啟動該系統時,瀏覽器根據用戶的權限及選擇的操作,從Web服務器下載某一Applet 控件,Applet控件負責提供用戶界面以及相應用戶操作,并通過客戶樁Stub向ORB提出請求。Stub提供一個因接口而異的API,客戶機應用程序用樁類型激發API或動態激發API向服務器發送請求。
??? 當使用樁類型激發時,所激發的請求在客戶樁編譯時就已經構造好了,客戶樁被鏈接到客戶機應用程序。使用樁類型激發,就是調用一個由接口定義所生成的Stub過程,這些接口定義包含有請求對象上的某個操作所需的信息。樁類型激發的特性為支持同步和單項通信形式,但不支持延遲同步通信(即異步通信),編程時有良好的類型校驗,編譯速度快,編程容易。
??? 當用動態激發發送一個請求時,該請求完全是在運行時由接口倉庫中的信息組成,這些信息用來查詢以獲取被請求對象操作的標記。雖然動態激發與樁類型激發相比較有支持所有通信形式、允許用戶在系統上增加新的類而無須對客戶代碼作任何修改的優點,但是編程相對麻煩,編譯速度也較慢。
??? 根據需求分析,本系統采用同步通信就能達到預期效果,故采用樁類型激發。
??? 下面的代碼是瀏覽操作票的請求部分。
??? //browsePiao.java
?? …
?? public static void main(String[] args)
?? {
??????? //獲取對象請求代理初始化引用方法
??????? org.omg.CORBA.ORB browsePiaoOrb=org.omg.CORBA.ORB.init(args,null);
??????? short PiaoID=8;
??????? //對服務器進行綁定
??????? PiaoResource.Piaoifo piao_s=PiaoResource.PiaoifoHelper.bind(browsePiaoOrb,”/browsePiaoserver”,piaoserver);
??????? …
}
4.1.4 ORB服務器端的構建
??? 在CORBA2.3版規范中,定義了可移植對象適配器POA,用來代替原有的基本對象適配器BOA,從而增強了服務對象的動態性與可移植性。POA對象是服務對象端ORB與實現對象之間的橋梁。服務對象端ORB與服務實現對象間的關系如圖2所示。
??? 服務器端代碼示例如下:
//Server.java
…
? try
{
?? //創建服務對象端ORB
?? org.omg.CORBA.ORB ServerOrb=org.omg.CORBA.ORB.init(args.null);
?? //獲取根POA對象實例
?? POA RootPOA=POAHelper.narrow(ServerOrb.resolve_initial_references(“RootPOA”));
?? //設置POA激活策略
?? org.omg.CORBA.Policy[] policies=
?? {
????? RootPOA.creat_lifespan_policy(LifespanPolicyValue.PERSISTENT)
};
?? //激活服務對象端POA
?? ServePOA.active_object_with_id(strPiao,instPI);
?????? ServerOrb.run();
}
catch(Exception exp)
…
4.1.5 CORBA對象激活
??? 在CORBA規范中,服務對象的實現代碼在實現倉庫中進行統一維護和管理。VisiBroker將實現倉庫以對象激活進程(Object Activation Daemon,OAD)的形式實現。基于對象激活進程,將服務實現對象在對象激活進程中注冊后,對象激活進程除了能夠對實現對象的實例、對象接口信息等內容進行管理之外,還能夠根據客戶端提出的服務請求,在Smart Agent的協助下自動激活服務實現對象。本例中具體實現步驟為:首先啟動Smart Agent,再執行啟動對象激活進程的應用程序工具oad.exe以在網絡中運行OAD,然后運行對對象激活進程進行維護的應用程序工具oadutil.exe向OAD注冊CORBA對象實現的有關信息;注冊信息不會因為OAD的關閉而丟失。例如,在MSDOS窗口中輸入下面命令可以將Piaos模塊中的browsePiao接口注冊在對象激活進程中:prompt>oadutil reg –i Piaos::browsePiao。這樣,SmartAgent一旦發現沒有可用的對象實例,就會通知OAD,而OAD將根據用戶的設置啟動CORBA服務器,創建、激活對象實例,我們就不必事先啟動CORBA服務器就可以直接運行CORBA客戶程序。
4.2 開發后的心得體會
??? 這種用CORBA改進的三層WEB模式雖然開發周期比單純的B/S系統要長,但是運轉效果要遠遠好于后者,它融合了B/S客戶端的簡潔和三層C/S結構的分布式對象技術,基本實現了客戶端的“零”管理,VisiBroker提供的線程池極大的改善了服務對象的性能,減少了客戶端連接等待時間。如果客戶端的業務規則需要改動,可以在服務器上直接修改相應的組件并進行編譯,無需對其他組件進行改動。由于中間層CORBA組件提供了身份驗證及授權,安全性得到了進一步加強,而且由于CORBA的可重用性,今后系統要擴容或者升級的話,可以在中間件上直接掛接一個數據庫服務器就行了。
5 結束語
??? WEB訪問數據庫技術從單層發展到多層表明實現WEB應用系統的趨勢是模塊獨立性更大,可重用性更高,層次劃分更加細致。目前,硬件環境的主流是由大型機轉向網絡化的小型機群,軟件環境的主流是由大而復雜的綜合模塊轉向更易于抽象和管理的對象技術。而基于CORBA的多層模式正符合了這種潮流。現在很多作業管理系統已運用WEB方式,而將CORBA與Java結合的方式運用在WEB管理上不失為一種很好的選擇,這種CORBA和WEB技術相結合的模式會有很光明的應用前景。
參考文獻
1.JDBC與Java數據庫程序設計?? 人們以郵電出版社? 張龍祥 劉麗鈺 等
2.OMG.CORBA系統結構、原理與規范?????????? 北京:電子工業出版社,2000.
3.Java 分布式應用程序設計????? 蘇洋???????????? 北京希望電子出版社
?