在不少的大型系統開發中,開發工具每每不限制於同一種開發語言,而是會使用多種開發語言的混合型開發。目前Java和.Net都聲稱本身佔85%的市場份 額,無論誰對誰錯,Java和.Net是目前應用開發的兩個主要陣營,因此Java.和Net之間的整合是大型應用開發過程當中常常會面臨一個問題。java
目前Java和.Net之間的整合主要有三種思路和作法(通過幾天的查閱,目前我就看到了這三種方式,可能還有其餘的方法):安全
1)基於通信協議的整合服務器
基於通信協議的整合方式,最容易被人首先想到,簡單的方式能夠經過Web Service來實現,可是效率問題,在某些場合之下將會成爲一個致命傷。使用Remote進行分佈式開發,能夠提升通訊的效率,好消息是:Java 和.Net都很好的支持Remoting遠程對象調用的分佈式開發;壞消息是:他們同時存在一個弊端,那就是對開發語言的限制,不管是使用哪種通信方 式,服務器與客戶端都必須支持同一種開發語言。對此,各大開發公司作出了積極的貢獻,開發出如J-Integra(又名 Ja.NET),IIOP.NET(Internet Inter-Orb Protocol),JNBridge等集成開發工具,對.NET與JAVA之間實現Remote遠程對象的相互調用做出足夠的支持。在這些產品中推薦選 用:JNBridge分佈式
JNBridge是一種領先的JAVA與.NET互操做的的產品,憑藉JNBridge技術,Java 和.NET代碼無需交叉編譯器就能夠實現對象共享。全部Java代碼運行在JVM上,而.NET代碼則運行在CLR上。在該方案下,JVM和CLR能夠運 行在不一樣的機器上,也能夠運行在一臺機器的不一樣進程上,甚至還能運行在相同的進程的不一樣應用程序域上。經歷多年的發展,JNBridge已經發布了 JNBridgePro 5.0,JNBridgePro 5.0有着更強大的功能。ide
1.支持ava和.NET之間的跨平臺事務;
2.支持Microsoft Visual Studio和Eclipse插件;
3.兼容Windows 7;
4.跨平臺交易一體化主要是對用戶透明;
5.'回滾'- 任何一方的終止都將致使雙方的行動被回滾;工具
JNBridge支持.NET To Java ,Java To .NET兩種服務方式,並能夠行用TCP、HTTP、SOAP等多個協議進行雙方通信。性能
參考資源:開發工具
官網地址:測試
2)基於用.Net實現Java虛機的整合
目前能夠選用的開源資源主要是:IKVM.NET。
IKVM.NET的是開源的基於.NET CLR 的Java虛擬機。基於.NET的Java虛擬機意味着咱們可讓Java程序跑在.NET上,能夠經過虛擬機這個中介讓Java程序和.NET應用程序 一塊兒協同工做。更難能難得的是,IKVM同時支持微軟的.NET Framework 和 Mono。
安全性是IKVM平臺的一個大遺漏。此問題將依靠.NET平臺提供的舊有的、但功能強大的安全模式而被解決。 雖然這樣,目前項目已具有能成功運行大型java項目的能力。
IKVM目前不成熟的地方在如下幾個方面:
1.對AWT和Swing沒有提供支持,在IKVM的開發計劃中,這項優先級別不高。
2.對Java的安全模型沒有實現。
參考資源:
《Using Java Classes in your .NET Application》
http://www.codeproject.com/Articles/13549/Using-Java-Classes-in-your-NET-Application
3)基於java的本地接口的整合
Java 本地接口(Java Native Interface (JNI))容許運行在Java虛擬機(Java Virtual Machine (JVM))上的代碼調用本地程序和類庫,或者被它們調用,這些程序和類庫能夠是其它語言編寫的,好比C、C++或者彙編語言。
參考資源:
《Using the Java Native Interface in C#》
http://www.codeproject.com/Articles/245622/Using-the-Java-Native-Interface-in-Csharp
綜述
選用JNBride,比較適合大型項目的開發,在雙方互調上支持的很是好,並且雙方能夠互相不用感知。可是無論怎麼樣,信息傳輸上須要必定的開銷(若是對於效率要求很是高的狀況下,這方面多少有些損失)。
選用IKVM.NET,在.Net調用Java上能夠作到「無縫」,若是不考慮Java調.Net(好像Java調 用.Net的Dll沒有.Net Call Java那麼麻煩),我的感受通常狀況下仍是首選(畢竟它目前的不足,通常的狀況下影響不是太大,也不多有機會涉及到)。
基於JNI的整合方式,因爲對Java不太瞭解,很差過多評論,不過曾看到一句這樣的描述:使用本地方法是有開銷 的,它喪失了java的不少好處。若是別無選擇,咱們能夠選擇使用本地方法。無論怎麼樣,從別人文章的描訴:「In my example, I will show you how to call a couple of Java methods from a C# client.」,能夠看出從實現上,徹底能夠作到.Net調用Java方法。
以上的綜述,均爲我的淺顯的理解,這幾天僅僅從全局上考慮如何「Call Java Method From .Net」,對於這三種方式的Demo並無按照別人的介紹去調試和性能測試,僅僅先從大的方向和思路上作一些前期研究。下一步,打算把1,2種方式的 Demo進一步研究和比較一下,第3種方式,目前暫時定性位瞭解吧。