十 二年之前,,Sun公司默默宣布了一種可以使網(wǎng)頁(yè)更動(dòng)感和更富有活力的編程語(yǔ)言及其環(huán)境。當(dāng)然,,目前Java語(yǔ)言已經(jīng)成為了一種普遍使用的工具,,不僅僅用于 為網(wǎng)頁(yè)添加更多的動(dòng)態(tài)效果,還包括創(chuàng)建和生成這些網(wǎng)頁(yè)(透過(guò)servlets和JSP技術(shù)),,提供一個(gè)用于事務(wù)性過(guò)程和商業(yè)邏輯的平臺(tái)(透過(guò)EJB技術(shù),, 即Enterprise Java Beans),訪問(wèn)消息系統(tǒng)(透過(guò)JMS技術(shù),即Java Message Service),,訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù)(透過(guò)JDBC技術(shù)),,甚至于訪問(wèn)不同的主機(jī)(透過(guò)Java Connector API技術(shù))。但這個(gè)故事還遠(yuǎn)遠(yuǎn)沒(méi)有終結(jié),,每天,,以Java為中心的社區(qū)通過(guò)開(kāi)源的努力和大量的項(xiàng)目變得越來(lái)越強(qiáng)大,甚至于官方的Java平臺(tái)也不斷地通 過(guò)Java Community Process這樣一個(gè)開(kāi)放性的國(guó)際組織來(lái)進(jìn)行構(gòu)建,、成長(zhǎng)和對(duì)自身進(jìn)行增強(qiáng),。 六年之前,微軟大張旗鼓地宣布了一系列嶄新的編程語(yǔ)言和應(yīng)用于各種開(kāi)發(fā)場(chǎng)景下的環(huán)境,。在此之后,,.NET已經(jīng)出現(xiàn)了兩個(gè)發(fā)行版本。每一個(gè)主要的發(fā)行 版本都會(huì)對(duì)運(yùn)行時(shí)和三款主流的語(yǔ)言(C#,,C++和Visual Basic)產(chǎn)生巨大的改變,,同時(shí)也會(huì)為客戶層和服務(wù)層帶來(lái)許多新特性,如事務(wù)的支持(System.Transactions),,泛型的支持(同時(shí)支持 C#和Visual Basic),,目錄服務(wù)支持,管理(WMI)等等,。這個(gè)故事也遠(yuǎn)遠(yuǎn)沒(méi)有終結(jié),,微軟甚至計(jì)劃將一系列新技術(shù)應(yīng)用到其下一個(gè)發(fā)行版本中(NetFX 3.0, 隨Vista發(fā)行)。一個(gè)急速增長(zhǎng)的社區(qū)也依然在不斷擴(kuò)大,,并用開(kāi)源和商業(yè)的新項(xiàng)目以及新構(gòu)想增強(qiáng)了.NET環(huán)境,。 在這幾年中,,在Java和.NET環(huán)境之間產(chǎn)生了大量的討論,大多數(shù)的討論都強(qiáng)烈地傾向于兩者中的一方,,這幾乎沒(méi)有產(chǎn)生任何作用,。畢竟,諸如“我的 編程語(yǔ)言比你的編程語(yǔ)言要好”或者“我的平臺(tái)比你的平臺(tái)運(yùn)行得要快”,,乃至于“你們很遜”這類的話題或許在雞尾酒會(huì)和小組會(huì)議上是一個(gè)你來(lái)我往的頗為有趣 的話題,,但是這些話題對(duì)于引導(dǎo)一個(gè)有意義的軟件開(kāi)發(fā)是沒(méi)有任何成效可言的。在經(jīng)歷了立場(chǎng)和姿態(tài)上的對(duì)立以及互相攻擊以后,,當(dāng)嘗試使.NET和Java共同 工作和對(duì)此進(jìn)行有意義的討論時(shí),,這些對(duì)話卻又轉(zhuǎn)向了一些諸如“Web服務(wù)”、“企業(yè)服務(wù)總線”或“面向服務(wù)的體系架構(gòu)”等繁雜的詞匯中,,而沒(méi)有任何實(shí)在的 展示,。當(dāng)越過(guò)這些高層的討論去關(guān)注底層的細(xì)節(jié)時(shí),對(duì)話中經(jīng)常出現(xiàn)的又是SOAP,、WSDL和WS協(xié)議,,或者通過(guò)消息交換數(shù)據(jù),或者在CLR中實(shí)現(xiàn)JVM,, 或者在JVM中實(shí)現(xiàn)CLR等,。 換句話說(shuō),來(lái)解釋這些流行的用語(yǔ)即“你大步邁進(jìn)并討論這如何去解決這個(gè)問(wèn)題,,但是卻從來(lái)沒(méi)有真正得討論為什么你要這樣做” 從歷史的角度看,,關(guān)于Java/.NET互操作性的討論降低到了體系結(jié)構(gòu)的次要位置,僅次于“按需”主題——也就是說(shuō)這種互操作的發(fā)生僅僅應(yīng)該在一個(gè)企業(yè) 同時(shí)使用.NET和Java系統(tǒng),,并且需要在它們之間進(jìn)行對(duì)話時(shí),。盡管如此,在這個(gè)討論中關(guān)于動(dòng)機(jī)問(wèn)題的討論被忽視了——為什么開(kāi)發(fā)人員想要同時(shí)使用 Java和.NET,?盡管可能不需要這樣做,。 從表面上看來(lái),這是一個(gè)危險(xiǎn)的主題,。因?yàn)椴皇怯捎趯?duì)某個(gè)平臺(tái)“不能”做什么的暗示而招致完全的義憤,就是任何關(guān)于某個(gè)平臺(tái)可能在某方面“優(yōu)于”另一 個(gè)平臺(tái)的說(shuō)法都會(huì)導(dǎo)致偏愛(ài)或無(wú)知的譴責(zé),。(這甚至忽略了一個(gè)基本的問(wèn)題,,即指出這里的“優(yōu)于”的定義是什么)。與其無(wú)視或躲避這個(gè)話題,,不如直接面對(duì)它,。 這樣的譴責(zé)和批評(píng)是不應(yīng)該被忽略的,事實(shí)上我們應(yīng)該歡迎它們,,并將其作為一個(gè)大討論的一部分,,這個(gè)大討論將解答何時(shí)、何地以及如何做出這些決策。盡管這 樣,,我們認(rèn)為開(kāi)放式的討論,,時(shí)刻檢查思想,允許讀者形成自己的,、批判的觀點(diǎn)依然非常重要,。 本文作為關(guān)于Java/.NET互操作性主題系列文章中的一篇,也正是基于此觀點(diǎn)進(jìn)行的,。 * * * 當(dāng)在大腦中思索什么是Java和.NET都做的好的方面時(shí),,有好幾個(gè)場(chǎng)景會(huì)浮現(xiàn)于我們的腦海并值得我們向前探索。 Office客戶端,,J2EE服務(wù)器微軟的Office產(chǎn)品,,無(wú)論好壞,即使在有電腦的歷史以來(lái)不是最流行(這里所說(shuō)的流行是指安裝在更多的電腦主機(jī)上)的軟件平臺(tái),,也必然是最流行的 軟件平臺(tái)之一,。目前,Office產(chǎn)品已經(jīng)迎來(lái)了第二個(gè)十年,,作為一個(gè)強(qiáng)大的平臺(tái),,用戶可以輸入,維護(hù)和查看廣泛的,、不同來(lái)源的數(shù)據(jù),。對(duì)于那些目前依賴于 J2EE后臺(tái)服務(wù)器的用戶來(lái)說(shuō),既然有相當(dāng)數(shù)量的數(shù)據(jù),,那么將這些數(shù)據(jù)轉(zhuǎn)入Office平臺(tái)來(lái)實(shí)現(xiàn)更加簡(jiǎn)單的管理和考察將是一個(gè)很好的考量,。更讓人感興趣 的是來(lái)考察Office平臺(tái)利用過(guò)程無(wú)關(guān)的通信工具、實(shí)現(xiàn)利用Spring或其他輕型Java容器中業(yè)已實(shí)現(xiàn)的商業(yè)邏輯的方式,。 在2006年8月發(fā)行的MSDN雜志發(fā) 表了數(shù)篇關(guān)于Office開(kāi)發(fā)的文章(并為此強(qiáng)烈建議任何對(duì)于Office編程能力不熟悉的人將此作為背景材料),,在以“使用Office作為一個(gè)開(kāi)發(fā)平 臺(tái)的須知”為題的一篇文章中,用一個(gè)圖表展示了Office平臺(tái)的全部能力,。這里我們沒(méi)有卷帙浩繁地列出完全名單,,而是用一塊區(qū)域簡(jiǎn)單列出Office可 以與Java平臺(tái)進(jìn)行良好互動(dòng)的幾點(diǎn)特性:
Office同樣為那些使用了綱領(lǐng)性元素的組件和文檔提供了一些部署的支持,,因此在很多情況下,,在這些組件內(nèi)進(jìn)行功能的升級(jí)就像到一個(gè)共享下載服務(wù) 器發(fā)布一些東西一樣簡(jiǎn)單。顯然,,一個(gè)主要的考慮是使用Office將出現(xiàn)許可費(fèi)帶來(lái)的成本,,但幸運(yùn)的是,大多數(shù)商業(yè)環(huán)境應(yīng)該都已經(jīng)部署了Office環(huán) 境,,減少了顯著增加的費(fèi)用,。 Spring和J2EE容器中的Windwos工作流Windows工作流是微軟在“NetFX 3.0”發(fā)行版本中的發(fā)行的一個(gè)新框架,它將隨著Windows Vista操作系統(tǒng)被同時(shí)安裝,。工作流的目的是提供一個(gè)方法,,這個(gè)方法使得商業(yè)過(guò)程功能——或許是一個(gè)小規(guī)模的應(yīng)用,比如網(wǎng)站中網(wǎng)頁(yè)的交互,,或許是一個(gè)大 規(guī)模的應(yīng)用,,比如簽署一個(gè)保險(xiǎn)協(xié)議的主要過(guò)程——可以被非開(kāi)發(fā)人員創(chuàng)建、查看,、跟蹤和編輯等,。工作流的開(kāi)發(fā)人員(或者是傳統(tǒng)的.NET開(kāi)發(fā)人員,或者是領(lǐng) 域?qū)<遥┦褂靡粋€(gè)類似流圖表工具的環(huán)境設(shè)計(jì)工作流,,這些工作流由一些活動(dòng)組成,,這些活動(dòng)表示過(guò)程當(dāng)中的一個(gè)個(gè)邏輯步驟。這個(gè)環(huán)境將會(huì)隨Visual Studio一起被普遍提供,,但是也可以在一些其他自定義的應(yīng)用程序中存在,,同樣也允許公司將工作流的設(shè)計(jì)者完全剝離出傳統(tǒng)的程序員工具之外。工作流設(shè)計(jì) 的結(jié)果就是一個(gè)格式化的XML文檔或代碼,,然后使用工作流編譯器將其編譯成一個(gè).NET類,,這個(gè)類將由工作流運(yùn)行時(shí)處理,運(yùn)行于各種環(huán)境之中,,包括 ASP.NET,,控制臺(tái)應(yīng)用程序或者是一個(gè)擁有圖形用戶接口的應(yīng)用程序等,。工作流可以是串行的或是由外界狀態(tài)改變驅(qū)動(dòng)的,甚至可以跨越很長(zhǎng)的時(shí)間間隔,。 從事實(shí)上看,,工作流運(yùn)行時(shí)是被設(shè)計(jì)為易用于各種應(yīng)用環(huán)境和上下文之中,一個(gè)最直接的想法就是使用一些連接技術(shù)將工作流應(yīng)用于Spring(或其他 J2EE容器)中,,比如可能是工作流運(yùn)行時(shí)支撐Spring容器創(chuàng)建自定義的活動(dòng),,以用于調(diào)用Spring中的Bean類執(zhí)行商業(yè)功能,也可能是在 Spring的Bean中支撐工作流運(yùn)行時(shí),,來(lái)執(zhí)行對(duì)Spring接受的遠(yuǎn)程調(diào)用進(jìn)行響應(yīng)的功能,。特別是在第二種情況下,終端用戶可以設(shè)計(jì)業(yè)務(wù)過(guò)程并將其 執(zhí)行于傳統(tǒng)的企業(yè)服務(wù)器中,。同樣,,工作流的狂熱愛(ài)好者已經(jīng)描述了工作流可以如何被應(yīng)用,以來(lái)結(jié)構(gòu)化ASP.NET應(yīng)用程序中網(wǎng)頁(yè)的導(dǎo)航,,這樣一種方式不同 于Structs的action映射文件,。在servlet容器中支撐工作流來(lái)完成同樣的目標(biāo)是另一種可行的辦法,同樣也在servlet和JSP網(wǎng)頁(yè)之 間提供了一種可見(jiàn)的“流”,,而非目前占據(jù)此位置的晦澀的XML語(yǔ)法,。 WPF客戶端到Java服務(wù)本節(jié)將會(huì)描述最后一個(gè),但肯定不是最不重要的場(chǎng)景,而且它有可能成為將.NET和Java在一起使用時(shí)最富有挑戰(zhàn)的場(chǎng)景:在Java強(qiáng)大和可擴(kuò)展的 服務(wù)提供的數(shù)據(jù)模型之上(可能是Spring,EJB,,或一些組合),,使用新的WPF技術(shù)來(lái)提供一個(gè)豐富而強(qiáng)大的用戶界面。WPF所宣稱的基于xaml的 編程模型,,標(biāo)志著相較于近一個(gè)時(shí)期以來(lái)典型的UI編程模型的重大改變,,而且在許多方面都讓人很容易地產(chǎn)生復(fù)雜的用戶界面,這種技術(shù)超出了Swing或 SWT目前所能夠?qū)崿F(xiàn)的,。另外,由于xaml是一種基于文本的格式,,因此可以動(dòng)態(tài)生成XAML并將其下載到客戶端執(zhí)行,就像現(xiàn)在的HTML一樣,。 WPF前臺(tái)與Java后臺(tái)之間通過(guò)WCF進(jìn)行對(duì)話將可能稱為一個(gè)典型的場(chǎng)景,。WCF是微軟的新的通信管道,使所有的分布式通信編程模式成為一個(gè)單一 的架構(gòu),。除了支持許多最新的WS-*規(guī)范,,WCF還通過(guò)多種途徑提供了用于通信的豐富的可擴(kuò)展性模型,包括通過(guò)REST格式(有時(shí)稱作普通XML,,或 POX),,甚至可能使用其他的通信媒介,比如UDP。Sun通過(guò)其Tango項(xiàng)目使得這個(gè)辦法更加可行,,作為一種特定的設(shè)計(jì)目標(biāo),,Tango項(xiàng)目可以與 WCF無(wú)縫集成,。 * * * 不言而喻,,以上這份列表是很難列出Java和.NET之間進(jìn)行可能的互操作的所有場(chǎng)景的。事實(shí)上,為了讓這篇文章處于一個(gè)可控的長(zhǎng)度,,在這兒我們忽略了下面幾種可能性:
等等,等等,等等。 聽(tīng)起來(lái)好像這一切都是牽強(qiáng)和不合理的煽情,,就像在腦海里浮現(xiàn)出那幫擁有大量時(shí)間但卻沒(méi)有常識(shí)的營(yíng)銷人員所作的事,。當(dāng)Java擁有公式引擎時(shí)何必使用 Excel?當(dāng)我們擁有JAX-WS時(shí)何必使用WCF?當(dāng)我們擁有Java3D時(shí)何必使用WPF,?讓我們坦然的面對(duì)如下事實(shí):.NET能做的任何事,, Java都可以做到,反之亦然,。免得我們因?yàn)槠珢?ài)某項(xiàng)技術(shù)被指責(zé),。但我們也尤其須要坦白承認(rèn)的一個(gè)事實(shí)是:兩種平臺(tái)各有特殊的興趣領(lǐng)域,并且它們?cè)诟髯缘?領(lǐng)域做得都很好,。開(kāi)發(fā)人員愿意拋開(kāi)立場(chǎng)偏見(jiàn),,進(jìn)行開(kāi)明的討論,并發(fā)揮各自平臺(tái)的優(yōu)勢(shì)以導(dǎo)致一些更大的利益,?;蚴菍挿旱匾每?馬克斯的一句名言,“對(duì)每 一個(gè)項(xiàng)目而言,應(yīng)該根據(jù)自己的需要充分發(fā)揮其所需平臺(tái)的能力,?!保?From each platform, according to its abilities, to each project, according to its needs.) 查看英文原文:Java, .NET, But Why Together?譯者簡(jiǎn)介:張立,博士研究生,,喜歡新技術(shù),,新思想。經(jīng)歷了一些企業(yè)級(jí)軟件開(kāi)發(fā)后,,逐漸將興趣轉(zhuǎn)向C#和JAVA 的企業(yè)級(jí)應(yīng)用,。同時(shí)對(duì)動(dòng)態(tài)語(yǔ)言的發(fā)展非常關(guān)注,,喜歡用Python進(jìn)行一些計(jì)算,對(duì)Ruby也傾注了一定的精力,。大部分時(shí)間在學(xué)校從事一些理論研究,,工作 之余關(guān)注開(kāi)源軟件的進(jìn)展。 |
|
來(lái)自: ShangShujie > 《.net》