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