摘要:該文在對EOS開發(fā)中存在的一些問題進行分析和對Barracuda架構(gòu)深入研究的基礎(chǔ)上,提出了一個基于Barracuda架構(gòu)的SOA開發(fā)模型,以解決傳統(tǒng)EOS開發(fā)中的效率問題,并對如何實現(xiàn)基于Barracuda架構(gòu)的SOA開發(fā)模型進行了較詳細的分析。
關(guān)鍵詞:Barracuda;EOS;XMLC;SOA開發(fā)模型
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)33-1413-02
Analysis of SOA Developing-model Based on Barracuda
ZHOU Jiang
(Information of Judicature Department, SJPOPC, Deyang 618000, China)
Abstract: After the analysis of the problems appearing in the development of projects based on EOS and introduction of Barracuda framework, this paper proposes a SOA Developing-model based on Barracuda to solve these problems. And how to realize this EOS is recommended. The effects of this SOA Developing-model is analyzed, too.
Key words: Barracuda; EOS; XMLC; SOA Developing-model
1 引言
EOS(Enterprise Operating System)是面向構(gòu)件的SOA中間件,它基于J2EE平臺之實現(xiàn)完整的系統(tǒng)架構(gòu),是面向構(gòu)件的完整的互聯(lián)網(wǎng)應用體系[1]。構(gòu)件是EOS中最基本和最核心的元素,所有的工作都是圍繞構(gòu)件進行的。構(gòu)件之間采用XML總線技術(shù)來進行通信,使得構(gòu)件之間具備松散的耦合性,從而使系統(tǒng)具有良好的擴展性以及隨需應變的靈活性。
Barracuda是一個HTML DOM Component + Event/Listener結(jié)構(gòu)的WEB應用程序框架,是一種Model 2體系結(jié)構(gòu),但是它進一步采用了創(chuàng)建用戶界面的XMLC方法,而且提供了模型的事件-通知機制[2]。
2 EOS開發(fā)過程中存在的不足之處
通過采用構(gòu)件化的模式和利用系統(tǒng)提供的各種基礎(chǔ)構(gòu)件包,EOS確實能夠加快項目開發(fā)的進度,提高系統(tǒng)穩(wěn)定性和組件復用度,尤其是展現(xiàn)邏輯和業(yè)務邏輯的開發(fā)采用圖形化可視和托拽的方式,減少了開發(fā)人員的工作量,使開發(fā)人員可專注于對用戶需求和邏輯的理解,而不必花費大量時間進行邏輯代碼的編寫,這種圖形化的方式也極大地提高了程序的可讀性。
但是,頁面構(gòu)件開發(fā)對于大多數(shù)人來說就不那么輕松了,尤其是對于一些比較復雜的頁面。EOS主要采用JSP頁面作為頁面構(gòu)件[3],由于JSP固有的一些缺點[4],使得EOS頁面構(gòu)件的開發(fā)存在下面一些的問題:
1) 開發(fā)人員不僅要設(shè)計HTML代碼,還要編寫Java代碼,不僅要實現(xiàn)業(yè)務邏輯,同時還要考慮表示層的風格、樣式方面的問題,把表示層和邏輯層的工作集中到同一個開發(fā)人員身上,這必然增加開發(fā)人員的工作量。而且EOS系統(tǒng)還定義了大量自己的標簽,對于不是經(jīng)常使用EOS開發(fā)系統(tǒng)的人來說,要想熟練使用好這些標簽,也不是件容易的事。
2) 在EOS的開發(fā)調(diào)試環(huán)境中,只能對輸入輸出JSP頁面的數(shù)據(jù)進行查看,而對JSP頁面執(zhí)行過程中的內(nèi)部變化情況,則不能進行跟蹤調(diào)試。如果頁面本身不大,邏輯也不復雜,查找頁面上的BUG比較容易。但是在頁面變大了、邏輯也復雜的情況下,要在頁面中去找尋一個小的BUG,將是很令人頭疼的一件事。
3) html代碼與java代碼強耦合,一旦邏輯有所變化,可能牽涉大量頁面需要修改。
4) 如果需要對系統(tǒng)進行本地化的操作,就要為每個地區(qū)的每種語言建立一個頁面文件,然后由系統(tǒng)自動判斷采用哪個文件。
5) html代碼與Java代碼在程序中交錯出現(xiàn),再加上可能還有JavaScript代碼,使得代碼的可讀性降低。例如,在一個頁面中,需要根據(jù)用戶角色來決定是否顯現(xiàn)某些元素,這就要進行判斷,如果判斷地方較多,用戶角色也較多時,將在頁面中出現(xiàn)大量判斷語句(也可以采用EOS提供的邏輯判斷TAG),對于一個不熟悉業(yè)務邏輯的人來說,是不易看懂的。當然也可以為每個角色創(chuàng)建一個頁面,由展現(xiàn)邏輯決定顯示哪個頁面,但如果有很大一部分代碼都重復的話,必將造成資源的浪費。
6) 從美學的角度來說,頁面構(gòu)件由用戶界面HTML代碼和業(yè)務邏輯相關(guān)的java代碼組合在一起,頁面看起來雜亂無章。

圖1 Barracuda架構(gòu)
3 Barracuda框架架構(gòu)簡介
Barracuda架構(gòu)[3]將WEB應用程序劃分為若干層,每層實現(xiàn)不同功能,層與層之間相互獨立,具體見圖1。
1) 接收客戶端信息
接收客戶端發(fā)送的請求,并對請求信息進行初步處理,從中提取關(guān)于客戶端的信息(如客戶端瀏覽器類型、客戶端的本地化信息、對客戶機的響應輸出格式等),這些信息在整個請求-響應周期里面都可用。
2) 事件模型
事件模型主要用于處理客戶機和服務器通信。它負責將HTTP請求轉(zhuǎn)換為Java事件類,然后將產(chǎn)生的事件發(fā)布給監(jiān)聽器,并將監(jiān)聽器的處理結(jié)果返回給客戶機。
3) 表單映射和數(shù)據(jù)檢驗
將表單傳來的參數(shù)映射為Java類;為一些數(shù)據(jù)提供缺省值;對數(shù)據(jù)進行有效性檢驗等。
4) XMLC
XMLC是一個將HTML和XML 模板轉(zhuǎn)換為DOM對象的工具,傳統(tǒng)的表示層技術(shù)(如JSP)都是在標記語言內(nèi)部進行編程,XMLC則是對整個模板進行編程。
5) 本地化
Barracuda利用XMLC提供了一種獨有的方法來實現(xiàn)程序本地化。一般說來,在一個模板驅(qū)動的程序中,有兩種方法實現(xiàn)本地化,一種就是為不同的語言提供不同的模板,這種方法運行效率更高,但是維護比較麻煩;另一種方法就是在一個頁面中動態(tài)地確定怎樣本地化,這種方法運行效率更低,但是便于維護。而Barracuda提供的一種機制可以同時達到這兩個目標:效率高且便于維護。
6) 組件模型
開發(fā)人員在利用頁面模板生成DOM對象以后,需要向Dom結(jié)構(gòu)中填入數(shù)據(jù),但是對Dom的操作是比較底層而難于控制的,為解決這個難題,Barracuda提供了組件模型。組件模型具有兩個基本的特性:一個組件可以包含其他的組件,從而可以由簡單組件合成復雜組件, 這不僅提高了模塊的復用性,而且提高了整個系統(tǒng)的可擴展性;另一特性就是組件(包括其子組件)的渲染工作是由自己完成的。
4 基于Barracuda的EOS運行原理
經(jīng)研究,現(xiàn)設(shè)計基于Barracuda的SOA開發(fā)模型,其運行原理如圖2。
1) 從瀏覽器發(fā)起HTTP請求,提交到展現(xiàn)引擎。
2) 展現(xiàn)引擎將請求轉(zhuǎn)換為XML,并根據(jù)HTTP請求(構(gòu)件包.構(gòu)件.構(gòu)件邏輯.do)確定應該調(diào)用哪個展現(xiàn)邏輯,然后轉(zhuǎn)到處理展現(xiàn)構(gòu)件描述的展現(xiàn)邏輯。
3) 根據(jù)展現(xiàn)邏輯流程中定義的業(yè)務邏輯,傳入業(yè)務邏輯,并且送入相關(guān)的XML數(shù)據(jù)(從XML總線中)。
4) 業(yè)務引擎根據(jù)調(diào)用的業(yè)務邏輯中的流程調(diào)用相關(guān)的運算邏輯。
5) 對于需要訪問數(shù)據(jù)庫的操作通過數(shù)據(jù)引擎根據(jù)數(shù)據(jù)映射調(diào)用相關(guān)的數(shù)據(jù)庫,在調(diào)用過程中根據(jù)流程定義的事務進行相關(guān)的事務處理。

6) 業(yè)務引擎處理完邏輯流程后返回相關(guān)數(shù)據(jù)給展現(xiàn)層
7) 展現(xiàn)邏輯根據(jù)展現(xiàn)邏輯定義的頁面構(gòu)件,將HTTP請求轉(zhuǎn)發(fā)到指定的頁面構(gòu)件,并且傳入處理完的XML數(shù)據(jù)。這里的頁面構(gòu)件和EOS中的頁面構(gòu)件是不同的, EOS采用的頁面構(gòu)件一般是JSP,而基于Barracuda的EOS中的頁面構(gòu)件是一個根據(jù)由原始HTML文件生成的DOM對象、文檔模板和傳入的數(shù)據(jù)動態(tài)生成返回給用戶頁面的邏輯。
8) 頁面構(gòu)件根據(jù)相關(guān)信息生成HTML返回給客戶瀏覽器。
5 如何實現(xiàn)基于Barracuda的EOS
通過對EOS作一些改進,即可將實現(xiàn)基于Barracuda的SOA開發(fā)模型:
1) 將XMLC的轉(zhuǎn)換工具作為插件安裝在EOS開發(fā)環(huán)境中,通過它可以方便的實現(xiàn)從html文件到DOM對象的轉(zhuǎn)換工作,這個工作是很容易實現(xiàn)的。
2) 對頁面構(gòu)件進行改變,不采用JSP,改為采用Servlet[5]來實現(xiàn),利用Servlet來完成對文檔模板的操作,動態(tài)生成用戶需要的頁面。
3) 將Barracuda的組件庫引入EOS中,以充分利用組件的可組合性和自渲染性。
6 基于Barracuda的SOA開發(fā)模型解決了EOS的中存在的問題
下面分析一下采用基于Barracuda的EOS是如何解決2中所提到各種問題的。
1) 采用XMLC技術(shù)將表示層和邏輯層的工作完全分離開來,可分別交與html設(shè)計人員和程序員來完成,html設(shè)計人員只進行表示層的設(shè)計,程序員則專注于業(yè)務邏輯的實現(xiàn)。html設(shè)計人員定義表示層的模板,通過XMLC工具將其轉(zhuǎn)換為DOM對象,程序員只需通過代碼來填寫模板內(nèi)容,而不用關(guān)注表示層的樣式風格是如何的。利用組件模型,程序員可以向表示層中添加新元素,只需填入數(shù)據(jù),剩下的渲染工作可由組件自己完成。
2) 由于對數(shù)據(jù)的操作全部放在了頁面構(gòu)件中,而頁面構(gòu)件通常是一個Java的Serlet類,很容易通過現(xiàn)有平臺的調(diào)試器來監(jiān)視程序的運行過程,對程序進行調(diào)試,從而很容易確定程序中的BUG所在。
3) 由于html代碼與java代碼已經(jīng)完全分離開來,因而如果邏輯有所變化,只需要對邏輯層進行修改即可,而不用變動表示層的代碼。
4) 采用XMLC技術(shù)很容易實現(xiàn)系統(tǒng)本地化。此時,只需要一個頁面模板文件,然后為每種語言配置一個.properties文件,由頁面構(gòu)件根據(jù)獲取的瀏覽器端本地信息自動從對應的.prperties文件中讀取數(shù)據(jù)來填寫相關(guān)的元素內(nèi)容(通過采用多例模式很容易實現(xiàn))。如果增加了一個地區(qū)語言,只需簡單增加一個.porperties文件,同時在頁面構(gòu)件中進行一點小改動就行了,這比增加一個新頁面文件省事多了。
5) 由于HTML代碼與Java代碼完全分開,使頁面文件和邏輯層代碼的可讀性增強了[6],而且由于兩者分開以后,不存在代碼交叉出現(xiàn)的情況,文件內(nèi)容的美觀性也得到了保證。
7 下一步的工作
這次討論的基于Barracuda的EOS并未實現(xiàn)Barracuda中的事件模型,下一步的工作將研究如何將Barracuda的事件模型應用于EOS中。
8 結(jié)論
基于Barracuda的EOS可以解決EOS中頁面構(gòu)件難以編寫和可讀性較低的問題,而且可以在對EOS改動不大的情況下得到實現(xiàn),利用XMLC實現(xiàn)以servlet操縱頁面元素[7],克服由于JSP固有缺點帶來的頁面編程效率低下的問題,在EOS己有的面向構(gòu)件的開發(fā)模型基礎(chǔ)上,大大提高web編程生產(chǎn)率,是一種優(yōu)秀的SOA開發(fā)模型。
參考文獻:
[1] 上海普元信息技術(shù)有限責任公司.EOS白皮書[S].2007.
[2] http://www.barracudamvc.org/Barracuda/[EB/OL].
[3] 上海普元信息技術(shù)有限責任公司.EOS 5.3程序員教程[S].2006.
[4] 高敬.WEB應用程序-CGI到Web三層系統(tǒng)[M].北京:科學出版社,2004.
[5] Deitel H M.Javaweb服務高級教程[M].北京:機械工業(yè)出版社,2003.
[6] 吳其慶.JSP編程思想與實現(xiàn)[M].北京:冶金工業(yè)出版社,2003.
[7] 孫鑫.Java Servlet編程[M].2版.北京:中國電力出版社,2002.