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