Sun披上Ajax的时尚外衣
【IT168 专稿】2006年是属于Ajax的,Sun也未能免俗,为自己赶制了几件Ajax的时尚外衣。Ajax的流行,让Sun不惜放弃原则,加入Ajax的阵营,并在Ajax上投入重兵,推出了jMaki和Phobos两个为Ajax量身定做的开源项目,更通过Dynamic Faces项目将委以重任的JSF和Ajax绑定在一起。Sun决定着Java的未来,不管Ajax之举对Java来说是福是祸,Java都只能接受。
1. 2006年是属于Ajax的,Sun也未能免俗
毫无疑问,刚刚过去的2006年,是属于Ajax的,到处都在谈论Ajax,谁都希望和Ajax沾上一点边。Ajax就像巴黎时装设计师手里的布料,经过一番裁剪缝合之后,变成了举世瞩目的流行趋势。那些完全不像衣服的时装,披在靓丽模特身上,在T台上随着模特夸张的猫步,接受全球目光的洗礼之后,堂而皇之地占据所有时尚杂志的封面。虽然可以肯定,来年流行的一定会是另一种颜色,另一种款式,不过,今年的风头已经被Ajax占尽。
Ajax以令人瞠目结舌的速度,渗透到软件技术的方方面面,Sun自然也未能免俗。不妨举JSF的例子来说明。作为一项新兴的、处于推广中的Web框架技术,JSF要想在Web框架领域里,博得一席之地,除了尽其所能地吸引程序员飘忽的目光以外,没有其他更好的办法。眼球对于初出茅庐者是至关重要的,因此,只要是有助于留住程序员鼠标的方法,JSF都会不吝一试。这解释了为什么风头正劲的Ajax,会与急欲推销自己的JSF一拍即合。
不管从哪个角度看,JSF都是一项优秀的Web表示层框架技术,它的组件模型和事件驱动模式,取代了传统的请求和响应处理流程,在简化Java Web应用开发的道路上迈出了意义深刻的一步。JSF的成长历程充满坎坷,2001年通过JSR申请,到2004年才推出规范的第一个版本,那时已经是Struts的天下,JSF错过了最好的发展时机。
雪上加霜的是,Sun在JSF的推广上缺乏得力措施,JSF命名又严重失策,未继续沿用延续JSP的名字,丧失了借用JSP雄厚用户基础快速发展的机会。再加上JSF虽然用法简单,但本身的技术原理比较复杂,Sun的文档没有强调JSF的易用性,反而突出了JSF的深奥技术,让很多程序员失去了继续学习的耐心,与JSF失之交臂。所有这一切,都影响了JSF在程序员社区中的推广,使得JSF养在深闺无人知。
2006年,来自内部的改革呼声和外部的竞争压力,促使Sun作出了简化java开发的决策,Java EE 5应运而生,而JSF因为能够大大简化Java Web开发,顺利地上升为Java EE 5规范的强制部分。从这时开始,所有遵循Java EE 5规范的应用服务器,必须支持JSF。Sun终于在JSF的推广上落下了一剂重药。Sun在JSF上押上了更多的赌注,JSF在某种程度上,成为Sun与竞争对手周旋的筹码。
Ajax的窜红,Sun当然留意到了,并且想到了JSF。Sun认识到,将JSF和Ajax联系在一起,是扩大JSF知名度的较好机会。这次的Sun一改以往的官僚作风,动作迅速地加入了Ajax的阵营。Sun在JSF项目上的合作伙伴也不甘落后,纷纷高举Ajax的大旗,将JSF与Ajax的大车,牢牢地绑在一起。一时间,大小厂商尽皆忙于穿针引线,赶制Ajax的时尚外衣,短短数月,JSF已经披上了厚厚的Ajax时装。
2. Sun为Ajax放弃自己的原则
Sun对Ajax的态度,可以说是爱恨交加。以Sun在Java领域多年的技术老大的地位,Sun对于技术的崇尚程度,可想而知。正如那句俗语所说,一流的厂商卖标准,Sun向以规范称雄Java世界,规范和产品的不同之处在于,产品是不公开的,缺陷只有厂家自己知道,而规范必须暴露于大庭广众之下,任何一点小的瑕疵,都会被人不客气地挑出来批评。所以,Sun在技术上必须一丝不苟,不允许自己有半点含糊。用一个词来概括Sun对待技术的态度,那就是:严谨规范。
随便看看Sun的任何一份规范,都能感受到Sun的学究气质,甚至连遣词造句都循规蹈矩。该用Should的地方,绝不能用Must,英语语义上的区别,Sun已经具体化了。可以想见,一心追求严谨的Sun,对Ajax多少有一些看不上眼。Ajax本身没有值得称道的技术,只是几种现有技术的组合,就像Web2.0一样,既没有令人信服的理论体系,也没有经得起推敲的概念和术语,甚至连最基本的定义也莫衷一是,离作为一项技术的标准还远着呢!
不过,理想是一回事,现实又是另一回事,不和Ajax攀上亲戚,Sun恐怕要失去一些用户,所以,Sun最终还是“低下了高贵的头颅”,放弃自己的原则,在AJAXWorld Conference & Expo上,Sun被公开评论,将在Ajax上“shine more light”。“shine more light”是说得好听的,说得不好听一点,那就是“表现得更卖力一些”。
Ajax以JavaScript为其编程语言,而JavaScript在开发人员的眼里,名声不是太好,很多人甚至害怕用JavaScript写程序。也许Sun已经认识到这一点,所以,Sun在Ajax上的努力,集中于如何使JavaScript为Java程序员所接受。Ajax和web 2.0对Sun而言非常重要,这种重要性不是体现在技术方面,更多地是出于商业上的需要,因此,为了保持Java的“时尚性”,不至于落在潮流之后,Sun不得不提供对JavaScript这样的脚本语言编程模式的支持。据说Java的下一个版本,Java Standard Edition 6,将支持JavaScript。
某种程度上,Sun向JavaScript示好,对于程序员来说,是个好消息。以Sun的一贯做法,如果涉足JavaScript,首先,肯定会想方设法让JavaScript变得规范起来。事实上,以纯Java编写的JavaScript已经出现,那就是Rhino。多数人使用JavaScript的方式,是在Web页面上添加脚本,而Rhino只实现了语言的核心,并不包含处理HTML文档的任何对象或者方法。Rhino支持JavaScript 1.5的所有特性,而其独到之处是允许直接Java脚本,这显然是一种更规范的方式。
另外一个可以预测的变化,是JavaScript的使用将会变得简单,因为2007年是“简化Java开发”的实质性一年,Sun不会允许JavaScript增加Java开发的复杂度。JavaScript的自动生成、JavaScript的高度抽象、以及JavaScript的工具包等,Sun将会使用多种技术简化JavaScript的使用和编程。
3. Sun在Ajax上投入重兵
Sun在Ajax上的投入,体现为三个项目,其中两个开源项目,Project jMaki和Project Phobos,第三个则是JSF的新扩展版本,Project Dynamic Faces。
jMaki是轻量级的客户端/服务器框架,用来生成以JavaScript为核心的Web2.0或者具备Ajax功能的应用。正如人们所预料的那样,jmaki对JavaScript和CSS进行了高度的抽象,使JavaScript工具包和CSS的易用性得到了改善。有了jMaki,Java开发者在Java应用中对JavaScript的使用,就简化为JSP的标签库,或者JSF的组件了。
Jmaki由客户端和服务器端模块组成。在客户端,核心模块是jMaki Client Runtime,建立在jMaki Client Runtime之上的,是jMaki的部件模型(Widget Model),jMaki的布局(Layouts)和jMaki的客户端服务。Jmaki 的布局(Layouts)是web应用开发的起点,提供了若干种标准的页面布局;jMaki的部件模型是一种可重用的JavaScript组件模型,基于JavaScript、HTML和CSS技术。在jMaki部件模型的支撑下,程序员可以开发自己的部件,也可以使用现成的部件包;
jMaki的客户端服务是jMaki部件通信的纽带,采用订阅/发行机制,像胶水一样将不同的部件联系在一起。Jmaki Client Runtime可以和服务器端的各种Runtime交互,包括Java,PHP等,这种交互是以服务器端的jMaki Server Runtime为中介的。在服务器端,jMaki还有一个称为XmlHttpProxy的模块,用来访问外部的一些服务。
另一个Ajax的开源项目,称为Phobos。随着脚本和动态语言在开发人员中的流行,尤其是在Web应用领域,开发人员对于此类应用的快速开发和部署的需求与日俱增,Phobos项目正是在这种情形下启动的。Phobos是Java平台上的一个Web应用环境,对脚本语言友好,其目标是使Java SE和EE成为优秀的服务器端脚本语言平台。Phobos是开源项目GlassFish的一部分,Phobos对脚本和动态语言的支持,既建立在Java EE平台之上,同时也是对Java EE平台的补充,Phobos将使脚本和动态语言与Java EE平台的集成变得容易。
也许Sun对于Ajax的最直接响应,非Project Dynamic Faces项目莫属了。Dynamic Faces是JSF的下一个扩展版本,这个版本完全是对开发者社区的一种回应,以满足程序员们对于Ajax功能的呼吁。Dynamic Faces项目扩展JSF的服务器端组件模型,允许开发人员给web应用中现有的JSF组件插上Ajax的翅膀,而这一切无需对组件代码作任何修改,也不必重写应用程序,只需简单地指明,页面上的哪些部件需要Ajax功能。
JSF的页面是由一个组件树来代表的,和HTML的DOM树类似。Ajax程序员用Ajax部分地更新HTML的DOM树,而JSF程序员则通过Dynamic Faces指定需要异步更新的JSF组件,所以,Dynamic Faces的方法,对Ajax程序员和JSF程序员都不陌生,容易接受。更重要的是,利用JSF组件模型的优势,Dynamic Faces对Ajax功能的支持,在效率方面改善明显。
这主要得益于组件模型内在的协作性。在Ajax环境下,当页面上一个JavaScript事件发生时,它可能引发该页上一系列部件的异步更新,Dynamic Faces可以将所有这些异步更新,在一个单独的Ajax请求中完成,而不是每个更新都需要一个Ajax请求。这显然减轻了服务器的负担。
为一项技术启动三个项目,这在Java的历史上并不多见。
4. 福兮,祸兮,Sun的改变
纵观整个2006年,Sun在Ajax上的大手笔,仅仅是Sun一系列出人意表举动中的一个。Entity Beans被放弃了,取而代之的是类Hibernate的JPA;一直秘而不宣的Java 平台核心代码开源了,Sun向世界敞开了大门。孤立地看,这些事件无非是Sun的几次技术调整,但是,如果联系起来观察,不难发现,Sun正在改变自己。
有人说Sun顺潮流而动,审时度势,海纳百川,表现出一流厂商的大度胸襟;也有人说Sun随波逐流,看风使舵,沦落为平阳之虎。Sun庇护之下的Java,和Sun一起,风风雨雨,走过十年,Sun的改变,Java自然是春江水暖鸭先知,Sun的一举一动,无不影响着Java的未来。
随着Sun脱下实验室工程师一丝不苟的白大褂,穿上五颜六色的斑斓时装,Java身上逐渐多了些市井,少了些书香。关于Java何去何从的争论,对Java前景的担忧和憧憬,是最近以来业界长盛不衰的话题,对于Java来说,Sun的改变是祸是福,那是仁者见仁,智者见智了,不过,生活总是要继续的,除了义无反顾地一路前行,Java没有别的选择,Sun也没有。
0
相关文章