Java和.NET交互
工具的供應(yīng)商JNBridge在JavaOne 2008上
發(fā)布了其核心產(chǎn)品JNBridgePro的新版本。
JNBridgePro是一個(gè)通用的、Java和.NET的交互工具,用來(lái)“橋接Java和.NET”,包括EJBs、J2EE、J2SE、AWT、Swing、SWT、.NET
APIs、WinForms、ASP.NET及
SharePoint Server。其核心產(chǎn)品基于.NET和Java的Remoting堆棧,并且針對(duì)調(diào)用代碼在“被調(diào)用端”產(chǎn)生包含代理的二進(jìn)制庫(kù)。
JNBridgePro 4.0主要的新特性列舉如下:
- 支持Java和.NET類(lèi)之間互訪(fǎng)問(wèn)的Visual Studio和Eclipse插件
- 完全的64位支持
- 數(shù)據(jù)壓縮以實(shí)現(xiàn)更好的性能
InfoQ有幸采訪(fǎng)了JNBridge的CTO Wayne Citrin以了解新插件和JNBridge。
Hartmut Wilms (HW): 開(kāi)發(fā)者如何利用新插件呢?
Wayne Citrin (WC): 不像我們基于G
UI的獨(dú)立的代理生成器,新的插件使得開(kāi)發(fā)者可以直接從Eclipse中訪(fǎng)問(wèn).NET類(lèi)或者從Visual Studio中訪(fǎng)問(wèn)Java類(lèi)。
插件通過(guò)將代理構(gòu)建操作合并到IDE的整個(gè)構(gòu)建過(guò)程中來(lái)簡(jiǎn)化代理生成過(guò)程。使用VS和Eclipse插件的情況下,代理成為另外一個(gè)項(xiàng)目,并且可由其他項(xiàng)目引用。當(dāng)開(kāi)發(fā)者在IDE中構(gòu)建其整個(gè)解決方案時(shí),IDE會(huì)確定依賴(lài)于代理項(xiàng)目的.NET或Java項(xiàng)目,然后構(gòu)建代理并且在依賴(lài)于代理的項(xiàng)目的構(gòu)建過(guò)程中使用代理項(xiàng)目(代理dll或者jar文件)的輸出。
作為一個(gè)例子,我們來(lái)考慮這樣一種情況:創(chuàng)建.NET應(yīng)用的開(kāi)發(fā)者需要訪(fǎng)問(wèn)Java API。在Visual Studio中,該開(kāi)發(fā)者需要?jiǎng)?chuàng)建一個(gè)JNBridge項(xiàng)目,打開(kāi)編輯器并指定需要訪(fǎng)問(wèn)哪些Java類(lèi)。接下來(lái)該開(kāi)發(fā)者為.NET應(yīng)用(使用C#、VB.NET或者其他.NET
語(yǔ)言)創(chuàng)建項(xiàng)目,引用代理項(xiàng)目,然后開(kāi)始編寫(xiě)代碼。當(dāng)該開(kāi)發(fā)者構(gòu)建項(xiàng)目時(shí),會(huì)自動(dòng)生成代理dll,然后在該.NET應(yīng)用的構(gòu)建過(guò)程中使用它。
HW:JNBridgePro應(yīng)用在Java和.NET的什么版本上?
WC:JNBridgePro應(yīng)用在.NET
框架1.0、1.1、2.0、3.0及3.5和JDK 1.3.1及后續(xù)版本上。
JNBridgePro插件支持.NET框架2.0及后續(xù)版本以及JDK 1.4及后續(xù)版本。JNBridgePro獨(dú)立的GUI依舊可用,它支持.NET框架和JDK的早期版本。
HW:因?yàn)?NET框架4.0可能會(huì)對(duì)CLR有所改變,同時(shí)未來(lái)的Java版本也可能向JVM增加新的變化,那么對(duì)JNBridgePro來(lái)說(shuō)會(huì)產(chǎn)生什么影響呢?
WC:只要新的CLR和JVM是向后兼容的,那么在新的版本中使用當(dāng)前的JNBridgePro就不會(huì)出現(xiàn)任何問(wèn)題。如果加入了新的二進(jìn)制格式,我們就會(huì)開(kāi)發(fā)針對(duì)新格式和框架的JNBridgePro的新版本。例如,當(dāng).NET從1.1升級(jí)到2.0時(shí)我們就是這么做的。在.NET 2.0發(fā)布前,我們開(kāi)發(fā)了針對(duì).NET 2.0 beta版的JNBridgePro 3.0,當(dāng).NET 2.0成為GA版時(shí),我們?cè)谕粋€(gè)月就發(fā)布了JNBridgePro 3.0。
當(dāng)一個(gè)平臺(tái)(.NET或Java)加入了我們想利用(.NET 2.0或Java 5)的新的APIs時(shí),我們就會(huì)開(kāi)發(fā)可以使用這些新特性的新版本。對(duì)于Java來(lái)說(shuō),我們想讓Java端的
組件既能工作于Java的早期版本,又能工作于Java 5,實(shí)際上我們是針對(duì)Java 1.3和1.4來(lái)進(jìn)行編譯,然后使用反射來(lái)訪(fǎng)問(wèn)新的APIs。對(duì)于.NET 2.0來(lái)說(shuō),新的二進(jìn)制格式意味著針對(duì)1.x和2.0的單獨(dú)的一套二進(jìn)制代碼已經(jīng)不再可行了,所以我們針對(duì)每個(gè)版本都開(kāi)發(fā)了相應(yīng)的.NET組件。
至于.NET Remoting,微軟已經(jīng)表明他們會(huì)在未來(lái)的幾年中繼續(xù)支持Remoting。我們會(huì)根據(jù)微軟的發(fā)布計(jì)劃進(jìn)行更新,如果我們發(fā)現(xiàn)在未來(lái)的.NET框架的alpha或beta版中已經(jīng)移除了Remoting的話(huà),我們當(dāng)然會(huì)遷移到WCF了。
HW:當(dāng)談及到互操作時(shí),大多數(shù)IT工作者都會(huì)想到Web Services和SOA。JNBridgePro處在什么位置上呢?
WC:相對(duì)于Web Services,JNBridgePro有如下優(yōu)勢(shì)。
- JNBridgePro的TCP/二進(jìn)制和共享內(nèi)存機(jī)制要比Web Services快幾個(gè)數(shù)量級(jí)。
- JNBridgePro更適合訪(fǎng)問(wèn)擴(kuò)展的面向?qū)ο蟮腁PI,這與Web Service面向服務(wù)的方式正好相反,Web Service的這種方式會(huì)大大縮小訪(fǎng)問(wèn)點(diǎn)集合。在某些情況下,縮小的面向服務(wù)的方式是恰當(dāng)?shù)?;但?duì)于另外一些情況,JNBridgePro的面向?qū)ο蟮姆绞礁舆m合。
- 很多應(yīng)用和庫(kù)并不是面向Web Services的,并且在另外一些情況下,在同一臺(tái)機(jī)器上或者同一個(gè)線(xiàn)程中使用Web Services去訪(fǎng)問(wèn)簡(jiǎn)單的庫(kù)顯得大材小用。JNBridgePro可以輕松應(yīng)用到任何應(yīng)用上,并且其共享內(nèi)存機(jī)制對(duì)于同一臺(tái)機(jī)器的訪(fǎng)問(wèn)是非常適合的,而Web Services在這種情況下就顯得有些不合時(shí)宜。
- 實(shí)現(xiàn)Web Services是一個(gè)戰(zhàn)略上的決定,通常需要來(lái)自組織的不同部門(mén)的決策者的批準(zhǔn)才行。要想獲得這個(gè)批準(zhǔn)可能需要花費(fèi)大量時(shí)間,并且很有可能還需要高層的批準(zhǔn)。相反,JNBridgePro可以看做是戰(zhàn)術(shù)上的解決方案,它允許端到端的交互,而這可能只需要開(kāi)發(fā)者或者架構(gòu)師級(jí)別上的人同意即可,并且實(shí)現(xiàn)這個(gè)是非常快的。當(dāng)然,JNBridgePro也可以用在戰(zhàn)略上,因?yàn)樗邆淞松厦嫣岬降囊恍﹥?yōu)勢(shì)。
HW:JNBridgePro 4.x的路線(xiàn)圖如何?
WC:我們計(jì)劃從我們的客戶(hù)那里找到4.0版的發(fā)展方向并且在未來(lái)版本的開(kāi)發(fā)中考慮他們的反饋。我們正在考慮的一些特性包括在tcp/二進(jìn)制機(jī)制中對(duì)SSL通信更加廣泛的支持,并且支持如ref和out參數(shù)(只在.NET中存在,Java中不存在)。我們還會(huì)考慮針對(duì).NET和Java的特定技術(shù)(因?yàn)橛械挠脩?hù)只想通過(guò)這些技術(shù)來(lái)簡(jiǎn)化交互,而并不想利用整個(gè)Java或者.NET平臺(tái))來(lái)制定JNBridgePro。當(dāng)然,我們還會(huì)一直關(guān)注.NET和Java平臺(tái)的新版本中將要增加的新特性。
HW:非常感謝您能接受我們的采訪(fǎng)。