版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、java与.net 的相互调用 利用jnbridge桥接模式实现远程通讯分布式开发的历史利用 remote方式调用远程对象实现服务器与客户端之间通讯是一种常用的网络开发方式,在.net 与 java 开发当中,对remote远程对象早已有着足够的支持(对remote远程对象调用有兴趣的朋友欢迎参考一下利用远程对象实现分布式开发)。从 2003年开始 .net 当中就盛传着 .net remoting远程对象调用的分布式开发,.net remoting主要用于管理跨应用程序域的同步和异步rpc 会话。在默认情况下, remoting可以使用 http 或 tcp 协议进行信息通讯,并使用xml
2、编码的 soap 或二进制消息格式进行数据交换。.net remoting 提供了非常灵活和可扩展的编程框架,并且可以管理对象的状态。在framewok2.0出台以后, wcf 盛世登场, 它是综合了 .net remoting远程对象, tcp/ip 套接字,web 服务, msmq ,p2p 点对点等各类型通信方式的产物,wcf 使远程通信进入另一个台阶。而在 java 方面,对远程通信也有强大的支持,它定义了的 rpc(remote procedure call protocol )协议是 项远程过程调用协议,它可以通过网络从远程计算机请求的服务获得计算结果,它无需了解底层网络技术的协议
3、就可以使用如tcp 或 udp 等通信方式,为程序之间传递信息数据。在网络通信模型中,rpc 跨越了传输层和应用层。rpc 使系统更容易地实现分布式式开发。但rpc通讯却并未实现面向对象的开发原则,到而rmi(remote method invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现通讯的一种机制。它以面向对象的开发方式,利用rpc 协议,使服务器与客户端的对象能够实现远程调用。但在.net remoting与 rmi 通信中同时存在一个弊端,那就是对开发语言的限制,无论是使用哪一种通讯方式, 服务器与客户端都必须支持同一种开发语言。通讯过程中不能跨越开发语言的限制
4、,这是一个人令人懊恼的消息。因为在大型的开发项目当中,往往会集合着不同语言开发进行不同模块的开发。而使用remote进行分布式开发,可以提高通信的效率但却又受到限制。对此,各大开发公司做出了积极的贡献,开发出如j-integra(又名 ja.net) ,iiop.net(internet inter-orb protocol),jnbridge等集成开发工具,对.net 与 java 之间实现 remote远程对象的相互调用作出足够的支持。下面在下为大家对“jnbridge 实现.net 与 java 的相互操作 ” 作出详细的介绍。jnbridge概述nbridge是一种领先的 java 与
5、.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.兼容 windo
6、ws 7;4.跨平台交易一体化主要是对用户透明;5.回滚 - 任何一方的终止都将导致双方的行动被回滚;jnbridge支持.net to java ,java to .net两种服务方式, 并可以行用 tcp、http 、soap等多个协议进行双方通讯, 下面就以“java调用 .net” 实现一个简单开发例子, 介绍一下 jnbridge的功能。jnbridge配置首先可以在 jnbridge的官方网站 http:/ jnbridgepro 5.0后,启动 jnbproxy v5.1.exe,选择 create new java-.net project,新建一个项目后,点击project-
7、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_perties 文件记录 t
8、cp 配置信息。.net 服务端开发假如阁下使用的是visual studio 2008或者 visual studio 2010版本,系统将会感知jnbridge的存在,在新建项目时,可以直接新建一个dotnetjavaproxies项目。在此在下想展示一下 jnbridge的转换性能,所以直接新一个解决方案。添加一个model 项目,加入 person类,为 person 加入 serializable特性,注意要去除不必要的引用,因为对framework的引用在转换时将变为对应的包。using system; namespace model serializable publicclas
9、s person publicint id get ; set ; publicstring name get ; set ; publicint age set ; get ; 添加一个 manager项目,加入 personmanager类,在测试时,只是把虚拟数据放在datasource.sour文件中。using system; using model; using system.io; using system.runtime.serialization.formatters.binary; using system.collections.generic; namespace ma
10、nager publicclass personmanager /虚拟数据源private list datasource() filestream filestream = new filestream(./datasource.sour , filemode.open, fileaccess.readwrite); binaryformatter formatter = new binaryformatter(); list personlist=(list)formatter.deserialize(filestream); return personlist; /获取所有的 perso
11、n public list getlist() list personlist = datasource(); return personlist; /根据输入 id 获取对应的 person public person getpersonbyid(int id) foreach (person person in datasource() if (person.id = id) return person; returnnull; 添加一个 consoleapplication作为启动项目,在项目中添加对jnbshare.dll的引用(文件路径 “ jnbridgejnbridgepro v
12、5.14.0-targeted ”),然后添加配置文件:最后启动服务:using system; using com.jnbridge.jnbcore; namespace net_service class program staticvoid main(string args) console.writeline(.net start!); /启动 .net 端服务,注意必须添加对jnbshare的引用,才可使用com.jnbridge.jnbcore.dotnetside dotnetside.startdotnetside(); console.readkey(); /关闭 .net
13、端服务 dotnetside.stopdotnetside(); 生成转换层代码打开 jnbridge,选择工具栏add class from assembly files,分别加入model.dll,manager.dll及 mscorlib.dll(此程序集存在于“ c:” ,里面包含 system,system.collections,system.io等等重要的命名空间)在选择必要的类以后, 按下 “project-build, 系统就会对应选择把 .net 里面的类生成对class放入 proxy.jar代理包。java端开发新建一个 java 项目,引用刚生成的代理包proxy.j
14、ar,还有 jnbcore.jar、bcel-5.1-jnbridge.jar(在 5.1 版本中,这两个文件存在于“ /jnbridge/jnbridgepro v5.1/jnbcore/”),把 jnbridge的 tcp 配置文件 jnbcore_perties复制到 bin 文件夹内,开发一个测试端。值得注意的是在生成proxy.jar代码包的时候,必须对system.collections.generic,system.string等等这些常用类的空间添加引用,否则,在java里面就无法调用 .net 里面的 system.collections.generic.lis
15、t等这些常用类。由于在java 里面对像 list 这些常用的类具有类名之间的冲突,所以在proxy里面会对system.collections.generic.list这些类命名为 system.collections.generic.list_1。package com.jnbridge.javaclient; import com.jnbridge.jnbcore.*; import system.collections.generic.*; / 引用 proxy.jar包内 system.collection.generice.*空间里面的代理类import manager.*; im
16、port model.*; publicclass test /* * param args */publicstaticvoid main(string args) / todo auto-generated method stub try /注册 jnbridge的 tcp 配置文件 jnbcore_perties dotnetside.init(e:java projectsjnbridge javajava clientbinjnbcore_perties); personmanager personmanager=new personmanager();
17、/注意此 list_1是 proxy.jar包内 system.collections.generic.list的代理类,而并非jdk 内自带的 list类 list_1 personlist=personmanager.getlist(); if(personlist.get_count()!=0) /注意此 get_count()方法是 proxy.jar包内 system.collections.generic.list代理类的 getcount()方法for( int n=0;npersonlist.get_count();n+) person person=(person)perso
18、nlist.get_item(n); system.out.println(id:+person.get_id()+ age:+person.get_age()+ name:+person.get_name(); catch(exception ex) ex.printstacktrace(); 完成 java 端后,先启动 .net 服务端,再启动java 端,java 就会调用到 .net 端的数据,屏幕将显示出测试结果:id:0 age:29 name:leslie id:1 age:23 name:rose id:2 age:22 name:jack在 jnbridge官网上有着许多的开发例子,在此不多介绍。对不同开发类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国合成特种纤维织物行业竞争动态与销售前景预测报告
- 门诊导医知识培训
- 单片机课程学习小结
- 公司职业规划模板
- 扶梯救援行动预案
- 天然气泄漏应急处理方案
- 第9课 这是我的家 第一课时 课件(内嵌音视频)2025-2026学年道德与法治一年级下册统编版
- 集体主义教育主题班会
- 2025年吉林松原市初二学业水平地生会考考试题库(附含答案)
- 打工小伙职业规划视频
- 2026四川德阳市什邡市教育和体育局选调高(职)中教师13人备考题库附答案详解
- 2026江西赣州市安远县东江水务集团有限公司第一批人员招聘10人备考题库含答案详解(b卷)
- 企业一般固废管理制度
- 2026年花样滑冰赛事品牌建设与营销创新案例研究
- 北师大版数学七年级下册知识点归纳总结
- 电梯井整体提升搭设安全专项施工方案(完整版)
- 项目RAMS系统保证计划SAP
- 《2020室性心律失常中国专家共识(2016共识升级版)》要点
- 人教A版(2019)高中数学必修第二册 基本立体图形 第2课时圆柱、圆锥、圆台、球与简单组合体的结构特征课件
- 国家开放大学《四史通讲》形考任务专题1-6自测练习参考答案
- 混凝土机械建筑施工机械
评论
0/150
提交评论