原貼地址:
http://news.csdn.net/n/20061221/99748.html從根本上說,面向服務(wù)的架構(gòu)能夠使企業(yè)內(nèi)部動態(tài)數(shù)據(jù)服務(wù)的創(chuàng)建變得更加方便,同時,還能夠使企業(yè)開發(fā)人員創(chuàng)建影響這些服務(wù)的復(fù)合應(yīng)用程序。Web2.0提供了一個豐富的Web體驗,用戶能夠以高效的、充滿希望的、有益的方式參與合作。
如果我們把這兩個現(xiàn)象結(jié)合起來,那么,通過企業(yè)社團成員之間的互相交流,以及成員與不斷變化的企業(yè)數(shù)據(jù)之間的交互,我們就能夠?qū)崿F(xiàn)這一關(guān)鍵的提高效率的新方法。
協(xié)作型企業(yè)相互融合,下一代的Web應(yīng)用程序也已露端倪,但是,開發(fā)團體的推測是,為了實現(xiàn)明顯的利益,企業(yè)所采用的各種技術(shù)之間存在著根本性 的差異。標(biāo)準(zhǔn)必須朝哪個方向發(fā)展才能夠滿足SOA與Web2.0概念的結(jié)合,為了更好的理解這個問題,我們將致力于檢驗Java表示技術(shù)的狀態(tài)。
Ajax化JavaServer Faces
標(biāo)準(zhǔn)奠定了SOA的基本結(jié)構(gòu),但是,在Web2.0的世界中卻不存在著標(biāo)準(zhǔn)。為了支持Web2.0的功能,市場上出現(xiàn)了太多的方法,其中大多數(shù) 在JavaScript的實現(xiàn)(影響Ajax的技術(shù))上卻非常繁雜。在Java EE的規(guī)范中,JavaServer Faces提供了表示層,但是,相比起Ajax技術(shù)和Web2.0概念的流行,它目前的修訂版出現(xiàn)的更早。
事實證明,在組件層,JSF中的可擴展組件架構(gòu)非常適合與Ajax技術(shù)協(xié)同使用,但是,組件層Ajax技術(shù)存在的問題是,它們是存在于狹小的規(guī) 避JSF生命周期的交互空間內(nèi)。解決這一問題所需要的是,一種更加全面的方式,以實現(xiàn)在JSF生命周期內(nèi)的Ajax交互。具體來說,有以下兩點需要著重闡 述。
1.改進的用戶交互模型: 在JSF中,目前的用戶交互模型是基于表格的,它過于粗略而無法傳輸豐富的Web2.0特性。組件層的Ajax交互粒度,以及JSF目前依賴的基于表格的子任務(wù)模型,這兩者之間存在著顯著的差異。交互類型應(yīng)當(dāng)包含以下幾種形式:
- 純粹的本地客戶端JavaScript交互,沒有服務(wù)器通信、不需要執(zhí)行JSF生命周期。這種類型的例子可以是,在日期選擇組件中通過日歷來進行導(dǎo)航。目前,通過組件層JavaScript實現(xiàn)能夠支持這個模型。
- 組件層的Ajax交互,不需要執(zhí)行JSF生命周期。這種類型的例子可以是,基于當(dāng)前用戶在文本框中的輸入,從而形成一個列表。這里的關(guān)鍵是,用戶與組件的交互僅僅影響到該組件的表示。同樣,目前,通過組件層JavaScript實現(xiàn)能夠支持這個模型。
- 組件層的提交,引發(fā)JSF生命周期的執(zhí)行。生命周期的執(zhí)行結(jié)果將成為新的表示,該表示可能會影響到頁面中的多種組件。這這種類型的例子可以是,在日期選擇組件中完成日期的選擇,結(jié)果是引發(fā)顯示不同的日期安排信息。目前在JSF中,還無法支持這種形式的交互。
2. 增量表示更新: 為了使用Ajaxian 方式(不是頁面刷新)實現(xiàn)第三種交互模型,JSF需要一個增量更新機制,僅僅是把頁面中應(yīng)用到的表示層所做的必要修改從一個表現(xiàn)處理傳向下一個表現(xiàn)處理。 下面這個圖示表明了這個概念。它需要一個Ajax橋,在服務(wù)器端把表示的改變組合起來,在客戶端的DOM把那些變化重組。
JSF Push模式
Ajaxified JSF實現(xiàn)和多數(shù)其它的Ajax方式從遺留的Web應(yīng)用程序模型中繼承了一個共同的特征,該模型是一個客戶端發(fā)起的交互模型。這意味著,客戶端的表示層只需要針對用戶與表示層的交互進行相應(yīng)變化。
與使用遺留應(yīng)用程序相比,使用Ajax技術(shù),這個交互是細(xì)粒度的,但是,它仍然是客戶發(fā)起的。現(xiàn)在,當(dāng)你檢驗支持應(yīng)用程序的SOA數(shù)據(jù)模型的動 態(tài)特性、了解眾多同步用戶采用這一動態(tài)數(shù)據(jù)所進行的協(xié)調(diào)互操作時,你就能夠意識到,在客戶端推動動態(tài)表示變化的機制是非常重要的,這一點越來越清晰。它是 達(dá)到Web2.0模型所需要的真正的動態(tài)特性的唯一途徑。
在產(chǎn)業(yè)中已經(jīng)證明,對于JSF規(guī)范與一個表示push模型的協(xié)作來說,Ajax push技術(shù),也指Comet,是十分必要的。前文已經(jīng)描述的這個增量更新特性,提供了在實現(xiàn)JSF Push模式時所需要的基于Ajax的更新機制。除此之外,當(dāng)應(yīng)用程序邏輯發(fā)現(xiàn)出現(xiàn)了一些將會影響客戶端表示層狀態(tài)的變化時,延長JSF的生命周期來允許 一個強制的表現(xiàn)處理是很有必要的。
雖然,JSF push模型相對而言實現(xiàn)起來更加容易,但是,生產(chǎn)經(jīng)驗表明,為使得開發(fā)人員能夠有效繼承,僅僅暴露JSF API中底層強制的表示機制是遠(yuǎn)遠(yuǎn)不夠的。關(guān)于基本的push機制,JSF規(guī)范很有必要對表現(xiàn)API進行介紹,從而呈現(xiàn)給開發(fā)人員一個清晰有效的機制,用 于請求強制表示。API尤其需要提供以下幾個方面:
1.觸發(fā)的表現(xiàn):應(yīng)用程序開發(fā)人員應(yīng)當(dāng)能夠在發(fā)出表示處理請求的業(yè)務(wù)邏輯中定義觸發(fā)點。
2. 群組表現(xiàn): 一個觸發(fā)點能夠影響一個單一客戶端、多個客戶端,或者是所有連接到該應(yīng)用程序上的客戶端。因此,為觸發(fā)表現(xiàn)提供群組管理結(jié)構(gòu),這是很有必要的。
3. 預(yù)定的表現(xiàn):有許多合適的計劃機制應(yīng)當(dāng)被支持,包括,按需表現(xiàn)、推遲表現(xiàn),以及內(nèi)部表現(xiàn)。預(yù)定的表現(xiàn)架構(gòu)應(yīng)當(dāng)具備可擴展性,以支持其他用戶預(yù)先設(shè)定的需 求。很重要的一點是,觸發(fā)表現(xiàn)機制應(yīng)當(dāng)能夠更加有效的傳輸。由于存在著大量的觸發(fā),它們潛在地以各種方式影響著客戶端,因此,管理表現(xiàn)的處理這一任務(wù)不能 僅僅落在開發(fā)人員身上。觸發(fā)表現(xiàn)的實現(xiàn),必須有效地合并表現(xiàn)處理請求、處理必要的同步,而且,這些操作都是以一種線程有效的方式。
多視圖支持
現(xiàn)存的為JSF定義的階段和需求范圍,根本不足以支持滿足Ajax的JSF應(yīng)用程序——用戶能夠在同一應(yīng)用程序上獲得多個活動視圖。階段范圍能 夠維護所有視圖共同的狀態(tài),但是,它不足以處理視圖之間不同的狀態(tài)。由于多個同步請求都必須是活動狀態(tài),所以,需求范圍也不充分。因此,需要一個新的范 圍,來管理滿足Ajax 的JSF應(yīng)用程序的會話方面。JBoss的Seam 方案提出了會話范圍,它主要提供JSF中所需要的額外范圍。除了支持多視圖之外,會話范圍還能夠帶來其他優(yōu)勢,例如,在應(yīng)用程序中,通過會話中對一系列用 戶交互的明確描述,就能夠有效地支持書簽和返回按鈕特性。
長期存在的HTTP請求
回到前面所提到的push模型,你可能注意到,機制需要一個特殊的HTTP請求,它能夠異步地響應(yīng)從應(yīng)用程序中發(fā)出的觸發(fā)表現(xiàn)出理請求。依據(jù)更 新的頻率,這個特殊HTTP請求能夠長期存在。由于在響應(yīng)之前,每一個請求都占用其線程,所以,在處理這個長期存在的請求時,現(xiàn)存的Servlet模型無 法很好的響應(yīng)。因此,為了支持push模型,必須對Servlet模型進行改變,使它能夠以線程有效的方式來處理長期存在的請求。再強調(diào)一次,有很多生產(chǎn) 方案與異步Servlets和HTTP服務(wù)器相關(guān),Java EE規(guī)范能夠在此基礎(chǔ)上定義一個解決方案。
結(jié)論
人們?nèi)匀挥行┵|(zhì)疑:SOA與Web2.0世界將會發(fā)生抵觸,新一代的協(xié)作型企業(yè)應(yīng)用程序已露端倪。也存在著這樣的質(zhì)疑,現(xiàn)存的Java EE規(guī)范無法完全處理Web2.0提出的請求,以及JSR處理必須開始在直接項中考慮這些請求。然而,產(chǎn)業(yè)中的重大進步,已經(jīng)能夠處理出現(xiàn)的請求,并且能 夠?qū)崿F(xiàn)擴展現(xiàn)存Java EE基礎(chǔ)結(jié)構(gòu)的商業(yè)化的可行方案。即將使用JSR 172來生成JSF2.0規(guī)范,非常重要的是,包含Ajax特性,以及產(chǎn)業(yè)參與者貢獻(xiàn)相關(guān)技術(shù),來確保能夠及時做出基于標(biāo)準(zhǔn)的解決方案。