Apusic OperaMasks――開箱即用的Web Framework,它以JSF為基礎引擎,輔以獨創的原生Ajax技術,同時提供豐富的組件和集成開發環境,使Web開發變得簡單方便。無論是後台的事務、存儲、分布式計算等基礎服務,還是前端的UI展現與用戶交互,以及後台與前端的會話過程,Apusic OperaMasks都提供了完整的解決方案,有效解決Web開發所面臨的問題。
1.Standard & Open!
J2EE是一個開放的社區,是一個允許各種技術百花齊放、百家爭鳴的社區,同時,也是一個遵循標准、推崇標准的社區。與.net相比,J2EE的標准是開放的標准,它並不是掌握在少數人或者少數廠商的手裡,而是允許並鼓勵人們參與標准的制定,並通過標准來規范與約束不同廠商的實現,從而有效保護客戶的IT投資。
Apusic OperaMasks首先是標准的,它遵循並實現JSF規范,任何基於JSF技術構建的Web應用,都能夠平滑移植到Apusic OperaMasks上;同時,它又是開放的,所有的源碼,以及OperaMasks整個開發過程,全部通過開源社區OperaMasks.org進行。
那麼,作為底層支持技術,JSF是否能夠承擔起“下一代J2EE Web開發框架”之重任?同樣,有了標准與開放,是否就意味著Apusic OperaMasks能夠引領Web開發技術的新潮流呢?
2.From the earth to the moon, and ready for Mars!
Apusic OperaMasks是一種不依賴任何具體展現技術的解決方案,它支持現有的Web標准,譬如HTML與WML,同時也為將來可能出現的新技術、新標准做好了准備。在Apusic OperaMasks中,所有的UI元素被封裝成Component,而Component通過Render Kit進行界面的渲染,當系統需要支持其它展現層技術時,只需要替換Render Kit即可實現。
當AJAX出現之後,人們意識到Web應用可以更加豐富多彩,於是各種RIA技術方案層出不窮,目的是要在AJAX這種“過渡”技術的思想指引之下完成下一代Web技術的變革。面對未來可能的新技術,很多用戶和開發者在迷茫中觀望,對JSF並沒有抱多大的熱情,認為JSF也是行將被淘汰的技術。事實上這種概念是錯誤的,JSF是一種和具體展現技術無關的技術。在Apusic OperaMasks中唯一和具體展現相關的部分是Render Kit,而Render Kit的可插拔的性質決定了Apusic OperaMasks可以適應目前和將來的大多數RIA技術。每當一種新的RIA技術出現時,只需要針對這種RIA技術編寫一個Render Kit,這種新的RIA技術立即就能在Apusic OperaMasks中獲得支持,而以前所寫的應用不需要做任何修改。
Apusic OperaMasks為任何新的展現層技術做好了准備!
3.Ajax Everything!
Ajax是當今紅得發紫的技術,它改變了人們對傳統Web應用的不佳印象,但同時,它的開發成本與維護成本過高。於是乎,各種各樣的Ajax組件與框架應運而生。與Apusic OperaMasks相比,這些Ajax組件與框架所解決的問題,是簡化Ajax的開發;Apusic OperaMasks則是使Ajax變得透明,是“干掉”了Ajax,用戶甚至不需要知道Ajax的存在,而應用是自然而然的Ajax Enable的應用。
3.1 與其它JSF引擎相比
Apusic OperaMasks是世界上第一個“原生支持Ajax”的JSF引擎。其它常規JSF引擎(譬如MyFaces)往往是通過提供一些特殊組件庫來完成對Ajax的支持,而Apusic OperaMasks則在引擎級別提供了對Ajax的原生支持。
舉個簡單的例子,在MyFaces中,為了達到Ajax效果,需要利用Sandbox子項目或者其它擴展組件,常規的標准JSF組件永遠無法具備Ajax特性。但這些標准JSF組件,卻可以在Apusic OperaMasks引擎上獲得截然不同的效果:任何利用標准JSF組件構建的應用,只需要配置一個參數,就能夠在Apusic OperaMasks引擎上獲得完整的Ajax特性,包括與服務器端的異步交互、頁面的局部刷新等。
<application>
<default-render-kit-id>AJAX</default-render-kit-id>
</application>
換言之,僅僅將上述參數中的default-render-kit-id置成AJAX,Apusic OperaMasks就能夠讓標准的JSF應用具備Ajax特性!
有點像變魔術?Apusic OperaMasks是如何做到的?
我們說過:Apusic OperaMasks is “from earth to the moon, and ready for Mars”。Apusic OperaMasks不僅提供了默認的HTML_BASIC的Render Kit,還提供了內置的Ajax Render Kit。因此,我們只需要將系統默認Render Kit置成Ajax Render Kit,整個應用就自動變成Ajax Enable的應用!
3.2 與其它Ajax組件庫的區別
Ajax組件庫是為了簡化Ajax的開發(譬如ajax4jsf),而Apusic OperaMasks則是“干掉了”Ajax。對OperaMasks的用戶來說,應用對Ajax的支持是透明的,你所寫的任何一個JSF應用都支持AJAX,但不需要編寫任何JavaScript代碼,甚至不需要了解AJAX的原理。舉個簡單的例子,用戶希望點擊一個按鈕,web頁面產生一次Ajax請求與響應並更新某個text文本框時,通過ajax4jsf,我們需要在頁面中指定:
< h:outputText id="dup" value="#{bean.text}" />
< a4j:commandButton reRender="dup" value=" Submit"/>
用戶不僅需要記住額外的tag用法,還需要知道此Ajax請求需要更新頁面哪個控件的值。而通過Apusic OperaMasks技術,用戶只需要采用標准JSF組件的寫法:
< h:outputText value="#{bean.text}" />
< h:commandButton value="Server Submit" />
然後,用戶只需要指定此form的Render Kit是Ajax,或者在配置文件faces-config.xml中,將全局Render Kit置成Ajax即可。用戶無需記住其它tag的用法,也無需了解更新哪些控件,甚至根本就不必要關心什麼是Ajax!
3.3 與其它Ajax開發框架的區別
同樣,這個世界還存在許多Ajax Framework,譬如dojo。我們並不否認這些Ajax開發框架的優秀,但是,與它們的優點同樣明顯的局限之處是:dodo之類的Ajax開發框架僅僅解決了客戶端的問題,對任何服務器端邏輯,dojo無能為力。J2EE是一個整體,它不僅需要解決表現層問題,也要解決數據層和邏輯層的問題,JSF是JavaEE 5.0的一個重要組成部分,這就使得Apusic OperaMasks不僅可以創建豐富的客戶端體驗,同時可以和JavaEE應用服務器結合,從而建立強大的服務器端邏輯綁定。
3.4 組件對Ajax的支持:
與此同時,Apusic OperaMasks提供了部分特殊組件,以更有效的支持Ajax特性,譬如:
renderGroup:能夠改造過時的應用,使其支持AJAX。在AJAX出現之前或基於其他JSF框架所編寫的組件或應用有時並不能很好地運行在OperaMasks中,renderGroup能夠為這些組件提供一個AJAX的渲染環境,使其達到AJAX的運行效果。
updater:裝載和刷新頁面的一小部分,使頁面變成桌面。我們可以將頁面的某些區域定義成一個獨立刷新區,這些區域具有獨立的交互環境和生命周期,當在這些獨立區域中進行交互操作時他們被單獨刷新,頁面的其他部分不受影響。你可以單獨開發和調試一些小應用,然後用updater將這些小應用組裝成一個完整的應用。使用這樣的技術將不再需要購買昂貴的Portal Server,在運行的時候和Portal沒有什麼區別。
event binding:如果必要,可以在服務器端處理客戶端事件(譬如當某個客戶端事件需要從服務器中獲取數據進行響應);
client validator:本該由服務器處理的數據校驗可以在客戶端執行。JSF默認提供了許多數據驗證器,常規JSF引擎的實現總是在服務器端進行驗證,這樣的話,每次與服務器的交互總是會帶來一定的性能損失,而Apusic OperaMasks能夠在不更改代碼的情況下,在客戶端進行數據驗證。
總而言之,Apusic OperaMasks對Ajax的支持是原生的,是從引擎級別予以支持的,在Apusic OperaMasks中,Ajax is Everything!
4.Rich Components!
Apusic Operamasks提供了許多豐富的組件,我們稱之為“Rich Components”。無須贅述的是,這些Rich Components從骨子裡提供了Ajax的支持。在這裡我們沒有重新發明一次車輪,而是采用了廣受好評的Ext JS(http://extjs.com)來實現Rich Components,但OperaMasks和Ext JS之間的聯系並不緊密,如果必要,完全可以通過更換Render Kit的方式用其他的富客戶端組件庫來代替。這些組件都是面向數據的,可以用JPA、Hibernate、或直接用JDBC將數據准備好,交給這些組件去展現。同一組數據可以用不同的組件來展現,無論是DataGrid, DataView還是Chart,對數據的展現過程都是一樣的。當數據需要更新時,通過AJAX和JSON完成與服務器的交互。我們有:
TreeView:用來組織你的數據
DataGrid:用表格展現你的數據
Chart & Report:以圖表形式展現數據
DataView:用任何你能想到的方式展現你的數據
5.Rich Form
OperaMasks 提供的Rich Components提供了許多額外的特性,除了原生的Ajax支持以外,還具備自定義風格、換膚功能等,這是對JSF常規標准組件的一種有益擴展。
那麼,標准JSF組件是否能夠通過Apusic OperaMasks獲得這些能力?讓我們再變一次魔術。
左圖是一個常規的標准JSF組件的樣態,當我們修改這個form的屬性rich=”true”時,或者在web.xml中配置一個全局環境變量:
<context-param>
<param-name>org.operamasks.faces.FORM_RICH</param-name>
<param-value>true</param-value>
</context-param>
然後我們可以發覺,左邊的JSF組件全部變成了右邊的形態。甚至不僅僅是樣式風格的變化:如果一個文本框需要顯示的是一個日期,那麼,會變成一個帶日歷選擇器的輸入框;如果是一個只能夠輸入數字的文本框,那麼,會變成一個帶計算器輔助輸入的文本框。
又是一個魔術?事實上,這裡的原理與Ajax Render Kit大同小異,我們只是更改了組件的Render Kit而已。
6.Apusic Studio!
Apusic OperaMasks是基於JSF規范的, JSF從規范中便對工具預留了支持的空間。同樣,Apusic OperaMasks不僅提供了引擎、組件,我們還有與之相輔相承的集成式開發工具:Apusic Studio。
作為集成式Web開發工具,什麼是其最主要的核心功能?可視化設計?重要,但又不是全部。對Web開發初學者來說,可視化的頁面設計器是能夠降低Web開發學習曲線的有力武器,但真正有經驗的人,卻絕不依賴於設計器。真正熟練的、富有經驗的Web開發人員,所需要的是一款細節考慮完善、開發過程流暢的工具。他們通過可視化去了解工具,但通過細節與開發流暢性去決定是否喜愛這款工具。
Apusic Studio提供了世界一流的可視化Web設計界面,同時,Apusic Studio又是世界上第一款將開發、配置、部署、監控等過程完美的銜接在一起的集成式開發環境!J2EE的Web開發原本是一個比較繁瑣的過程,即便整個過程你很熟悉,但其復雜度也足以讓人望而生畏,采用Apusic Studio,將使這一過程變得有如行雲流水一般,除了每一階段有向導幫助你快速實現以外,過程中的一些細節也自有Studio幫你照料得無微不至,當你需要完成什麼功能時,你會發現它就在你手邊,使你感覺開發Web應用不再是一種負擔,而是一種充滿成就感的過程!
7.And More...
7.1 布局
布局是Web應用中的常見問題,Apusic OperaMasks優雅的解決了此類問題。我們有布局管理器。
如圖所示的BorderLayout能夠將頁面分割成多個部分,不同部分之間能夠進行拖動、隱藏等操作。
同樣,我們還提供了類Tiles的模版布局技術,解決Web頁面的代碼復用問題,並且,與Tiles相比,我們的解決方案更優雅,我們采用標准的JSF語法來完成頁面布局的定義,使用戶更易於上手,同時又避免了xml配置文件的繁瑣。
7.2 基於Annotation的Managed Bean的定義
Managed Bean是JSF中非常重要的概念,它是界面層與業務層之間的粘接器。JSF規范規定,必須在faces-config.xml文件中聲明Managed Bean。如同EJB 3.0通過Annotation來簡化ejb的配置一樣,Apusic OperaMasks提供了以Annotation形式來配置Managed Bean的功能,包括提供支持Managed Bean聲明、Managed Property注入等一系列的Annotations以避免維護faces-config.xml文件,極大的簡化了應用的開發過程。
如果運行在Apusic應用服務器上,我們還可以在Managed Bean中通過Annotation進行資源注入,從而將Managed Bean與ejb/jpa等編程模型更好的融合在一起。
7.3 組件開發人員之利器
組件技術是解決軟件復用問題的有效方案,Web開發同樣如此。但我們卻缺乏Web組件的構建基礎。因為我們需要為其設定很多假設:它的技術是先進的嗎?它的規范是標准的嗎?它的實現是開放的嗎?
無庸置疑,Apusic OperaMasks滿足您的所有要求。並且,針對組件開發人員,它提供了若干基礎服務,包括:
Ajax Engine:引擎級的Ajax支持,簡化組件開發人員Ajax開發
Resource Manager:解決組件的資源管理問題
Skin Manager:提供組件的皮膚管理功能
OperaMasks.org是一個鼓勵創新、鼓勵分享的社區,任何用戶都可以在Apusic OperaMasks上進行擴展,並形成自己的組件庫,從而有效解決Web軟件開發復用問題。
8.構建完整解決方案
回顧OperaMasks相關技術,包括Ajax特性、Rich Components等,不難發覺,我們解決了界面展現層問題,以及展現層與業務邏輯層的粘接器Managed Bean,但我們缺少業務邏輯層所應該必備的一些基礎服務,包括事務、安全、存儲、分布等,而這些,是Managed Bean所無法帶給我們的。
幸運的是,就像 JSF 只是JavaEE的組成部分一樣,我們不僅有 Apusic OperaMasks,還有久經考驗的Apusic應用服務器。
Apusic OperaMasks是開放的技術,它可以運行在任何支持Servlet 2.5/JSP 2.1的Web容器上,但無疑,它與Apusic應用服務器的結合是最緊密的,而Apusic應用服務器也為其平添許多額外特性。
1) Managed Bean 與 ejb3/jpa 的結合:
在 Apusic 應用服務器上運行 Apusic OperaMasks時,支持在Managed Bean裡面通過Annotation進行資源注入,從而能夠將Managed Bean與ejb3/jpa很好的融合在一起,形成統一的編程模型,並由ejb3/jpa為Managed Bean提供事務、安全、存儲、分布式計算等基礎服務。
2) JSF狀態的傳遞
JSF技術需要在客戶端與服務器端之間進行狀態的維護,這就意味著雙方之間的交互可能更頻繁,數據量更大。Apusic應用服務器為其提供了許多額外的特性增強,包括基於NIO的多路復用技術提升並發處理能力;基於gzip形式的狀態壓縮技術降低網絡流量等。
Apusic OperaMasks是建立在 Apusic 應用服務器之上的,並與Apusic應用服務器一起構成了Web開發完整解決方案!