J2EE與.NET技術架構的比較

隨着三層/多層企業信息系統結構的深度發展和下一代分佈式計算模型Web 服務的出現,軟件開發中關於平臺、框架、語言的競爭也愈演愈烈。自從微軟推出平臺,業界關於J2EE平臺與平臺的比較從未停止過。那麼J2EE與有什麼區別呢?下面跟yjbys小編一起來了解吧!

J2EE與技術架構的比較

本文在收集整理相關文章的基礎上,試圖對目前兩種主要的應用軟件開發技術架構J2EE與進行一個客觀、公正、全面的比較,以幫助軟件開發商選擇一個較爲合適的開發平臺進行應用軟件的開發。

一、J2EE簡介

Java於1995年由Sun公司推出,當時它的主要用途是製作產生動態網頁的Applet。後來,人們發現Java的“一次開發,多次運行”、純面向對象的特性、垃圾回收機制和內置安全特別適合於開發企業應用系統。於是,企業應用開發商紛紛在Java標準版的基礎上各自擴展出許多企業應用API,其結果導致基於Java的企業應用呈爆炸式增長。但是各企業系統API之間又不能相互兼容,破壞了Java的平臺的獨立性。鑑於此,Sun公司聯合IBM、Oracle、BEA等大型企業應用系統開發商於1999年共同制訂了一個基於Java組件技術的企業應用系統開發規範,該規範定義了一個多層企業信息系統的標準平臺,旨在簡化和規範企業應用系統的開發和部署。這一規範和其定義的平臺就構成了J2EE。它定義了基於組件的方式設計、開發、組裝和部署企業應用系統的各個組成部分。同時,J2EE規範定義了分佈式多層應用系統模型、組件重用策略、一體化的安全模型以及靈活的事務控制策略等,使得獨立軟件提供商(ISV)能夠比以前更快的速度,向市場推出用戶適應的解決方案。

J2EE是一套針對於企業級分佈式應用的計算環境,其結構體系如圖1所示。它定義了動態Web頁面功能(Servlet和Jsp)、商業組件(EJB)、異步消息傳輸機制(JMS)、名稱和目錄定位服務(JNDI)、數據庫訪問(JDBC)、與子系統的連接器(JCA)和安全服務等。

需要注意的是,J2EE本身是一個標準,而不是一個現成的產品(雖然現在有很多符合J2EE標準的產品),它由以下幾個部分組成:

(1)J2EE規範 該規範定義了J2EE平臺的體系結構、平臺角色及J2EE中每種服務和核心API的實現要求。它是J2EE應用服務器開發商的大綱。

(2)J2EE兼容性測試站點 Sun公司提供的一個測試J2EE應用服務器是否符合J2EE規範的站點,對通過該站點測試的產品,Sun公司將發放兼容性證書。

(3)J2EE參考實現 即J2EE SDK,它既是Sun公司自己對J2EE規範的一個非商業性實現,又是爲開發基於J2EE企業級應用系統原型提供的一個免費的底層開發環境。

(4)J2EE實施指南 即BluePrints文檔,該文檔通過實例來指導開發人員如何去開發一個基於J2EE的多層企業應用系統。

1.組件-容器模型

J2EE是一個基於組件-容器模型的系統平臺,其核心概念是容器。容器是指爲特定組件提供服務的一個標準化的運行時環境,Java虛擬機就是一個典型的容器。組件是一個可以部署的程序單元,它以某種方式運行在容器中,容器封裝了J2EE底層的API,爲組件提供事務處理、數據訪問、安全性、持久性等服務。在J2EE中組件和組件之間並不直接訪問,而是通過容器提供的協議和方法來相互調用。組件和容器間的關係通過“協議”來定義。容器的底層是J2EE服務器,它爲容器提供J2EE中定義的各種服務和API。一個J2EE服務器(也叫J2EE應用服務器)可以支持一種或多種容器。

2.J2EE的核心——EJB

J2EE定義了四種組件:Applet組件、Application客戶組件、Web組件及EJB(Enterprise JavaBeans)組件。其中Applet和Application客戶組件在客戶端運行,J2EE通過Java插件爲Applet提供運行環境,Application客戶的容器就是本地Java虛擬機;Web及EJB組件在服務端運行。J2EE中包含JSP和Servlet兩種Web組件,它們是Web服務器的功能擴展,都能生成動態Web頁面。不同的是JSP是將Java代碼嵌入到HTML中,服務器負責解釋執行,生成結果返回用戶(與ASP技術相似);而Servlet是單獨的Java類,它動態生成HTML文件返回給客戶。Web組件的容器比較典型的就是基於Java的Web服務器。

EJB是J2EE平臺的核心,也是J2EE得到業界廣泛關注和支持的主要原因。衆所周知J2EE的一個主要目的就是簡化企業應用系統的開發,使程序員將主要精力放在商業邏輯的開發上。EJB正是基於這種思想的服務器端技術,它本身也是一種規範,該規範定義了一個可重用的組件框架來實現分佈式的、面向對象的商業邏輯;其核心思想是將商業邏輯與底層的系統邏輯分開,使開發者只需關心商業邏輯,而由EJB容器實現目錄服務、事務處理、持久性、安全性等底層系統邏輯。

一個可部署的EJB組件包含3個部分:Remote接口、Home接口和Enterprise Beans類。

(1)Remote接口 Remote接口定義EJB組件中提供的可供用戶調用的方法,也就是通常所說的實現商業邏輯的函數或過程(如計算商品價格的函數),以供遠程客戶端調用。在EJB組件部署到容器的時候,容器會自動生成Remote接口相應的實例,即EJB對象,它負責代理用戶的調用請求。

(2)Home接口 Home接口定義了一組方法來創建新的EJB對象,查找、定位和清除已有的EJB對象。在EJB組件部署時,容器也會自動生成相應的Home對象,該對象負責查找和創建EJB對象,返回EJB對象的引用給客戶;用戶利用該引用調用EJB組件的方法,得到結果;最後Home對象清除EJB對象。可以形象地稱Home接口爲EJB對象的工廠。

(3)Enterprise Beans類 Enterprise Beans類是商業邏輯的具體實現類。它可供用戶調用的方法在Remote接口中定義。根據功能不同,EJB 2.0規範中定義了三種Enterprise Beans:會話Beans(Session Beans)、實體Beans(Entity Beans)和消息驅動Beans(Message-driven Beans)。

①會話Beans分無狀態和有狀態兩種。一般無狀態的會話Beans模擬商業邏輯,比如計算價格等。有狀態的會話Beans通常模擬一個客戶會話,它會臨時保存客戶信息,根據客戶要求調用其他Beans來存取數據。兩種會話Beans都不保存狀態信息或數據,當客戶斷開連接或服務器關閉時,會話Beans也隨之消失。一個會話Beans的典型例子是網站上的購物車。

②實體Beans模擬商業數據,並表示一個數據存儲,可以是狀態信息或數據庫中的一條記錄。實體Beans在客戶斷開連接或服務器關閉後,仍有服務保證其數據得以保存。一個實體Beans的典型例子就是客戶賬號信息。

③消息驅動Beans在行爲上很像會話Beans。不同的是僅在需要向這些Beans發送消息時才調用消息驅動Beans,比如在需要的時候發送用戶確認信息等。

另外,在提交和部署EJB組件時,還需要兩個文件:部署描述文件,容器根據該文件來部署Enterprise Beans,提供所要求的服務;EJB jar文件,它是提交給EJB容器的一個部署單元,容器(應用服務器)在部署時解開它,裝入Enterprise Beans。

EJB容器非常複雜,一般由專業的J2EE應用服務器開發商提供,比較流行的EJB容器由IBM的WebShpere、BEA公司的WebLogic Server、Sun公司的iPlant等應用服務器提供。EJB容器除了爲EJB提供事務處理、目錄服務、持久性管理和安全性服務外,還負責EJB的部署、發佈和生命週期管理。

3.平臺標準服務

服務是組件和容器之間,以及容器和J2EE服務器之間的接口,在實現層面上它就是一系列API和協議。J2EE平臺定義了一組標準的服務,其中有些服務是由J2SE提供的,有些則是J2EE對Java的擴展。

(1) 目錄服務JNDI(Java Name and Directory) API爲應用程序提供了一個統一的接口來完成標準的目錄操作,由於JNDI是獨立於目錄協議的,應用程序可以用它訪問各種目錄服務,如LDAP、NDS、DNS等。

(2) 數據訪問JDBC(Java Database Connectivity) API爲訪問不同類型的數據庫提供了統一的途徑,屏蔽了不同數據庫的細節,具有平臺無關性。J2EE平臺除了要求核心的JDBC API(包含在J2SE中)外,還要求擴展的JDBC API 2.0,它支持行集、連接池和分佈式的事務處理。

(3) 事務處理JTA(Java Transaction Architecture) 它定義了一組標準的接口,爲應用系統提供可靠的事務處理支持。JTS(Java Transaction Service)是CORBA OTS事務監控的Java實現。JTS規定了事務管理器的實現方式,該事務管理器在高層支持JTA標準,在底層實現了OMG OTS規範的Java映射。

(4) 消息服務JMS(Java Message Service) 它是一組用於和麪向消息的中間件相互通信的API,它既支持點對點的消息通信,也支持發佈/訂閱式的消息通信。電子郵件 JavaMail API允許在應用程序中以獨立於平臺、獨立於協議的方式收發電子郵件。JAF(JavaBeans Activation Framework)負責處理MIME編碼,JavaMail利用JAF來處理MIME編碼的郵件附件。

(5) CORBA兼容接口 RMI(遠程方法調用)是在分佈式對象間通信的Java本地方法,它使應用程序調用遠程方法像調用本地方法一樣,不需要考慮所調用對象的位置。RMI-IIOP是RMI的擴展,是符合CORBA標準的對象通信協議,也是J2EE默認的組件通信協議。Java IDL允許J2EE應用組件通過IIOP協議訪問外部的CORBA對象。

(6) 安全服務JAAS(Java Authentication and Authorization Service) 它用兩個步驟實現安全性:認證,即由用戶提供認證信息(如用戶名和密碼)來獲得系統認證,這一過程又稱之爲登錄;授權,在被確認爲合法用戶後,系統根據用戶的角色授予其相應的權限。J2EE的授權是基於安全角色的概念,一個安全角色是一個擁有相同權限的邏輯組。J2EE的安全角色由應用組件提供商來定義。

4.對WEB服務的支持

Sun提供了一套API及其實現WSDP作爲對J2EE的擴展。在WSDP中,JAXP用來解析XML文檔;JAXR向UDDI服務器註冊Web Services;JTX/RPC用基於XML的協議(如SOAP)來發送和接收XML文檔;JWSDL處理WSDL文檔。

J2EE 1.4的設計目標就是Web服務,其中新加入了像JAX-RPC/SAAJ和JAXR等API,另外EJB 2.1裏也增加了許多針對Web服務設計的特性。

5 多層應用模型

從應用的角度來看,J2EE爲企業應用系統的開發提供了一種多層分佈式企業應用模型。在J2EE中,應用邏輯按功能不同可以劃分爲不同類型的組件,各組件根據它們所在的層分佈在不同的機器上,共同組成一個基於組件的分佈式系統。

如圖1所示,J2EE定義了一個典型的四層結構,分別是客戶層、表示層(Web層)、業務邏輯層和企業信息系統層。

在應用開發時,J2EE定義的四層模型可根據實際情況靈活運用。由於除Applet外,其他的組件都可以訪問數據庫、EJB組件和企業信息系統,因此通過不同層的取捨及組合,可以衍生出許多應用軟件開發模型,如基於Web的四層模型、基於桌面應用的三層模型(不包括Web層)、B2B模型(不包括客戶層)等。如果應用系統比較簡單,一般不用EJB作爲邏輯層,而直接用Web組件來實現商業邏輯和數據訪問,畢竟EJB的開發和部署費用還相當高。

二、簡介

來自於微軟,是一套全能的框架平臺,支持C++、C#、J++、VB、ASP等語言,能夠解決C/S、B/S和單機等結構的軟件開發需求。平臺將這些語言編譯成CLR語言,使它們可以無差別的運行在 Framework上,是2000年以後微軟最爲重要的軟件開發套件產品。

的絕大部分是微軟Windows DNA(Distributed Network Architecture)的重寫,DNA是微軟以前開發企業應用程序的平臺。Windows DNA中包括了許多已經被證實的技術,新的框架取代了這些技術,幷包含了Web服務層和改良的語言支持。圖2是開發平臺的體系結構。

1.﹒NET框架內核

框架實現了語言開發、代碼編譯、組件配置、程序運行和對象交互等各個層面的功能,爲Web服務及普通應用程序提供了一個託管、安全和高效的執行環境。所有在平臺上創建的應用程序運行都需要兩個核心模塊:Common Language Runtime(CLR,通用語言運行時)和 Framework類庫。

(1)CLR——的虛擬機 CLR是一個軟件引擎,用來加載應用程序,確認它們可以沒有錯誤地運行,並進行相應的安全許可驗證,執行應用程序,然後將被清除。它爲應用程序提供了一個託管的代碼執行環境,託管意味着將原來由程序員或操作系統做的工作剝離出來交由CLR來完成,從而使程序運行獲得更高的安全性和穩定性。這些工作包括內存管理、即時編譯、組件自描述、安全管理、代碼驗證以及其他一些系統服務。CLR提供一個技術規範,無論程序使用什麼語言編寫,只要能編譯成中間語言,就可以在它的支持下運行,這樣應用程序就可以獨立於語言。CLR還在應用程序運行環境中爲基於組件的編程提供了直接支持,比如它支持屬性、事件、對象、繼承性、多態性和接口等組件編程特性。

CLR中的自動垃圾收集器負責應用程序運行時的內存分配、對象佈局、內存釋放等內存管理問題,徹底解決了多年來困擾程序員的內存泄漏問題,大大增強了應用程序的健壯性。

即時編譯器在運行時,將中間語言以調用對象的方法將單位動態編譯成本地二進制代碼。

(2)類庫 NET Framework類庫向程序員提供軟件組件,用來編寫在CLR控制下運行的代碼,它們按照單一有序的分級組織提供了一個龐大的功能集,包括從文件系統到對XML功能的網訪問的每一樣功能。該類庫爲開發提供了三種基本編程模板:基於的Web表單應用、基於的Web服務應用和基於傳統GUI交互的Windows應用。

Framework類庫由一組廣泛的、面向對象的、可被開發者用於任何編程語言的可重用類集合組成,它提供了幾乎所有應用程序都需要的公共代碼;在此之上是許多應用程序模板,這些模板爲開發網絡站點和網絡服務提供特定的高級組件和服務,無論是傳統的命令行程序,還是Windows圖形界面程序,亦或是面向下一代互聯網分佈式計算平臺的或Web服務應用,與在Windows和它的SDK中發送的代碼庫一樣,框架類庫將程序員從繁重的編程細節中解放出來,而專注於程序的商業邏輯。它將核心Win32 API最常用的功能和外掛SDK的功能封裝到了一個統一的包中,並採用清晰而有條理的方式對類庫進行分組和描述,這樣開發者就能夠更方便地找到其應用程序所需要的大多數功能。

組件

爲基於網絡的、可擴展的應用程序和服務提供數據訪問服務。它不僅支持傳統的基於鏈接指針風格的數據訪問,而且對於更適合於把數據返回到客戶端應用程序的無鏈接數據模板,也提供高性能的訪問支持。

數據組件

通過它開發人員可以對任何數據進行XML轉換、傳輸和確認,所有數據都可以被看作是XML格式的。同時,系統也支持數據與XML數據之間的通用轉換。

OWS表單組件

Windows表單組件爲開發人員提供了強大的Windows應用程序模型和豐富的'Windows用戶口,包括傳統的ActiveX控件和Windows XP的新界面,如透明的、分層的浮動窗口。

應用服務

的核心是其用於處理基於HTTP請求的高性能的運行語言,其編譯運行的方式大大提高了它的性能。使用基於構件的框架配置模板,因此,它獲得了諸如XCOPY配置、構件並行配置和基於XML配置之類的優點。它還支持應用程序的實時更新,同時提供高速緩衝服務,以改善性能。

Web表單把VB表單高效率的優點帶到了Web應用程序的開發中。它支持傳統的將HTML內容與腳本代碼混合的ASP語法,但是它提出了一種將應用程序代碼和用戶接口內容分離的、更加結構化的方法。它提供一套映射傳統HTML用戶接口部件(包括列表框、文本框和按鈕)的 Web表單控件和一套更加複雜的Web應用控件(如日曆和廣告轉板)。

6.對Web服務的支持

應用服務體系架構爲用建立Web服務提供了一個高級的可編程模板。雖然建立Web服務並不限定使用特定的服務平臺,但是的許多優點將簡化其開發過程。使用這個編程模型,開發人員甚至無需理解HTTP、SOAP或其他任何網絡的服務規範。可以利用現存的體系架構和應用程序,爲在互聯網上綁定應用程序提供了一個簡單、靈活和基於產業標準的模型。

三、J2EE與比較

1.體系架構的比較

作爲彼此競爭的應用平臺,J2EE和開發平臺在目標和體系結構上極其相似,但在實現上又完全不同。

(1)類似的平臺基礎構造 J2EE和兩個平臺在底層的執行引擎都源於託管的虛擬機概念,但的CLR沿着Java虛擬機(JVM)走得更遠,CLR在借鑑了JVM的自動垃圾收集、異常處理等機制的同時,又爲平臺添加了多語言支持、組件自描述等新的特性。

在和 J2EE平臺上,程序的編譯都經過兩個類似的過程。首先,特定高級語言編譯器將C#(及其他語言)和Java源代碼分別翻譯成中間語言(IL)和字節代碼(ByteCode)。在中間語言設計時通盤考慮了多個主流高級語言,在這一層面實現了平臺的跨語言承諾;J2EE的基石是Java語言,它最典型的特徵是:一次編寫,多次運行。跨平臺是J2EE一直引以爲豪的關鍵,這是通過JVM來實現的。

其次,在執行時,中間語言被即時編譯器(JIT)編譯成特定平臺的二進制代碼,字節代碼則通過JVM解釋執行,完成各自語言的指令功能。鑑於微軟在“Wintel平臺”上的代碼優化功底,代碼的執行速度較之於Java有明顯的優勢是不爭的事實。但在Unix/Linux平臺上,由於遲遲未能實現其跨平臺的承諾,J2EE幾乎成了惟一的選擇,執行效率的比較也就無所謂。在代碼執行的同時,通用語言運行時和Java虛擬機也都提出了異常捕捉、類型安全、內存分配和垃圾收集等自動化內存管理工作,大大減輕少了現代軟件的內存泄漏問題,減輕了程序員的繁重負擔。

面向對象程序設計在J2EE和平臺中都獲得了直接的支持,單根繼承加多接口實現是它們共有的特徵。但在面向對象之外,對現代組件編程提供了直接支持。當然,當下很多企業中間件都是基於J2EE平臺,只是從設計、編碼、配置到運行都給予了組件編程更多、更直接的支持。

在基礎的和企業級的服務上兩個平臺很難一決高低。從基礎的集合、字符串操作到企業級的API接口,如JMS、JDBC、JAX和JNDI等,J2EE在這方面有着非常堅實的結構。微軟框架類庫也不示弱,提供了從圖畫、網絡、線程到、ADSI、Windows表單和等一系列的API。

除去API類庫的無縫的功能複用外,對本地平臺的調用操作也是值得關注的。CLR和Java虛擬機都支持本地方法的調用。在異構平臺方面,J2EE更鐘情於IIOP(Internet InterORB Protocol),而則使用SOAP。

(2)相同的三層/多層體系 基於三層/多層分佈式計算結構已毋庸置疑地成爲當今企業應用的主流模式,也是兩個平臺較量的着力點。

在客戶端,表示層負責用戶與系統的交互。對於不同的處理要求,和J2EE都提出了基於桌面的應用程序和基於瀏覽器的Web應用的開發組件:Java Application與Windows表單、Java Servlet/JSP與雙雙形成犄角之勢。但Windows表單依賴微軟桌面系統的天然優勢,無論在交互速度還是在界面的表現性能上都較Java Application稍勝一籌。Servlet/JSP與是目前企業在“瘦客戶端”應用的重點,兩者都基於HTTP請求/響應模型,通過HTML瀏覽器頁面完成用戶交互。雖然聲稱在底層通過編譯執行獲得了相當高的處理速度和服務器方控件的瀏覽器自適應能力,但目前並沒有這方面的硬性數據,很難據此而論高低。在緩存、狀態優化等方面兩者可謂是旗鼓相當。另一個與客戶端應用相關的技術是ActiveX與Applet,從目前的趨勢來看,它們在兩個平臺上的地位逐漸邊緣化,也不爲大多數企業所接受。

在中間層,分佈式業務組件負責企業應用的商業邏輯部署。由於這些業務組件經常負責處理數據庫連接、網絡資源和線程等高昂的資源,所以一直是三層/多層架構的關鍵和企業應用的核心。J2EE的EJB是一個成熟的、得到業界廣泛支持的大型企業級組件框架,而組件則是建立在新型的COM+服務之上,兩者在組件與操作系統的交互、客戶端資源共享等方面都有很好的支持。則通過元數據支持自描述性的組件開發、XCOPY部署以及多版本共存,無需註冊表和描述文件,對企業客戶有一定的吸引力。

在後端數據層,兩個平臺都爲數據庫連接量身定做了一套數據存取模型:J2EE的JDBC和的,它們在支持傳統SQL數據源的同時,也支持新型的XML數據源。這方面由於更多地涉及到具體的數據庫產品,很難說那種數據模型更有優勢。

兩種架構的簡單對照如表1所示。

2 移植性比較

在移植性方面,支持跨語言,J2EE支持跨平臺。

微軟通過 通用語言運行時來消除編程語言的差別,“選擇平臺就意味着選擇Windows”,這句話至少在可預見的一段時間裏仍然是一個基本事實。J2EE則通過Java虛擬機來消除平臺差別,跨平臺是它的一大賣點,也是在選擇企業應用開發平臺時的一個重要參考因素,幾乎所有的主流操作系統都提供了對J2EE的支持;實際上如果要搭建跨Unix、Windows等多個操作系統平臺,J2EE平臺幾乎是惟一的選擇,J2EE更關注跨平臺而不是跨語言。但微軟認爲,如果企業的應用都能通過標準協議以Web服務的方式發佈,那麼平臺都是中立的。爲了吸引更多的開發者和鼓勵廣大企業廠商轉到平臺,微軟提出了多語言支持,希望用跨語言的交互性來平衡跨平臺的互操作。

3. 性能比較

性能是J2EE和喋喋不休的話題。二者之間著名的論戰是一個關於寵物店的範例應用。寵物店是Sun一度以來作爲J2EE典型應用的展示範例,而“自告奮勇”地在自己的平臺上實現了該寵物店應用,且聲稱代碼行是J2EE的1/3,效率卻是J2EE的30倍。但Sun的理由是這個範例根本不適合用來做性能比較,該範例實現也沒有做針對性能的優化,而且指責微軟通過後端數據庫優化和緩存虛擡了平臺的效率。這樣的爭吵當然不能作爲判斷的依據,目前也沒有見到更客觀的第三方評測報告。在“Wintel平臺”上也許沒有理由懷疑的性能;至於非Windows平臺,和J2EE也不再具有可比性。

4.安全性、穩定性比較

WINDOWS本身的安全漏洞,使得的安全性不如J2EE。同時,在應用服務器的選擇上,只能用IIS,安全性、穩定性難以保證;而J2EE有更多的選擇,可以在諸多遵循標準的廠商所提供的應用程序服務器中,選擇最符合需要、成本最低、而且又被認爲是最佳的平臺。

5.可擴展性比較

平臺的擴展思想是基於軟件的橫向擴展,而J2EE平臺的擴展思想則是基於硬件的縱向擴展。

Windows系統一般只能擴展到不超過8個處理器,而Sun的系統卻可以擴展到100個甚至更多處理器。

基於J2EE平臺的應用程序可被部署到各種操作系統上,例如可被部署到高端UNIX與大型機系統,這種系統單機可支持64至256個處理器,這是NT服務器所望塵莫及的。J2EE領域的供應商提供了更爲廣泛的負載平衡策略,能消除系統中的瓶頸,允許多臺服務器集成部署。這種部署可達數千個處理器,實現可高度伸縮的系統,滿足未來商業應用的需要。

6.成熟度比較

在平臺的成熟度方面,兩者也有一比。J2EE在1999年形成了成熟的架構,發展至今已經具有相當成熟的、經過檢驗的企業應用系統。而究其淵源是源自微軟以前開發企業應用程序的平臺DNA(Distributed Network Architecture),其中包括了許多已經被證實的技術,並且這些技術已經在產品中得到實現,包括微軟的事務服務器、COM+、消息隊列和SQL Server數據庫等。

7.第三方廠商的支持

J2EE作爲一種開放的規範,從一開始就得到了衆多廠商的支持,IBM、BEA、HP、Oracle等在J2EE的實施上都有較大的投入。目前市場上最好的J2EE應用服務器並不是Sun與Netscape合資的iPlanet,而是BEA的WebLogic和IBM的Webshpere。開發工具有Borland的JBuilder、Sun的Forte for Java、BEA的WebLogic Workshop、Oracle 的JDeveloper、IBM的VisualAge for Java等。

而在設計之初就緊緊地把平臺規範與產品膠合在一起。雖然,NET架構的一小部分具有開放性(如C#語言、通用語言基礎構造CLI 和Web服務標準),但至少目前很難想象會有一個非微軟的實現。Visual 是其唯一的開發工具。

8.開源支持比較

J2EE開源產品衆多,免費框架居多,相應的最佳實踐設計模式層出不窮。而無開源社區支持,是以框架開發者爲主導的設計。

9.學習成本比較

J2EE門檻較高,由於多且雜,需要開發人員花費很長時間才能熟悉整個體系。而門檻較低,使用方便,學習成本較低。但是,對於開發人員來說,在系統整體架構的設計方面不如J2EE易於把握。

10.對WEB服務支持的比較

從和J2EE這兩個平臺的發展歷程來看,從一開始就深深打上了Web服務技術的烙印,在它的市場推廣活動中,無時無刻不凸顯其作爲Web服務的開發和部署平臺的特徵,可以說,天生就是爲Web服務準備的開發和部署平臺。相對而言,J2EE是一個比較“老”的東西,最初它是爲了將Java平臺拓展到企業級應用領域而制訂的一個平臺框架規範,隨着Web服務技術的興起和發展,J2EE平臺作爲一個企業級應用的開發和部署平臺,無法迴避業界的重大技術革命——Web服務,J2EE也不斷地引入了對Web服務的支持。

從服務描述、服務實現和服務的發佈、發現與綁定,以及服務的調用和執行這些不同的角度看,J2EE和的支持基本不相上下,惟一的區別可能是的開發工具更爲方便一些、集成度更高一些。

在Web服務規範的控制方面,微軟與IBM共同主推了大量的Web服務規範,在一段時間內,兩家公司Web服務技術的市場推廣活動都是聯合舉行的,不難看出這兩家公司在這個領域背後的戰略合作關係。最初的Web服務核心技術SOAP、WSDL主要由這兩家公司制訂,後來的UDDI是由這兩家爲首的多家核心企業共同制訂,再後來的一些不是核心的Web服務規範,如WS-Inspection、WSFL、WS-Security、WS-Routing、WS-License和WS-Referral等,則完全是由這兩家來制訂的。不難看出:IBM和微軟對於Web服務的貢獻以及它們對Web服務規範的控制。

儘管由於某種原因,Sun公司曾經在很長的一段時間裏被排除在WS-I(由IBM,微軟和BEA發起成立的促進WEB服務互操作的一個組織)的門外,但這並沒有影響Sun公司繼續在WEB服務方面堅持開放的戰略。Sun公司是Java語言的發明者,而作爲一個開放的跨平臺的技術體系,Java在WEB服務的開發方面也起着非常重要的作用。雙方妥協後,Sun最終被接納爲WS-I的董事成員。

Sun公司積極地參與了制訂Web服務規範的過程,像XML和ebXML。並已經在Java中支持WEB服務中最重要的規範,例如SOAP(JAX-RPC、JAXM、SAAJ和JMS)、WSDL(Java API for WSDL)、UDDI/ebXML(JAXR)和XML(JAXP,JAXB)等等。Sun公司除了積極地參與Web服務領域裏的標準化工作,更是努力地爲客戶提供全面的軟件產品,爲用戶開發和部署Web服務提供平臺。Sun公司的Sun ONE Web服務平臺開發版,是業界第一個用於基於Java技術的Web服務和Web應用開發的全方位的集成平臺。該平臺集成了多種Sun ONE服務器軟件、Java開發工具,支持業界的WEB服務標準,而且是面向開發人員設計,安裝和使用都非常簡單。

四、結束語

關於J2EE和之間的討論已經持續很多年了,孰優孰劣仍然很難下結論。事實上,和J2EE都各有特長,兩者都是十分優秀的開發平臺,短時間內誰也不可替代對方。選擇哪種開發平臺,除了要看軟件開發人員對語言的掌握能力及個人喜好,也要根據開發內容和企業具體情況、具體需求而定。

J2EE最大的優勢是跨平臺,最大的優勢是入門容易和性能較高(鑑於微軟在“Wintel平臺”上的代碼優化功底,代碼的執行速度較之於JAVA有明顯的優勢)。對於沒有和J2EE平臺基礎的開發團隊來說,如果開發的應用軟件沒有跨平臺的要求,只需要運行於微軟平臺之上,則選擇平臺較好;如果要求跨平臺,則只能使用J2EE。如果開發團隊具有或J2EE平臺基礎,在進行新的應用軟件開發時,如果沒有跨平臺要求,則沒有必要更換開發平臺,因爲,更換平臺會帶來不小的培訓成本。