I. 序 在本文中,我們將深入的比較兩種可用來建置商業XML Web Services的平台,分別是Sun Microsystems 所提供的Java 2 Enterprise Edition (J2EE)以及Microsoft所提供的 .NET平台。 雖然J2EE代表的是一個公開的標准,而 .NET是單獨一家廠商的標准 (雖然.NET試圖取得ECMA的標准,但是卻只有在最基礎的部分被ECMA采納變成標准,請參考http://msdn.microsoft.com/net/ecma/,在企業的應用上卻沒有標准化),反觀Java平台,確是所有除了Microsoft以外的各大廠商都遵循著JCP的標准制定所有規格 (請參考http://www.jcp.org ,您會發現所有的Java技術都是協調各大公司而來)。 盡管在標准化上Java遙遙領先,但我們仍然將只針對服務器端的Web Services架構做探討。例如:我們的討論將不涉及 JINI 或是Office XP,我們也不會討論Java跨足Solaris、Linux、Mac OS X、以及Windows平台,而.NET只跨Windows 98/ME/2000/XP等Windows平台的事實。我們更不會討論 "跨語言" 這個Java早已試圖達成,Microsoft又拿來當成.NET的重大特點,卻根本不是這回事的功能。(請參閱http://grunge.cs.tu-berlin.de/~tolk/vmlanguages.Html,大家可以發現Java早就達到所謂跨語言的功能,Smalltalk、Eiffel、Lisp、Prolog、BASIC等語言都可以順利轉換成Java bytecode,不像.NET號稱跨語言,卻出現COBOL.NET這種怪物,原本的語言要削足適履來配合.NET,所以才產生VB.NET、COBOL.NET這一大串產品)。號稱跨語言喊了半天,原來連自己的VB 6.0都跨不過去。在讀完本文之後,您將會更加了解這兩種架構的彼此優缺點,而且在制定貴公司下一代Web Services決策時將有更明確的考慮。
II. 前言 下一代的分布式運算時代已經來臨了。在過去幾年中,XML 被廣泛的運用於計算機運算環境中,以達到在全球信息網上共享信息的遠大目標。如今,它可以更進一步地提供運算能力上的分享。從技術的觀點來看,Web Services的出現並不能算是分布式計算機運算的新革命。它可以結構化的呈現信息,甚至是程序內部的訊息,因而很自然地比XML應用程序更加引人注目。
III. 工業標准與企業標准 透過Web Services,任何應用程序可以在網絡上順利地整合在一起。Web Services的基本原理是利用標准的網絡協議(例如:HTTP)來傳送XML訊息。這是一種非常輕便的溝通機制,因此可以讓任何程序語言、中間層組件或平台很輕易地整合進來。一般工業上或企業內部會接受成熟且廣為廠商采用的業界標准,更尤其是已經受過市場考驗行之有年的標准。有了Web Services,您就可以快速且低成本的整合兩個企業、部門或甚至是兩個程序。 要建置Web Services必須得采用業界通用的Web Services技術。現在讓我們來看看Web Services究竟是什麼。首先您必須先知道如何建置以及使用Web Services。其實Web Services是種很簡單的XML接口,適用於商業、應用程序以及系統服務。說穿了也就是將既有的技術舊衣新穿而已。Web Services其實是一種新一代的分布式服務,在這之前,有CORBA、DCOM、COM+、RMI,都是用來實作分布式架構的技術,而且也被證明運作的非常順利;而新一代的分布式服務,采用的是XML技術,如XML-RPC和SOAP就是最佳的例子,新一代的分布式技術可以用寄有的通訊協議做基礎(如SMTP、FTP等),但是目前最受歡迎的方式仍然是將XML基植於HTTP這個廣受歡迎,但是效能並非最佳的通訊協議上。即使如此,這些新一代的技術尚未通過時間的考驗,或許他們有可能運作得很成功,也可能有些許的風險存在。 面對這麼多的分布式技術,J2EE平台與.NET平台的支持程度如下表: 對舊有分布式技術的支持: J2EE .NET CORBA 支持 不支持 RMI/IIOP 不支持 COM+ 不支持 支持 對新一代Web Services的支持: J2EE .NET XML-RPC 支持 不支持 SOAP 支持 支持 從上述兩個圖表之中我們可以得知,對於姿態保守的公司而言,J2EE支持了較為廣泛應用於現有企業系統的分布式運算服務,而.NET平台仍然只支持延伸自COM與DCOM的COM+,其技術前身MTS COM+比Enterprise JavaBeans技術早了三年,不消說,我們可以推斷J2EE提供的分布式服務比.NET的技術領先三年。此外,目前企業內部使用之大型主機所使用的皆為CORBA技術,J2EE對舊有技術的支持當然是最佳的,因為COM+只能在Windows平台上運行。 如果是態度前衛的公司,使用J2EE者可以選用XML-RPC(http://java.sun.com/xml/jaxrpc/index.html)或是SOAP(http://java.sun.com/xml/jaxm/index.html)技術,Sun Microsystems更提供了 Java Web Service Developer Pack (http://java.sun.com/webservices/webservicespack.html) 供開發者開發Web Services。反觀.NET技術,只提供對於SOAP的支持。在對於既有分布式技術支持不足的情況下,對新一代分布式技術的支持又無法提供彈性的選擇,風險之大,是可以預估的。 就算新一代的Web Services非常穩定好了,他的穩定度常常會被底層操作系統的穩定度所影響,如果你選用.NET,就會被綁死在公認最不穩定的Windows平台上,更糟糕的是,.NET還只能在Microsoft官方的網頁服務器上運作,相信之前使用IIS的朋友,在遭受過Nimda等不斷出現的病毒惡夢之後,會不會對其安全性與穩定性產生質疑? 但是,如果您選用的是J2EE技術,那麼在諸多遵循標准的廠商所提供的應用程序服務器中,您可以選擇最符合您需要,成本最低,而且又認為最佳的平台。 您可以到http://www.soapware.org/Directory/4/implementations查詢既有的SOAP實作品,看看有多少是針對Java所設計的實作品。 總而言之,我們就平台的穩定性,服務器的穩定性,以及產品的多樣性這三方面來考慮,J2EE徹底擊敗.NET技術。 下列的技術都是已為業界所采用,而且也是通往Web Services的最佳途徑: - 提供Web Services的人員使用自己的程序語言、組件與平台來開發、連接與布署Web Services。 - 提供Web Services的人員以WSDL (Web Services Description Language)定義Web Services。WSDL文件可以讓其它人知道Web Services的功用。 - 提供Web Services的人員以UDDI (Universal Description, Discovery, and Integration6)將Web Services注冊。 UDDI讓程序開發人員可以布署Web - 使用者透過UDDI登錄來找尋Web Services。 - 使用者的程序會結合Web Services,並透過SOAP (Simple Object Access Protoco) 或XML-RPC來呼叫Web Services。XML-RPC或SOAP 在HTTP協議上提供一 份XML格式的訊息傳遞。這是所有Web Services共同的溝通協議。 請注意,上述的機制是建置Web Services並讓它運作的一種途徑。雖然有其它方法可以做到,但我們認為這些技術是最重要且將廣為業界采用的一種。 由此可知,實際上我們尚未有一致的方式來建置Web Services,建構上仍然有許多的困難需要克服。以SOAP、ebXML以及服務串流的規格來說,眾家廠商意見各異了。而且SOAP最常被宣傳的: 與程序語言無關,與特定平台無關這兩項特點,會在您嘗試著使用Apache SOAP與Microsoft SOAP Toolkit產生的Web Services進行溝通時,徹底地粉碎(譯注:這是因為xsi:type屬性在實作上有分歧的關系)。除了是對於實作上細節的理解有差異之外,更重要的原因是因為有人刻意地破壞標准。 即使如此,對於Web Services來說,仍然有不少好消息: - 很難得的,所有的廠商,包括Sun Microsystems與Microsoft等大廠,均同意SOAP、 WSDL以及UDDI 是有潛力的好產品,因此他們將在未來的產品中進 - 所有意見不一的廠商都團結在一起,共同為建立Web Services的標准並廣植 Web Services的應用而努力。
IV. 使用J2EE 以及Microsoft.NET來開發Web Services 如果您想開發一個有用的網絡服系統。所面臨的挑戰並非表面上所看如此簡單。您的Web Services必須可靠、普及、不容易出錯、有彈性而且必須讓大家願意接受。這些嚴格的要求並不亞於任何企業等級的商業應用程序。 J2EE 以及 .NET 是現有用來開發服務器端企業級應用程序的技術延伸。這些技術的早期版本並非專門用來開發Web Services用。如今Web Services已經成為趨勢,於是兩大陣營也隨之調整各自平台的解決方案,因此您現在已經可以使用這些技術來開發Web Services了。J2EE 以及 .NET的共通願景就是希望能達成開發Web Services的基礎工程,例如:跨平台的XML溝通、負載平衡以及交易。與其自己重新撰寫這些基礎工程,倒不如在可提供這些服務的平台上撰寫應用程序。 但是,當開發到一定規模的應用程序時,會產生一定的復雜度,這個時候就必須有開發工具的輔助,如果您選用了其中一種平台,那麼您可以選用的工具如下表所示: 開發新一代Web Services的開發工具: J2EE平台的工具有 : • JBuilder (Borland) • Forte for Java (Sun) • WebLogic Workshop (BEA) • JDeveloper (Oracle) • VisualAge for Java (IBM) • Visual Cafe (WebGain) .NET平台 只有Visual Stdio.NET 從這裡可以看出,您可以在您既有的企業解決方案提供廠商那邊,取得最佳的工具和解決方案,而且從免費的基本版本到付費的專業版本都有,各人可以根據不同的需求來做最佳的選擇,而不是只能尋求單一廠商所提供的工具和解決方案。
V. J2EE Java 2 Platform, Enterprise Edition (J2EE) 被設計成專門用