讀了Sun中國工程研究院的黃健昌的blog:
與大家分享——JavaEE5與Glassfish應(yīng)用服務(wù)器感覺JavaEE仍然忽略了一些非常重要的東西。JavaEE中的Web表現(xiàn)層仍然是與服務(wù)器端牢牢地綁死在一起的,在Ajax和各種RIA技術(shù)異軍突起的今天,顯得相當落伍。當然我不是想說任何Web應(yīng)用都應(yīng)該將表現(xiàn)層前推到客戶端來做,我們需要具體問題具體分析。但是可以肯定,大部分Web應(yīng)用都可以將表現(xiàn)層完全前推到客戶端。表現(xiàn)邏輯在客戶端執(zhí)行,可以帶來更好的響應(yīng)能力、更好的性能、更好的服務(wù)器端可伸縮性、更好的交互設(shè)計,這些已經(jīng)是不爭的事實了。Java在Web表現(xiàn)層開發(fā)方面是很弱的,現(xiàn)在已經(jīng)成為了一個共識。因為Java沒有辦法統(tǒng)治桌面,所以只能在服務(wù)器端打轉(zhuǎn)轉(zhuǎn),這是他們最無奈的一件事情。想靠JSF來救贖,只能是一種幻想,JSF并沒有這樣神奇的魔力。
JavaEE為何沒有采納這些業(yè)界的趨勢呢?因為JavaEE傳統(tǒng)的三層架構(gòu)(在《J2EE核心模式》中有詳細的描述)就是假設(shè)所有的工作都應(yīng)該在服務(wù)器端完成,客戶端是不具有智能的Thin Client。他們至今仍然頑固地堅持這種假設(shè),只要閉上眼睛,就好像世界上什么都沒有發(fā)生。
事實上,世界已經(jīng)變了。比Ajax、RIA更加重要的可能是REST,這種架構(gòu)風(fēng)格必然將重新塑造Web表現(xiàn)層開發(fā)技術(shù)的面貌。RoR已經(jīng)擁抱REST了,JavaEE呢?短期內(nèi)不可能,因為這個REST架構(gòu)風(fēng)格對于傳統(tǒng)的JavaEE的三層架構(gòu)來說是具有很大的破壞性的。盡管事實上REST是簡化Java Web開發(fā)的良藥,但是良藥苦口,看來他們現(xiàn)在還不愿意吃這味良藥。在REST架構(gòu)風(fēng)格中,服務(wù)器端分層的設(shè)計并不是最重要的,最重要的是在資源(用URI來標識)的定義和HTTP通信語義的定義,也就是在REST風(fēng)格Web服務(wù)的API的設(shè)計上面。同時,在REST架構(gòu)風(fēng)格中,客戶端并不是Thin Client,而是具有高度智能的Rich Client或RIA應(yīng)用。
JavaEE仍然在自己的小圈子里面打轉(zhuǎn)轉(zhuǎn),在保持整體架構(gòu)不變的情況下對自己做一些局部的優(yōu)化和調(diào)整。卻忽視了Web開發(fā)技術(shù)的發(fā)展趨勢,長此以往,被M$玩死是很有可能的。
其實大部分Web開發(fā)者,包括基于B/S方式的企業(yè)應(yīng)用的開發(fā)者,都非??释喕疻eb表現(xiàn)層的開發(fā)、得到令人賞心悅目的交互設(shè)計,傳統(tǒng)的Java Web開發(fā)技術(shù)對此提供的支持是很初級的。Web表現(xiàn)層開發(fā)的工作量,在很多中小型項目中常常會占到整個項目開發(fā)工作量的一半以上。而后臺往往只是一個普通的關(guān)系數(shù)據(jù)庫。顯然,這并不是什么火箭科技,然而,以善于建造火箭科技聞名的一些公司和團體卻無法解決好這些初級的問題。讓使用Java做這些初級的工作變得異常復(fù)雜。
Richard Monson-Haefel在去年宣告JavaEE已死,
http://www.infoq.com/cn/news/2007/04/Java-EE-Demise-ReportBruce A. Tate也在《超越Java》對Java的前景發(fā)出了嚴重警告。JavaEE5顯然在簡化方面還做的遠遠不夠。喪鐘已經(jīng)鳴響,是為誰而鳴呢?