起點
在“J2EE”這個縮略語被第一次介紹給世人的時刻,也許沒有幾個人可以預料出它在日後的奇異歷程。那是在1999年6月的JavaOne年會上,時任Sun公司Java企業開發部門主管的Mala Chandra興奮地預告了Java世界的這位新成員。
<!-- frame contents -->
<!-- /frame contents -->
那些不熟悉背景的聽眾們,揣摩著她演說中出現的一串串全新術語,表情大概又是驚喜、又是迷惑:一個完整的“多層企業開發架構”、以“容器”和“組件”的形式提供服務、一套“廠商中立的開放技術規范”、對開發者隱藏了不同平台和“中間件”的技術細節、實現了企業級應用間的“無縫集成”等等。在今天的開發者看來,這些似乎都已經是老生常談,但在當時的場景下,閃動在幻燈片上的每一個口號,都意味著聽眾們事後又要經歷一段困難的學習過程。
幸虧Chandra有一副了不起的口才;這位本科念建築學的印度裔高層主管,談起軟件架構來也有特強的空間想象力。她清楚地說明了設計J2EE架構的兩個初衷:首先,對於廠商,J2EE意味著一套開放標准,加入這個標准,他們的產品就可以運行在各種不同的操作系統和工作環境下,成為一個成熟的企業運算體系中可替換的部件;其次,對於開發者,J2EE是一套現成的解決方案,采用這個方案,企業應用開發中的很多技術難題(包括跨平台移植、事務處理、安全性等等)就會迎刃而解,“信息像一條不間斷的河流,經過各種各樣的平台和設備,從企業應用系統的這一端流向那一端”。
要想理解這段話在當時的實際效應,我們仍然要把時間指針撥回1999年。除了預備迎接千年蟲之外,99年你做了什麼?為了回答這個犀利的問題,我翻出6年前的工作記錄,發現了自己那時參與的一個項目的規格說明書,它正好能提供一幅“Java企業開發”在1999年的標准照。這是一家日本知名IT廠商的企業信息治理系統,運行在NetScape 3.0 Gold浏覽器中的Java Applet界面,通過一個專用的中間層系統與Oracle 8數據庫連接。這個中間層已經相當現成、完善,能夠提供遠程對象調用、事務處理等一系列的底層服務;留給我們的任務只是完成服務器端業務對象代碼,以及相應的客戶端交互開發。
除了Applet客戶端有些非凡之外,上述系統與今天常見的J2EE架構很接近;尤其是業務對象編碼也由home類、PK(主鍵)類、entity類等部分構成,很多機制都與EJB如出一轍——只不過這些類並沒有繼續javax.ejb包的接口,而是采用了專用的API。它與EJB之間的相似不像是偶然的,設計者肯定參照了Sun在1997年底推出的EJB 1.0技術規范。
換言之,在J2EE誕生伊始的語境中,市面上已經存在著很多程度不一的“准J2EE中間件”了。它們主要用於解決三大類問題:事務處理、分布式對象治理和Web請求處理。首先,事務處理治理器(Transaction Processing Monitor)一直是高端企業計算領域的熱門產品,聞名的應用服務器廠商BEA,正是通過收購事務處理軟件Tuxedo進入中間件市場的。另一方面,從90年代初開始,越來越多的人把“N層分布式對象架構” 當成傳統的客戶端/服務器架構的替代方案。那時剛剛興起的CORBA技術是推動這一趨勢的重要力量(比如說,前面提到的那個由日本廠商自行開發的專用中間層,就采用了CORBA作為基礎架構)。最後,Java技術在Web領域中的應用也是當時初露頭角的熱點。1997年6月,Sun在發布一款“Java Web Server”的同時第一次公布了Servlet API;沒想到這項技術副產品(連同1998年問世的jsp)正好迎合了廠商的戰略需要。對於上面提到的N層架構來說,HTTP服務是一個非常理想的前端;所以基於Java的Web引擎,也在此時成了企業級Java解決方案的一個必不可少的部分。
Java、Web、事務、分布式對象,這幾股開發潮流匯合在一處,形成了當時最熱門的產品“應用服務器(Application Server)”或“中間件(Middleware)”。為了給定語“最熱門”作個注釋,我們可以參照一下BEA公司在1998年收購Web應用服務器廠商Weblogic的成交價:1.92億美元。而這並不是一樁孤立的收購,NetScape和Sun也以相近的價格買下了另外兩家企業Kiva和NetDynamics。而這也正是J2EE規范出台的背景:幾乎所有要廠商都推出了、或是正在趕制自己的應用服務器產品,但這個“應用服務器”究竟應該是什麼東西,競爭者們又各有表述、莫衷一是。