天天看點

淺析J2EE與.NET平台優劣

J2EE .NET

通信協定 Remote Method Invocation over Internet InterOrb Protocol (RMI/IIOP),XML

運作時環境 Java Virtual Machine (JVM) ;

                   Common Language Runtime (CLR)

胖用戶端 Java Swing;

                Windows Forms

目錄服務 Java Naming and Directory Interface (JNDI) ;

                 Active Directory Services Interface (ADSI)

資料通路 Java Database Connection (JDBC) ;

                 ADO.NET

異步消息處理 Java Message Service (JMS);

                       Microsoft Message Queue

表示層技術 Servlets, Java Server Page(JSP) ;

                      ASP.NET

中間層元件模型 EJB,JavaBean;

                              COM+,COM

事物處理 Java Transaction Server (JTS) ;

                  Microsoft Distributed Transaction Coordinator (MS-DTC)

J2EE平台的構成----找圖去

EJB - J2EE 中間層,完成商業邏輯;

JAAS - J2EE 處理認證和授權的API;

Java Connectors - J2EE 用于連接配接異種資料源的API,對上層來講是透明的;

JSP, Java Servlets - J2EE的表示層技術,用于生成使用者界面;

Java Virtual Machine - Java 語言運作環境;

JDBC - J2EE資料庫通路;

JMS - J2EE的異步消息隊列;

JNDI - J2EE的名字查找API,獨立于目錄伺服器;

JTS - J2EE用于處理交易的API;

RMI/IIOP - J2EE的分布式對象的通訊API,提供了和CORBA互動的能力。

.NET平台構成找圖去

.NET Framework - .NET應用運作的基礎;

IL (Intermediary Language) - 所有的.NET語言首先被編譯成該中間語言,然後在CLR中運作;

SOAP - 用于服務通路的工業标準;

DCOM - 元件間通信協定;

MS-DTC - 用來在.NET平台上使用兩階段送出協定來處理分布式交易;

CLR - .NET應用的運作時環境;

COM+ - .NET的中間層模型,用于建構商務邏輯;

ADO.NET - .NET 對資料通路的API。

此外.NET平台還包括其他一些産品象Application Center Server,BizTalk Server ,NLBS (Network Load Balancing Service),Commerce Server,Enterprise Servers,HIS (Host Integration Server),ISAS (Internet Security and Acceleration Server)用來提供象防火牆,安全通路,B2B交易,負載平衡等服務.J2EE規範本身沒有定義這些服務,但可通過選擇第三方産品來滿足類似的要求。

2年以來關于J2EE和.NET之間的争論從來就沒有停止過,這裡本人不做定論,隻列出他們各自的特點。<o:p></o:p>

.NET:<o:p></o:p>

1.   技術來自于一家公司<o:p></o:p>

2.   支援多種語言<o:p></o:p>

3.   軟硬體均需要付費<o:p></o:p>

4.   多數設計模式最佳實踐靈感來源于J2EE陣營<o:p></o:p>

5.   僅支援Windows作業系統<o:p></o:p>

6.   無開源社群支援,是以架構開發者為主導的設計<o:p></o:p>

7.   門檻很低,使用友善,學習成本較低<o:p></o:p>

8.   新技術更新較慢<o:p></o:p>

J2EE:<o:p></o:p>

1.   技術來自于多家公司<o:p></o:p>

2.   支援一種語言<o:p></o:p>

3.   開源産品衆多,免費架構居多,硬體和中間件需付費<o:p></o:p>

4.   成果衆多,相應的最佳實踐設計模式層出不窮<o:p></o:p>

5.   平台移植性好,支援所有作業系統,這一方面成本降低<o:p></o:p>

6.   開源社群活躍,很多規範都是一線人員自己做出來的或者大量聽取一線開發者的意見<o:p></o:p>

7.   門檻較高,由于多且雜,需要開發人員花費很長時間才能熟悉整個體系<o:p></o:p>

8.   這一陣營技術更新很快,新技術新标準層出不窮,适合技術愛好者<o:p></o:p>

二.技術比較

1.一 vs 多

一種語言vs多種語言,一個平台vs多個平台.這似乎是大家最喜于津津樂道的話題,也似乎是所有問題的焦點。

兩種平台主流的開發語言Java和C#在架構上有着驚人的相似:虛拟機技術,基于沙箱的安全模型,分層的命名空間,垃圾回收等。是以從第一眼看上去,C#簡直就是Java的克隆。但微軟并不這樣認為,微軟的說明是:“它內建了C++, Java,Modula 2,C和Smalltalk等多種語言的精華,對它們共同的核心思想象深度面向對象(deep object-orientation),對象簡化 (object-simplification)等都一一做了參考。”一方面,C#的大多數關鍵字來源于C++,使它在書寫上有别于Java。但另一方面,C#的嚴格的類型轉換等概念卻明顯來自于Java(當然,它的原始類型的定義更嚴格,并且據微軟聲稱沒有影響到效率.),使其在内涵上有克隆之嫌.但即是Java,其有些特性也和Smalltalk頗有淵源.是以評價一種開發語言的優劣不僅是看其外在的表現形式,更重要的是其實實在在的功效.作為一種新語言,C#加入了基于XML的标記,可以被編譯器用來直接生成文檔,C#的另一個特點:一站式軟體(one-stop-shopping software)強調了自解釋( self-describing) 的編碼方式,即頭檔案,IDL(Interface Definition Language),GUID和其他複雜的接口無需再被引用.也即是C#,VB.NET等代碼片斷可以任意的被加入到其他語言中.這無疑在多種語言混合程式設計的模式中是一次飛躍,但是,其難維護性也是不言而喻的。

微軟的.NET的平台提供了象C#,VB.NET,COBOL等多種開發語言,C#是新的,而其他的每一種語言都是在原有的基礎上改造而來.這是微軟煞費苦心并且也是不得以的要為習慣于這些語言的程式員鋪一條便捷之路.但是,這些語言的改造與其說是整容到不如說是一次開膛破肚的大手術.首先是觀念變了,Basic,Cobol等語言先天的缺少面向對象的内涵,現在卻變成了面向對象的語言,這就不是要求其傳統的程式員僅僅熟悉一些額外的關鍵字那麼簡單的問題了.基于面向對象的軟體分析設計開發測試是完全不同于基于傳統過程性語言的質變,是以這一過程的轉變對傳統程式員來講也是一個痛苦和漫長的過程.在傳統程式員面前,微軟看似提供了豐富多采的解決方法,但對于實際問題而言,卻怕是有些力不從心.是以一個簡單的辦法是:直接使用C#.對于獨立軟體開發商來講,其轉換成本不容忽視.其次,在一個軟體項目中使用多種語言,開發商必須同時擁有多種語言專家和多個獨立的難以互相支援的開發小組,無疑的,這也使其軟體的維護的成本已非線性的曲線增長.多樣性是雙韌劍,實施時需仔細斟酌.

跨平台是J2EE的最大賣點,也是至今為止還絆住微軟的栅欄.當開發商完成了符合J2EE規範的軟體時,其客戶可以依據其喜好和實力來選擇不同應用伺服器.從基于open source的免費軟體到高端滿足B2B需求的商業套件來搭建自己的平台.但是由于J2EE的規範還不完善,各個J2EE伺服器的提供商為了使其提供其各自了解的完整的功能,不得不添加一些額外的特性.這就使得使用了這些特别功能的應用軟體,綁定到了特定的應用伺服器上.随着J2EE規範的發展,這種差别會逐漸減小.

微軟的跨平台解決方案是Web services,它解決的是異種平台上不同應用之間的連通性問題.從技術角度講,它除了以XML為媒體之外沒有什麼新意.但它的重要意義在于:它是微軟這樣一個重量級選手所推出的,前景不容小視.構造和使用 Web services 的過程較為簡單:

服務提供者用他所選擇的語言構造服務;

服務提供者用WSDL(the Web Services Description Language)來定義該服務;

服務提供者在UDDI (Universal Description, Discovery, and Integration )中注冊該服務;

使用者的應用程式從 UDDI中查找已注冊服務;

使用者的應用程式通過 SOAP (the Simple Object Access Protocol )來調用服務.(SOAP使用HTTP來傳遞基于XML為表現形式的參數)

正如我們所讨論的: Web services解決的是異構平台上服務連通性的問題,但在現實中所更迫切需要的是如何在異構的平台上構造具有可擴充性,高可靠性,高可用性,故障備援,錯誤恢複能力的企業應用.缺少這一點,從結構上講,.NET平台還遠未完善.

2.中間層

基于元件的軟體開發技術可以在較高的級别上實作軟體複用,加快企業軟體開發的程序.在J2EE構架中, JavaBean和EJB(Enterprise JavaBeans) 被用來完成事物邏輯.其中EJB和 JavaBean 有着類似的模型,但它被用來建立分布式的企業應用.它定義伺服器端元件的模型,具有以下一些特性:

生存期模型;

通路模型;

安全模型;

事物處理模型;

會話處理模型;

資料封裝模型;

部署模型

根據這些模型,簡單的編碼就可完成複雜的功能。

在微軟的.NET平台中,舊的COM 和 COM+的元件模型被新的元件模型所代替。增加了象基于沙箱的安全模型和垃圾回收等功能.并且實作了多重接口繼承,擴充的中繼資料和新的代理模型等.舊有的COM和COM+元件也可被映射到新的運作環境中。

綜上所述,兩衆架構在基于元件的中間層的設計上各有千秋,對于建立分布式的,複雜的,高效的,高可靠性的的應用程式都有着足夠的能力。

3.表示層

兩種架構都同時支援胖用戶端和瘦用戶端.即C/S模式和B/S模式.對于C/S模式,J2EE提供了替代Java AWT的Java Swing,同時作為可視化元件的JavaBean也可用來構造系統。對于B/S結構的表示層,J2EE使用 servlet ,JSP(Java Server Page) ,HMTL,WML,XML等工具來實作。

微軟的胖用戶端技術則由 Windows Forms代替了MFC.它們起的作用相同,在結構上 Windows Forms 被插入到.NET的運作時架構(runtime framework)群組件模型 (component model)中.在瘦客戶模型中, ASP.NET代替了舊有的ASP和 HMTL, WML ,XML作為表示層。在 ASP.NET 中,C#,VB.NET等語言的代碼片斷可被自由引用.ASP.NET 頁面被首先轉換成中介語言( Intermediary Language),然後再被 中介語言及時編譯器(just-in-time IL compiler)編譯,最後運作于公共語言運作環境中,并且 ASP.NET 提供了頁面的緩沖,是以,其運作速度要遠遠快于ASP。

大體上,兩種架構所使用的表示層的技術非常類似,雖在細節上各有所長,但總體功能當在伯仲之間。

4.資料通路

J2EE 和 .Net 已不同的形式支援資料的通路。JDBC和ADO一樣和所連接配接的資料庫無關,并且通過連接配接,指令語句和結果集來對資料進行操作.是以屬于中間層次的 API.更高一級的資料封裝和資料管理是通過實體EJB (entity EJB)來完成的.基于容器管理的實體EJB使開發更快捷,管理更友善.事實上,由于實體EJB的load()和store()方法的同步機制,将大大緩解因并發而使資料庫産生的瓶頸.也可以采用不屬于J2EE規範的第三方資料通路工具,象WebGain的 TopLink。

而微軟的.NET的資料通路工具則由基于XML的ADO.NET代替了基于COM元件的ADO.任何以XML為輸出的資料源都可以作為 ADO.NET 的資料源.相應的結果集更新為資料集 (DataSets),指令語句則更新為資料集指令(DataSetCommands).從形式來看,微軟的ADO.NET更新潮和時髦一些,基于XML的特性使其可以處理極其豐富的資料源,并且,因其構架在HTTP協定之上,易于穿透防火牆,使溝通更為便利.但由于XML本身的基于标記的特性,很明顯限制了在有超大資料量和有網絡瓶頸的應用中的使用.而J2EE的資料通路規則則顯得略有單薄,但同時卻更簡單,更有效.并且通過對應用程式有效的層次的設計,對于資料庫和基于XML的資料源的通路,也是可以無縫的整合的。

三.整體評價

在微軟還沒有足以和Java平台相對抗的産品的時候,微軟所樂于做是大聲的宣傳:"write once, debug everywhere"。而它的對手則更樂于這樣評價它:"微軟開始也喜歡Java,他們喜歡它的方式是讓它死去,他們當然也憎恨它,他們甚至憎恨每一個以J開頭的單詞。"但是現在,形式不同了,微軟有了足以自豪的.NET他們可以已他們自己所喜好的方式來對J2EE和.NET來做各種比較。最熱鬧的應該算是微軟出示的第三方對.NET Pet Shop和J2EE的 Pet Store的綜合比較了.有興趣的讀者可以到MSDN,www.onjava.com,IBM開發者原地等網站看到相關評論。

J2EE .NET

易用性 ** ***

擴充能力 *** **

多平台支援 **** *

多語言支援 * ****

可靠性 *** ***

性能 *** ***

可管理性 *** ***

重用性 **** **

負載平衡 *** ***

開放标準 ***** *

就企業而言,内部衆多系統的整合、系統的延展性、安全性是更需要注意的議題,而這些都是J2EE的優勢,也是微軟的不足處。 在效率方面,J2EE陣營主張通過硬體的效能增加來彌補軟體的不足.開放标準,功能強大,易于移植這些都是J2EE的賣點。但讓人奇怪的是IBM的WebSphere和BEA的WebLogic在J2EE市場占了大半壁江山,而作為規則制定者的SUN卻在做壁上觀。

微軟确實提供了從桌面的辦公軟體,開發工具,到背景伺服器資料庫的全方位的産品。 但統一平台的使用者可能要犧牲跨平台的好處,并也有可能由此就被無窮無盡的鎖定在微軟的許可證的汪洋中.更簡單,更快捷,更高效是微軟的目标,随着時代的發展,我們也許會看到更完美的技術解決方案。

(本文有删減)

http://tech.ccidnet.com/art/3741/20060414/506371_1.html