起點(diǎn)
在“J2EE”這個(gè)縮略語(yǔ)被第一次介紹給世人的時(shí)刻,也許沒(méi)有幾個(gè)人可以預(yù)料出它在日后的奇異歷程。那是在1999年6月的javaOne年會(huì)上,時(shí)任Sun公司Java企業(yè)開(kāi)發(fā)部門主管的Mala Chandra興奮地預(yù)告了Java世界的這位新成員。
那些不熟悉背景的聽(tīng)眾們,揣摩著她演說(shuō)中出現(xiàn)的一串串全新術(shù)語(yǔ),表情大概又是驚喜、又是迷惑:一個(gè)完整的“多層企業(yè)開(kāi)發(fā)架構(gòu)”、以“容器”和“組件”的形式提供服務(wù)、一套“廠商中立的開(kāi)放技術(shù)規(guī)范”、對(duì)開(kāi)發(fā)者隱藏了不同平臺(tái)和“中間件”的技術(shù)細(xì)節(jié)、實(shí)現(xiàn)了企業(yè)級(jí)應(yīng)用間的“無(wú)縫集成”等等。
在今天的開(kāi)發(fā)者看來(lái),這些似乎都已經(jīng)是老生常談,但在當(dāng)時(shí)的場(chǎng)景下,閃動(dòng)在幻燈片上的每一個(gè)口號(hào),都意味著聽(tīng)眾們事后又要經(jīng)歷一段困難的學(xué)習(xí)過(guò)程。
幸虧Chandra有一副了不起的口才;這位本科念建筑學(xué)的印度裔高層主管,談起軟件架構(gòu)來(lái)也有特強(qiáng)的空間想象力。她清楚地說(shuō)明了設(shè)計(jì)J2EE架構(gòu)的兩個(gè)初衷:首先,對(duì)于廠商,J2EE意味著一套開(kāi)放標(biāo)準(zhǔn),加入這個(gè)標(biāo)準(zhǔn),他們的產(chǎn)品就可以運(yùn)行在各種不同的操作系統(tǒng)和工作環(huán)境下,成為一個(gè)成熟的企業(yè)運(yùn)算體系中可替換的部件。
其次,對(duì)于開(kāi)發(fā)者,J2EE是一套現(xiàn)成的解決方案,采用這個(gè)方案,企業(yè)應(yīng)用開(kāi)發(fā)中的很多技術(shù)難題(包括跨平臺(tái)移植、事務(wù)處理、安全性等等)就會(huì)迎刃而解,“信息像一條不間斷的河流,經(jīng)過(guò)各種各樣的平臺(tái)和設(shè)備,從企業(yè)應(yīng)用系統(tǒng)的這一端流向那一端”。
要想理解這段話在當(dāng)時(shí)的實(shí)際效應(yīng),我們?nèi)匀灰褧r(shí)間指針撥回1999年。除了預(yù)備迎接千年蟲(chóng)之外,99年你做了什么?為了回答這個(gè)犀利的問(wèn)題,我翻出6年前的工作記錄,發(fā)現(xiàn)了自己那時(shí)參與的一個(gè)項(xiàng)目的規(guī)格說(shuō)明書(shū),它正好能提供一幅“Java企業(yè)開(kāi)發(fā)”在1999年的標(biāo)準(zhǔn)照。
這是一家日本知名IT廠商的企業(yè)信息治理系統(tǒng),運(yùn)行在NetScape 3.0 Gold瀏覽器中的Java Applet界面,通過(guò)一個(gè)專用的中間層系統(tǒng)與Oracle 8數(shù)據(jù)庫(kù)連接。這個(gè)中間層已經(jīng)相當(dāng)現(xiàn)成、完善,能夠提供遠(yuǎn)程對(duì)象調(diào)用、事務(wù)處理等一系列的底層服務(wù);留給我們的任務(wù)只是完成服務(wù)器端業(yè)務(wù)對(duì)象代碼,以及相應(yīng)的客戶端交互開(kāi)發(fā)。
除了Applet客戶端有些非凡之外,上述系統(tǒng)與今天常見(jiàn)的J2EE架構(gòu)很接近;尤其是業(yè)務(wù)對(duì)象編碼也由home類、PK(主鍵)類、entity類等部分構(gòu)成,很多機(jī)制都與EJB如出一轍——只不過(guò)這些類并沒(méi)有繼續(xù)javax.ejb包的接口,而是采用了專用的API。它與EJB之間的相似不像是偶然的,設(shè)計(jì)者肯定參照了Sun在1997年底推出的EJB 1.0技術(shù)規(guī)范。
換言之,在J2EE誕生伊始的語(yǔ)境中,市面上已經(jīng)存在著很多程度不一的“準(zhǔn)J2EE中間件”了。它們主要用于解決三大類問(wèn)題:事務(wù)處理、分布式對(duì)象治理和Web請(qǐng)求處理。首先,事務(wù)處理治理器(Transaction PRocessing Monitor)一直是高端企業(yè)計(jì)算領(lǐng)域的熱門產(chǎn)品,聞名的應(yīng)用服務(wù)器廠商BEA,正是通過(guò)收購(gòu)事務(wù)處理軟件Tuxedo進(jìn)入中間件市場(chǎng)的。另一方面,從90年代初開(kāi)始,越來(lái)越多的人把“N層分布式對(duì)象架構(gòu)” 當(dāng)成傳統(tǒng)的客戶端/服務(wù)器架構(gòu)的替代方案。
那時(shí)剛剛興起的CORBA技術(shù)是推動(dòng)這一趨勢(shì)的重要力量(比如說(shuō),前面提到的那個(gè)由日本廠商自行開(kāi)發(fā)的專用中間層,就采用了CORBA作為基礎(chǔ)架構(gòu))。最后,Java技術(shù)在Web領(lǐng)域中的應(yīng)用也是當(dāng)時(shí)初露頭角的熱點(diǎn)。
1997年6月,Sun在發(fā)布一款“Java Web Server”的同時(shí)第一次公布了Servlet API;沒(méi)想到這項(xiàng)技術(shù)副產(chǎn)品(連同1998年問(wèn)世的jsp)正好迎合了廠商的戰(zhàn)略需要。對(duì)于上面提到的N層架構(gòu)來(lái)說(shuō),HTTP服務(wù)是一個(gè)非常理想的前端;所以基于Java的Web引擎,也在此時(shí)成了企業(yè)級(jí)Java解決方案的一個(gè)必不可少的部分。
Java、Web、事務(wù)、分布式對(duì)象,這幾股開(kāi)發(fā)潮流匯合在一處,形成了當(dāng)時(shí)最熱門的產(chǎn)品“應(yīng)用服務(wù)器(application Server)”或“中間件(Middleware)”。
為了給定語(yǔ)“最熱門”作個(gè)注釋,我們可以參照一下BEA公司在1998年收購(gòu)Web應(yīng)用服務(wù)器廠商Weblogic的成交價(jià):1.92億美元。而這并不是一樁孤立的收購(gòu),NetScape和Sun也以相近的價(jià)格買下了另外兩家企業(yè)Kiva和NetDynamics。
而這也正是J2EE規(guī)范出臺(tái)的背景:幾乎所有要廠商都推出了、或是正在趕制自己的應(yīng)用服務(wù)器產(chǎn)品,但這個(gè)“應(yīng)用服務(wù)器”究竟應(yīng)該是什么東西,競(jìng)爭(zhēng)者們又各有表述、莫衷一是。
說(shuō)到這里,我們才梳理出了J2EE技術(shù)規(guī)范的第一個(gè)版本在1999年12月問(wèn)世的實(shí)際意義。首先,它為Java企業(yè)開(kāi)發(fā)提供了一幅清楚的全景,各項(xiàng)分支技術(shù)在這個(gè)領(lǐng)域中的地位和作用得到了客觀、準(zhǔn)確的定義。
至此大家才對(duì)一個(gè)Java企業(yè)解決方案的構(gòu)成要素有了基本共識(shí)。其次,它使用“容器”和“組件”等概念描繪了Java企業(yè)系統(tǒng)的一般架構(gòu),明確地劃分了中間件廠商和應(yīng)用開(kāi)發(fā)者的職責(zé)所在。
最后(但絕非最不重要地),J2EE通過(guò)一套公開(kāi)標(biāo)準(zhǔn)規(guī)定了應(yīng)用服務(wù)器產(chǎn)品的具體行為,在執(zhí)行此標(biāo)準(zhǔn)的廠商產(chǎn)品之間實(shí)現(xiàn)了一定程度的可替換性和互操作性。
當(dāng)時(shí)的媒體用“B2B開(kāi)發(fā)的默認(rèn)標(biāo)準(zhǔn)”之類的說(shuō)法歡呼這項(xiàng)里程碑式的成就——那些撰稿人哪里知道,在J2EE與那個(gè)被稱為“B2B” 的短命新貴之間,其實(shí)并不會(huì)有太多故事發(fā)生;同樣,他們也不會(huì)想到,J2EE要想成為一種真正成熟的開(kāi)發(fā)范式,前方還有一段遠(yuǎn)為艱辛的旅程。
社區(qū)的形成
記得Kruglinski在名著《Inside Visual C++》的某個(gè)版本中給出了一個(gè)Web瀏覽器的代碼例子;在這一節(jié)的開(kāi)頭他說(shuō)到:假如你幾年前開(kāi)發(fā)了一個(gè)Web瀏覽器,那肯定會(huì)給你帶來(lái)上千萬(wàn)的收益;但假如你現(xiàn)在才想到開(kāi)發(fā)這個(gè)東西——那也就是個(gè)C++語(yǔ)言的練習(xí)罷了。
在今天的程序員眼中,應(yīng)用服務(wù)器似乎也成了價(jià)格低廉(假如不是全然免費(fèi))的日用消費(fèi)品。所以,想要理解它們?cè)谀菐啄甑拇笮衅涞溃头堑媒柚鶮ruglinski這樣的聰明不可。
在1999年底,市面上可以找到30種以上自稱“Java應(yīng)用服務(wù)器”的產(chǎn)品,可見(jiàn)當(dāng)時(shí)這類軟件是網(wǎng)絡(luò)風(fēng)險(xiǎn)投資的寵兒。但是此時(shí)出臺(tái)的J2EE規(guī)范就像是一陣席卷整個(gè)產(chǎn)業(yè)的勁風(fēng),在一夜之間,所有人都有了判定什么是一個(gè)“應(yīng)用服務(wù)器”的權(quán)威途徑。
為了獲得一張J2EE競(jìng)技場(chǎng)的入場(chǎng)券,各家廠商面臨兩項(xiàng)考驗(yàn):首先,要具有能夠覆蓋J2EE中所有主要技術(shù)的產(chǎn)品線。這在當(dāng)時(shí)是一項(xiàng)非常苛刻的要求,在沒(méi)有開(kāi)源產(chǎn)品可供參照的情況下,短時(shí)間內(nèi)推出包括EJB容器、Web引擎和JMS中間件的整體解決方案,這決不是隨便哪家創(chuàng)業(yè)公司都能辦到的。
完成了若干次成功的并購(gòu)之后,BEA在這一點(diǎn)上搶占了先機(jī),完整的產(chǎn)品線使它成了人們心目中的首選J2EE平臺(tái)提供商。其次,要讓產(chǎn)品通過(guò)Sun的J2EE兼容性測(cè)試。要做到這一點(diǎn)同樣不易:就連IBM的WebSphere也一時(shí)還沒(méi)達(dá)到百分之百的EJB支持。
到2000年底為止,共有15家廠商能夠提供完整的J2EE解決方案,其中9家(包括Sun本身)實(shí)現(xiàn)了“J2EE兼容”,他們中間包括了日后這個(gè)領(lǐng)域的主要競(jìng)爭(zhēng)者。毫無(wú)疑問(wèn),這是一次非常殘酷的行業(yè)洗牌,但留在場(chǎng)內(nèi)的廠商也相應(yīng)地形成了推動(dòng)J2EE發(fā)展的主體力量。
上面說(shuō)過(guò),在它的孵化階段,Sun的J2EE團(tuán)隊(duì)主管是女強(qiáng)人Mala Chandra,她本人雖不是工程師出身,但對(duì)技術(shù)有著很強(qiáng)的感知能力和想象力;J2EE一出臺(tái)就能夠?yàn)槿藗兲峁┮环暾⒅庇^而不失深邃的圖景,此中當(dāng)然有Chandra本人的大量貢獻(xiàn)。
在她直接領(lǐng)導(dǎo)下工作的幾位工程師,也都是Sun內(nèi)部非常杰出的人才。無(wú)論是制定了JDBC、JMS等規(guī)范的Mark Hapner、JavaMail的設(shè)計(jì)者Bill Shannon,還是EJB的主要設(shè)計(jì)者Vlada Matena,后來(lái)都是業(yè)界一言九鼎的技術(shù)領(lǐng)袖。
這個(gè)班子的合作時(shí)間并不太長(zhǎng):2000年左右的那個(gè)時(shí)期正是IT界創(chuàng)業(yè)的黃金年月,Chandra很快就和Sun公司Java部門的總裁(也是創(chuàng)造Java的功臣之一)Alan Baratz一起,到一家剛起步的Email中間件公司Zaplet淘金去了;捷克裔的開(kāi)發(fā)天才Matena也離開(kāi)Sun開(kāi)辦了自己的公司。留下的兩個(gè)人Hapner和Shannon先后擔(dān)任了J2EE技術(shù)的首席設(shè)計(jì)師。
多年以后,Hapner回憶起J2EE初創(chuàng)的那個(gè)時(shí)期,深感如今Sun對(duì)Java的左右能力已經(jīng)大不如前:“現(xiàn)在,Java事實(shí)上屬于整個(gè)技術(shù)社區(qū),它的發(fā)展有賴全體參與者的推動(dòng)。”的確,如今Sun已經(jīng)不太可能重演當(dāng)年的開(kāi)拓性功績(jī),很難再為一個(gè)已經(jīng)成形的領(lǐng)域重繪版圖。
但正如上文所說(shuō),即使是在1999年,J2EE設(shè)計(jì)者們面對(duì)的也不是一張從未著墨的白紙。他們的設(shè)計(jì)始終要以各大廠商的現(xiàn)有產(chǎn)品為出發(fā)點(diǎn),這也是天才的設(shè)計(jì)師們做出的設(shè)計(jì)卻遠(yuǎn)非完美的原因之一:與從頭設(shè)計(jì)一門全新的編程語(yǔ)言不同,J2EE規(guī)范從一開(kāi)始就是各方博弈和妥協(xié)的產(chǎn)物。
很輕易注重到,J2EE與Java社區(qū)的決策機(jī)制JCP(Java Community Process)是幾乎同步產(chǎn)生的。J2EE下屬的各種技術(shù)規(guī)范,包括1.4版之后的J2EE本身,都作為待決規(guī)范議案(JSR,Java Specification Request)被納入了JCP的議程。
這些議案的審議過(guò)程很少是一帆風(fēng)順的,幾乎每一個(gè)都要經(jīng)歷18個(gè)月以上的拉鋸戰(zhàn)。在多項(xiàng)技術(shù)規(guī)范的審議過(guò)程中,我們都見(jiàn)到了這樣的現(xiàn)象:最初列名審議委員會(huì)的某家主要廠商,沒(méi)能等到該規(guī)范通過(guò)就已經(jīng)被收購(gòu)或倒閉了。
與微軟在.NET平臺(tái)上的乾剛獨(dú)斷相比,J2EE發(fā)展中的這個(gè)“牛步”特征雖說(shuō)是審慎和民主的表現(xiàn),但終歸不符合軟件演化應(yīng)有的速度。
J2EE社區(qū)中的另一股重要力量,當(dāng)然是種類極為豐富的開(kāi)放源代碼項(xiàng)目。2002年以來(lái),在J2EE領(lǐng)域的各個(gè)層面上,幾乎所有主流產(chǎn)品都有來(lái)自開(kāi)源項(xiàng)目的替代方案,在其中很多位置上,開(kāi)源產(chǎn)品反而是勝過(guò)商業(yè)產(chǎn)品的首選。
但請(qǐng)別誤解,這里的“開(kāi)源”并不意味著完全的自動(dòng)自發(fā),J2EE世界中的開(kāi)源項(xiàng)目也與linux或php世界頗為不同。在很多非常成功的J2EE開(kāi)源項(xiàng)目背后,我們都能發(fā)現(xiàn)商業(yè)機(jī)構(gòu)的推動(dòng)作用:Apache的Jakarta社區(qū)是IBM扶植的結(jié)果;實(shí)現(xiàn)了開(kāi)源應(yīng)用服務(wù)器JOnAS的ObjectWeb,則是許多法國(guó)IT廠商(包括若干政府部門)合資支持的一個(gè)聯(lián)盟組織……這些有商業(yè)背景的開(kāi)源項(xiàng)目資金雄厚,人員齊整;更重要的是,從投資者到開(kāi)發(fā)者,參與這些項(xiàng)目的很多人都體現(xiàn)了軟件工業(yè)中難得的非功利心態(tài),因而最終推出的產(chǎn)品質(zhì)量甚至高于同類型的商業(yè)軟件。在主流廠商之外,它們是支撐J2EE大廈存在的一組基石。
另一方面,不少開(kāi)發(fā)者也間接地通過(guò)自己的開(kāi)源產(chǎn)品獲得了可觀的盈利。這些人大多以免費(fèi)的開(kāi)源產(chǎn)品為依托,以收費(fèi)方式提供附加的咨詢、方案實(shí)施以及技術(shù)支持服務(wù)。Marc Fleury,開(kāi)源應(yīng)用服務(wù)器的JBoss創(chuàng)始人,不無(wú)矛盾地把自己倡導(dǎo)的這種商業(yè)模式稱為“職業(yè)開(kāi)源開(kāi)發(fā)”。
無(wú)論叫它什么,高端產(chǎn)品的開(kāi)源化/免費(fèi)化運(yùn)動(dòng)注定要在J2EE產(chǎn)業(yè)的發(fā)展過(guò)程中制造顯著的后果。“JBoss的行徑惡化了J2EE的商業(yè)環(huán)境,”這是McNealy先生2002年的聞名論斷。他的推理過(guò)程如下:只有做好商業(yè)推廣,J2EE產(chǎn)品才能最終擊潰邪惡的.NET平臺(tái);但開(kāi)源服務(wù)器會(huì)降低主流廠商的銷售利潤(rùn);銷售利潤(rùn)越低,用于商業(yè)推廣的預(yù)算就越少;因此,整個(gè)J2EE陣營(yíng)都將受損于JBoss。
但在狂熱的開(kāi)源運(yùn)動(dòng)支持者看來(lái),以上論證的大前提就是可疑的。“難道只有會(huì)做廣告的軟件才是好軟件?MySQL有過(guò)多少?gòu)V告預(yù)算”爭(zhēng)論的雙方都認(rèn)為對(duì)手誤解了軟件商業(yè)模型的實(shí)質(zhì)。究竟誰(shuí)才把握了這里的真理呢?也許只有根據(jù)J2EE的未來(lái)——也就是它的目標(biāo)和終點(diǎn)(Telos)——才能做出最終的裁決。
技術(shù)的離心力
考察事物的演化,通常有兩種對(duì)立的方法。考古學(xué)家(Archaeologist)探究肇始和起源;目的論者(Teleologist)則揭示目的和終點(diǎn)。對(duì)于前者,“開(kāi)端(希臘語(yǔ)Arche)”從根本上決定了此后的發(fā)展,參天大樹(shù)的繁茂都包含在種子最初的萌芽中;而對(duì)于后者,“目的(Telos)”才是事物的根本和旨?xì)w:誰(shuí)沒(méi)見(jiàn)過(guò)樣態(tài)完善的樹(shù),誰(shuí)也就沒(méi)法弄懂種子到底是怎么回事。
在J2EE五年之后,人們只能交替地用這兩種目光審閱它的演化歷程。它的起源與它的目的、“它從何處來(lái)”與“它往何處去” 的問(wèn)題緊密地交織在一起,誰(shuí)拾起了其中的一個(gè),誰(shuí)也就要連同另一個(gè)一起回答。
今天的J2EE在多大程度上符合它的初衷?回答這個(gè)問(wèn)題并不涉及對(duì)J2EE技術(shù)成敗的評(píng)判,而只是要考察一下:它是否還運(yùn)行在最初開(kāi)辟的那個(gè)空間之中。在事務(wù)處理、對(duì)象分布化和Web請(qǐng)求處理這三個(gè)方面中,也許J2EE對(duì)事務(wù)和Web保持了一貫的忠誠(chéng)。
我們記得Fleury喜歡重復(fù)的一個(gè)信條:“He who owns the transactional Web owns the Web(誰(shuí)把握了帶事務(wù)處理的Web,誰(shuí)就把握了Web)”Web接口是今天大部分J2EE應(yīng)用暴露的唯一接口;而雖然事務(wù)處理的常用方法已經(jīng)有了很大改變(借助AOP機(jī)制,很多非EJB架構(gòu)的系統(tǒng)也自如地實(shí)現(xiàn)了聲明式的事務(wù)處理),但對(duì)事務(wù)的重視當(dāng)然仍將是J2EE開(kāi)發(fā)中的要素之一。
換言之,在5年的演化中,J2EE發(fā)生的最大變化可能就在于它放棄了對(duì)“分布式對(duì)象模型”的強(qiáng)調(diào)。EJB2.0引入的本地接口使得Web層與EJB層可以運(yùn)行在同一個(gè)Java虛擬機(jī)中,從而使Web容器與EJB容器的物理分離部署變成一種昂貴的冗余;J2EE 1.4以后版本支持的Web Services兼容性,使得客戶端可以通過(guò)粗粒度的Web接口調(diào)用遠(yuǎn)程服務(wù)——這兩次變化事實(shí)上都是在論證“分布式對(duì)象架構(gòu)”的無(wú)用性。
人們發(fā)現(xiàn),同一系統(tǒng)的各個(gè)分層最好采用細(xì)粒度接口調(diào)用,并且運(yùn)行在同一個(gè)進(jìn)程中;之所以劃分不同的層次,與其說(shuō)是為了實(shí)現(xiàn)物理上的可擴(kuò)展性,不如說(shuō)是設(shè)計(jì)美學(xué)上的考慮。
而對(duì)于異質(zhì)系統(tǒng)之間的調(diào)用,則應(yīng)該盡量選用異步的、粗粒度的服務(wù)接口(所以Web Services成為了非常理想的選擇)。換句話說(shuō),傳統(tǒng)上的“分布式對(duì)象架構(gòu)”,現(xiàn)在看來(lái)似乎只適合于銀行遠(yuǎn)程支付等要求極為苛刻的應(yīng)用場(chǎng)景,而絕不是所有J2EE應(yīng)用都該考慮的標(biāo)準(zhǔn)方案。
前面描述的離心現(xiàn)象究竟還遵循了J2EE發(fā)展的內(nèi)在邏輯,說(shuō)到底,EJB的革新和Web Services的引入更多地是主流廠商倡導(dǎo)的結(jié)果。但在近年來(lái),還有一股更強(qiáng)勁的離心潮流在深刻地影響著J2EE的演進(jìn),它肇始于上文提到的開(kāi)源軟件運(yùn)動(dòng)。
最初它只在Rickard Oberg的動(dòng)態(tài)代理RMI設(shè)計(jì)與JBoss服務(wù)器的微內(nèi)核架構(gòu)中顯露過(guò)邪惡的一角,但是兩三年來(lái),經(jīng)過(guò)多個(gè)項(xiàng)目、各種技術(shù)雜志/論壇/Blog的折射和放大,它已經(jīng)形成了一個(gè)名為“輕量級(jí)容器架構(gòu)”的完整解決方案,并暴露出完全取代傳統(tǒng)EJB架構(gòu)的終極野心。
按照這一運(yùn)動(dòng)信徒們的說(shuō)法,J2EE的發(fā)展史上只出現(xiàn)過(guò)一個(gè)錯(cuò)誤——不幸的是,這個(gè)錯(cuò)誤名叫EJB。與EJB提供的重量級(jí)架構(gòu)不同,借助AOP和IoC機(jī)制,輕量級(jí)容器能夠最大程度地降低代碼對(duì)于專用接口的依靠性,以簡(jiǎn)短、輕便、專注、可移植的方式實(shí)現(xiàn)業(yè)務(wù)對(duì)象。
從“輕量級(jí)容器架構(gòu)”這個(gè)詞被發(fā)明出來(lái)的那一刻起,人們對(duì)J2EE遠(yuǎn)景的考慮就發(fā)生了根本性的分裂:Sun和大部分主流廠商更多地關(guān)注于“Web Services”和“快速開(kāi)發(fā)工具”這些利潤(rùn)增長(zhǎng)點(diǎn),而一部分離經(jīng)叛道的獨(dú)立專家和開(kāi)發(fā)者則認(rèn)為,假如不把輕量級(jí)容器納入規(guī)劃,J2EE的發(fā)展藍(lán)圖就注定無(wú)足稱道。
其實(shí),雙方爭(zhēng)執(zhí)的要害是傳統(tǒng)意義上的“應(yīng)用服務(wù)器”的存亡——假如所有企業(yè)級(jí)服務(wù)都可以通過(guò)AOP機(jī)制提供給普通Java對(duì)象,假如治理業(yè)務(wù)對(duì)象生命周期的可以是一個(gè)最微不足道的“微內(nèi)核”,那么深盔重鎧的應(yīng)用服務(wù)器還有什么存在理由?
而假如失去了應(yīng)用服務(wù)器的這個(gè)產(chǎn)品類型,那些靠這項(xiàng)銷售起家的廠商又將何以自處?正是在這里,兩個(gè)陣營(yíng)之間存在著最深刻的利益分歧;而這場(chǎng)爭(zhēng)執(zhí)的結(jié)局當(dāng)然也將決定J2EE(乃至Java企業(yè)開(kāi)發(fā))的最終走向。
或許兩年之后,我們將從紛爭(zhēng)中勝利者一方的角度重述J2EE的整部歷史——或許兩年之后的J2EE本身也將隨著紛爭(zhēng)的解決而成為歷史。但讓我們換個(gè)樂(lè)觀的口吻:?jiǎn)柺牢迥辏琂2EE的歷史仍在持續(xù)的創(chuàng)生之中;此時(shí)善待這樹(shù)種的人,也必在今后的樹(shù)蔭下獲得它的祝福。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注