前言
微軟近日來強力的推銷他們最近所組織出來的Web技術--.NET,雖然對於.NET平台的文件資料?稱有限,但是在同質性技術的比較上卻已逐一浮現。.NET到底是微軟所帶來的新一代技術?抑或是另一次微軟對於開發者所做的大規模技術型態移轉?這其中的蹊蹺頗令人玩味。除此之外,世人對於捉對廝殺一事,一向樂此不疲。對於微軟陣營而言,昇陽的Java陣營一向都是最主要的假想敵。也就因為如此,昇陽由Java技術所延伸出的J2EE架構便順理成章地成為微軟.NET的比較對象。本文便針對這個舉世注目的競爭,為讀者做一系列的分析與介紹。
各家的心路歷程
說到發展的歷史,當從昇陽的Java被發明出來談起。我們知道Java在1996年被發展出來,時值Web全球資訊網蓬勃發展的時期。Java的出現,帶動了Web程式開發與互動設計,同時也讓跨平台、分散式的運算進入了一個新的紀元。在Java基礎技術漸趨成熟之際,企業界對網路運算的需求也與日俱增。因此,在企業界的殷切需求刺激之下,昇陽陸續為企業運算提出了多種不同層面的服務,其中包括訊息傳遞服務、交易處理服務、目錄存取服務、遠端物件服務、以及最基本的資料庫存取服務。配合上原有的Java特性,共同組成了提供企業運算的基礎架構,稱之為Enterprise Java解決方案。
正當昇陽對Java推動如火如荼之際,軟體業界的龍頭老大也嗅到了火藥味,而目標戰場正是企業運算架構與環境。因此在微軟的警覺心驅使之下,陸續整合並更新微軟舊有的已開發技術,以其能夠提出一個足以與昇陽陣營相抗衡的技術基礎。於是微軟發展出了分散式的網際網路架構,稱之為Windows DNA(Windows Distributed Internet Architecture),包含了以下幾個部分:分散式物件服務、訊息傳遞服務、交易處理服務、資料庫存取服務、以及網際網路資訊服務,並定義各由不同的軟體伺服模組來提供服務。
有了比較之後,競爭即隨之轉趨白熱化。兩方陣營都進入快速整合自家技術的速度競爭之中。於是就在1999年昇陽宣佈了支援企業運算的J2EE(Java2 Enterprise Edition)架構,宣稱其整合了所有相關的Java企業運算服務。而就在隔年(西元2000年),微軟也開始主推進一步整合DNA技術與新程式語言的.NET架構,正是衝突於是展開。
什麼是J2EE架構?
就應用服務的開發角度來看,Java的出現可以直接引入可攜性以及擴展性的優勢。由同時於Java具有“Write Once,Run Anywhere”的特性,使得在應用程式架構開發上的限制大為降低,同時也藉著和硬體平台分離的考量,為企業界在成本考量上具有更多樣性的選擇。昇陽公司所提出的Java 2 Enterprise Edition (J2EE),基本上就是因應企業服務架構的需求,開發出以Java技術為基礎的企業應用伺服模型。由於有了J2EE的出現,使得企業界在開發相關應用的同時有了強而有力的輔助,同時也可以透過Java所提供的特性,更輕易去建構出具全球性的大型企業應用伺服架構。
在Java企業應用程式開發介面上,通常是以J2EE平台為基礎,發展出各項支援企業運作的標準,包括Enterprise JavaBeans架構、Java IDL(Java遠端物件運作介面定義語言,Java Interface Definition Language)、JDBC(資料庫連結服務,Java Database Connectivity)、JMS(訊息傳遞服務,Java Messaging Service)、JNDI(名稱與目錄查詢介面,Java Naming and Directory Interface)、JTS(交易服務介面,Java Transaction Service) API。這些介面共同提供開發者和許多非Java環境之間的溝通工具。
J2EE就其組成分子來看,可以分為以下幾個部分:
1.Applet以及Application所構成的客戶端:
J2EE的客戶端可以是以下幾種 -- 以HTML網頁為基礎的客戶端、以HTML內容為基礎的客戶端、企業內部網路客戶端等等,其之間的區別則主要是客戶端的互動模式的特性以及多寡。
2.Web元件部分:
J2EE的Web元件部分包含了Servlet技術、JSP(Java ServerPages)技術等等。此部份主要是實作提供客戶端request服務之用。
3.Enterprise JavaBeans(EJB)元件部分:
J2EE的EJB元件部分主要包含了Session Bean與Entity Bean兩大部分,統稱為Enterprise Beans。Enterprise Beans使主要構成伺服端應用程式邏輯的基礎。
4.其他基礎技術支援:
主要包括了JMS、JNDI、JTA、RMI-IIOP、以及JDBC等等,筆者將在未來幾期中逐一說明。
(圖一)則說明了J2EE架構的運作模型。
什麼是.NET架構?
到目前為止,各家對.NET的解釋與觀點仍存有參差不齊的現象,宛如瞎子摸象般的撲朔迷離。有人說,.NET是微軟下一代的程式開發平台(Visual Studio Development Environment),有人則說.NET是一種新程式語言的誕生(C#),另外也有人說.NET是一種新的資料與訊息交換的架構。而事實上,.NET均具有以上幾種特性,甚至更多。首先,就讓我們來檢視一下.NET平台所具有的各項據述組成部分:
1.新的程式語言C#:
C#是一個由微軟新開發出來的物件導向程式語言,用來建立物件類別以及軟體元件。C#的特色正如它名字所內含的"#"一般,整了原有的C、C++、以及Java語言的重要特性,同時也引介了其它用來進行元件設計的重要性質,如metadata標籤等等。
2.共用語言執行環境CLR:
所謂的共用語言執行環境(Common Language Runtime, CLR),是用來執行微軟所定義的內部程式語言格式(Internal Language format, IL format)所構成的位元碼(bytecode)程式。因此微軟將針對各種重要的程式語言,開發出相對應的IL編譯器,以期能夠將各種程式碼或物件類別置於同一個共用語言執行環境之中運作。
3.基礎元件集:
這是一個在共用語言執行環境中所提供的元件基本架構,提供各項基本的軟體運作功能,如網路、檔案輸出入等等,以便利程式的整合與開發。
4.ASP+:
這是一個新版的ASP(Active Server Pages),除了原有的ASP特色之外,ASP+尚增加了支援編譯的功能,也就是說,ASP script將可以使用各種支援IL編譯的程式語言來進行撰寫,進而在共用語言執行環境之中運作。
5.Win Forms以及Web Forms:
這是新的使用者介面元件架構,提供開發環境Visual Studio的支援。
6.ADO+:
這是一個新版的ADO資料存取元件,除了原有的ADO特色之外,ADO+尚提供了以XML以及SOAP協定所進行的資料交換功能。
(圖二)說明了一般性的.NET架構。
捉對廝殺:J2EE vs .NET
就如同我們可以觀察到的現象,.NET平台在其整體架構設計下,具有相當完整的技術支援,而微軟正是要用此來和其他已經存在的同質性技術來競爭,如昇陽的J2EE,以及CORBA等等。而競爭的目的,無非就是要吸引更多的開發團隊,投入.NET平台的開發。但是我們要怎樣來進行比較,以取得優劣的印象呢?這就需要進行逐項的對應討論。我將.NET以及J2EE做一個非正式的列表,如(表三),這只是相當粗略的比較表,筆者將在未來繼續探討深入的技術比較部分。
後記
.NET對原先就以微軟架構為主的開發團隊來說,的確不失為一個良好的演進,例如ASP+改良了ASP,ADO+改良了ADO以及DCOM,C#改良了C以及C++。雖然目前.NET的所有規格尚有爭議與模糊,但無論如何,.NET將會成為Windows系列平台的標準開發環境。如果你現在正以微軟架構開發系統的話,無疑地你將能夠由新的.NET架構中獲益。
反觀J2EE部分,在微軟正式宣佈.NET之後,J2EE將有一些必要的議題值得進行進一步的開發、整合與提昇。例如在對XML的支援方面,需要有更進一步的提昇,而不單只是支援SAX/DOM解譯服務的層次,更應朝向延伸類似SOAP的協定層次。而在與各項標準的整合上,則應更加努力迎向世界的共用標準,例如將JNDI整合JMS、LDAP、NIS、COS Naming,並與標準的SOAP/BizTalk伺服端銜接合作。這將會是令人激賞的進步與提昇。(作者聯絡信箱:warren@nceasy.com.tw)