- 相關(guān)推薦
J2EE與.NET技術(shù)架構的區別
本文從體系架構、移植性、性能、安全性、穩定性、可擴展性、成熟度、第三方廠(chǎng)商支持、開(kāi)源支持、學(xué)習成本和對Web服務(wù)支持等方面,試圖對目前兩種主要的軟件開(kāi)發(fā)技術(shù)架構J2EE與.NET進(jìn)行一個(gè)客觀(guān)、公正、全面的比較。到底這兩者的比較如何呢?快跟yjbys小編一起來(lái)看看吧!
1.體系架構的比較
作為彼此競爭的應用平臺,J2EE和.NET開(kāi)發(fā)平臺在目標和體系結構上極其相似,但在實(shí)現上又完全不同。
(1)類(lèi)似的平臺基礎構造 J2EE和.NET兩個(gè)平臺在底層的執行引擎都源于托管的虛擬機概念,但.NET的CLR沿著(zhù)Java虛擬機(JVM)走得更遠,CLR在借鑒了JVM的自動(dòng)垃圾收集、異常處理等機制的同時(shí),又為.NET平臺添加了多語(yǔ)言支持、組件自描述等新的特性。
在.NET和 J2EE平臺上,程序的編譯都經(jīng)過(guò)兩個(gè)類(lèi)似的過(guò)程。首先,特定高級語(yǔ)言編譯器將C#(及其他.NET語(yǔ)言)和Java源代碼分別翻譯成中間語(yǔ)言(IL)和字節代碼(ByteCode)。.NET在中間語(yǔ)言設計時(shí)通盤(pán)考慮了多個(gè)主流高級語(yǔ)言,在這一層面實(shí)現了.NET平臺的跨語(yǔ)言承諾;J2EE的基石是Java語(yǔ)言,它最典型的特征是:一次編寫(xiě),多次運行?缙脚_是J2EE一直引以為豪的關(guān)鍵,這是通過(guò)JVM來(lái)實(shí)現的。
其次,在執行時(shí),中間語(yǔ)言被即時(shí)編譯器(JIT)編譯成特定平臺的二進(jìn)制代碼,字節代碼則通過(guò)JVM解釋執行,完成各自語(yǔ)言的指令功能。鑒于微軟在“Wintel平臺”上的代碼優(yōu)化功底,.NET代碼的執行速度較之于Java有明顯的優(yōu)勢是不爭的事實(shí)。但在Unix/Linux平臺上,由于.NET遲遲未能實(shí)現其跨平臺的承諾,J2EE幾乎成了惟一的選擇,執行效率的比較也就無(wú)所謂。在代碼執行的同時(shí),通用語(yǔ)言運行時(shí)和Java虛擬機也都提出了異常捕捉、類(lèi)型安全、內存分配和垃圾收集等自動(dòng)化內存管理工作,大大減輕少了現代軟件的內存泄漏問(wèn)題,減輕了程序員的繁重負擔。
面向對象程序設計在J2EE和.NET平臺中都獲得了直接的支持,單根繼承加多接口實(shí)現是它們共有的特征。但在面向對象之外,.NET對現代組件編程提供了直接支持。當然,當下很多企業(yè)中間件都是基于J2EE平臺,只是.NET從設計、編碼、配置到運行都給予了組件編程更多、更直接的支持。
在基礎的和企業(yè)級的服務(wù)上兩個(gè)平臺很難一決高低。從基礎的集合、字符串操作到企業(yè)級的API接口,如JMS、JDBC、JAX和JNDI等,J2EE在這方面有著(zhù)非常堅實(shí)的結構。微軟.NET框架類(lèi)庫也不示弱,提供了從圖畫(huà)、網(wǎng)絡(luò )、線(xiàn)程到ADO.NET、ADSI、Windows表單和ASP.NET等一系列的API。
除去API類(lèi)庫的無(wú)縫的功能復用外,對本地平臺的調用操作也是值得關(guān)注的。CLR和Java虛擬機都支持本地方法的調用。在異構平臺方面,J2EE更鐘情于IIOP(Internet InterORB Protocol),而.NET則使用SOAP。
(2)相同的三層/多層體系 基于三層/多層分布式計算結構已毋庸置疑地成為當今企業(yè)應用的主流模式,也是兩個(gè)平臺較量的著(zhù)力點(diǎn)。
在客戶(hù)端,表示層負責用戶(hù)與系統的交互。對于不同的處理要求,.NET和J2EE都提出了基于桌面的應用程序和基于瀏覽器的Web應用的開(kāi)發(fā)組件:Java Application與Windows表單、Java Servlet/JSP與ASP.NET雙雙形成犄角之勢。但Windows表單依賴(lài)微軟桌面系統的天然優(yōu)勢,無(wú)論在交互速度還是在界面的表現性能上都較Java Application稍勝一籌。Servlet/JSP與ASP.NET是目前企業(yè)在“瘦客戶(hù)端”應用的重點(diǎn),兩者都基于HTTP請求/響應模型,通過(guò)HTML瀏覽器頁(yè)面完成用戶(hù)交互。雖然ASP.NET聲稱(chēng)在底層通過(guò)編譯執行獲得了相當高的處理速度和服務(wù)器方控件的瀏覽器自適應能力,但目前并沒(méi)有這方面的硬性數據,很難據此而論高低。在緩存、狀態(tài)優(yōu)化等方面兩者可謂是旗鼓相當。另一個(gè)與客戶(hù)端應用相關(guān)的技術(shù)是ActiveX與Applet,從目前的趨勢來(lái)看,它們在兩個(gè)平臺上的地位逐漸邊緣化,也不為大多數企業(yè)所接受。
在中間層,分布式業(yè)務(wù)組件負責企業(yè)應用的商業(yè)邏輯部署。由于這些業(yè)務(wù)組件經(jīng)常負責處理數據庫連接、網(wǎng)絡(luò )資源和線(xiàn)程等高昂的資源,所以一直是三層/多層架構的關(guān)鍵和企業(yè)應用的核心。J2EE的EJB是一個(gè)成熟的、得到業(yè)界廣泛支持的大型企業(yè)級組件框架,而.NET組件則是建立在新型的COM+服務(wù)之上,兩者在組件與操作系統的交互、客戶(hù)端資源共享等方面都有很好的支持。.NET則通過(guò)元數據支持自描述性的組件開(kāi)發(fā)、XCOPY部署以及多版本共存,無(wú)需注冊表和描述文件,對企業(yè)客戶(hù)有一定的吸引力。
在后端數據層,兩個(gè)平臺都為數據庫連接量身定做了一套數據存取模型:J2EE的JDBC和.NET的ADO.NET,它們在支持傳統SQL數據源的同時(shí),也支持新型的XML數據源。這方面由于更多地涉及到具體的數據庫產(chǎn)品,很難說(shuō)那種數據模型更有優(yōu)勢。
兩種架構的簡(jiǎn)單對照如表1所示。
2 移植性比較
在移植性方面,.NET支持跨語(yǔ)言,J2EE支持跨平臺。
微軟通過(guò).NET 通用語(yǔ)言運行時(shí)來(lái)消除編程語(yǔ)言的差別,“選擇.NET平臺就意味著(zhù)選擇Windows”,這句話(huà)至少在可預見(jiàn)的一段時(shí)間里仍然是一個(gè)基本事實(shí)。J2EE則通過(guò)Java虛擬機來(lái)消除平臺差別,跨平臺是它的一大賣(mài)點(diǎn),也是在選擇企業(yè)應用開(kāi)發(fā)平臺時(shí)的一個(gè)重要參考因素,幾乎所有的主流操作系統都提供了對J2EE的支持;實(shí)際上如果要搭建跨Unix、Windows等多個(gè)操作系統平臺,J2EE平臺幾乎是惟一的選擇,J2EE更關(guān)注跨平臺而不是跨語(yǔ)言。但微軟認為,如果企業(yè)的應用都能通過(guò)標準協(xié)議以Web服務(wù)的方式發(fā)布,那么平臺都是中立的。為了吸引更多的開(kāi)發(fā)者和鼓勵廣大企業(yè)廠(chǎng)商轉到.NET平臺,微軟提出了多語(yǔ)言支持,希望用跨語(yǔ)言的交互性來(lái)平衡跨平臺的互操作。
3. 性能比較
性能是J2EE和.NET喋喋不休的話(huà)題。二者之間著(zhù)名的論戰是一個(gè)關(guān)于寵物店的范例應用。寵物店是Sun一度以來(lái)作為J2EE典型應用的展示范例,而.NET“自告奮勇”地在自己的平臺上實(shí)現了該寵物店應用,且聲稱(chēng)代碼行是J2EE的1/3,效率卻是J2EE的30倍。但Sun的理由是這個(gè)范例根本不適合用來(lái)做性能比較,該范例實(shí)現也沒(méi)有做針對性能的優(yōu)化,而且指責微軟通過(guò)后端數據庫優(yōu)化和緩存虛抬了.NET平臺的效率。這樣的爭吵當然不能作為判斷的依據,目前也沒(méi)有見(jiàn)到更客觀(guān)的第三方評測報告。在“Wintel平臺”上也許沒(méi)有理由懷疑.NET的性能;至于非Windows平臺,.NET和J2EE也不再具有可比性。
4.安全性、穩定性比較
WINDOWS本身的安全漏洞,使得.NET的安全性不如J2EE。同時(shí),在應用服務(wù)器的選擇上,.NET只能用IIS,安全性、穩定性難以保證;而J2EE有更多的選擇,可以在諸多遵循標準的廠(chǎng)商所提供的應用程序服務(wù)器中,選擇最符合需要、成本最低、而且又被認為是最佳的平臺。
5.可擴展性比較
.NET平臺的擴展思想是基于軟件的橫向擴展,而J2EE平臺的擴展思想則是基于硬件的縱向擴展。
Windows系統一般只能擴展到不超過(guò)8個(gè)處理器,而Sun的系統卻可以擴展到100個(gè)甚至更多處理器。
基于J2EE平臺的應用程序可被部署到各種操作系統上,例如可被部署到高端UNIX與大型機系統,這種系統單機可支持64至256個(gè)處理器,這是NT服務(wù)器所望塵莫及的。J2EE領(lǐng)域的供應商提供了更為廣泛的負載平衡策略,能消除系統中的瓶頸,允許多臺服務(wù)器集成部署。這種部署可達數千個(gè)處理器,實(shí)現可高度伸縮的系統,滿(mǎn)足未來(lái)商業(yè)應用的需要。
6.成熟度比較
在平臺的成熟度方面,兩者也有一比。J2EE在1999年形成了成熟的架構,發(fā)展至今已經(jīng)具有相當成熟的、經(jīng)過(guò)檢驗的企業(yè)應用系統。而.NET究其淵源是源自微軟以前開(kāi)發(fā)企業(yè)應用程序的平臺DNA(Distributed Network Architecture),其中包括了許多已經(jīng)被證實(shí)的技術(shù),并且這些技術(shù)已經(jīng)在產(chǎn)品中得到實(shí)現,包括微軟的事務(wù)服務(wù)器、COM+、消息隊列和SQL Server數據庫等。
7.第三方廠(chǎng)商的支持
J2EE作為一種開(kāi)放的規范,從一開(kāi)始就得到了眾多廠(chǎng)商的支持,IBM、BEA、HP、Oracle等在J2EE的實(shí)施上都有較大的投入。目前市場(chǎng)上最好的J2EE應用服務(wù)器并不是Sun與Netscape合資的iPlanet,而是BEA的WebLogic和IBM的Webshpere。開(kāi)發(fā)工具有Borland的JBuilder、Sun的Forte for Java、BEA的WebLogic Workshop、Oracle 的JDeveloper、IBM的VisualAge for Java等。
而.NET在設計之初就緊緊地把平臺規范與產(chǎn)品膠合在一起。雖然,NET架構的一小部分具有開(kāi)放性(如C#語(yǔ)言、通用語(yǔ)言基礎構造CLI 和Web服務(wù)標準),但至少目前很難想象會(huì )有一個(gè)非微軟的.NET實(shí)現。Visual Stdio.NET是其唯一的開(kāi)發(fā)工具。
8.開(kāi)源支持比較
J2EE開(kāi)源產(chǎn)品眾多,免費框架居多,相應的最佳實(shí)踐設計模式層出不窮。而.NET無(wú)開(kāi)源社區支持,是以框架開(kāi)發(fā)者為主導的設計。
9.學(xué)習成本比較
J2EE門(mén)檻較高,由于多且雜,需要開(kāi)發(fā)人員花費很長(cháng)時(shí)間才能熟悉整個(gè)體系。而.NET門(mén)檻較低,使用方便,學(xué)習成本較低。但是,對于開(kāi)發(fā)人員來(lái)說(shuō),.NET在系統整體架構的設計方面不如J2EE易于把握。
10.對WEB服務(wù)支持的比較
從.NET和J2EE這兩個(gè)平臺的發(fā)展歷程來(lái)看,.NET從一開(kāi)始就深深打上了Web服務(wù)技術(shù)的烙印,在它的市場(chǎng)推廣活動(dòng)中,無(wú)時(shí)無(wú)刻不凸顯其作為Web服務(wù)的開(kāi)發(fā)和部署平臺的特征,可以說(shuō),.NET天生就是為Web服務(wù)準備的開(kāi)發(fā)和部署平臺。相對.NET而言,J2EE是一個(gè)比較“老”的東西,最初它是為了將Java平臺拓展到企業(yè)級應用領(lǐng)域而制訂的一個(gè)平臺框架規范,隨著(zhù)Web服務(wù)技術(shù)的興起和發(fā)展,J2EE平臺作為一個(gè)企業(yè)級應用的開(kāi)發(fā)和部署平臺,無(wú)法回避業(yè)界的重大技術(shù)革命——Web服務(wù),J2EE也不斷地引入了對Web服務(wù)的支持。
從服務(wù)描述、服務(wù)實(shí)現和服務(wù)的發(fā)布、發(fā)現與綁定,以及服務(wù)的調用和執行這些不同的角度看,J2EE和.NET的支持基本不相上下,惟一的區別可能是.NET的開(kāi)發(fā)工具更為方便一些、集成度更高一些。
在Web服務(wù)規范的控制方面,微軟與IBM共同主推了大量的Web服務(wù)規范,在一段時(shí)間內,兩家公司W(wǎng)eb服務(wù)技術(shù)的市場(chǎng)推廣活動(dòng)都是聯(lián)合舉行的,不難看出這兩家公司在這個(gè)領(lǐng)域背后的戰略合作關(guān)系。最初的Web服務(wù)核心技術(shù)SOAP、WSDL主要由這兩家公司制訂,后來(lái)的UDDI是由這兩家為首的多家核心企業(yè)共同制訂,再后來(lái)的一些不是核心的Web服務(wù)規范,如WS-Inspection、WSFL、WS-Security、WS-Routing、WS-License和WS-Referral等,則完全是由這兩家來(lái)制訂的。不難看出:IBM和微軟對于Web服務(wù)的貢獻以及它們對Web服務(wù)規范的控制。
盡管由于某種原因,Sun公司曾經(jīng)在很長(cháng)的一段時(shí)間里被排除在WS-I(由IBM,微軟和BEA發(fā)起成立的促進(jìn)WEB服務(wù)互操作的一個(gè)組織)的門(mén)外,但這并沒(méi)有影響Sun公司繼續在WEB服務(wù)方面堅持開(kāi)放的戰略。Sun公司是Java語(yǔ)言的發(fā)明者,而作為一個(gè)開(kāi)放的跨平臺的技術(shù)體系,Java在WEB服務(wù)的開(kāi)發(fā)方面也起著(zhù)非常重要的作用。雙方妥協(xié)后,Sun最終被接納為WS-I的董事成員。
Sun公司積極地參與了制訂Web服務(wù)規范的過(guò)程,像XML和ebXML。并已經(jīng)在Java中支持WEB服務(wù)中最重要的規范,例如SOAP(JAX-RPC、JAXM、SAAJ和JMS)、WSDL(Java API for WSDL)、UDDI/ebXML(JAXR)和XML(JAXP,JAXB)等等。Sun公司除了積極地參與Web服務(wù)領(lǐng)域里的標準化工作,更是努力地為客戶(hù)提供全面的軟件產(chǎn)品,為用戶(hù)開(kāi)發(fā)和部署Web服務(wù)提供平臺。Sun公司的Sun ONE Web服務(wù)平臺開(kāi)發(fā)版,是業(yè)界第一個(gè)用于基于Java技術(shù)的Web服務(wù)和Web應用開(kāi)發(fā)的全方位的集成平臺。該平臺集成了多種Sun ONE服務(wù)器軟件、Java開(kāi)發(fā)工具,支持業(yè)界的WEB服務(wù)標準,而且是面向開(kāi)發(fā)人員設計,安裝和使用都非常簡(jiǎn)單。
【J2EE與.NET技術(shù)架構的區別】相關(guān)文章:
J2EE架構與設計培訓08-30
J2EE架構主要版本06-23
j2ee架構師介紹08-03
有關(guān)ADO與ADO.NET的區別與介紹09-15
Java Web開(kāi)發(fā)和J2EE的區別07-07
J2EE技術(shù)簡(jiǎn)介08-05
JAVA和.NET開(kāi)發(fā)過(guò)程中的區別10-25
J2EE核心技術(shù)08-05
J2EE技術(shù)規范07-15
J2EE技術(shù)規范大全06-15