




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
JAVA與.NET的相互調用一一利用JNBridge橋接模式實現(xiàn)遠程通訊分布式開發(fā)的歷史利用Remote方式調用遠程對象實現(xiàn)服務器與客戶端之間通訊是一種常用的網絡開發(fā)方式,在.NET與JAVA開發(fā)當中,對Remote遠程對象早已有著足夠的支持(對Remote遠程對象調用有興趣的朋友歡迎參考一下利用遠程對象實現(xiàn)分布式開發(fā))。從2003年開始.NET當中就盛傳著.NETRemoting遠程對象調用的分布式開發(fā),.NETRemoting主要用于管理跨應用程序域的同步和異步RPC會話。在默認情況下,Remoting可以使用HTTP或TCP協(xié)議進行信息通訊,并使用XML編碼的SOAP或二進制消息格式進行數(shù)據交換。.NETRemoting提供了非常靈活和可擴展的編程框架,并且可以管理對象的狀態(tài)。在Framewok2.0出臺以后,WCF盛世登場,它是綜合了.NETRemoting遠程對象,TCP/IP套接字,Web服務,MSMQ,P2P點對點等各類型通信方式的產物,WCF使遠程通信進入另一個臺階。而在JAVA方面,對遠程通信也有強大的支持,它定義了的RPC(RemoteProcedureCallProtocol)協(xié)議是一項遠程過程調用協(xié)議,它可以通過網絡從遠程計算機請求的服務獲得計算結果,它無需了解底層網絡技術的協(xié)議就可以使用如TCP或UDP等通信方式,為程序之間傳遞信息數(shù)據。在網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使系統(tǒng)更容易地實現(xiàn)分布式式開發(fā)。但RPC通訊卻并未實現(xiàn)面向對象的開發(fā)原則,到而RMI(RemoteMethodInvocation)遠程方法調用是一
種計算機之間利用遠程對象互相調用實現(xiàn)通訊的一種機制。它以面向對象的開發(fā)方式,利用RPC協(xié)議,使服務器與客戶端的對象能夠實現(xiàn)遠程調用。但在.NETRemoting與RMI通信中同時存在一個弊端,那就是對開發(fā)語言的限制,無論是使用哪一種通訊方式,服務器與客戶端都必須支持同一種開發(fā)語言。通訊過程中不能跨越開發(fā)語言的限制,這是一個人令人懊惱的消息。因為在大型的開發(fā)項目當中,往往會集合著不同語言開發(fā)進行不同模塊的開發(fā)。而使用Remote進行分布式開發(fā),可以提高通信的效率但卻又受到限制。對此,各大開發(fā)公司做出了積極的貢獻,開發(fā)出如J-Integra(又名Ja.NET),IIOP.NET(InternetInter-OrbProtocol),JNBridge等集成開發(fā)工具,對.NET與JAVA之間實現(xiàn)Remote遠程對象的相互調用作出足夠的支持。下面在下為大家對“JNBridge實現(xiàn).NET與JAVA的相互操作〃作出詳細的介紹。JNBridge概述NBridge是一種領先的JAVA與.NET互操作的的產品,憑借JNBridge技術,Java和.NET代碼無需交叉編譯器就可以實現(xiàn)對象共享。所有Java代碼運行在JVM上,而.NET代碼則運行在CLR上。在該方案下,JVM和CLR可以運行在不同的機器上,也可以運行在一臺機器的不同進程上,甚至還能運行在相同的進程的不同應用程序域上。經歷多年的發(fā)展,JNBridge已經發(fā)布了JNBridgePro5.0,JNBridgePro5.0有著更強大的功能。支持ava和.NET之間的跨平臺事務;支持MicrosoftVisualStudio和Eclipse插件;兼容Windows7;跨平臺交易一體化主要是對用戶透明;'回滾'-任何一方的終止都將導致雙方的行動被回滾;
JNBridge支持.NETToJava,JavaTo.NET兩種服務方式,并可以行用TCP、HTTP、SOAP等多個協(xié)議進行雙方通訊,下面就以“JAVA調用.NET”實現(xiàn)一個簡單開發(fā)例子,介紹一下JNBridge的功能。JNBridge配置首先可以在JNBridge的官方網站/downloads.htm下載程序,安裝JNBridgePro5.0后,啟動JNBProxyv5.1.exe,選擇CreatenewJava->.NETProject,新建一個項目后,點擊Project->JavaOptions對系統(tǒng)進行配置。首先設置好本機的java.exe應用程序和jvm.dll程序集的路徑,然后設置jnbcore.jar和bcel.jar的路徑(在5.1版本中,這兩個文件存在于“/JNBridge/JNBridgeProv5.1/jnbcore/”),最后可以選擇HTTP或TCP通訊方式(在此例子當中在下選擇TCP通訊,系統(tǒng)默認接口為8085你也可以選擇自定義的接口)。點擊“OK”按鈕,配置完成時,系統(tǒng)將自動生成一個"/JNBridge/JNBridgeProv5.1/jnbcore/jnbcore_perties"文件記錄TCP配置信息。.NET服務端開發(fā)假如閣下使用的是VisualStudio2008或者VisualStudio2010版本,系統(tǒng)將會感知JNBridge的存在,在新建項目時,可以直接新建一個DotNetJavaProxies項目。在此在下想展示一下JNBridge的轉換性能,所以直接新一個解決方案。添加一個Model項目,加入Person類,為Person加入Serializable特性,注意要去除不必要的引用,因為對Framework的引用在轉換時將變?yōu)閷陌?。usingSystem;…5
[Serializable]publicclassPersonDget;set;p—get;set;publicintAgeset;get;添加一個Manager項目,加入PersonManager類,在測試時,只是把虛擬數(shù)據放在DataSource.sour文件中。
usingSystem;usingModel;usingSystem.IO;usingSystem.Runtime.Serialization.Formatters.Binary;usingSystem.Collections.Generic;namespaceManager{publicclassPersonManager{///虛擬數(shù)據源privateList<Person>DataSource(){FileStreamfileStreamnewFileStream("./DataSource.sour",FileMode.Open,FileAccess.ReadWrite);BinaryFormatterformatternewBinaryFormatter();List<Person>personList=(List<Person>)formatter.Deserialize((fileStream));returnpersonList;}//獲取所有的PersonpublicList<Person>GetList()
List<Person>personList=DataSource();
returnpersonList;…皿,應,的<rsonpublicPersonG—id)foreach(PersonpersoninDataSource())—ID==id);添加一個ConsoleApplication作為啟動項目,在項目中添加對JNBShare.dll的引用(文件路徑“\JNBridge\JNBridgeProv5.1\4.0-targeted”),然后添加配置文件:<?xmlversion="1.0"encoding="utf-8"?><configuration><configSections><sectionGroupname="jnbridge"><sectionname="dotNetToJavaConfig"ty="System.Configuration.SingleTagSectionHandler"/><sectionname="javaToDotNetConfig"ty="System.Configuration.SingleTagSectionHandler"/><sectionname="tcpNoDelay"ty="System.Configuration.SingleTagSectionHandler"/><sectionname="javaSideDeclarations"ty="System.Configuration.NameValueSectionHandler"/><sectionname="assemblyList"ty="com.jnbridge.jnbcore.AssemblyListHandler,JNBShare/></sectionGroup></configSections><jnbridge><dotNetToJavaConfigscheme="jtcp"host="localhost"port="8085'/><!--注意通訊接口必須與JNBridge中配置的接口一致一><javaToDotNetConfigscheme="jtcp"port="8086"/><!--注冊共用程序集--><assemblyList><assemblyfile=".\Model.dll"/><assemblyfile=".\Manager.dll"/></assemblyList></jnbridge>最后啟動服務:usingSystem;usingcom.jnbridge.jnbcore;namespaceNET_Servicec「sstaticvoidMain(string[]args){_5;//啟動.NET端服務,注意必須添加對JNBShare的引用,才可使用com.jnbridge.jnbcore.DotNetSideDotNetSide.startDotNetSide();Console.ReadKey();//關閉.NET端服務}}■Do^生成轉換層代碼打開JNBridge,選擇工具欄"Addclassfromassemblyfiles",分別加入Model.dll,Manager.dll及mscorlib.dll(此程序集存在于
''C:\Windows\Microsoft.NET\Framework\v4.0.30319\”,里面包含System,System.Collections,System.IO等等重要的命名空間)給JNBProxy(Java->.NET)-JNBProxyProject*|口||回||^^|FileEditViewProjectHelp>111^日I引可羌I園?lErivironmentExposedProxiessc-^^^^券^券^^^券^洵&@@□..l-l—s-s-s-s-s-E-E-s-s-s-s-E-ril.4Sigriatui'ePUD±1CIclassModel.PersonentendsSystem.ObjectpublieModel.Ferson;publicintID{get;set;};publicstringN:aine{get;set;ErivironmentExposedProxiessc-^^^^券^券^^^券^洵&@@□..l-l—s-s-s-s-s-E-E-s-s-s-s-E-ril.4Sigriatui'ePUD±1CIclassModel.PersonentendsSystem.ObjectpublieModel.Ferson;publicintID{get;set;};publicstringN:aine{get;set;publicintAge{get;set;};M:±TLager:-ZipferEorJitanager日…回聳Model-…wy—畝???□#SystemM:anagerMicrosoft.in32Microsoft.Win32.SafeH:diL>llesModelSysternSystem.CollectioilsSystem.Collectioils.ConcurrentSystem.Collections.GenericSystem.Coilections.ObjectModelSystem.Con£iguration.AeeemblieSystern.Heploj-ttient.InterrualAdd+PersoilH-nrn.EeAdd++田…回鄉(xiāng)System.CollectionsS"System.Collections.Generic由…□JSystem.10E"System.Runtime.Seri:alization.Formatters.Bin:iryThere:arm12daysleftinyom-trialli>zeriEe.在選擇必要的類以后,按下“Project->Build”,系統(tǒng)就會對應選擇把.NET里面的類生成對class放入Proxy.jar代理包。Java端開發(fā)新建一個Java項目,引用剛生成的代理包Proxy.jar,還有jnbcore.jar、bcel-5.1-jnbridge.jar(在5.1版本中,這兩個文件存在于“/JNBridge/JNBridgeProv5.1/jnbcore/"),把JNBridge的TCP配置文件jnbcore_perties復制至Ubin文件夾內,開發(fā)一個測試端。值得注意的是在生成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.*;//弓1用Proxy.jar包內System.Collection.Generice.*空間里面的代理類importManager.*;importModel.*;publicclassTest{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubtry{//注冊JNBridge的TCP配置文件jnbcore_pertiesDotNetSide.init("E:\\JavaProjects\\JNBridgeJAVA\\JAVAClient\\bin\\jnbcore_perties");PersonManagerpersonManagernewPersonManager();//注意此List_1是Proxy.jar包內System.Collections.Generic.List的代理類,而并非JDK內自帶的List類
List1personList=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(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 邵東二中考試試卷及答案
- 山西高二聯(lián)考試卷及答案
- 三原職教高考試卷及答案
- 2025至2030年中國貴金屬清洗機市場分析及競爭策略研究報告
- 硅冶煉原料選擇與配料計算考核試卷
- 礦產勘查項目管理流程與效率提升考核試卷
- 經濟型酒店品牌競爭策略考核試卷
- 毛皮服裝設計與時尚趨勢預測考核試卷
- 社會人文與消費者行為考核試卷
- 廚房電器安全性能檢測與風險評估考核試卷
- 《特斯拉汽車供應鏈管理》課件
- 內河船舶船員基本安全知識考試題庫300題(含答案)
- 無人機操控 教學設計公開課教案教學設計課件
- 2024 年普通高等學校招生全國統(tǒng)一考試新課標 I 卷-數(shù)學試卷-全國
- 《瑞幸咖啡財務造假案例分析》8400字(論文)
- 安全生產法律法規(guī)注冊安全工程師考試(初級)試題與參考答案(2024年)一
- (試卷)2024貴州省初中學業(yè)水平考試·物理
- 云南省職業(yè)技能大賽(健康照護賽項)理論參考試題及答案
- 自然辯證法論述題146題帶答案(可打印版)
- DB43T 2534-2022 電力氣象服務技術規(guī)范
- 工程合伙人協(xié)議書范文模板下載電子版
評論
0/150
提交評論