與.NET平臺相比,Sun公司的標(biāo)準(zhǔn)定義的J2EE體系結(jié)構(gòu)有很少可以討論的空間,因為就沒有什么可討論的。如果一個人注意某個具體開發(fā)商的產(chǎn)品,如IBM公司的WebSphere,那么就會看到其技術(shù)的最大的一部分是WebSphere專用的。比較所有開發(fā)商對J2EE的具體改進(jìn),已經(jīng)超出了本文的范圍,在我的經(jīng)驗中,大多數(shù)對J2EE作為一個平臺感興趣的公司對該標(biāo)準(zhǔn)的可移值性感興趣。任何對可移值性感興趣的人都會需要將他們自己局限于Sun公司所定義的標(biāo)準(zhǔn)。
J2EE體系結(jié)構(gòu)可以被分為5部分:
Java語言系統(tǒng)
客戶端程序設(shè)計模型
中間層基礎(chǔ)結(jié)構(gòu)
程序員企業(yè)級API
非程序員可見API
最后一部分,非程序員可見API,包括定義了如何將其他產(chǎn)品插入到J2EE中的API,如連接器API,以及J2EE模型中被最近的改進(jìn)有效替代的API,如JTA(Java Transaction API)。由于從比較微軟和Sun公司計劃的角度來說,非程序員可見API并不重要,因此在筆者的概述中將不涉及這些方面 (就如同筆者在.NET平臺概述中并沒有涉及功能相當(dāng)?shù)腁PI一樣)。
Java語言系統(tǒng)
在高層次上,Java語言系統(tǒng)看起來與.NET Framework類似。在這兩種情況中,源代碼都是被翻譯成一種中間語言。但是,在.NET平臺中,這種中間語言是MSIL,而在Java系統(tǒng)中,是Java Byte Code。在這兩種情況中,中間語言被帶入到運行環(huán)境中。在Framework中,運行環(huán)境是Common Language Runtime。對于Java,運行環(huán)境是Java虛擬機(Java Virtual Machine)。總體而言,Common Language Runtime和Java虛擬機有類似的功能,并且在技術(shù)進(jìn)步方面,都無可置疑地在發(fā)展和彼此交互躍進(jìn)。
這兩種系統(tǒng)之間最重要的區(qū)別與源代碼到中間語言的翻譯有關(guān)。在.NET平臺中,中間語言設(shè)計用來適應(yīng)各種語言的需求。在Java中,中間語言設(shè)計用來滿足Java的需求。雖然從理論上,從除Java外的語言生成Java Byte Code是可能的,但是實際上這還沒有在任何一種商業(yè)產(chǎn)品中證明。
客戶端程序設(shè)計模型
J2EE客戶端程序設(shè)計模型重點集中在與瀏覽器的交互上。客戶端程序設(shè)計模型有3部分:Java Applets,Java Servlets和Java Server Pages。
Java Applets用來對在瀏覽器內(nèi)運行的Java代碼進(jìn)行打包。在.NET平臺空間中,這在功能上與ActiveX相當(dāng)。在筆者的經(jīng)驗中,applets或ActiveX組件使用的相對較少。電子商務(wù)體系結(jié)構(gòu)一般都是以向表示層發(fā)出請求的瀏覽器為基礎(chǔ),然后表示層使用HTML頁面進(jìn)行響應(yīng)。這種系統(tǒng)并沒有使用ActiveX或Java Applets,因此筆者在本白皮書中并沒有討論這些技術(shù)的任何一種。
處理HTTP請求和HTML響應(yīng)的重要技術(shù)是Java Servlets 和Java Server Pages 。這兩種技術(shù)與微軟空間中的ASP.NET(Active Server Pages)類似。
.NET平臺與Java表示層中間的主要區(qū)別在于處理不同的客戶端功能的方式。Java表示層沿用了以前的Microsoft ASP (pre .NET)模型,它使得表示層程序員的責(zé)任是決定最終的目的瀏覽器(或其他瘦客戶端系統(tǒng)),瘦客戶端系統(tǒng)的功能,以及如何生成HTML來充分發(fā)揮瘦客戶端系統(tǒng)的優(yōu)勢。
中間層基礎(chǔ)結(jié)構(gòu)
對于J2EE,中間層基礎(chǔ)結(jié)構(gòu)是Enterprise Java Beans (EJB)。該規(guī)范的當(dāng)前版本是2.0,可以從網(wǎng)上獲得 。與J2EE相當(dāng)?shù)?NET平臺是COM+。
在EJB和COM+之間,體系結(jié)構(gòu)的差別非常少。這兩種體系結(jié)構(gòu)本質(zhì)上是從MTS(Microsoft Transaction Server)派生出來的,是由微軟公司在1996年引入的最初的面向組件的中間層基礎(chǔ)結(jié)構(gòu)。由MTS最先引入,然后合并到EJB和COM+中的重要想法包括:
通過組件示例的共享所實現(xiàn)的高可伸縮性
以中間層為中心的安全性
自動事務(wù)處理邊界管理
EJB加入了一種新的體系結(jié)構(gòu)想法,一項自動管理組件狀態(tài)的技術(shù)。這項技術(shù)被稱為entity beans(實體豆)。雖然這種想法具有吸引力,但是當(dāng)前的實施卻依賴于獨立于數(shù)據(jù)庫緩存的中間層數(shù)據(jù)緩存。很不幸的是,在這兩種緩存之間沒有保持一致性的機制。這意味著對實體豆的任何使用都會帶來數(shù)據(jù)庫損壞的高風(fēng)險。在緩存一致性問題解決之前,在最佳試驗技術(shù)方面,必須得不斷考慮實體豆技術(shù)。
要連接EJB和COM+的深入比較,請參閱筆者最近的著作 。
程序員企業(yè)級API
我們調(diào)用Java Enterprise API 時的最重要部分如下:
Java Database Connection (JDBC,Java數(shù)據(jù)庫連接) 2.0 ?C 是用于從Java中訪問關(guān)系型數(shù)據(jù)庫的API 。這與.NET平臺空間中的ADO.NET相當(dāng)。
Java Naming and Directory Interface (JNDI,Java命名與目錄接口) ?C 是用于從Java中訪問企業(yè)名稱與目錄服務(wù)的信息的API 。這與.NET平臺空間中的Active Directory Services Interface (ADSI,活動目錄服務(wù)接口)有點類似。
Java Message Service (JMS,Java消息服務(wù)) 1.0 ?C 是用于異步工作流的Java API 。這在功能上與Microsoft Message Queue API相當(dāng),這個API已經(jīng)被排隊組件所替代。