新聞中心
相比于Tomcat,GlassFish的用戶群還沒有那么廣泛,但是因?yàn)槠渫瑯用赓M(fèi)、開源,而且擁有如延遲加載、 Grizzly等技術(shù),正取得越來越多人的認(rèn)可。而JSF作為一個(gè)Web開發(fā)的標(biāo)準(zhǔn),雖然自誕生之日起就一直飽受爭議,不過在爭議中,它也在贏得更多開發(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模板,如何對JSF做單元測試,JSF的組件庫以及如何提高JSF的性能等問題采訪了Anissa.

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


咨詢
建站咨詢
