
利用Remote方式调用远程对象实现服务器与客户端之间通讯是一种常用的网络开发方式在.NET与JAVA开发当中对Remote远程对象早已有着足够的支持对Remote远程对象调用有兴趣的朋友欢迎参考一下利用远程对象实现分布式开发。从2003年开始.NET当中就盛传着.NET Remoting远程对象调用的分布式开发.NET Remoting主要用于管理跨应用程序域的同步和异步RPC 会话。在默认情况下Remoting可以使用 HTTP 或 TCP 协议进行信息通讯并使用 XML 编码的 SOAP 或二进制消息格式进行数据交换。.NET Remoting 提供了非常灵活和可扩展的编程框架,并且可以管理对象的状态。在Framewok2.0出台以后WCF盛世登场它是综合了.NET Remoting远程对象TCP/IP套接字Web服务MSMQP2P点对点等各类型通信方式的产物WCF使远程通信进入另一个台阶。而在JAVA方面对远程通信也有强大的支持,它定义了的RPCRemote Procedure Call Protocol协议是—项远程过程调用协议它可以通过网络从远程计算机请求的服务获得计算结果它无需了解底层网络技术的协议就可以使用如TCP或UDP等通信方式为程序之间传递信息数据。在网络通信模型中RPC跨越了传输层和应用层。RPC使系统更容易地实现分布式式开发。但RPC通讯却并未实现面向对象的开发原则到而RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现通讯的一种机制。它以面向对象的开发方式利用RPC协议使服务器与客户端的对象能够实现远程调用。但在.NET Remoting与RMI通信中同时存在一个弊端那就是对开发语言的限制无论是使用哪一种通讯方式服务器与客户端都必须支持同一种开发语言。通讯过程中不能跨越开发语言的限制这是一个人令人懊恼的消息。因为在大型的开发项目当中往往会集合着不同语言开发进行不同模块的开发。而使用Remote进行分布式开发可以提高通信的效率但却又受到限制。对此各大开发公司做出了积极的贡献开发出如J-Integra(又名Ja.NET)IIOP.NET(Internet Inter-Orb Protocol),JNBridge等集成开发工具对.NET与JAVA之间实现Remote远程对象的相互调用作出足够的支持。下面在下为大家对“JNBridge实现.NET与JAVA的相互操作”作出详细的介绍。JNBridge概述JNBridge是一种领先的JAVA与.NET互操作的的产品,凭借JNBridge技术Java和.NET代码无需交叉编译器就可以实现对象共享。所有Java代码运行在JVM上而.NET代码则运行在CLR上。在该方案下JVM和CLR可以运行在不同的机器上也可以运行在一台机器的不同进程上甚至还能运行在相同的进程的不同应用程序域上。经历多年的发展JNBridge已经发布了JNBridgePro 5.0JNBridgePro 5.0有着更强大的功能。支持ava和.NET之间的跨平台事务支持Microsoft Visual Studio和Eclipse插件兼容Windows 7跨平台交易一体化主要是对用户透明回滚- 任何一方的终止都将导致双方的行动被回滚JNBridge支持.NET To Java Java To .NET两种服务方式并可以行用TCP、HTTP、SOAP等多个协议进行双方通讯下面就以 “JAVA调用.NET” 实现一个简单开发例子介绍一下JNBridge的功能。JNBridge配置首先可以在JNBridge的官方网站Download – JNBridge 下载程序安装JNBridgePro 5.0后启动JNBProxy v5.1.exe选择Create new Java-.NET Project新建一个项目后点击Project-Java Options对系统进行配置。首先设置好本机的java.exe应用程序和jvm.dll程序集的路径然后设置jnbcore.jar和bcel.jar的路径在5.1版本中这两个文件存在于“/JNBridge/JNBridgePro v5.1/jnbcore/”最后可以选择HTTP或TCP通讯方式在此例子当中在下选择TCP通讯系统默认接口为8085你也可以选择自定义的接口。点击“OK”按钮配置完成时系统将自动生成一个 /JNBridge/JNBridgePro v5.1/jnbcore/jnbcore_tcp.properties 文件记录TCP配置信息。.NET服务端开发假如阁下使用的是Visual Studio 2008或者Visual Studio 2010版本系统将会感知JNBridge的存在在新建项目时可以直接新建一个DotNetJavaProxies项目。在此在下想展示一下JNBridge的转换性能所以直接新一个解决方案。添加一个Model项目加入Person类为Person加入Serializable特性注意要去除不必要的引用因为对Framework的引用在转换时将变为对应的包。代码添加一个Manager项目加入PersonManager类在测试时只是把虚拟数据放在DataSource.sour文件中。代码添加一个ConsoleApplication作为启动项目在项目中添加对JNBShare.dll的引用文件路径 “\JNBridge\JNBridgePro v5.1\4.0-targeted”然后添加配置文件config文件最后启动服务代码生成转换层代码打开JNBridge,选择工具栏 Add class from assembly files分别加入Model.dll,Manager.dll及mscorlib.dll此程序集存在于“C:\Windows\Microsoft.NET\Framework\v4.0.30319\”里面包含SystemSystem.CollectionsSystem.IO等等重要的命名空间在选择必要的类以后按下“Project-Build系统就会对应选择把.NET里面的类生成对class放入Proxy.jar代理包。Java端开发新建一个Java项目引用刚生成的代理包Proxy.jar还有jnbcore.jar、bcel-5.1-jnbridge.jar在5.1版本中这两个文件存在于“/JNBridge/JNBridgePro v5.1/jnbcore/”把JNBridge的TCP配置文件jnbcore_tcp.properties复制到bin文件夹内开发一个测试端。值得注意的是在生成Proxy.jar代码包的时候必须对System.Collections.GenericSystem.String等等这些常用类的空间添加引用否则在Java里面就无法调用.NET里面的System.Collections.Generic.List等这些常用类。由于在Java里面对像List这些常用的类具有类名之间的冲突所以在Proxy里面会对System.Collections.Generic.List这些类命名为System.Collections.Generic.List_1。代码完成JAVA端后先启动.NET服务端再启动JAVA端JAVA就会调用到.NET端的数据屏幕将显示出测试结果Id:0 Age:29 Name:LeslieId:1 Age:23 Name:RoseId:2 Age:22 Name:Jack在JNBridge官网上有着许多的开发例子在此不多介绍。对不同开发类型的转换需要调用不同的工具包各位可以直接参考官网上的教材。Java与.NET的混合开发模式在众很多的大型系统开发中开发工具往往不限制于同一种开发语言而是会使用多种开发语言的混合型开发。像在开发底层与业务层的过程中由于.NET只限制工作于Windows系统而JAVA可以在Windows、Unix、Linux中灵活运用而更受到欢迎。但在开发UI表现层里很明显像Swing、Applet等开发工具受到的限制更多而WPF、Siverlight、WinForms等开发工具因为具有成熟的控件与华丽的页面而倍受欢迎。所以使用JAVA来开发底层、业务层与Linux系统的UI层同时使用.NET来开发Windows系统的UI层的例子很常见。在此开发过程中利用JNBridge工具生成Proxy代理可以大大降低开发的难度提高开发效率使.NET平台与JAVA平台之间实现无缝连接。