作者 Ted Neward譯者 張立楠 發(fā)布于 2007年7月13日 上午2時(shí)19分
- .NET,
- Java
- 主題
- Java+.NET集成,
- 互操作,
- 故事和案例分析
大概五年前,微軟發(fā)布了.NET Framework,這是Java/J2EE和.NET平臺(tái)上最流行的幾個(gè)“專(zhuān)家級(jí)”產(chǎn)品之一。從那以來(lái),我一直在講Java/.NET的協(xié)調(diào)性。無(wú)論我在哪里講,都有一個(gè)出現(xiàn)頻率極高的問(wèn)題(來(lái)自我的朋友,參會(huì)人員,咨詢(xún)客戶(hù)等等)。
問(wèn):說(shuō)實(shí)話(huà),我不會(huì)傳出去的。你最喜歡哪一個(gè)?是Java還是.NET?
我并不偏好哪一個(gè),兩個(gè)我都同樣喜歡。說(shuō)實(shí)話(huà)這個(gè)答案不太容易令人信服。所以我通常用得最多的回答是下面這個(gè)。
答:看情況。
問(wèn)題背景的變化
我們的業(yè)界已經(jīng)被深深地分成了兩邊,核心問(wèn)題是:“你使用哪種平臺(tái)?你是Java開(kāi)發(fā)者,還是.NET開(kāi)發(fā)者?”從這個(gè)問(wèn)題的相關(guān)討論來(lái)看,有人可能會(huì)認(rèn)為這是目前最主要的話(huà)題,其中往往伴隨著激烈的爭(zhēng)吵和辯論。暫且不管傳統(tǒng)的“征用權(quán)”與“皇權(quán)侵略”的爭(zhēng)論,以及那些主流媒體認(rèn)為與伊拉克和東北非的動(dòng)蕩同樣重要的各種文章。如果計(jì)算其中情感的力量,世界上最重要的問(wèn)題莫過(guò)于你編程時(shí)主要使用Eclipse還是Visual Studio。
諷刺而有趣的是這些爭(zhēng)論毫無(wú)重點(diǎn)。Java和.NET雖然有些方面存在沖突,實(shí)際上它們是兩種截然不同的平臺(tái),存在各自的優(yōu)點(diǎn)和缺點(diǎn)。兩種平臺(tái)都是從各自所在的社區(qū)和文化中開(kāi)發(fā)(或產(chǎn)生)出來(lái)的,因此它們通常針對(duì)不同的問(wèn)題,使用不同的方法和實(shí)現(xiàn)手段。
而且近年來(lái)它們本身已經(jīng)開(kāi)始出現(xiàn)分歧。以前的各種會(huì)議上,我可以說(shuō),人們選擇Java或者.NET更多是出于文化因素,“任何你通過(guò)其中一個(gè)可以做到的事,都可以通過(guò)另一個(gè)在同樣的工作量下實(shí)現(xiàn)”。現(xiàn)在不是這樣了。以前說(shuō).NET 1.0/1.1與Java相當(dāng)是可以的,而現(xiàn)在它們已經(jīng)開(kāi)始不同的發(fā)展方向,實(shí)現(xiàn)它們獨(dú)有的創(chuàng)新和用戶(hù)群的反饋。Java社區(qū)目前致力于各種語(yǔ)言與平臺(tái)之間的合作,比如說(shuō)與微軟最新版本.NET 3.0,兩個(gè)截然不同的平臺(tái)間進(jìn)行的標(biāo)準(zhǔn)統(tǒng)一。于是關(guān)于Java和.NET的問(wèn)題開(kāi)始有微妙的轉(zhuǎn)變,人們不再問(wèn)“你喜歡哪個(gè)平臺(tái)?”,而開(kāi)始問(wèn)一個(gè)更有趣而且有力的問(wèn)題:“我怎樣才能把兩個(gè)平臺(tái)結(jié)合使用?”
完全列出可用的將兩個(gè)豐富的平臺(tái)進(jìn)行整合的方法超出了本文的范圍。我們可以來(lái)看幾個(gè)比較吸引人的方式,并且在理念和代碼上體會(huì)一下。
方案:從WPF到WCF,再到Java Web Service
關(guān)于Java/.NET的協(xié)調(diào)性,最常用的例子大概就是廣泛使用的Web Service,通常使用Windows表示層編程框架(WPF)或WinForms界面,結(jié)合Windows分布式編程框架(WCF)將數(shù)據(jù)實(shí)際傳送到另一端以某種Java容器形式保存的Java Web Service,可能是WebLogic,WebSphere,Spring,Tomcat,等等。搭建Web Service的酸甜苦辣有許多文章進(jìn)行了描寫(xiě),所以在此不必多費(fèi)筆墨。但如果將Web Service作為CORBA或.NET遠(yuǎn)程控制(或者說(shuō)分布式對(duì)象技術(shù))的擴(kuò)展,會(huì)大量消耗額外的工作和精力。使用恰當(dāng)?shù)姆?wù),能夠創(chuàng)建比希望換掉的分布式對(duì)象工具更松散的耦合,尤其是能夠更輕松地突破我們所討論的技術(shù)壁壘。WCF和JAX-WS的核心觀念都是“傳輸消息,而非對(duì)象”,只有表面層的一些API使它們看上去比較像RMI或.NET遠(yuǎn)程控制。因此在搭建Web Service時(shí)可以利用它們良好的協(xié)調(diào)性。本方案最明顯的優(yōu)點(diǎn)是每種技術(shù)都集中于它所專(zhuān)長(zhǎng)的部分。前端界面使用平臺(tái)獨(dú)有的技術(shù),因此可以發(fā)揮全部性能;而后端使用的開(kāi)發(fā)平臺(tái)則因性能和可測(cè)量性著稱(chēng)。
方案:SQL Server服務(wù)代理與JSP
自從SQL Server 2005發(fā)布以來(lái),一種新的消息處理方式誕生了,這就是SQL Server服務(wù)代理,用于搭建基于消息的通訊程序。這種方式基于SQL Server的數(shù)據(jù)引擎實(shí)現(xiàn)(服務(wù)代理中的隊(duì)列均為高效數(shù)據(jù)表,頂層以簡(jiǎn)單的外殼包裝),并且具有足夠的強(qiáng)壯性,能夠用于事務(wù)型和有序傳輸保證。服務(wù)代理為開(kāi)發(fā)人員提供強(qiáng)制消息平臺(tái),尤其是在那些已經(jīng)有數(shù)據(jù)庫(kù)的數(shù)據(jù)中心里。然而使用Java訪(fǎng)問(wèn)SQL Server服務(wù)代理和訪(fǎng)問(wèn)其它JDBC數(shù)據(jù)庫(kù)同樣簡(jiǎn)單。Java應(yīng)用程序,——無(wú)論是客戶(hù)端程序,還是服務(wù)器處理引擎,——都可以通過(guò)微軟SQL Server 2005 JDBC驅(qū)動(dòng)(可以在MSDN上免費(fèi)下載)訪(fǎng)問(wèn)服務(wù)代理,或者向服務(wù)代理程序發(fā)送信息,以及必要的時(shí)候接收來(lái)自服務(wù)代理的信息。
在本示例中,一個(gè)虛擬的公寓大樓需要在網(wǎng)上生成維護(hù)人員的工作順序,以便住戶(hù)不必打電話(huà)要求辦公室來(lái)安排傳票(從而花費(fèi)辦公室人員三倍的寶貴時(shí)間來(lái)填寫(xiě)紙質(zhì)表格;事實(shí)上辦公室人員很討厭對(duì)住戶(hù)的要求視而不見(jiàn))。
因此,解決方案提供者構(gòu)建了一個(gè)簡(jiǎn)單而輕便的網(wǎng)絡(luò)系統(tǒng),其中只有兩個(gè)JSP頁(yè)面:一個(gè)供住戶(hù)將傳票放入服務(wù)中,另一個(gè)供維護(hù)人員收集傳票并瀏覽。系統(tǒng)的目的很簡(jiǎn)單,第一個(gè)頁(yè)面收集傳票信息,包括問(wèn)題描述,公寓本身,住戶(hù)姓名和電話(huà)等,然后將信息排入ServiceBroker的隊(duì)列中,等待維護(hù)部門(mén)訪(fǎng)問(wèn)第二個(gè)JSP頁(yè)面來(lái)獲取待處理的任務(wù)列表。
至于實(shí)現(xiàn)方式,從Java的角度來(lái)說(shuō),使用ServiceBroker和使用其它以JDBC為驅(qū)動(dòng)的數(shù)據(jù)庫(kù)并沒(méi)有很大區(qū)別。要把消息送入隊(duì)列中,只需要一個(gè)對(duì)SQL Server實(shí)例的JDBC調(diào)用,就像傳統(tǒng)方式寫(xiě)一個(gè)INSERT或者UPDATE語(yǔ)句一樣:
獲取消息的方式更為直接,使用SQL Server的RECEIVE關(guān)鍵字:
或許會(huì)有許多人提出疑問(wèn),這里為何使用SQL Server服務(wù)代理,而不使用對(duì)Java更加友好的JMS實(shí)現(xiàn)方式,比如開(kāi)源的ActiveMQ或商業(yè)的SonicMQ。要回答這個(gè)問(wèn)題,可能會(huì)回到以往Java/.NET兼容性問(wèn)題中常用的答案上:“我們這樣做是迫不得已。”更有說(shuō)服力的答案是:為了“會(huì)話(huà)”。ServiceBroker提供了JMS標(biāo)準(zhǔn)中前所未有的會(huì)話(huà)功能。與事務(wù)型消息傳遞相類(lèi)似,會(huì)話(huà)表現(xiàn)為往返傳遞的一系列信息,每個(gè)會(huì)話(huà)都有唯一的標(biāo)識(shí)符。本質(zhì)上而言,這是連續(xù)RPC調(diào)用和獨(dú)立的單獨(dú)路徑信息的結(jié)合。它提供了消息通訊系統(tǒng)中通常難以具備的可靠性和健壯性。在我們上面的虛擬示例中,會(huì)話(huà)的使用有些隨意,它在長(zhǎng)時(shí)間運(yùn)行的商業(yè)流程中也同樣可以非常強(qiáng)大。上面代碼中的標(biāo)識(shí)符conversationId在每個(gè)ServiceBroker實(shí)例中是唯一的,標(biāo)識(shí)本次用戶(hù)交互中消息的集合(本例中只有一個(gè))。
另一個(gè)可能出現(xiàn)的問(wèn)題是為何使用JSP來(lái)編寫(xiě)網(wǎng)頁(yè)界面,而不使用ASP.NET; 對(duì)于非Windows平臺(tái)而言,這仍然是個(gè)“迫不得已”的選擇。但JSP有其獨(dú)到之處,就是用于生成美觀界面的豐富的工具和預(yù)編譯組件。如果我們討論所有的Java/Web space工具,比如Struts, Seam, WebWork, JSF, Google Web Toolkit等等,都使Web開(kāi)發(fā)體驗(yàn)與傳統(tǒng)ASP.NET的拖放方式截然不同。(對(duì)不熟練的Web開(kāi)發(fā)人員,拖放方式或許很適用,但熟練者都有自己喜歡的方式,并且覺(jué)得ASP.NET的設(shè)計(jì)與他們的方式相沖突。)關(guān)于SQL Server服務(wù)代理更詳細(xì)的討論,請(qǐng)見(jiàn)勃切明與蘇利文的《SQL Server 2005開(kāi)發(fā)人員指南》。關(guān)于Servlet和JSP更詳細(xì)的討論,請(qǐng)見(jiàn)杰森?弗克納和凱文?瓊斯的《Java Servlet與JSP》。關(guān)于JDBC更詳細(xì)的討論,請(qǐng)見(jiàn)費(fèi)舍爾、艾利斯和布魯斯的《JDBC教程與API參考,第三版》。
方案:Office與Spring
狂熱的開(kāi)源分子聽(tīng)到這一方案可能有些難以接受。毫無(wú)疑問(wèn),在過(guò)去10年中,微軟的Office提供了世界上最流行的辦公室生產(chǎn)效率軟件系列。世界上被安裝次數(shù)最多的軟件可能就是Office,其次是Windows本身。
近年來(lái),Java社區(qū)在討論富客戶(hù)端程序,拋棄以往的點(diǎn)擊、等待、閱讀的網(wǎng)絡(luò)模式,尋求更具有交互性的用戶(hù)體驗(yàn)。AJAX實(shí)現(xiàn)了其中的部分功能,代價(jià)是需要編寫(xiě)大量額外的腳本代碼以應(yīng)對(duì)不同的瀏覽器或?yàn)g覽器版本(而有些瀏覽器禁止使用AJAX)。Java社區(qū)中有人將Eclipse富客戶(hù)端平臺(tái)視為解決法寶,有人推崇JavaWebStart, 或者Adobe Flex等等。
最好的富客戶(hù)端應(yīng)該基于終端用戶(hù)機(jī)器上已經(jīng)安裝的軟件。因?yàn)镺ffice是安裝范圍最廣的,尤其是在企業(yè)范圍內(nèi)的機(jī)器,何不利用Office的優(yōu)秀擴(kuò)展接口,將Office用作富客戶(hù)端,在后端使用Java?
為了出版Office對(duì)象模型和使用方法相關(guān)的書(shū)籍,文章,教程和參考文檔,我們不知道已經(jīng)砍伐了多少森林。算上.NET和未使用的COM,Office接口非常復(fù)雜,在此列舉也沒(méi)有意義。本文將集中于Office擴(kuò)展模型之一,智能標(biāo)簽,以及使用XML定義文件來(lái)識(shí)別Office文檔中詞匯(通常是在Excel和Word中使用,不過(guò)PowerPoint和Access也可以使用)并提供下拉菜單供用戶(hù)跳轉(zhuǎn)到某個(gè)網(wǎng)站的智能標(biāo)簽列表。
在這種情況下,虛擬環(huán)境很簡(jiǎn)單:一家在線(xiàn)電子經(jīng)銷(xiāo)商發(fā)現(xiàn)他們的在線(xiàn)寵物商店非常火爆(他們終于解決了通過(guò)與世界各地的寵物商店談判后水路郵遞寵物的問(wèn)題),而他們使用Spring JPetStore范例編寫(xiě)的首頁(yè)現(xiàn)在需要處理各種復(fù)雜的計(jì)算,遵守公司內(nèi)財(cái)務(wù)人員和市場(chǎng)人員提出的商業(yè)規(guī)則。簡(jiǎn)單的訂單都留給首頁(yè)處理,但復(fù)雜一些的訂單將由銷(xiāo)售人員通過(guò)面談或電話(huà)完成。
復(fù)雜的計(jì)算法則需要復(fù)雜的處理語(yǔ)言來(lái)實(shí)現(xiàn),而這正是Excel的用武之地——財(cái)務(wù)人員和市場(chǎng)人員都可以在Excel中使用公式語(yǔ)言來(lái)自己編寫(xiě)法則,——我們要做的下一步是將Excel中的數(shù)據(jù)表格顯示為Spring前端首頁(yè)。此時(shí)第一步只需要從Excel文檔中識(shí)別出訂單和產(chǎn)品號(hào),然后顯示出智能標(biāo)簽將銷(xiāo)售人員指向Spring編寫(xiě)的網(wǎng)站中準(zhǔn)確的頁(yè)面。(進(jìn)一步的改進(jìn)可以在保存數(shù)據(jù)表格時(shí)自動(dòng)下訂單,或者在試圖銷(xiāo)售沒(méi)有庫(kù)存的寵物時(shí)彈出警告信息等。)
用簡(jiǎn)單的XML文件實(shí)現(xiàn)這些,要比使用Java和.NET代碼更加實(shí)用。幸好URL天性靈活,智能列表標(biāo)簽不必介意URL所指向的網(wǎng)站其實(shí)是用Spring編寫(xiě)的。如下所示的智能標(biāo)簽會(huì)每天刷新,隨時(shí)顯示出新的商品ID。(“看啊,孩子們,我們現(xiàn)在有雪貂的庫(kù)存!”)
簡(jiǎn)單來(lái)說(shuō),我們需要建立兩個(gè)智能標(biāo)簽。一個(gè)用來(lái)識(shí)別產(chǎn)品ID(FL-DSH-01等等),另一個(gè)用來(lái)識(shí)別項(xiàng)目ID(EST-16, EST-17等等). 我們只需要在URL中使用ID值來(lái)替換{TEXT}占位符并訪(fǎng)問(wèn)網(wǎng)站。這里的ID編碼很復(fù)雜,但標(biāo)簽中列出的是一個(gè).jsp頁(yè)面——其中的代碼會(huì)向底層數(shù)據(jù)庫(kù)查詢(xún)所有的產(chǎn)品與項(xiàng)目ID,并在獲得新版本列表時(shí)刷新顯示(Office會(huì)自動(dòng)覆蓋舊版本列表,位置在C:\Program Files\Common Files\Microsoft Shared\Smart Tag\Lists directory)。Office會(huì)每5分鐘刷新一次智能標(biāo)簽列表,因?yàn)橹悄軜?biāo)簽列表將自己定義為可更新的(因?yàn)槠渲杏猩鲜龅?updateable> 和標(biāo)簽), 因此它會(huì)每5分鐘進(jìn)行一次更換查詢(xún)(間隔可以在標(biāo)簽中定義). 也就是說(shuō),每當(dāng)新的產(chǎn)品和項(xiàng)目被加入數(shù)據(jù)庫(kù)時(shí),智能標(biāo)簽都會(huì)自動(dòng)更新,而無(wú)需人工操作。
智能標(biāo)簽的能力遠(yuǎn)遠(yuǎn)超出這個(gè)簡(jiǎn)單的例子所展現(xiàn)的。Visual Studio Tools for Office API可以讓.NET開(kāi)發(fā)人員在所需要的智能標(biāo)簽后面編寫(xiě)任意形式的代碼,所以在激活智能標(biāo)簽時(shí)向JPetStore引擎進(jìn)行遠(yuǎn)程調(diào)用(使用Web Service調(diào)用或其它商業(yè)工具,例如JNBridge或者ZeroC’s ICE)來(lái)獲取當(dāng)前庫(kù)存量等操作也完全可以實(shí)現(xiàn)。
智能標(biāo)簽并不是Office整合能力的極限。文檔表格可以通過(guò)自定義為任何Java系統(tǒng)充當(dāng)用戶(hù)界面,Excel的公式語(yǔ)言可以通過(guò)自定義公式進(jìn)行擴(kuò)展(當(dāng)然可以通過(guò)本地JVM使用Java API或者遠(yuǎn)程調(diào)用Java系統(tǒng)),等等。而且方式不止一種——必要的時(shí)候,Word和Excel都可以裝入Eclipse RCP,或者說(shuō),任何一個(gè)COM自動(dòng)對(duì)象都可以這樣使用,而Word和Excel本身的功能仍然完整保留。
其他方案
當(dāng)然,以上并非全部可用方案,只是最近幾次討論和客戶(hù)會(huì)談中想到的一些。其它方案還有:
- 使用連接Java的Cmdlets的PowerShell:PowerShell將在不久的未來(lái)成為Windows上最重要的管理工具,而圍繞它搭建一系列通過(guò)JMX與Java服務(wù)器溝通的Cmdlets簡(jiǎn)直輕而易舉。這樣一來(lái),我們可以非常輕松地建立檢查IIS或其它Java服務(wù)器的狀態(tài)與性能的腳本,并將結(jié)果顯示為美觀的圖表(就像PowerGadgets中cmdlets所顯示的一樣),或者通過(guò)方法調(diào)用打開(kāi)、關(guān)閉系統(tǒng)的部分功能。
- 使用Speech Server的Java:Vista中加入了一些新的語(yǔ)音合成功能,而微軟的Speech Server提供了Java平臺(tái)中從未有過(guò)的強(qiáng)大的語(yǔ)音識(shí)別功能。隨著我們對(duì)殘障人士用戶(hù)的日益關(guān)注,語(yǔ)音和通過(guò)語(yǔ)音與用戶(hù)交互(通過(guò)電話(huà)或者電腦話(huà)筒)將帶來(lái)越來(lái)越高的吸引力。
- 調(diào)用Java的Workflow操作:Windows Workflow具有一個(gè)預(yù)編譯操作,用于調(diào)用Web Service,但如之前所說(shuō),Web Service在特定環(huán)境下有用,卻未必能滿(mǎn)足所有交互要求。自定義操作可以利用其它Java/.NET交互方式與Java組件溝通。
- 內(nèi)置Workflow的Java:Workflow引擎最強(qiáng)大的特性,在于它可以嵌入多種環(huán)境之中,如ASP.NET。當(dāng)然,它也完全可以嵌入Java系統(tǒng),比如Tomcat或Jetty, 從而開(kāi)啟Workflow的“信息工人”訪(fǎng)問(wèn)性,與Java和.NET網(wǎng)絡(luò)應(yīng)用程序連接。
- 與Java交互的Windows Mobile設(shè)備:隨著移動(dòng)設(shè)備世界越來(lái)越火熱,微軟的Windows Mobile平臺(tái)成為使手寫(xiě)軟件能夠在Smartphone等移動(dòng)設(shè)備上運(yùn)行的可選方案之一。現(xiàn)在移動(dòng)設(shè)備越來(lái)越普及,IT企業(yè)都希望把它們與自己的各種環(huán)境相整合,其中自然包括Java。有時(shí)這種通訊通過(guò)Web Service完成,但有時(shí)需要更加有針對(duì)性的通訊手段,比如使用商業(yè)工具JNBridge Pro等ZeroC’s ICE。
越來(lái)越多的開(kāi)發(fā)人員開(kāi)始意識(shí)到結(jié)合使用.NET和Java的優(yōu)勢(shì),因此越來(lái)越多的方案將得到實(shí)施。Java和.NET社區(qū)都在進(jìn)行更多的創(chuàng)新,因此雙方都會(huì)更加開(kāi)放而誠(chéng)懇地考慮如何更好地解決客戶(hù)的問(wèn)題。畢竟最后不論你喜歡哪種技術(shù),我們的目的都是一個(gè):為客戶(hù)提供解決方案。
關(guān)于作者
Ted Neward是Neward & Associate公司的主要負(fù)責(zé)人,該公司是致力于使用Java、.NET、XML及其它必要工具的企業(yè)系統(tǒng)的咨詢(xún)公司。他從1991年起開(kāi)始使用C++,從1997年起開(kāi)始使用Java,從2000年起開(kāi)始使用.NET。他兼任PluralSight的.NET講師,獨(dú)立教授Java,在世界Java和.NET社區(qū)中的各種會(huì)議上發(fā)言,為MSDN、InfoQ和TheServerSide撰寫(xiě)文章,并著有《果殼中的C#》,《SSCLI本質(zhì)》與《有效的企業(yè)級(jí)Java》等書(shū)籍。這些信息記錄于網(wǎng)站http://www.tedneward.com。
附錄:主要角色
需要注意,本文的讀者通常對(duì)兩種技術(shù)中的一個(gè)比較熟悉,而不是都熟悉。因此,下面將列出兩種平臺(tái)的主要構(gòu)成。這里并不是要對(duì)每種組件進(jìn)行介紹,或者進(jìn)行詳細(xì)的列舉。讀者可以通過(guò)文末的參考文獻(xiàn)尋找更多信息。
Java:
- Java 5企業(yè)版:最近由上一個(gè)名字“Java2企業(yè)版”更改而來(lái),通常被簡(jiǎn)稱(chēng)為J2EE。該標(biāo)準(zhǔn)是總合性標(biāo)準(zhǔn),覆蓋了許多其它企業(yè)級(jí)標(biāo)準(zhǔn)。雖然不太準(zhǔn)確,許多人將J2EE與EJB同等使用。
- Enterprise JavaBeans (3.0):EJB是描述軟件組件尋求生命周期,布署連接與分布式事務(wù)管理的容器標(biāo)準(zhǔn)。可以將EJB視為事務(wù)處理框架系統(tǒng)的邏輯Java后續(xù)版本。
- JDBC (4.0):標(biāo)準(zhǔn)Java調(diào)用層對(duì)關(guān)系數(shù)據(jù)庫(kù)API接口的實(shí)現(xiàn)。不同的廠(chǎng)商有不同的“提供者”(驅(qū)動(dòng))來(lái)實(shí)現(xiàn)JDBC API,使開(kāi)發(fā)人員與實(shí)際的數(shù)據(jù)庫(kù)實(shí)現(xiàn)方式隔離(理論上屬于松散耦合)。
- Servlets (2.5):Servlet標(biāo)準(zhǔn)描述了布署用于搭建動(dòng)態(tài)HTTP頁(yè)面的軟件組件的標(biāo)準(zhǔn)。一個(gè)Servlet實(shí)質(zhì)上是一個(gè)Java類(lèi)及擴(kuò)展的特殊接口。
- Java Server Pages (2.2):JSP頁(yè)面是針對(duì)輸出的創(chuàng)建Servlet的方式,與ASP或ColdFusion類(lèi)似。JSP文件會(huì)被解釋為Java源文件(servlets)并進(jìn)行編譯。
- 遠(yuǎn)程方法調(diào)用:RMI是Java版本的對(duì)象遠(yuǎn)程過(guò)程調(diào)用(ORPC)堆棧。RMI有兩種,一種使用本地Java傳輸格式,稱(chēng)為“RMI/JRMP”;另一種使用OMG的CORBA傳輸格式,稱(chēng)為“RMI/IIOP”。官方推薦的J2EE系統(tǒng)使用RMI/IIOP, 但實(shí)際使用更廣的是RMI/JRMP。
- Java信息服務(wù)(1.1):JMS是對(duì)任意Java平臺(tái)消息服務(wù)(不是指電子郵件)的標(biāo)準(zhǔn)訪(fǎng)問(wèn)API。
- JavaMail:JavaMail是對(duì)任意電子郵件服務(wù)(SMTP, POP3, IMAP, and so on)的標(biāo)準(zhǔn)訪(fǎng)問(wèn)API。
- Java命名與目錄接口:對(duì)任意提供命名與/或目錄服務(wù),比如LDAP的標(biāo)準(zhǔn)訪(fǎng)問(wèn)API。
- Java WebStart:通過(guò)HTTP URL本地調(diào)用Java程序并存儲(chǔ)在客戶(hù)端機(jī)器上以備將來(lái)使用(必要時(shí)可以脫機(jī)使用)的布署技術(shù)。
- Java API for XML Binding(2.0):JAXB是自動(dòng)進(jìn)行Java到XML或XML到Java翻譯的標(biāo)準(zhǔn)API。
- Java API for Web Services (2.0):JAXWS是Java基于XML的服務(wù)的標(biāo)準(zhǔn)API。JAXWS最初名為“Java API for XML RPC (JAX-RPC)”, 在2.0版中這個(gè)名字遭到反對(duì),因?yàn)镴AXWS加入了更加面向消息的實(shí)現(xiàn)方式。
- Spring (2.0):實(shí)際是提供輕量級(jí)Java組件服務(wù)的開(kāi)源容器(又稱(chēng)“POJOs”,“Plain Old Java Objects”的縮寫(xiě))。通常被視為J2EE的代替品。
- Swing:官方名稱(chēng)為“Java基礎(chǔ)類(lèi)”。Swing是跨平臺(tái)的構(gòu)建富客戶(hù)端界面的工具包。因?yàn)槠淠康脑谟趧?chuàng)建平臺(tái)兼容的外觀,許多繪圖和顯示邏輯都是自己編寫(xiě)的。
- 標(biāo)準(zhǔn)窗口工具包(SWT):開(kāi)源的Eclipse編譯器的核心顯示技術(shù)。SWT與Swing不同的是使用本地系統(tǒng)級(jí)UI功能來(lái)完成繪圖與顯示邏輯。
.NET:
- Windows分布式編程框架(WCF):以前的代碼名稱(chēng)為“Indigo”。WCF展現(xiàn)出微軟的下一代任意程序之間通訊的API,從消息隊(duì)列到安全/可靠/事務(wù)型服務(wù),以及WS-* web service。
- Windows表示層編程框架(WPF):以前的代碼名稱(chēng)為“Avalon”。WPF展現(xiàn)出微軟的下一代表示層,充分利用近年來(lái)業(yè)界在圖形顯示卡上的巨額投資所獲得的成就。WPF代碼有兩種利用方式,一種是在每個(gè).NET開(kāi)發(fā)實(shí)例中調(diào)用并編譯,或者使用名為“XML應(yīng)用程序標(biāo)記語(yǔ)言”(XAML)的XML進(jìn)行定義,從而編譯在應(yīng)用程序之中,或者通過(guò)HTTP請(qǐng)求傳送至IE7中進(jìn)行動(dòng)態(tài)顯示。WPF的子集WPF/E用于非IE的瀏覽器。
- Windows工作流編程框架(WWF):正如其名,提供工作流編程支持。
- Windows表單:.NET對(duì)傳統(tǒng)Windows界面功能進(jìn)行的包裝(User32.dll和GDI32.dll).
- 活動(dòng)目錄(AD):AD是用于企業(yè)級(jí)“帶名稱(chēng)資源”部署的目錄服務(wù),比如用戶(hù)和服務(wù)器。AD也有一個(gè)用于單個(gè)應(yīng)用程序的較輕量級(jí)版本“ADAM”。
- ASP.NET:創(chuàng)建動(dòng)態(tài)Web/HTTP功能的.NET實(shí)現(xiàn)方式。ASP.NET管道提供面向編程的ASHX和面向輸出的ASPX兩種表單,用于生成最終用戶(hù)可視內(nèi)容,同時(shí)還有面向編程的Web service(ASMX)。
- ADO.NET:對(duì)關(guān)系數(shù)據(jù)庫(kù)實(shí)現(xiàn)的調(diào)用級(jí)接口API。不同的廠(chǎng)商有不同的“提供者”(驅(qū)動(dòng))來(lái)實(shí)現(xiàn)ADO.NET API,使開(kāi)發(fā)人員與實(shí)際的數(shù)據(jù)庫(kù)實(shí)現(xiàn)方式隔離(理論上屬于松散耦合)。
- .NET遠(yuǎn)程調(diào)用:.NET版本的對(duì)象遠(yuǎn)程過(guò)程調(diào)用(ORPC)技術(shù)。
- Microsoft消息隊(duì)列(4.0):MSMQ是微軟的消息服務(wù),對(duì)所有版本的Windows都可用(4.0與Vista一同提供).
- COM+/企業(yè)服務(wù):COM+是為“管理下的應(yīng)用程序”(這是原始的名稱(chēng))提供事務(wù)與生命周期服務(wù)的容器。.NET組件使用System.EnterpriseServices命名空間調(diào)用COM+。
- Microsoft Office:世界上安裝最多的辦公室生產(chǎn)效率軟件系列,主要包括Microsoft Word, Microsoft Excel, Microsoft PowerPoint and Microsoft Outlook。
jwebee
我的個(gè)人網(wǎng)站
posted on 2007-09-18 16:31
周行 閱讀(495)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
IT技術(shù) 、
評(píng)論