摘 要:在以Car構件為基礎的嵌入式研究領域中,構建面向Web服務的Car構件運行容器一直是研究的熱點。文章闡述了面向Web服務的Car構件運行容器的特點,介紹了構件技術以及“和欣”操作系統,討論了構件化的Web Container的分層設計理念,闡述了在“和欣”操作系統上實現的基于構件的Car Faces系統。該系統充分發揮了構件技術的優勢,并具有簡單、高效可配置等特點,很好地滿足了以Car構件為基礎的Web應用程序的需求。
關鍵詞:嵌入式系統;Web容器;構件技術;和欣
0 引言
基于構件的軟件工程是實現高生產率、低維護費用和高可靠軟件產品的關鍵技術,在這種工程模式下,按照一定的架構把構件組裝起來成為軟件開發的核心工作。目前絕大多數傳統的嵌入式應用仍然是采用強類型的系統編程語言(比如c和Java等)來完成對構件的組裝。對于一個應用程序僅需改變應用的表現層,而不必大量修改構件功能的情況,傳統開發模式所要經過的修改一編譯一運行的過程就顯得效率低下,開發周期長和不能隨需求靈活變化的弱點就暴露了出來;另外,采用強類型語言來實現功能構件并將這些構件組裝成應用程序,將造成構件之間的強耦合關系,會使得開發維護的難度加大。
為了實現構件問的松散耦合,提高開發維護的效率和適應需求變化的能力,有必要在應用的開發中引入新的開發模式,采用新的構件組裝技術來適應新形勢的發展。考慮到腳本語言的語法簡單、功能強大、易學易用的特點,本文基于CAR構件技術,提出了新的XML+CAR+其他腳本語言(Javascript、Ruby等)的Car Faces編程范式,實現了更為靈活的構件組裝機制,為在“和欣”上的應用開發提供了更加快速、靈活的編程范式。另外,手機上網已成為一種潮流,采用原始的模型勢必導致服務器高負載運轉,所以也需要一種新的架構模式,用來解決手機上網所帶來的新問題。
1 構件技術及“和欣”操作系統
構件技術是在面向對象技術的基礎上發展起來的。面向對象技術通過類的封裝和繼承成功實現了代碼級的復用。類的封裝性,實現數據抽象和信息隱蔽;而類的繼承,提高了代碼復用性。但是面向對象的復用脫離不了代碼復用的本質,對象之間的關系在編譯時被固定,模塊之間的關系是靜態的,無法解決軟件動態升級和軟件模塊動態替換。
構件技術通過二進制的封裝以及動態鏈接技術解決軟件的動態升級和軟件的動態替換問題。面向構件技術對一組類的組合進行封裝,它代表完成一個或多個功能的特定服務,同時為用戶提供多個接口。整個構件隱藏了具體的實現,只用接口提供服務。這樣,在不同層次上,構件均可以將底層多個邏輯組合成高層次上的粒度更大的新構件。構件之間通過約定的接口進行數據交換和信息傳遞,構件的位置是相互透明的,可以在同一個用戶進程空間,也可以在不同的用戶進程空間,甚至在不同的機器上;而且不同的構件可以用不同的語言編寫,只要它們符合事先約定的構件規范。
“和欣”操作系統是科泰世紀公司開發的具有自主知識產權、基于微內核和構件技術,支持構件化應用的嵌入式操作系統。“和欣”操作系統對CAR構件技術提供了內置的支持。
CAR構件技術是面向構件編程的編程模型。它規定了一組構件間相互調用的標準,使得二進制構件能夠自描述,能夠在運行時動態鏈接,進行系統升級的時候也只需要升級相關的構件即可,具有可靠性、容錯性、安全性,代表了軟件工廠化生產的方向。
2 構件化Car Faces的設計
為了能滿足新的需求,如圖1所示,整個系統的服務器端分為四層:呈現層、導行層、驗證層和業務處理層。另外,底層采用Car構件支撐各個環節的運行和交互。

圖1 Car Faces業務邏輯架構
其中,呈現層實現視圖的相互轉換:(1)將頁面提交的html代碼還原成Car Faces樹,并以xml樹形格式呈現。同時這一層負責將樹上的各節點值或組件與后臺支撐的Car構件動態綁定。(2)將頁面導行系統提交的Car Faces樹轉換成html代碼表示,整個系統通過這一層實現服務器和客戶的直接交互。
當呈現層從客戶端接收完數據并轉化成Car Faces代碼后,就將轉換結果遞交到驗證層。驗證層從樹的根結點遍歷整棵樹并調用綁定到各結點的相應的驗證程序。如果一旦遇到錯誤信息,驗證程序將把所得到的錯誤信息排隊。驗證結束后根據決策代碼決定是否向下層提交或者直接調用Response.finish()將錯誤信息呈現給客戶端。驗證過程中,我們可以調用默認程序EzValidate,也可以調用用戶自定義為結點綁定的驗證程序。驗證程序的實現,也是通過調用各后臺支撐Car構件來完成的。
如果驗證程序驗證結束,將進入業務處理模塊。在這一模塊中我們定義了許多業務Car構件,通過調用業務Car構件的應用程序,可以完成對用戶數據的處理。業務處理模塊根據客戶端產生的事件調用相應的業務處理程序,最終得到處理結果。處理完成后將處理結果提交業務導行模塊。
導行層次是為客戶呈現具體頁面而設計的。在這一層里,我們通過業務層的運行結果或者錯誤信息選擇適當的頁面信息返回給客戶。用戶根據返回信息可以知道操作的結果。
所以在整個架構的設計過程中,構件容器占據著至關重要的作用。
3 Car Faces生命周期
圖2為我們展示了car Faces請求響應的生命周期。

圖2 Car Faces生命周期
接到客戶端的請求后,首先將請求視圖轉換為Car Faces樹狀視圖。在轉換過程中可能會出現轉換異常現象。當發生了異常后,應用程序捕獲異常,根據錯誤類型作相應的處理。
呈現結束后,根據轉換的結果樹的值動態綁定到相應的構件上,并在此作一些初步處理。
上面兩步完成后,生命周期將進入下一個階段:驗證處理階段。在驗證處理階段將對Car Faces視圖的每個結點實行驗證處理。一旦出現錯誤,處理程序立即捕獲錯誤,并根據錯誤類型實施相應的處理。
以上各階段工作完成后,將進行的就是核心工作:業務處理。業務處理調用業務處理程序對轉換后的數據進行相應的處理,進而達到為客戶服務的目的。在這一階段也可能會有意想不到的異常發生。一旦發生異常,將有異常處理程序做相應的處理。
業務處理完畢后,處理結果樹被遞交給頁面導行。頁面導行根據業務處理結果做出抉擇,最終確定要向用戶返回哪個頁面。
上面所有處理完成后,Car Faces生命周期也進入了最后的階段:頁面呈現。在這一階段,將根據頁面導行程序所遞交的結果對結果樹實施頁面呈現。同時,服務器端各種組件給用戶呈現可識別代碼,最終以html代碼的形式返回給客戶。
4 Car Faces在“和欣”上的實現
完整的Car Faces架構可以表示為圖3

圖3 Car Faces系統架構
(1)最外層是Car Faces運行環境(Runtime),負責初始化和釋放Car Faces應用所需資源。
(2)內部頂層是腳本語言及其配套設施。這一層相當于提供了對MVC中View的支持。
XML/JavaScriptt/Other Scripts提供了多種描述Car Faces應用的形式,讓開發人員能夠靈活利用各種腳本語言的優勢。
(3)SCI(script Callable Interface)是腳本語言與CAR構件系統通信的橋梁。這一層相當于提供了對MVC中Controller的支持。
(4)CFSTL(Car Faces Standard Tag Library)是Car Faces提供的標準標簽庫,其中Car Faces提供了標準的自定義組件。CTL(Custom Tag Library)是用戶自定義標簽庫。頁面設計人員能夠使用這兩個標簽庫所提供的標簽。
(5)CAR構件系統。它是服務的提供者。這一層相當于提供了對MVC中Model的支持。在這一層,實現了各種Car構件。這些構件支持著上層的業務邏輯能夠順暢運行。
本Car Faces架構集成了XML-GIue特點。
通過以上論述,可以看出使用Car Faces具有諸多優點:(1)Car構件直接運行在本地機器上,某些操作甚至可以直接控制硬件,所以其速度相對較快。(2)Car Faces實現了清晰的分層概念,不像AJXA只局限于技術的實現。(3)組件的可擴展性好。在本系統中,提供了許多標準組件,但同時也給用戶提供了組件定義接口,使用戶開發出自己的組件。(4)采用本體系容易實現瘦客戶端。一些簡單的邏輯判別可在客戶端直接完成,比如采用Script語言提供驗證機制。這些特點為在手機上實現快速網絡瀏覽器提供了捷徑。
5 結束語
本文采用科泰公司的CAR構件技術在和欣操作系統上實現了一代新的網絡開發架構。該體系中的一些簡單業務邏輯可以以Script的形式直接嵌套在客戶端代碼中。另外本架構采用了清晰的分層概念,使得開發和調試更加快捷方便。借助CAR構件的元數據和自描述信息,在“和欣”操作系統上使用JavaScript、Ruby等腳本語言和XML文件動態地編寫圖形界面成為可能。使用構件化的方法開發圖形系統也可以推廣到其他支持構件的操作系統上。
下一步的工作是完善系統的構件粒度劃分,同時優化各步算法,以提高Car Faces系統的效率。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。