1,为什么要进行互操作?

u  公司的产品是基于.NET或者Java 开发的,但是客户没有对应的平台环境?

u  公司的数个产品线分别使用.NET和Java技术开发,有很多重复的功能模块和业务组件,但因为技术平台不统一而无法复用,没法降低开发成本?

u  开发人员只会.NET,现在来了Java项目,怎么办?要培训成为一个熟练的Java开发人员需要一定的时间成本并带来一定的技术风险。

以往,我们在面对这样的问题的时候最直接的考虑就是“我们卖的是.NET/Java 做的产品,我们需要寻找能够提供Windows/Linux运行环境的客户”,现在.NET和Java各自占据了企业级用户市场的半壁江山,选择一种技术平台就意味着丢弃了一半市场;所以,大的企业就选择了“双管其下”,为同一个产品做两个不同的版本,运行在不同的平台上,而小公司就要求开发人员都是全能人才,级精通Java又精通.NET,但这样做却带来了高昂的成本问题。

如果有一种技术,能够让.NET的产品跑在Linux上,或者让Java的产品组件能够被.NET调用,那么我们就不用为目标平台的选择,开发人员的技能培训,产品的技术风险等问题苦恼了,同时也有效的降低了公司的项目产品开发成本。

2.互操作的类型

Java和.NET是两种不同的技术,但他们的实现原理却很类似,都是基于中间代码解释/编译执行的,所以理论上它们是可以互操作的。互操作可以分为“源代码”互操作和“平台互操作”两类,前者是将对方的源代码拿到自己的平台编译运行,后者是提供一系列的组件,类库,通讯接口,在平台接口层次进行互操作。

我们分别对这两种互操作方式进行了研究,总结了一下可行方案:

源代码互操作分为2类,

l  Java 复用.NET代码:代表方案是 Mainsoft to Java EE ;

l  .NET 复用Java代码:代表方案是Visual J# 和开源项目 IKVM.Net;

平台互操作也分为2类,

n  Web服务(传统的基于XML格式的Web服务和新的流行的基于JSON格式的Web服务);

n  Socket通信,在Java平台和.NET平台采用Socket技术分别实现客户端和服务端;

3.源代码互操作

3.1 运行环境的选择不再依赖于具体的开发技术

--Mainsoft for Java EE

Mainsoft for Java EE能让.NET开发人员开发出运行在Linux及其它能运行Java的操作系统之上的Web和服务器端应用程序,而无需重写代码或者学习新的开发技能。

Mainsoft的总裁和CEO,Yaacov Cohen解释说:

  “Mainsoft的跨平台的软件让JVM(Java Virtual Machine)能够完全地支持C# 2.0和Visual Basic。我们投入了1200万美元用于把Java EE转换到多语言平台。因此,现在我们的企业客户和软件开发商,能够把他们产品运行环境的技术选型同软件开发的技术选型分开考虑,即可以使用高生产率的 Visual Studio IDE来进行快速应用程序开发,也能把产品部署到安全性更高扩展性更强的Java EE服务器,或者门户服务器上。”

Mainsoft for Java EE是Mainsoft和Mono项目进行了4年合作的成果。Mono计划主要是Linux阵营中的精英发起的开源版的.NET项目,旨在使开发者能够编写同时在Windows和Linux上运行的.NET程序。

注:Mono项目是Novell发起的一个开源项目,它能够让.NET程序运行在非Windows平台上,包括Linux等多个非MS的操作系统平台,Mono相当于实现了一个跨平台的.NET运行框架。与Mono不同的是,MainsoftJVM上面实现了一个.NET运行库,本质上是把.NET程序编译成Java字节码在JVM上面运行的。

Mainsoft 提供了一个可以免费下载的Visual Studio 2005插件。利用这个插件,无需重写你的C#或者VB.NET代码,你就可以使你用.NET语言开发的Web应用程序和Web服务运行在Linux平台的Tomcat和各种Java支持的平台下面。Mainsoft for Java EE 2.0版本目前支持Visual Studio2005的IDE,支持.NET FrameWork 2.0、Asp.NET 2.0的控件、角色安全、C#等。

使用Mainsoft for Java EE,企业可以在保留现有的.NET代码和技术的基础之上把.NET的产品迁移到Java平台支持的环境中(比如Linux),最大限度的节省了你的开发成本和时间!

Mainsoft for Java EE把.NET开发者在Visual Studio中开发的应用编译成Java的二进制代码产品,这种产品完全通过了Sun的Java企业版本的签定。Mainsoft for Java EE支持IBM WebSphere® Application Server、Tomcat各种应用和各种标准的如BEA WebLogic、JBoss等服务。

软件开发商可以把他们的.NET源代码应用到Java EE来扩展他们的市场。开发者可以通过一些简单的代码来实现他们产品同时具有一套.NET的版本和一套Java的版本。

下面图中,请大家注意其对ADO.NET的支持。

当然,Mainsoft for Java EE目前还是有一定的费用的,但是,个人觉得,对于一个企业来说,.NET的产品在Java领域的扩展所带来的收益肯定要比这10000$多得多。

更具体的介绍请见 http://dev.mainsoft.com/

3.2 让Java开发人员也能够写.NET程序

--Visual J# 介绍

Visual J#是Visual Studio 2005提供的一种托管语言,可供Java程序员构建在.NET Framework上运行的应用程序和服务。

Visual J# 面向公共语言运行库,可以充分利用.NET Framework开发.NET应用程序,包括XML Web services和Web应用程序。

Visual J# 应用程序从下列功能中获益:

  ●跨语言集成

  ●增强的安全性

  ●版本控制和部署支持

  ●调试和分析服务

经实验,Visual J#的解决方案可以直接将java代码文件添加到项目中,不用更改扩展名就能使用其中的类和方法,若此java代码使用了第三方的jar包,首先要用IKVM.Net的命令将jar包转成.Net的dll,然后在J#的项目中引用此dll即可。

运行:ikvmc -target:library xxx.jar

会将jar文件自动转换为 xxx.dll

Visual J# 自带一个用.NET实现的 1.1.1.4 JDK,我们尝试着使用IKVM.NET转换引用了更高版本的JDK程序的Java组件,在使用中暂未发现问题。不过,既然是在.NET平台下开发应用程序,使用C#等.NET原生的开发语言是首选,J#只是一个过渡,但它能够把你现有的Java源代码编译成.NET应用程序或者类库,供其它.NET程序使用,这是它的一大亮点。

 

4.平台互操作

4.1 越古老越通用

前2个方案是基于源代码互转的方案,而Socket方案解决的是系统互联的问题,即按照一定的格式将数据编码成二进制流,采用TCP或UDP协议进行传输。Socket是基于TCP和UDP协议的高层接口,定义了收发数据的格式。使用Socket通讯方式,首先需要在客户端和服务端定义好通讯接口,包括端口号,协议,编码格式等,由于Socket是底层的网络编程协议,所以采用该技术实现的应用有很高的通信效率,几乎是传统异构平台间高效通信技术的首选。

4.2 Web服务数据交换格式的新贵

--JSON,比XML更快更易于传输

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。

 JSON与XML的比较:
 
l  可读性
JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。
l  可扩展性
   XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。不过JSON可以直接转换为Javascript对象,有着xml不可比拟的优势。
l  精简度
相比之下JSON格式要比XML精简一些,这对于网络间数据传输JSON存在一些优势。
l  序列化
现各平台对JSON与XML的序列化支持都比较不错,开发者们能轻而易举的找到适合自己开发需要的序列化开发包。

我们使用.net平台下WCF(Windows Communication Foundation)做为远端数据服务,并以WEB HTTP和 WINDOWS FORM 客户端(以JSON格式)方式对服务进行调用,测试取得良好效果。由于客户端JavaScript程序可以直接调用和使用自服务端的方法或者数据,有很高的效率,所以现在JSON已经成了Web服务端和Web客户端交换数据格式事实上的标准。

5   互操作方案总结

根据上面介绍的几种互操作方案,和我们对这几种方案进行的实际测试,得出了一个自己的比较结果:

Java & .Net

互操作方案

主要用途

运行效率

编码工作量

源代码互操作

Mainsoft for Java EE (1)

将.Net的web应用转换为Java字节码,可以部署到Linux上

编译较慢,大数据量时,运行较慢

★★★★

较少

Visual J#

Java代码(java源码和jar包)直接用于.Net项目

较快

★★★★

一般

平台互操作

Socket

Java和.net系统互连

★★★

大量

JSON

平台间数据转输

★★

较少

注:由于我们使用的是免费的Mainsoft for Java EE 开发人员版,所以在实际使用中有些限制,测试结果不是特别理想。对于源代码互操作来说,它的开发工作量无疑是最小的。

在平台互操作中,Socket这种古老的通信方式无疑效率是最高的,但它的开发成本太高;JSON是一中数据交换格式,由于它相对于流行的XML来说要轻巧,所以在Web开发中它是数据交互格式的首选。

6   如何取舍?

在实际项目应用中,具体选择何种互操作方式要根据情况而定,如果要追求最高的代码运行效率和复用程度,应该选择源代码互操作方案,如果不能修改或者扩展项目原有代码,或者应用分布在不同的物理机器上,那么应该采用平台间互操作的方式。

尽管技术的进步已经使得Java & .NET 这两种技术平台可以在源代码级别进行互操作,但仍然有相当多的应用开发商对此持审慎态度,甚至还有很多人认为根本不可能或者持怀疑态度,因而目前两大平台的互操走大都使用Web服务方式。技术是为市场服务的,如果有新技术能够为我们的开发降低成本,扩大市场,我们应该抛弃“Java & .NET阵营”的思想壁垒,就像世界抛弃“东西方意识形态阵营”一样,迎来一个多元的开放的新世纪!

Java.Net互操作技术介绍相关推荐

  1. Android JNI(Java Native Interface)技术介绍

    Android平台上的JNI技术介绍 JUL 15TH, 2013 | COMMENTS NDK简介 Android是由Google领导开发的操作系统,Android依靠其开放性,迅速普及,成为目前最 ...

  2. core java文献翻译_外文翻译--Java技术介绍(适用于毕业论文外文翻译+中英文对照).doc...

    毕业设计(论文)外文资料翻译 学 院: 信息工程学院 专 业: 计算机科学与技术 姓 名: XXXXXXXXX 学 号: XXXXXXXXX 外文出处: Cay s.Horstmann Core Ja ...

  3. 今天,正式介绍一下Java极客技术知识星球

    前面煽情的文字就不放了,还是那句  别让高手和你距离越来越远,其实你也是高手! 从创建知识星球到现在已经过去一个月的时间了,在这里正式介绍一下 Java极客技术知识星球 星球规划: 一.每周分享一个面 ...

  4. java预研项目_缓存java框架技术预研3:JAVA缓存技术介绍

    几个著名Java开源缓存框架介绍(OSCache,JSC) OSCache是个一个广泛采用的高性能的缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案. OSCache有以下特点: ...

  5. TIBCO Rendezvous — 技术介绍

      http://blog.csdn.net/tiercel2008/article/details/6799952 TIBCO Rendezvous - 技术介绍 1.1.1.      TIBCO ...

  6. 人脸检测与美颜技术介绍(OpenCV)

    人脸检测与美颜技术介绍 目录 人脸检测与美颜技术介绍 人工智能(AI) 人工智能.机器学习与深度学习的关系 机器学习与深度学习的区别 深度学习简介 深度学习模型 深度学习的历史 深度学习的工具 神经网 ...

  7. Html5 WebSocket 技术介绍(转载)

    WebSocket是html5规范新引入的功能,用于解决浏览器与后台服务器双向通讯的问题,使用WebSocket技术,后台可以随时向前端推送消息,以保证前后台状态统一,在传统的无状态HTTP协议中,这 ...

  8. Android Java虚拟机拦截技术分析

    2019独角兽企业重金招聘Python工程师标准>>> 最近反编译金山毒霸,分析其广告拦截功能是如何实现的.根据金山毒霸的介绍,采用了java虚拟机拦截技术,带着好奇去研究了一下.在 ...

  9. java超线程_超线程多核心下Java多线程编程技术分析

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述超线程多核心下Java多线程编程技术分析,更多Java专业知识,广州疯狂 ...

最新文章

  1. 哈佛牙学院博士后:教你口腔保健基本功之牙线篇
  2. LeetCode 421. Maximum XOR of Two Numbers in an Array--Python解法
  3. python 视频 灰度 伽玛_Python 图像处理实战 | 图像的灰度非线性变换之对数变换、伽马变换...
  4. Linux监控实时log
  5. 【干货】PMcaff干货课程学习精彩分享:Apple Watch 技术特性详解
  6. 九十六、双指针和滑动窗口算法模板
  7. mysql 12安装教程下载_MySQL 8.0.12.0安装教程
  8. 单播 广播 组播_【技术解析】关于组播概念那些你需要知道的~
  9. openGauss 分区表索引
  10. opencv 在工业中的应用:blob分析
  11. 事情没有想象中那么难--JX官网首页3D粒子效果
  12. 《工程学导论》读书笔记-2
  13. mac忘记mysql用户名和密码_mac 下 忘记mysql密码如何找回
  14. 毕业论文:基于响应式页面的新闻资讯类门户网站的设计与实现
  15. 下岗工冰城卖火“鱼豆腐”
  16. 关于《成电讲坛》活动领票环节的调查报告
  17. 红孩儿编辑器模块设计7
  18. android studio hiera,速成意大利语第课 昨天晚上我在电视机前我们不能空手去那里.doc...
  19. 妙不可言,这4款小众良心软件,值得你用心体会
  20. Kubernetes ~ k8s 从入门到入坑。

热门文章

  1. 沧小海的《xilinx的A7系列芯片资源学习笔记》之第一部分:I/O BANK(三)
  2. matlab_医学CT重建 ART,SART算法
  3. 计算机毕业设计ssm基于SSM框架的股票交易系统3cwg3系统+程序+源码+lw+远程部署
  4. C#中使用新增类实现农历
  5. 多卡聚合智能融合通信设备在智慧房车上的应用
  6. 计算机组成原理 习题+知识点
  7. continue 当条件不问那么执行你所对比的这个参数
  8. pat basic 1100 校庆
  9. 谈谈字符集和字符编码
  10. PHP实现生成推广海报的方法详解