摘要:基于構件的軟件開發是軟件工程的基本目標之一,Primeton EOS 中間件系統基于J2EE架構成功的實現了WEB應用開發的構件化,并創造性的以XML總線顯著降低了各構件耦合度,使運算構件,邏輯構件,展現構件,數據構件,流程構件無縫的融合。但是對于頁面構件,仍然使用傳統的JSP頁面,無論在構件設計理念還是運行效率方面都不盡人意。該文將探討如何使用XMLC技術重新設計EOS表示購件,使其充分利用XML總線的設計優勢,實現構件理念與運行效率的最優化。
關鍵詞:EOS;XMLC;頁面構件
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2009)15-3945-03
XMLC Based EOS's Page-component Design and Implement
ZHOU Jiang
(Information of Judicature Department, SJPOPC, Deyang 618000, China)
Abstract: Based component is the basic target of the software development, Primeton EOS midware system based on J2EE architecture has implemented the component idea on web application development. And use XML bus in a creative way to reduce the coupling degree of the component. Make operation component, logic component, exhibit component, data component and flow component syncretize seamless. But the page component remain use tradition JSP technology, whether to idea of component design or efficiency, it is bad. This paper will discuss how to redesign EOS page component, take full advantage of XML bus and implement the optimization of efficiency and design pattern.
Key words: EOS; XMLC; page component
1 緒論
1.1 EOS相關技術
PrimetonEOS [1]是上海普元信息公司設計的一款面向構件的中間件產品,是基于J2EE之上的面向構件的完整的互聯網應用體系。EOS構件化平臺提供對EOS構件的可視化定義、組裝、發布、構件運行引擎、構件庫管理、構件庫資源訪問等構件的整個構件、生產運行、管理環境的支持、并提供完善的服務。從功能上主要包括:EOS構件運行和管理環境,EOS構件集成開發環境,EOS工作流,EOS構件庫4大模塊。
EOS平臺的核心為XML數據總線技術[2]以及基于構件工作流技術[3]。以下重點介紹EOS數據總線技術,如圖1所示,EOS構件(運算構件、邏輯構件、展現構件、數據構件、頁面構件)間通過XML總線進行數據傳輸。使用XPATH技術實現數據定位與訪問。
EOS Server將系統內存分層為3個數據區域,彼此間通過XML通信,每種數據區域有不同的作用范圍和生命周期,數據來源也不盡相同。
Session Context:在一個HTTP會話范圍內有效。只能由展現邏輯構件操作,可自動拷貝到Request Context中。
Request Context:在一個HTTP請求范圍內有效,只能由展現邏輯操作,可通過展現數據引擎傳入被調用者的Biz Context中。
Biz Context:通過業務數據流推動業務邏輯進行,只能由業務構件和預算構件訪問,可將XML格式的數據返回給展現邏輯。
1.2 XMLC相關技術
Bolgoa 大學Luca Bompani 等教授研究的XMLC技術提出了XML文件新的解析方法[4]。ObjectWeb 組織開發的enhydra Server[5] 具體實現XMLC 技術在HTML開發上的應用。XMLC(XML Complier)是一種基于JAVA的編譯器,可以將一個靜態的HTML或XML文件編譯為一個JAVA類,該類可以完整的重建這些動態文檔,并在運行時向該文檔插入動態內容。
XML文檔由通用的XML解析器讀取翻譯為一個DOM表示的樹形結構,再由一層或者多層的XSL stylesheet 通過XSL處理器翻譯該DOM樹。最終得到一個僅保留對本應用有現實意義的DOM樹,其任意元素類型均存在JAVA類(displet[6])與其相對應。XMLC應用將激活所有需要的displet來建造一個可運行或可展示的JAVA對象樹。當限于HTML文檔時,html元素對應的displet可以省略,由瀏覽器直接修飾表現。如圖2所示。如需在瀏覽器中顯示HTML未定義的元素,則可以調用displet庫修飾后顯示運行。
2 問題域
2.1 傳統頁面的設計缺陷[7]
現代軟件開發均是基于構件化的,以達到高復用率的,高可靠性,快速的目標。傳統B/S架構經歷了靜態HTML,SSI,CGI,到ASP,JSP的變遷,JSP的標簽技術大大提高了軟件的復用性,DREAMWARE等大批圖形化頁面設計軟件的使用也使得應用程序開發更加方便快捷,但是這些頁面的復用和設計基本上還是基于動態HTML對象的,是代碼級別的,并非構件級別,而現代軟件開發為更好和客戶溝通,多采用疊代開發。傳統的設計模式顯然不能滿足這樣的需要。從開發場景來講,頁面開發人員和邏輯開發人員采用完全不同的思維模式和開發工具,使得需求溝通交流存在障礙。
2.2 傳統頁面技術的效率缺陷[7]
隨著現代商業應用面對的客戶群增加,并發數也呈現指數級增長態勢。頁面展現的數據也越來越復雜,這就對頁面表示技術本身提出了更高的效率要求。
3 XMLC構件
3.1 構件架構
根據基于WEB應用的一般需求和我們在電子政務系統開發的實際經驗,將構件劃分設計分為如下類別:
1) 框架/容器構件:用于實現頁面的整體布局和風格,所有加入到該框架中的構件均服從該框架的風格。除支持常見的B/S風格外,還包括對復雜的outlook風格,apple風格等類C/S架構風格的提供。
2) 高級頁面構件:類似swing 中的高級Swing組件
樹狀構件:提供樹形顯示功能,可設定樹模型,樹修飾器。
表格構件:顯示表格,提供選擇,排序,翻頁功能,選擇功能。
列表構件:提供復雜的組合列表框。
3) 一般頁面構件:類似swing 中的簡單Swing組件
菜單構件:支持彈出式菜單,下拉式菜單等多種菜單樣式。
進度條構件:根據事件或時間顯示進度條,無法定時的則顯示
滑塊構件:顯示一個滑動條
4) 功能性構件:頁面使用的常用功能性構件
日歷構件:實現日期輸入功能
區域構件:實現國家,地區,城市數據的輸入。
打印構件:格式化選定區域,送打印機輸出。
安全構件:實現屏蔽瀏覽器地址欄顯示等安全特性。
實時構件:實現服務器和瀏覽器的實時通信。
格式化輸入構件:實現電話號碼,身份證號碼,IP地址,等字符性構件輸入。
5) 高級圖形構件:使用displet技術支持對XML數據的圖形化表示
餅狀圖構件:繪制餅狀圖。
柱狀圖構件:繪制柱狀圖。
二維曲線圖構件:繪制二維曲線圖。
組合圖形構件:將多個圖形疊加為一個圖形,并為每個圖形設定事件。
3.2 構件結構與編寫規范
一個表示構件包就是一個JAVA類,包含若干靜態方法,以PG_構件名為方法名,輸入輸出均為org.w3c.dom.document類型。如包含列表構件,菜單構件等的一般頁面構件就其類樹圖如圖3所示,PG_List靜態函數代碼如圖4所示。
構件根據輸入的XML數據和要求實現的列表功能要求,動態鏈接相應的修飾器(包含相應的JAVACRIPT函數和displet,由其決定頁面的顯示風格和),并生成對應的HTML文檔輸出到RequestContext的
在使用一個構件時,需要在圖形編輯界面中將該構件拖動到對應位置,編輯器具有效驗功能,如容器類構件上可以放置菜單構件,但是菜單構件上則不能在放置容器構件。放置好節點后,需要按照構件使用規范文檔填寫構件所需XML數據來源,鏈接自定義修飾器(構件的默認修飾器為其容器的修飾器)。編輯完成后生成一個JAVA類文件部署到服務器,服務器運行時候調用該文件生成HTML頁面。
開發人員也可以按照規范開發自己的頁面構件,以適應特殊的用戶需求,具體流程為:
1) 撰寫純HTML頁面文件,給所有需要操作的元素賦予標簽
2) 針對自定義元素開發displet,針對特殊效果開發javascript函數
3) 以XMLC編譯該HTML文件并鏈接修飾器。
4) 設定該構件的輸入參數。
建立自己的頁面構件庫后,開發人員可以像使用系統頁面構件一樣使用自定義頁面構件。
3.3 構件原理
基于XMLC和XML總線技術的表示層構件能夠實現,是基于如下4個基本事實:
1) XML編譯器可以HTML與XML文檔統一處理,將任意的XML,HTML文檔編譯為一個java類文件,并且可以通過該java類文件的 toDocument()函數返回過濾后的XML或HTML文檔,并且為每一個含有ID屬性的元素提供預先設定的方法即行為。從而達到動態輸出頁面,定制文檔表示形式的能力[5]。那么,可以在JAVA類級別實現構件的開發和融合,而通過這些類的交互最終生成靜態頁面返回。
2) 由C/S構架的事件模型可知,作為用戶界面組成,有事件監聽器對象負責監聽事件的發生,并產生相應的行為動作。有事件源響應用戶操作,并產生事件。事件發生時事件源把事件對象發送給所有的注冊監聽器,監聽器對象隨后使用事件對象中的信息來決定對事件的反映。在B/S架構中,歸結起來由兩種行為類型,即調用一個展現邏輯返回一個新頁面和調用一個JAVASCRIPT函數對現有頁面進行修改。那么,可以模仿C/S事件模型,實現B/S架構中的完整事件模型,以對象級別而不是代碼級別來生成界面相應用戶操作。
3) XML總線技術可以使不同的HTTP會話或者HTTP請求使用不同的XML總線區域。實現了數據可見性和構件耦合性的有機協調,那么,可以合理劃分功能和數據使基于構件設計在功能復雜度和數據耦合性雙方面達到構件設計理念的要求。
4) 基于Servlet的多線程,一次編譯屬性保證了程序運行的安全性,與多線程的XML總線可以無縫配合。XMLC技術是一種預編譯技術,而不是在運行時編譯,效率極大提高。完全可以抵消由于構件化設計所引發的軟件調用層加深等效率問題。
綜合以上四點可知,基于XMLC和XML總線技術,可以實現展示層的構件化。
4 結論
我們已經研究開發了該頁面構件庫的編輯環境與運行環境,構建庫尚未完整建立。在已知條件下比較該技術和傳統JSP頁面技術測試,并發數均高于原JSP頁面程序。更為重要的是。其理念更加合理,實現了基于構件的圖形化頁面開發,大大提高了開發速度,降低了開發難度。
5 后續工作
本文只是關于J2EE基于構建開發研究的一部分,隨著J2EE,.NET 等構架的提出,B/S,C/S兩種基本構架在業務邏輯層次上已實現無縫融合,但如何在表現層次上實現統一仍待解決。下一步我們將研究如何在EOS或者類似的架構上利用XMLC技術實現B/S,C/S模式的無縫結合,探討出一種合適的編程模式并開發出相應的工具,使得表示層代碼能夠實現java一次編寫,到處運行的目標,不但跨越操作系統平臺,還能跨架構。
6 感謝
感謝EOS開發人員以及XMLC研究人員所作得辛勤工作,為我們得工作提供了堅實的理論基礎,感謝電子科技大學計算機學院新型計算機實驗室,以及可信智能空間實驗室的XMLC項目組的技術人員,他們對我們的研究提供了很多新的思路。最后對那些在本項目研究過程中對我們提供無私幫助的朋友們表示忠心的感謝。
參考文獻:
[1] EOS基礎開發指南[EB/OL].www.primeton.com.
[2] EOS應用框架使用手冊[EB/OL].www.primeton.com.
[3] EOS工作流開發指南[EB/OL].www.primeton.com.
[4] Active Documents in XML[EB/OL].www.cs.unbio.it/projects/displets/.
[5] xmlc-2.2.5[EB/OL].www.enhydra.com.
[6] Displet[EB/OL].http://xml.coverpages.org.
[7] 周江.基于BarracuDa架構的SOA開發模型研究[J].電腦知識與技術,2008(33):1413-1418.