相比于Tomcat,GlassFish的用户群还没有那么广泛,但是因为其同样免费、开源,而且拥有如延迟加载、 Grizzly等技术,正取得越来越多人的认可。而JSF作为一个Web开发的标准,虽然自诞生之日起就一直饱受争议,不过在争议中,它也在赢得更多开发者的眼光。Anissa是GlassFish的一个主要提交者,领导其管理控制台项目,在Sun的应用服务器团队工作了7年之久。InfoQ中文站的编辑霍泰稳有幸就JSF在GlassFish管理控制台中的应用,如为何在GlassFish管理控制台中应用JSF模板,如何对JSF做单元测试,JSF的组件库以及如何提高JSF的性能等问题采访了Anissa.
请介绍一下您自己以及目前所主要研究的技术领域。
Anissa:我是GlassFish的主要提交者,目前领导其管理控制台项目。大约七年前,我加入了应用服务器团队,那时GlassFish还没有开源。我参与过许多GUI工具,包括J2EE 1.4参考实现中的deploytool以及我们深受欢迎的IDE_NetBeans的插件,而现在是负责管理控制台。在这些年里,我见证了Web应用开发技术的发展过程,并从中受益很多。我目前专注于Web 2.0,致力于将最新的技术应用到GlassFish管理控制台。
GlassFish的管理控制台用到了JSF模板,请介绍一下选用这个技术的缘由。
Anissa:JSF是一个面向组件的框架。因此,它易于组织各种具有复杂功能的“组件”成为一个网页,这些组件包括文件选择、文件上传、表格、BreadCrumb、属性表以及其它很多组件。但是,JSF 1.2 没有提供一种简洁的方式重用GUI显示逻辑或者通过模板组织页面。 JSFTemplating通过协调模板让定义页面变得更有效率。它也添加了许多旨在鼓励代码复用的特性和其他有用的功能。这些功能包括:一个细粒度的事件模型、能够参数化的可重用“处理函数”、支持注释、页面作用域、可以将任何内容来源转化为资源流、可定制的组件工厂。这些功能和JSF丰富的组件模型结合,为创建GlassFish管理控制台提供了丰富的开发环境。
JSF的一个初衷就是快速开发,但单元测试对快速开发同样重要。您如何做JSF的单元测试?
Anissa:我不得不承认管理控制台的单元测试是最具缺陷的地方之一,亟需提高。对于GlassFish V2,我们已经研究并使用Selenium做了一些测试,虽然Selenium更适合功能测试。我们也依靠质量保证部门对控制台进行自动化测试。对于 GlassFish V3,我们正在研究不同的框架,例如JSFUnit,它可以作为Maven构建过程和Hudson的一部分。
目前关于JSF的错误提示似乎还不那么直观,过于底层,对于如何定位错误您有什么技巧?
Anissa:JSF错误信息从1.0开始一直在持续改进。不幸的是,很多时候人们面对错误信息,仍然需要具备足够的JSF是如何工作的知识才能完全理解。找出错误的根源常常需要经验。但是,这里有一些技巧可以帮助你:
查看JSF源代码。JSF是开源的,不要害怕去获取源代码,看一看错误发生位置处的代码。 报告糟糕的错误信息。当你无法理解错误信息的意思时,请去https://javaserverfaces.dev.java.net,提交一个“问题”,这会有助于改进错误信息而且你也很有可能得到你所遇到的问题的答案。 使用google,在论坛上提问。有很多人在使用JSF,可能有人已经遇到并提出了这个问题。如果没有,你会发现许多人乐于帮助你、解答你的问题。 确认你使用了JSF “h:messages”组件(或者另外一个显示这些内容的组件)。JSF经常使用“Faces消息”机制报告错误,如果你没有在页面上包含“h:messages” 组件,你就无法看到这些错误。
责任编辑:小草