`

JSF+AJAX企业级开发之路——来自Sun的高级工程师Ed Burns的精彩演讲【一】

 
阅读更多

JSF+AJAX企业级开发之路——来自Sun的高级工程师Ed Burns的精彩演讲【一】关键字: enterprise grade ajax and jsf 序这是一篇很长很长的技术性演讲,但你无法从中得到一行代码。原文:http://www.theserverside.com/tt/knowledgecenter-is/knowledgecenter-is.tss?l=PodcastEdBurns 本周我推荐来自Sun高级工程师Ed Burns在TTS(TheServerSide)上关于JSF整合AJAX的精彩演讲.Ed Burns 作为 Sun Microsystems 的高级工程师,自从 1994 年以来,Ed 参加了各种客户端和服务器端 Web 技术的工作,包括 NCSA Mosaic、 Mozilla、Sun Java Plugin、Jakarta Tomcat 以及最新的 JavaServer Faces。Ed 现在是 JavaServer Faces 的联合带头人。因此Ed与先前我介绍的denny不同,前者来自于官方是规范的制定者,后者来自于“民间”,是规范的实现者,由此可见Ed才是真正直接影响JSF的关键性人物. 现在我简单介绍一下本次演讲的一些背景:自从第一个web应用程序Struts于2001年6月发布开始,Java世界至今开始了长达7年的框架大战.JSF作为其中web 框架家族的一员,脱颖而出,被JCP青睐,荣登官方web标准.(JSF的主要架构师有Struts作者Craig R.McClanahan).仍然JSF一直发展的很不顺,Struts长期牢牢占据着市场份额,成为现实中的工业标准;而EJB2.0的没落,Spring,Hibernate的兴起更是让所谓的官方标准长期备受冷落.当Java开发者们为SSH整合而乐此不疲的时候,Sun带着它的JavaEE5又重新杀了回来,EJB3.0+JSF1.2(或EJB3.0+Seam)作为官方推荐的超级组合仍然没有从根本上撼动强大的开源社区,SSH仍然是Java企业级开发的第一选择. 但是!!!技术总是在不断向前发展的,我是一个Struts2的忠实拥护着,但最近也对Struts2感到有些不安,原因是Struts2是在Webwork的基础衍化而来,但你如果使用过Struts2的话,你会发现它其实与Webwork几乎没有什么区别,也就是说Struts2相对于Webwork没有根本的突破,最重要的是Struts2最近发布越来越慢,到今天为止Struts2.0.11版本已经发布大半了,仍然没有半点声响.而JSF最近却动作频频,MyFace新版本的发布,ICESoft无比强大的JSF组件的发布,以及Seam2.0中的Web框架就是JSF证明Sun这一次绝对是玩真的了.在我翻译的文章中《[翻译] Rod Johnson 为什么没有公司大到足够去拒绝开发人员他们所想得到的东西》,表明Sun越来越看重社区的力量,活跃的社区才代表你的技术真正被人接受认可,而并非几个少数寡头专家躲在“象牙塔”里研究那些过于复杂笨重的高深技术,所以Sun力挺JSF的真正原因还是想吸引大量的开发人员来壮大其社区,实际上Sun除了Java语言本身外,没有什么特别成功的东西:我们开发最常用的是Eclipse,技术是SSH,应用程序器开源的是Tomcat,商业的是Weblogic或Webshpere.但不要以为Sun真会傻到看不这些缺点,Soralar10, Netbeans6.0的推出,EJB3.1规范(草案快要出来了)的简洁,应用服务器GlassFish的支持,还有刚刚购买的MySQL,你会发现Sun这一条开发产品线非常齐全,而且比先前的有更明显的优势,所以Sun现在缺少的不再是技术,而是“天时,地利,人和”中的人和,如果挽回当年的EJB2.*之痛,还是需要时间的. 在我的另一篇文章《从职位中预测2008年Java框架之争》里,JSF如今已经有所起色了,相对于EJB3.0,JSF似乎更容易得到推广.JSF除可与EJB整合外,还可以与目前最流行的应用程序框架Spring进行整合,并且无论是从组件数量,还是供应商的支持来说,JSF都是最有优势的.因此本次演讲的作者Ed Burns以Sun的身份,不遗余力的借助于近年来最火爆的AJAX技术,向开发者们推广JSF.因此JSF作为Sun大举进攻开源社区的一个切入点,如果还能再加上EJB3.1 Lite(EJB3.1子集,可直接布署在Servlet容器上)的话,无疑会对当前的主流技术造成很大的冲击.但无论如何,作为Java Web开发人员,也许你根本对JSF毫无兴趣,或者觉得这只是一个官方的炒作,但了解技术的趋势总是需要的.那么我们开始正文吧。正文我本次演讲的目的旨在AJAX和JSF的整合。不管你选择什么版本的JSF,与AJAX的整合对于构建企业级应用程序来说是一个不错的选择。我会给大家展示这两种技术结合的方法,并且为了此次演讲,我特意增加了一些新内容——因为在这之前,已经有了AJAX+JSF的实际测试方法,但这种测试方法出现并不只局限于与JSF整合的AJAX应用,任何AJAX应用程序都可以使用.最后,我还会陈述一下如何评价AJAX+JSF的解决方案.现在,我发现JSF与最初的2001年所处的情况惊人的相似——那个时就已经有许许多多的web框架,真可谓是百家争鸣,而JSF在其中脱颖而出,以绝对优势成为JCP标准.但现在,这种局面再次出现了.在过去的六年,我们始终紧跟时代的步伐,但仍然还有大量的web框架鏖战在我们周围,但是根据从采用JSF技术的网站数据以及供应商为之提供的工具和组件数量来看,JSF还是在不断增长且在市场上仍有一席之地,因此许多供应商也相继推出了JSF+AJAX整合方案.在今天下午2:30的小组讨论中,我和来自ICEsoft的Steve Maryka会一同出席,大家也许已经知道Steve已经推出一套相当漂亮的JSF+AJAX整合方案.届时我会以Sun代表身份出现,当然除Steve外,还有很多知名人士,我会将他们的姓名列在幻灯片上.但不管怎样,本次演讲我只想给你们提供一些信息,以便当你看完这些不同的解决方案后,扪心自问:哪一个方案是最佳的?它有什么特性?这些特性可以满足我的企业要求吗?“企业级”已经是一个被过度滥用的术语了.那么按照我自己的理解,企业级指的是健壮,可伸缩,易于测试以及被业界证明可用性(industry proven)等.它需要被开发人员证明切实可行!JSF满足上述要求,因为刚才我所讲的大量的站点和大量的供应商支持足以证明这一点.另一个关于“企业级”的说法是:易于使用,易于开发,当然也包括易于测试.TDD(测试驱动开发)我的确喜欢,当我在领导团队开发一个JSF实现时,我们所做的一切都采用了TDD,并且效果显著.当然,“企业级的工具”也需要同时能够满足开发人员的需求.这一切往往在职场上扮演重要角色:你会雇用什么样的人才?他们所掌握的技能能够胜任这个开发工具吗?现存的开发工具是否又能满足他们的要求呢?并且最后一点我要强调的是:良好的可扩展性观念.当你所遇到的问题越来越多时,你所依赖的解决方案也要不断的提供抽象来解决这些不断增长的问题,此时JSF作为一个基于组件和多个扩展的解决方案,支持抽象和组件化满足了可扩展性.这就是我所定义的“企业级”概念. 那么我所指的AJAX,也在这里告诉给大家吧:web应用程序通过使用异步机制与服务端进行交互,并且动态更新浏览器所显示页面的外观和行为.这么来定义AJAX我觉得还是有稍稍有点生硬.如果你与ICEsoft接触过,你会发现他们已经有了AJAX的“推”模式,使用了大量技术可以异步的将内容通过浏览器发送出去.大家熟知的Comet就是这种编程模式的一种实践,它在与AJAX整合时非常有用,不过今天我没有在幻灯片上提供任何关于它的信息,但是可以很明确地的说:Comet就是为与AJAX整合,当然也包括与JSF的整合. 好了,说完了本次演讲的目的后,正式开始我们今天的议程吧.为什么JSF要与AJAX整合?为什么我会强调AJAX对于web应用程序来说是必须的?JSF和AJAX的整合方法有很多.其中JSF本身的设计和特性就使得它适合协同AJAX进行开发.下面是我们调查到的一些问题和解决方案. 一个解决这些问题的方案来自于Project Dynamic Faces(JSF的一个AJAX扩展)和MCP(Mozilla Control Program,使用JUnit或TestNG来自动测试web应用程序的一个包).这是一个很早就有的解决方案,当时我还在www.mozilla.org工作时已经有些Alpha级的技术来自动测试AJAX程序.现在我手头上有一些关于它的demo,今天我们就在TheServerSide的大屏幕来测试一下.(然后作者在屏幕前,当场使用demo来测试所提到的Project Dynamic Faces和MCP). 所有的web应用程序必须经过下列过程.为确保万无一失(motherhood applepie:美国黑话或政治家惯用的说语),你需要进行数据转换和数据验证,需要一种机制来指定页面流程(page flow),需要整合数据库.当然,你也许还会用持久层技术,比直接就可用的JAP和Hiberante.你还需要alphabet soup,国际化,本地化,以及易于访问.而这说到的最后一点,自AJAX它诞生以来,就一直是开发人员的痛.AJAX的反对者们大声嚷嚷:“好啊,你别想向政府部门卖出任何AJAX应用程序,因为有Section 508法案(请看注1).”的确,有大量的实事摆在了面前,但不管怎么样,web应用程序必须是易于访问的.即使当你在制作页面的时候,你也需要考虑到对多语言的支持,以及基于CSS的样式设计.同样,它还需要保证,不管在单元测试还是系统测试级别上都要求是可测试的.最后一点就是用户体验了,所有这一切来来回回最终还是从开发人员到测试人员然后再到达最终用户. 现在,(列在屏幕上)各种不同整合JSF和AJAX的方法都是为了降低复杂度。我现在为这些解决方案亮起了红灯。(这些解决方案都)有很多的赞成和反对的声音,但亮起的红灯表明反对占了上风。那么我要说的第一个整合JSF的方式就是直接使用Naked AJAX(未经过任何封装的AJAX),你打算一切靠自己,什么都打算自己写! Frank Zammetti写了一本书,他发明了“Naked AJAX”这个术语,指的是你不使用任何AJAX框架,全部由自己亲自来完成。如果你这么做,你会深入的理解AJAX底层的技术,因此很可能你在职业上炙手可热并且这也一切也确实是你想要得到的话,那么我不得不说你太有才了。你必须亲自处理所有的使用XMLHttpRequest的交互请求,这就要求你有扎实的JavaScript基本功,使用SetTimeout函数等以及一系列常人所不愿意使用的技术。到时候,你还不得不去解决跨浏览器之痛,而这种痛苦对于web开发人员来说已经持续多年,最后为了与它有一个了断,你还是陷入了开发自己框架的沼泽之中。第二个解决方案显得更高级些,因为你使用了JavaScript框架。现在已经有大量可用的JS框架充斥在我们周围,比如Dojo,DWR,Prototype等,这些框架也是今天要讨论的内容。但使用这些JS框架的话,你仍然需要去为你的web应用程序编写代码,而且一旦在JSF中使用了某个JS框架(比如说Dojo)的话,你又要去编写那些侵入性代码了。 未完待续........ 注1: Section 508是美国政府基于互联网协会的网页内容无障碍指导原则所制定的强制性法案,它规定了所有由联邦政府发展、取得、维持或使用的电子和信息技术都必须保证对残疾人群的无障碍。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics