在不少的大型系统开发中,开发工具每每不限制于同一种开发语言,而是会使用多种开发语言的混合型开发。目前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种方式,目前暂时定性位了解吧。