在很多的大型系统开发中,开发工具往往不限制于同一种开发语言,而是会使用多种开发语言的混合型开发。目前Java和.Net都声称自己占85%的市场份额,不管谁对谁错,Java和.Net是目前应用开发的两个主要阵营,所以Java.和Net之间的整合是大型应用开发过程中经常会面临一个问题。

目前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有着更强大的功能。

1.支持ava和.NET之间的跨平台事务;
2.支持Microsoft Visual Studio和Eclipse插件;
3.兼容Windows 7;
4.跨平台交易一体化主要是对用户透明;
5.'回滚'- 任何一方的终止都将导致双方的行动被回滚;

JNBridge支持.NET To Java ,Java To .NET两种服务方式,并可以行用TCP、HTTP、SOAP等多个协议进行双方通讯。

参考资源:

官网地址:

http://www.jnbridge.com

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种方式,目前暂时定性位了解吧。

[OpenSource]浅谈.Net和Java互相调用的三种方式的更多相关文章

  1. 浅谈.Net和Java互相调用的三种方式

    在很多的大型系统开发中,开发工具往往不限制于同一种开发语言,而是会使用多种开发语言的混合型开发.目前Java和.Net都声称自己占85%的市场份 额,不管谁对谁错,Java和.Net是目前应用开发的两 ...

  2. 【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  3. 如何实现有返回值的多线程 JAVA多线程实现的三种方式

    可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口.执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable ...

  4. java 获取时间戳的三种方式

      java 获取时间戳的三种方式 CreationTime--2018年7月13日16点29分 Author:Marydon 1.实现方式 方式一:推荐使用 System.currentTimeMi ...

  5. Java实现线程的三种方式和区别

    Java实现线程的三种方式和区别 Java实现线程的三种方式: 继承Thread 实现Runnable接口 实现Callable接口 区别: 第一种方式继承Thread就不能继承其他类了,后面两种可以 ...

  6. Java并发编程:Java创建线程的三种方式

    目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...

  7. SpringBoot2.0.2 Application调用的三种方式

    一.注解 @SpringBootApplication            点开查看源码是由多个注解合成的注解,其中主要的注解有:            @SpringBootConfigurati ...

  8. java创建线程的三种方式及其对比

    第一种方法:继承Thread类,重写run()方法,run()方法代表线程要执行的任务.第二种方法:实现Runnable接口,重写run()方法,run()方法代表线程要执行的任务.第三种方法:实现c ...

  9. Struts2方法调用的三种方式(有新的!调用方法的说明)

    在Struts2中方法调用概括起来主要有三种形式 第一种方式:指定method属性 <action name="heroAction" class="com.ABC ...

随机推荐

  1. js之replace实现简单模板替换引擎

    eg: var app={}; app.tempEngine= (function () {  var pattern = /\{(\w*[:]*[=]*\w+)\}(?!})/g;  return ...

  2. xps文档打印后winform界面文字丢失

    最近做的xps文档打印功能,绝对的一波三折,一开始开发的时候,始终用的是xps writer 虚拟打印机,测试的时候也是,一直没有发现问题,但是真正到用户使用的时候,接上正式打印机,打印时候没有问题, ...

  3. MVC文件上传 - 使用jquery异步上传并客户端验证类型和大小

    本篇体验MVC上传文件,从表单上传过渡到jquery异步上传. MVC最基本的上传文件是通过form表单提交方式 □ 前台视图部分 <% using(Html.BeginForm("F ...

  4. Tomcat安装与配置图文教程

    安装Tomcat之前先配置JDK,JDK的JAVA_HOME变量都必须设置好,以便Tomcat找到JDK.关闭防火墙等. 一:安装版Tomcat 1. 先下载tomcat,到http://tomcat ...

  5. Java集合Map接口与Map.Entry学习

    Java集合Map接口与Map.Entry学习 Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs).该接口描述了从不重复的键到值的映射. (1) ...

  6. Hive优化(转)

    一.join优化 Join查找操作的基本原则:应该将条目少的表/子查询放在 Join 操作符的左边.原因是在 Join 操作的 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存, ...

  7. Java基础中的一些注意点

    1.在Java编程语言中,标识符是赋予变量.类或方法的名称.标识符可从一个字母.下划线(_)或美元符号($)开始,随后也可跟数字.标识符是大小写区别对待的并且未规定最大长度. 2.Java技术源程序采 ...

  8. LCD显示方向

    一.ILI9341内存到显示地址的映射 本文只讨论“正常显示”,不讨论“垂直滚动显示”模式. 可以看到物理内存被两个指针访问,行指针和列指针,行指针范围从000h到013Fh,列指针范围为0000h到 ...

  9. sencha touch jsonp

    asp.net server side code <%@ Page Language="C#" %> <script runat="server&quo ...

  10. 使用ssh公钥实现免密码登录

    使用ssh公钥实现免密码登录 ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 有机器A(10.207.160.34),B(10 ...