新聞中心
相比于Tomcat,GlassFish的用戶(hù)群還沒(méi)有那么廣泛,但是因?yàn)槠渫瑯用赓M(fèi)、開(kāi)源,而且擁有如延遲加載、 Grizzly等技術(shù),正取得越來(lái)越多人的認(rèn)可。而JSF作為一個(gè)Web開(kāi)發(fā)的標(biāo)準(zhǔn),雖然自誕生之日起就一直飽受爭(zhēng)議,不過(guò)在爭(zhēng)議中,它也在贏得更多開(kāi)發(fā)者的眼光。Anissa是GlassFish的一個(gè)主要提交者,領(lǐng)導(dǎo)其管理控制臺(tái)項(xiàng)目,在Sun的應(yīng)用服務(wù)器團(tuán)隊(duì)工作了7年之久。InfoQ中文站的編輯霍泰穩(wěn)有幸就JSF在GlassFish管理控制臺(tái)中的應(yīng)用,如為何在GlassFish管理控制臺(tái)中應(yīng)用JSF模板,如何對(duì)JSF做單元測(cè)試,JSF的組件庫(kù)以及如何提高JSF的性能等問(wèn)題采訪(fǎng)了Anissa.

在常寧等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供網(wǎng)站制作、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需求定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),成都營(yíng)銷(xiāo)網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站制作,常寧網(wǎng)站建設(shè)費(fèi)用合理。
請(qǐng)介紹一下您自己以及目前所主要研究的技術(shù)領(lǐng)域。
Anissa:我是GlassFish的主要提交者,目前領(lǐng)導(dǎo)其管理控制臺(tái)項(xiàng)目。大約七年前,我加入了應(yīng)用服務(wù)器團(tuán)隊(duì),那時(shí)GlassFish還沒(méi)有開(kāi)源。我參與過(guò)許多GUI工具,包括J2EE 1.4參考實(shí)現(xiàn)中的deploytool以及我們深受歡迎的IDE_NetBeans的插件,而現(xiàn)在是負(fù)責(zé)管理控制臺(tái)。在這些年里,我見(jiàn)證了Web應(yīng)用開(kāi)發(fā)技術(shù)的發(fā)展過(guò)程,并從中受益很多。我目前專(zhuān)注于Web 2.0,致力于將***的技術(shù)應(yīng)用到GlassFish管理控制臺(tái)。
GlassFish管理控制臺(tái)用到了JSF模板,請(qǐng)介紹一下選用這個(gè)技術(shù)的緣由。
Anissa:JSF是一個(gè)面向組件的框架。因此,它易于組織各種具有復(fù)雜功能的“組件”成為一個(gè)網(wǎng)頁(yè),這些組件包括文件選擇、文件上傳、表格、BreadCrumb、屬性表以及其它很多組件。但是,JSF 1.2 沒(méi)有提供一種簡(jiǎn)潔的方式重用GUI顯示邏輯或者通過(guò)模板組織頁(yè)面。 JSFTemplating通過(guò)協(xié)調(diào)模板讓定義頁(yè)面變得更有效率。它也添加了許多旨在鼓勵(lì)代碼復(fù)用的特性和其他有用的功能。這些功能包括:一個(gè)細(xì)粒度的事件模型、能夠參數(shù)化的可重用“處理函數(shù)”、支持注釋、頁(yè)面作用域、可以將任何內(nèi)容來(lái)源轉(zhuǎn)化為資源流、可定制的組件工廠(chǎng)。這些功能和JSF豐富的組件模型結(jié)合,為創(chuàng)建GlassFish管理控制臺(tái)提供了豐富的開(kāi)發(fā)環(huán)境。
JSF的一個(gè)初衷就是快速開(kāi)發(fā),但單元測(cè)試對(duì)快速開(kāi)發(fā)同樣重要。您如何做JSF的單元測(cè)試?
Anissa:我不得不承認(rèn)管理控制臺(tái)的單元測(cè)試是***缺陷的地方之一,亟需提高。對(duì)于 GlassFish V2,我們已經(jīng)研究并使用Selenium做了一些測(cè)試,雖然Selenium更適合功能測(cè)試。我們也依靠質(zhì)量保證部門(mén)對(duì)控制臺(tái)進(jìn)行自動(dòng)化測(cè)試。對(duì)于 GlassFish V3,我們正在研究不同的框架,例如JSFUnit,它可以作為Maven構(gòu)建過(guò)程和Hudson的一部分。
目前關(guān)于JSF的錯(cuò)誤提示似乎還不那么直觀,過(guò)于底層,對(duì)于如何定位錯(cuò)誤您有什么技巧?
Anissa:JSF錯(cuò)誤信息從1.0開(kāi)始一直在持續(xù)改進(jìn)。不幸的是,很多時(shí)候人們面對(duì)錯(cuò)誤信息,仍然需要具備足夠的JSF是如何工作的知識(shí)才能完全理解。找出錯(cuò)誤的根源常常需要經(jīng)驗(yàn)。但是,這里有一些技巧可以幫助你:
查看JSF源代碼。JSF是開(kāi)源的,不要害怕去獲取源代碼,看一看錯(cuò)誤發(fā)生位置處的代碼。報(bào)告糟糕的錯(cuò)誤信息。當(dāng)你無(wú)法理解錯(cuò)誤信息的意思時(shí),請(qǐng)去https://javaserverfaces.dev.java.net,提交一個(gè)“問(wèn)題 ”,這會(huì)有助于改進(jìn)錯(cuò)誤信息而且你也很有可能得到你所遇到的問(wèn)題的答案。使用google,在論壇上提問(wèn)。有很多人在使用JSF,可能有人已經(jīng)遇到并提出了這個(gè)問(wèn)題。如果沒(méi)有,你會(huì)發(fā)現(xiàn)許多人樂(lè)于幫助你、解答你的問(wèn)題。確認(rèn)你使用了JSF “h:messages”組件(或者另外一個(gè)顯示這些內(nèi)容的組件)。JSF經(jīng)常使用“Faces消息”機(jī)制報(bào)告錯(cuò)誤,如果你沒(méi)有在頁(yè)面上包含 “h:messages” 組件,你就無(wú)法看到這些錯(cuò)誤。
使用這些技巧,你能夠解決遇到的任何問(wèn)題。
JSF用來(lái)做重業(yè)務(wù),輕頁(yè)面的企業(yè)開(kāi)發(fā)還比較合適,但現(xiàn)在客戶(hù)也都比較重視頁(yè)面,對(duì)界面設(shè)計(jì)也提出了很高的要求。通過(guò)IDE,JSF可以實(shí)現(xiàn)可視化編輯Web界面,但如何高效的實(shí)現(xiàn)開(kāi)發(fā)人員和網(wǎng)頁(yè)開(kāi)發(fā)人員的合作?您在開(kāi)發(fā)JSF時(shí)是如何跟美工配合的?
Anissa:我們的產(chǎn)品對(duì)界面設(shè)計(jì)感觀有一個(gè)非常明確的標(biāo)準(zhǔn)。我們使用的組件(Woodstock)默認(rèn)情況下就反映了這種設(shè)計(jì)要求。因此,JSF面向組件的本質(zhì)提供給我們很多外觀和感覺(jué)方面的選擇,而不需要太多開(kāi)發(fā)工作。也就是說(shuō),我們的產(chǎn)品中有一些地方需要定制圖片、決定如何顯示信息,也存在一些地方?jīng)]有被JSF Woodstock組件覆蓋。針對(duì)這些情況,我們與美工合作創(chuàng)建圖片,或者他們幫助我們決定哪些組件最合適,或者對(duì)新組件制定標(biāo)準(zhǔn)。如果需要新組件,我們經(jīng)常讓W(xué)oodstock團(tuán)隊(duì)負(fù)責(zé)這項(xiàng)工作--當(dāng)我們不能等待時(shí),我們才會(huì)自己實(shí)現(xiàn)。美工通常提供圖片和HTML,我們將其轉(zhuǎn)化成JSF頁(yè)面或者組件。
管理控制臺(tái)是如何使用AJAX技術(shù)的?
Anissa:在GlassFish V2中,我們?cè)诖蠖鄶?shù)頁(yè)面上使用Ajax計(jì)算BreadCrumb。瀏覽器中的JavaScript計(jì)算當(dāng)前哪一個(gè)樹(shù)節(jié)點(diǎn)被選中,然后從樹(shù)節(jié)點(diǎn)中獲取 URL,將這些信息通過(guò)XMLHttpRequest發(fā)送給服務(wù)器。服務(wù)器將這些信息轉(zhuǎn)化成由多個(gè)Woodstock超鏈接組成的BreadCrumb組件。顯示該組件的代碼返回到瀏覽器后,JavaScript將BreadCrumb信息更新到當(dāng)前頁(yè)面上。
當(dāng)新對(duì)象創(chuàng)建時(shí),我們也使用Ajax更新樹(shù)節(jié)點(diǎn)。整棵樹(shù)從不會(huì)被完全刷新,它只會(huì)通過(guò)Ajax進(jìn)行部分更新。我們使用Dynamic Faces實(shí)現(xiàn)Ajax技術(shù),它是Ed Burns(JSF標(biāo)準(zhǔn)負(fù)責(zé)人)領(lǐng)導(dǎo)的JSF擴(kuò)展項(xiàng)目的一部分。
JSF一個(gè)重要的優(yōu)勢(shì)是基于組件,管理控制臺(tái)有沒(méi)有開(kāi)發(fā)自己的組件庫(kù),關(guān)于組件庫(kù)的選擇使用有何建議?管理控制臺(tái)中的表單是如何進(jìn)行擴(kuò)展的?
Anissa:正如在回答第4個(gè)問(wèn)題時(shí)所提到的,我們使用Woodstock組件開(kāi)發(fā)控制臺(tái)。 Woodstock 提供了一整套JSF組件,讓開(kāi)發(fā)人員基于統(tǒng)一的規(guī)范創(chuàng)建方便的本地化的應(yīng)用。我們還沒(méi)有遇到需要自己開(kāi)發(fā)組件的情況。如果你有這個(gè)想法,你可以看一看 Ken Paulsen寫(xiě)的有關(guān)ServerSide的文章,他是JSFTemplating的技術(shù)負(fù)責(zé)人和創(chuàng)建者。他在文中展示了如何使用 JSFTemplating簡(jiǎn)化和加快顯示(Render)開(kāi)發(fā)。
我們的許多頁(yè)面使用表單顯示數(shù)據(jù),這也是Woodstock的組件之一。
在使用JSF的過(guò)程中,你們主要遇到了哪些棘手的難題,又是如何克服的?
Anissa:Bug。當(dāng)組件正常工作的時(shí)候它們很出色,但是當(dāng)你處理一個(gè)無(wú)法工作的新組件時(shí),很難找到原因。幸運(yùn)的是,這種情況不會(huì)經(jīng)常發(fā)生,因?yàn)榻M件被很多人、很多程序重用,因此bug會(huì)及時(shí)發(fā)現(xiàn)。但是,如果這發(fā)生了,我們會(huì)與組件作者交流、在論壇或者irc頻道提問(wèn)、搜索google中其他人遇到的類(lèi)似問(wèn)題,問(wèn)題最終得到解決。
JSF通過(guò)和Session綁定實(shí)現(xiàn)數(shù)據(jù)顯示,雖然簡(jiǎn)單了,但是控制數(shù)據(jù)同時(shí)也困難了。對(duì)于這種情況,您是如何理解的?
Anissa:管理控制臺(tái)盡量避免使用session作用域。頻繁使用session可能會(huì)導(dǎo)致內(nèi)存的大量占用,或者之前的動(dòng)作遺留下來(lái)的一些信息會(huì)導(dǎo)致產(chǎn)生bug。管理控制臺(tái)盡可能多的使用request,還有pageSession,它允許伴隨著頁(yè)面存儲(chǔ)值,只要你處于同一個(gè)頁(yè)面,其值就一直存在,但不會(huì)超過(guò)頁(yè)面的生存時(shí)間。我們的確遇到過(guò)一些情況,數(shù)據(jù)必須跨頁(yè)面存在,我們要么在頁(yè)面之間傳遞數(shù)據(jù),要么在極少的個(gè)案中使用session。
在提升JSF應(yīng)用的性能方面,您有什么建議?
Anissa:JSF提供了大量功能。但是,功能只有在需要時(shí)才是有價(jià)值的。是否應(yīng)該使用JSF的更多功能取決于你應(yīng)用程序的需求。如果你想對(duì)功能進(jìn)一步了解以確定它們是否對(duì)你的應(yīng)用有幫助,我推薦你閱讀一本好書(shū)以及在JSF論壇上提問(wèn)。你可能也會(huì)考慮加入 irc.freenode.net上的jsf IRC頻道。這是一個(gè)聆聽(tīng)其他人提問(wèn)和從專(zhuān)家獲取答案的好地方。如果正在使用JSFTemplating或者只是想多了解一下,#jsftemplating也是一個(gè)不錯(cuò)的去處。
【編輯推薦】
- 簡(jiǎn)述JSF入門(mén)介紹
- JSF和Struts的區(qū)別概述
- 編寫(xiě)JSF自定義復(fù)合組件的原則和技巧
- 選擇JSF不選Struts的十大理由
- Tapestry和JSF對(duì)比
文章名稱(chēng):JSF在GlassFish管理控制臺(tái)中的應(yīng)用
標(biāo)題來(lái)源:http://fisionsoft.com.cn/article/cdjjjpd.html


咨詢(xún)
建站咨詢(xún)
