




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、JAVA與.NET的相互調(diào)用利用JNBridge橋接模式實現(xiàn)遠程通訊分布式開發(fā)的歷史利用Remote方式調(diào)用遠程對象實現(xiàn)服務(wù)器與客戶端之間通訊是一種常用的網(wǎng)絡(luò)開發(fā)方式,在.NET與JAVA開發(fā)當(dāng)中,對Remote遠程對象早已有著足夠的支持(對Remote遠程對象調(diào)用有興趣的朋友歡迎參考一下利用遠程對象實現(xiàn)分布式開發(fā))。從2003年開始.NET當(dāng)中就盛傳著.NET Remoting遠程對象調(diào)用的分布式開發(fā),.NET Remoting主要用于管理跨應(yīng)用程序域的同步和異步RPC 會話。在默認情況下,Remoting可以使用 HTTP 或 TCP 協(xié)議進行信息通訊,并使用 XML 編碼的 SOAP 或
2、二進制消息格式進行數(shù)據(jù)交換。.NET Remoting 提供了非常靈活和可擴展的編程框架,并且可以管理對象的狀態(tài)。在Framewok2.0出臺以后,WCF盛世登場,它是綜合了.NET Remoting遠程對象,TCP/IP套接字,Web服務(wù),MSMQ,P2P點對點等各類型通信方式的產(chǎn)物,WCF使遠程通信進入另一個臺階。而在JAVA方面,對遠程通信也有強大的支持,它定義了的RPC(Remote Procedure Call Protocol)協(xié)議是項遠程過程調(diào)用協(xié)議,它可以通過網(wǎng)絡(luò)從遠程計算機請求的服務(wù)獲得計算結(jié)果,它無需了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議就可以使用如TCP或UDP等通信方式,為程序之間傳遞
3、信息數(shù)據(jù)。在網(wǎng)絡(luò)通信模型中,RPC跨越了傳輸層和應(yīng)用層。RPC使系統(tǒng)更容易地實現(xiàn)分布式式開發(fā)。但RPC通訊卻并未實現(xiàn)面向?qū)ο蟮拈_發(fā)原則,到而RMI(Remote Method Invocation)遠程方法調(diào)用是一種計算機之間利用遠程對象互相調(diào)用實現(xiàn)通訊的一種機制。它以面向?qū)ο蟮拈_發(fā)方式,利用RPC協(xié)議,使服務(wù)器與客戶端的對象能夠?qū)崿F(xiàn)遠程調(diào)用。但在.NET Remoting與RMI通信中同時存在一個弊端,那就是對開發(fā)語言的限制,無論是使用哪一種通訊方式,服務(wù)器與客戶端都必須支持同一種開發(fā)語言。通訊過程中不能跨越開發(fā)語言的限制,這是一個人令人懊惱的消息。因為在大型的開發(fā)項目當(dāng)中,往往會集合著不同
4、語言開發(fā)進行不同模塊的開發(fā)。而使用Remote進行分布式開發(fā),可以提高通信的效率但卻又受到限制。對此,各大開發(fā)公司做出了積極的貢獻,開發(fā)出如J-Integra(又名Ja.NET),IIOP.NET(Internet Inter-Orb Protocol),JNBridge等集成開發(fā)工具,對.NET與JAVA之間實現(xiàn)Remote遠程對象的相互調(diào)用作出足夠的支持。下面在下為大家對“JNBridge實現(xiàn).NET與JAVA的相互操作”作出詳細的介紹。JNBridge概述NBridge是一種領(lǐng)先的JAVA與.NET互操作的的產(chǎn)品,憑借JNBridge技術(shù),Java和.NET代碼無需交叉編譯器就可以實現(xiàn)對
5、象共享。所有Java代碼運行在JVM上,而.NET代碼則運行在CLR上。在該方案下,JVM和CLR可以運行在不同的機器上,也可以運行在一臺機器的不同進程上,甚至還能運行在相同的進程的不同應(yīng)用程序域上。經(jīng)歷多年的發(fā)展,JNBridge已經(jīng)發(fā)布了JNBridgePro 5.0,JNBridgePro 5.0有著更強大的功能。1. 支持ava和.NET之間的跨平臺事務(wù); 2. 支持Microsoft Visual Studio和Eclipse插件; 3. 兼容Windows 7; 4. 跨平臺交易一體化主要是對用戶透明; 5. '回滾'- 任何一方的終止都將導(dǎo)致雙方的行動被回滾; J
6、NBridge支持.NET To Java ,Java To .NET兩種服務(wù)方式,并可以行用TCP、HTTP、SOAP等多個協(xié)議進行雙方通訊,下面就以 “JAVA調(diào)用.NET” 實現(xiàn)一個簡單開發(fā)例子,介紹一下JNBridge的功能。JNBridge配置 首先可以在JNBridge的官方網(wǎng)站 下載程序,安裝JNBridgePro 5.0后,啟動JNBProxy v5.1.exe,選擇Create new Java->.NET Project,新建一個項目后,點擊Project->Java Options對系統(tǒng)進行配置。首先設(shè)置好本機的java.exe應(yīng)用程序和jvm.dll程序集的
7、路徑,然后設(shè)置jnbcore.jar和bcel.jar的路徑(在5.1版本中,這兩個文件存在于“/JNBridge/JNBridgePro v5.1/jnbcore/”),最后可以選擇HTTP或TCP通訊方式(在此例子當(dāng)中在下選擇TCP通訊,系統(tǒng)默認接口為8085你也可以選擇自定義的接口)。點擊“OK”按鈕,配置完成時,系統(tǒng)將自動生成一個 "/JNBridge/JNBridgePro v5.1/jnbcore/jnbcore_perties" 文件記錄TCP配置信息。.NET服務(wù)端開發(fā)假如閣下使用的是Visual Studio 2008或者Visual Stu
8、dio 2010版本,系統(tǒng)將會感知JNBridge的存在,在新建項目時,可以直接新建一個DotNetJavaProxies項目。在此在下想展示一下JNBridge的轉(zhuǎn)換性能,所以直接新一個解決方案。添加一個Model項目,加入Person類,為Person加入Serializable特性,注意要去除不必要的引用,因為對Framework的引用在轉(zhuǎn)換時將變?yōu)閷?yīng)的包。using System;namespace Model Serializable public class Person public int ID get; set; public string Name get; set; p
9、ublic int Age set; get; 添加一個Manager項目,加入PersonManager類,在測試時,只是把虛擬數(shù)據(jù)放在DataSource.sour文件中。using System;using Model;using System.IO;using System.Runtime.Serialization.Formatters.Binary;using System.Collections.Generic;namespace Manager public class PersonManager / 虛擬數(shù)據(jù)源 private List<Person> DataS
10、ource() FileStream fileStream = new FileStream("./DataSource.sour", FileMode.Open, FileAccess.ReadWrite); BinaryFormatter formatter = new BinaryFormatter(); List<Person> personList=(List<Person>)formatter.Deserialize(fileStream); return personList; /獲取所有的Person public List<P
11、erson> GetList() List<Person> personList = DataSource(); return personList; /根據(jù)輸入ID獲取對應(yīng)的Person public Person GetPersonByID(int id) foreach (Person person in DataSource() if (person.ID = id) return person; return null; 添加一個ConsoleApplication作為啟動項目,在項目中添加對JNBShare.dll的引用(文件路徑 “JNBridgeJNBridg
12、ePro v5.14.0-targeted”),然后添加配置文件:<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <sectionGroup name="jnbridge"> <section name="dotNetToJavaConfig" type="System.Configuration.SingleTagSectionHandler"/
13、> <section name="javaToDotNetConfig" type="System.Configuration.SingleTagSectionHandler"/> <section name="tcpNoDelay" type="System.Configuration.SingleTagSectionHandler"/> <section name="javaSideDeclarations" type="System.Confi
14、guration.NameValueSectionHandler"/> <section name="assemblyList" type="com.jnbridge.jnbcore.AssemblyListHandler, JNBShare"/> </sectionGroup> </configSections> <jnbridge> <dotNetToJavaConfig scheme="jtcp" host="localhost" port
15、="8085"/> <!-注意通訊接口必須與JNBridge中配置的接口一致-> <javaToDotNetConfig scheme="jtcp" port="8086"/> <!- 注冊共用程序集 -> <assemblyList> <assembly file=".Model.dll"/> <assembly file=".Manager.dll"/> </assemblyList> </jnb
16、ridge></configuration>最后啟動服務(wù):using System;using com.jnbridge.jnbcore;namespace NET_Service class Program static void Main(string args) Console.WriteLine(".NET Start!"); /啟動.NET端服務(wù),注意必須添加對JNBShare的引用,才可使用com.jnbridge.jnbcore.DotNetSide DotNetSide.startDotNetSide(); Console.ReadKey(
17、); /關(guān)閉.NET端服務(wù) DotNetSide.stopDotNetSide(); 生成轉(zhuǎn)換層代碼打開JNBridge,選擇工具欄 "Add class from assembly files",分別加入Model.dll,Manager.dll及mscorlib.dll(此程序集存在于“C:WindowsMicrosoft.NETFrameworkv4.0.30319”,里面包含System,System.Collections,System.IO等等重要的命名空間)在選擇必要的類以后,按下“Project->Build",系統(tǒng)就會對應(yīng)選擇把.NET里面
18、的類生成對class放入Proxy.jar代理包。 Java端開發(fā)新建一個Java項目,引用剛生成的代理包Proxy.jar,還有jnbcore.jar、bcel-5.1-jnbridge.jar(在5.1版本中,這兩個文件存在于“/JNBridge/JNBridgePro v5.1/jnbcore/”),把JNBridge的TCP配置文件jnbcore_perties復(fù)制到bin文件夾內(nèi),開發(fā)一個測試端。值得注意的是在生成Proxy.jar代碼包的時候,必須對System.Collections.Generic,System.String等等這些常用類的空間添加引用,
19、否則,在Java里面就無法調(diào)用.NET里面的System.Collections.Generic.List等這些常用類。由于在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包內(nèi)System.Collec
20、tion.Generice.*空間里面的代理類import Manager.*;import Model.*;public class Test /* * param args */ public static void main(String args) / TODO Auto-generated method stub try /注冊JNBridge的TCP配置文件jnbcore_perties DotNetSide.init("E:Java ProjectsJNBridge JAVAJAVA Clientbinjnbcore_perties"
21、;); PersonManager personManager=new PersonManager(); /注意此List_1是Proxy.jar包內(nèi)System.Collections.Generic.List的代理類,而并非JDK內(nèi)自帶的List類 List_1 personList=personManager.GetList(); if(personList.Get_Count()!=0) /注意此Get_Count()方法是Proxy.jar包內(nèi)System.Collections.Generic.List代理類的GetCount()方法 for(int n=0;n<personList.Get_Count();n+) Person person=(Person)personList.Get_Item(n); System.out.println("Id:"+person.Get_ID()+" Age:"+person.Get_Age()+" Name:"+person.Get_Name(); catch(Exception ex) ex.print
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 整合網(wǎng)絡(luò)營銷與傳統(tǒng)營銷
- 聯(lián)想神州數(shù)碼品牌形象策略書樣本
- 河北省石家莊市名校2025年中考化學(xué)試題模擬題及解析(浙江卷)含解析
- 山東石油化工學(xué)院《生物醫(yī)藥品》2023-2024學(xué)年第二學(xué)期期末試卷
- 漳州城市職業(yè)學(xué)院《英語演講與辯論理解當(dāng)代中國》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南機電職業(yè)技術(shù)學(xué)院《中醫(yī)食療》2023-2024學(xué)年第二學(xué)期期末試卷
- 北京市×區(qū)個人簡歷
- 江蘇警官學(xué)院《營銷理論前沿專題》2023-2024學(xué)年第二學(xué)期期末試卷
- 河北外國語學(xué)院《新材料經(jīng)濟與管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年河北省衡水名校高三一輪復(fù)習(xí)階段性考試(英語試題理)試題含解析
- 刑民交叉案件的司法認定
- 2025年度股權(quán)合作協(xié)議書新版:跨境電商平臺股權(quán)合作協(xié)議
- GB/T 33136-2024信息技術(shù)服務(wù)數(shù)據(jù)中心服務(wù)能力成熟度模型
- 《保護地球愛護家園》課件
- 霧化吸入療法合理用藥專家共識(2024版)解讀
- 2024年度產(chǎn)學(xué)研合作與科研獎勵協(xié)議3篇
- 電力工程線路交叉跨越施工主要工序及特殊工序施工方法
- 【MOOC】軟件度量及應(yīng)用-中南大學(xué) 中國大學(xué)慕課MOOC答案
- 24秋國家開放大學(xué)《兒童發(fā)展問題的咨詢與輔導(dǎo)》周測驗參考答案
- 2025屆江蘇省蘇州市重點中學(xué)高三第二次模擬考試英語試卷含解析
- 精神病學(xué)第九版
評論
0/150
提交評論