Java&.Net互操作技术介绍

来源:互联网 发布:windows挂载iscsi存储 编辑:程序博客网 时间:2024/04/30 00:44

 

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

  

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

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

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

 

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

 

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

 

Mainsoft for Java EEMainsoftMono项目进行了4年合作的成果。Mono计划主要是Linux阵营中的精英发起的开源版的.NET项目,旨在使开发者能够编写同时在WindowsLinux上运行的.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 Studio2005IDE,支持.NET FrameWork 2.0Asp.NET 2.0的控件、角色安全、C#等。

 

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

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

 

软件开发商可以把他们的.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 servicesWeb应用程序。

 

 

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

  ●跨语言集成

  ●增强的安全性

  ●版本控制和部署支持

  ●调试和分析服务

 

 

 

 

经实验,Visual J#的解决方案可以直接将java代码文件添加到项目中,不用更改扩展名就能使用其中的类和方法,若此java代码使用了第三方的jar包,首先要用IKVM.Net的命令将jar包转成.Netdll,然后在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方案解决的是系统互联的问题,即按照一定的格式将数据编码成二进制流,采用TCPUDP协议进行传输。Socket是基于TCPUDP协议的高层接口,定义了收发数据的格式。使用Socket通讯方式,首先需要在客户端和服务端定义好通讯接口,包括端口号,协议,编码格式等,由于Socket是底层的网络编程协议,所以采用该技术实现的应用有很高的通信效率,几乎是传统异构平台间高效通信技术的首选。

 

 

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

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

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

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

 

 

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

   

5   互操作方案总结

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

 

Java & .Net

互操作方案

主要用途

运行效率

编码工作量

源代码互操作

Mainsoft for Java EE (1)

.Netweb应用转换为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阵营”的思想壁垒,就像世界抛弃“东西方意识形态阵营”一样,迎来一个多元的开放的新世纪!

 

原创粉丝点击