JAVA与NET的相互调用利用JNBridge桥接模式实现远程通讯Word文件下载.docx
《JAVA与NET的相互调用利用JNBridge桥接模式实现远程通讯Word文件下载.docx》由会员分享,可在线阅读,更多相关《JAVA与NET的相互调用利用JNBridge桥接模式实现远程通讯Word文件下载.docx(7页珍藏版)》请在冰豆网上搜索。
NBridge是一种领先的JAVA与.NET互操作的的产品,凭借JNBridge技术,Java和.NET代码无需交叉编译器就可以实现对象共享。
所有Java代码运行在JVM上,而.NET代码则运行在CLR上。
在该方案下,JVM和CLR可以运行在不同的机器上,也可以运行在一台机器的不同进程上,甚至还能运行在相同的进程的不同应用程序域上。
经历多年的发展,JNBridge已经发布了JNBridgePro5.0,JNBridgePro5.0有着更强大的功能。
1.支持ava和.NET之间的跨平台事务;
2.支持MicrosoftVisualStudio和Eclipse插件;
3.兼容Windows7;
4.跨平台交易一体化主要是对用户透明;
5.'
回滚'
-任何一方的终止都将导致双方的行动被回滚;
JNBridge支持.NETToJava,JavaTo.NET两种服务方式,并可以行用TCP、HTTP、SOAP等多个协议进行双方通讯,下面就以“JAVA调用.NET”实现一个简单开发例子,介绍一下JNBridge的功能。
JNBridge配置
首先可以在JNBridge的官方网站下载程序,安装JNBridgePro5.0后,启动JNBProxyv5.1.exe,选择CreatenewJava->
.NETProject,新建一个项目后,点击Project->
JavaOptions对系统进行配置。
首先设置好本机的java.exe应用程序和jvm.dll程序集的路径,然后设置jnbcore.jar和bcel.jar的路径(在5.1版本中,这两个文件存在于“/JNBridge/JNBridgeProv5.1/jnbcore/”),最后可以选择HTTP或TCP通讯方式(在此例子当中在下选择TCP通讯,系统默认接口为8085你也可以选择自定义的接口)。
点击“OK”按钮,配置完成时,系统将自动生成一个"
/JNBridge/JNBridgeProv5.1/jnbcore/jnbcore_tcp.properties"
文件记录TCP配置信息。
.NET服务端开发
假如阁下使用的是VisualStudio2008或者VisualStudio2010版本,系统将会感知JNBridge的存在,在新建项目时,可以直接新建一个DotNetJavaProxies项目。
在此在下想展示一下JNBridge的转换性能,所以直接新一个解决方案。
添加一个Model项目,加入Person类,为Person加入Serializable特性,注意要去除不必要的引用,因为对Framework的引用在转换时将变为对应的包。
usingSystem;
namespaceModel
{
[Serializable]
publicclassPerson
{
publicintID
get;
set;
}
publicstringName
publicintAge
}
添加一个Manager项目,加入PersonManager类,在测试时,只是把虚拟数据放在DataSource.sour文件中。
usingModel;
usingSystem.IO;
usingSystem.Runtime.Serialization.Formatters.Binary;
usingSystem.Collections.Generic;
namespaceManager
publicclassPersonManager
///虚拟数据源
privateList<
Person>
DataSource()
FileStreamfileStream=newFileStream("
./DataSource.sour"
FileMode.Open,FileAccess.ReadWrite);
BinaryFormatterformatter=newBinaryFormatter();
List<
personList=(List<
)formatter.Deserialize((fileStream));
returnpersonList;
//获取所有的Person
publicList<
GetList()
personList=DataSource();
//根据输入ID获取对应的Person
publicPersonGetPersonByID(intid)
foreach(PersonpersoninDataSource())
if(person.ID==id)
returnperson;
returnnull;
添加一个ConsoleApplication作为启动项目,在项目中添加对JNBShare.dll的引用(文件路径“\JNBridge\JNBridgeProv5.1\4.0-targeted”),然后添加配置文件:
<
?
xmlversion="
1.0"
encoding="
utf-8"
?
>
configuration>
<
configSections>
sectionGroupname="
jnbridge"
sectionname="
dotNetToJavaConfig"
type="
System.Configuration.SingleTagSectionHandler"
/>
javaToDotNetConfig"
tcpNoDelay"
javaSideDeclarations"
System.Configuration.NameValueSectionHandler"
assemblyList"
com.jnbridge.jnbcore.AssemblyListHandler,JNBShare"
/sectionGroup>
/configSections>
jnbridge>
dotNetToJavaConfigscheme="
jtcp"
host="
localhost"
port="
8085"
!
--注意通讯接口必须与JNBridge中配置的接口一致-->
javaToDotNetConfigscheme="
8086"
--注册共用程序集-->
assemblyList>
assemblyfile="
.\Model.dll"
.\Manager.dll"
/assemblyList>
/jnbridge>
/configuration>
最后启动服务:
usingcom.jnbridge.jnbcore;
namespaceNET_Service
classProgram
staticvoidMain(string[]args)
Console.WriteLine("
.NETStart!
"
);
//启动.NET端服务,注意必须添加对JNBShare的引用,才可使用com.jnbridge.jnbcore.DotNetSide
DotNetSide.startDotNetSide();
Console.ReadKey();
//关闭.NET端服务
DotNetSide.stopDotNetSide();
生成转换层代码
打开JNBridge,选择工具栏"
Addclassfromassemblyfiles"
,分别加入Model.dll,Manager.dll及mscorlib.dll(此程序集存在于“C:
\Windows\Microsoft.NET\Framework\v4.0.30319\”,里面包含System,System.Collections,System.IO等等重要的命名空间)
在选择必要的类以后,按下“Project->
Build"
,系统就会对应选择把.NET里面的类生成对class放入Proxy.jar代理包。
Java端开发
新建一个Java项目,引用刚生成的代理包Proxy.jar,还有jnbcore.jar、bcel-5.1-jnbridge.jar(在5.1版本中,这两个文件存在于“/JNBridge/JNBridgeProv5.1/jnbcore/”),把JNBridge的TCP配置文件jnbcore_tcp.properties复制到bin文件夹内,开发一个测试端。
值得注意的是在生成Proxy.jar代码包的时候,必须对System.Collections.Generic,System.String等等这些常用类的空间添加引用,否则,在Java里面就无法调用.NET里面的System.Collections.Generic.List等这些常用类。
由于在Java里面对像List这些常用的类具有类名之间的冲突,所以在Proxy里面会对System.Collections.Generic.List这些类命名为System.Collections.Generic.List_1。
packagecom.jnbridge.javaclient;
importcom.jnbridge.jnbcore.*;
importSystem.Collections.Generic.*;
//引用Proxy.jar包内System.Collection.Generice.*空间里面的代理类
importManager.*;
importModel.*;
publicclassTest{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
try{
//注册JNBridge的TCP配置文件jnbcore_tcp.properties
DotNetSide.init("
E:
\\JavaProjects\\JNBridgeJAVA\\JAVAClient\\bin\\jnbcore_tcp.properties"
PersonManagerpersonManager=newPersonManager();
//注意此List_1是Proxy.jar包内System.Collections.Generic.List的代理类,而并非JDK内自带的List类
List__1personList=personManager.GetList();
if(personList.Get_Count()!
=0){
//注意此Get_Count()方法是Proxy.jar包内System.Collections.Generic.List代理类的GetCount()方法
for(intn=0;
n<
personList.Get_Count();
n++){
Personperson=(Person)personList.Get_Item(n);
System.out.println("
Id:
+person.Get_ID()+"
Age:
+person.Get_Age()+"
Name:
+person.Get_Name());
}catch(Exceptionex){
ex.printStackTrace();
完成JAVA端后,先启动.NET服务端,再启动JAVA端,JAVA就会调用到.NET端的数据,屏幕将显示出测试结果:
0Age:
29Name:
Leslie
1Age:
23Name:
Rose
2Age:
22Name:
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平台之间实现无缝连接。
综上所述,JNBridge可视为JAVA平台与.NET平台之间通讯的桥梁,上述的例子利用JNBridge现实JAVA与.NET的无缝连接,可以使.NET的客户端无需感知JAVA底层的存在,.NET的UI端直接调用Proxy代理就可以与JAVA端实现通讯,这不失为JAVA与.NET之间互相调用的一种好手段。
源代码(下载)