成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JNBridge橋接模式實(shí)現(xiàn)Java與.NET遠(yuǎn)程通訊

開發(fā) 后端
Java與.NET的互相調(diào)用,可以通過JNBridge來實(shí)現(xiàn)。今天我們談?wù)摰木褪荍NBridge橋接模式實(shí)現(xiàn)Java與.NET遠(yuǎn)程通訊。

分布式開發(fā)的歷史

利用Remote方式調(diào)用遠(yuǎn)程對(duì)象實(shí)現(xiàn)服務(wù)器與客戶端之間通訊是一種常用的網(wǎng)絡(luò)開發(fā)方式,在.NET與Java開發(fā)當(dāng)中,對(duì)Remote遠(yuǎn)程對(duì)象早已有著足夠的支持(對(duì)Remote遠(yuǎn)程對(duì)象調(diào)用有興趣的朋友歡迎參考一下利用遠(yuǎn)程對(duì)象實(shí)現(xiàn)分布式開發(fā))。

從2003年開始.NET當(dāng)中就盛傳著.NET Remoting遠(yuǎn)程對(duì)象調(diào)用的分布式開發(fā),.NET Remoting主要用于管理跨應(yīng)用程序域的同步和異步RPC 會(huì)話。在默認(rèn)情況下,Remoting可以使用 HTTP 或 TCP 協(xié)議進(jìn)行信息通訊,并使用 XML 編碼的 SOAP 或二進(jìn)制消息格式進(jìn)行數(shù)據(jù)交換。.NET Remoting 提供了非常靈活和可擴(kuò)展的編程框架,并且可以管理對(duì)象的狀態(tài)。在Framewok2.0出臺(tái)以后,WCF盛世登場(chǎng),它是綜合了.NET Remoting遠(yuǎn)程對(duì)象,TCP/IP套接字,Web服務(wù),MSMQ,P2P點(diǎn)對(duì)點(diǎn)等各類型通信方式的產(chǎn)物,WCF使遠(yuǎn)程通信進(jìn)入另一個(gè)臺(tái)階。

而在Java方面,對(duì)遠(yuǎn)程通信也有強(qiáng)大的支持,它定義了的RPC(Remote Procedure Call Protocol)協(xié)議是—項(xiàng)遠(yuǎn)程過程調(diào)用協(xié)議,它可以通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)請(qǐng)求的服務(wù)獲得計(jì)算結(jié)果,它無需了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議就可以使用如TCP或UDP等通信方式,為程序之間傳遞信息數(shù)據(jù)。在網(wǎng)絡(luò)通信模型中,RPC跨越了傳輸層和應(yīng)用層。RPC使系統(tǒng)更容易地實(shí)現(xiàn)分布式式開發(fā)。但RPC通訊卻并未實(shí)現(xiàn)面向?qū)ο蟮拈_發(fā)原則,到而RMI(Remote Method Invocation)遠(yuǎn)程方法調(diào)用是一種計(jì)算機(jī)之間利用遠(yuǎn)程對(duì)象互相調(diào)用實(shí)現(xiàn)通訊的一種機(jī)制。它以面向?qū)ο蟮拈_發(fā)方式,利用RPC協(xié)議,使服務(wù)器與客戶端的對(duì)象能夠?qū)崿F(xiàn)遠(yuǎn)程調(diào)用。

但在.NET Remoting與RMI通信中同時(shí)存在一個(gè)弊端,那就是對(duì)開發(fā)語言的限制,無論是使用哪一種通訊方式,服務(wù)器與客戶端都必須支持同一種開發(fā)語言。通訊過程中不能跨越開發(fā)語言的限制,這是一個(gè)人令人懊惱的消息。因?yàn)樵诖笮偷拈_發(fā)項(xiàng)目當(dāng)中,往往會(huì)集合著不同語言開發(fā)進(jìn)行不同模塊的開發(fā)。而使用Remote進(jìn)行分布式開發(fā),可以提高通信的效率但卻又受到限制。對(duì)此,各大開發(fā)公司做出了積極的貢獻(xiàn),開發(fā)出如J-Integra(又名Ja.NET),IIOP.NET(Internet Inter-Orb Protocol),JNBridge等集成開發(fā)工具,對(duì).NET與Java之間實(shí)現(xiàn)Remote遠(yuǎn)程對(duì)象的相互調(diào)用作出足夠的支持。下面在下為大家對(duì)“JNBridge實(shí)現(xiàn).NET與Java的相互操作”作出詳細(xì)的介紹。

JNBridge概述

JNBridge是一種領(lǐng)先的Java與.NET互操作的的產(chǎn)品,憑借JNBridge技術(shù),Java和.NET代碼無需交叉編譯器就可以實(shí)現(xiàn)對(duì)象共享。所有Java代碼運(yùn)行在JVM上,而.NET代碼則運(yùn)行在CLR上。在該方案下,JVM和CLR可以運(yùn)行在不同的機(jī)器上,也可以運(yùn)行在一臺(tái)機(jī)器的不同進(jìn)程上,甚至還能運(yùn)行在相同的進(jìn)程的不同應(yīng)用程序域上。經(jīng)歷多年的發(fā)展,JNBridge已經(jīng)發(fā)布了JNBridgePro 5.0,JNBridgePro 5.0有著更強(qiáng)大的功能。

  1. 支持ava和.NET之間的跨平臺(tái)事務(wù);
  2. 支持Microsoft Visual Studio和Eclipse插件;
  3. 兼容Windows 7;
  4. 跨平臺(tái)交易一體化主要是對(duì)用戶透明;
  5. '回滾'- 任何一方的終止都將導(dǎo)致雙方的行動(dòng)被回滾;

JNBridge支持.NET To Java ,Java To .NET兩種服務(wù)方式,并可以行用TCP、HTTP、SOAP等多個(gè)協(xié)議進(jìn)行雙方通訊,下面就以 “Java調(diào)用.NET” 實(shí)現(xiàn)一個(gè)簡(jiǎn)單開發(fā)例子,介紹一下JNBridge的功能。

JNBridge配置

首先可以在JNBridge的官方網(wǎng)站http://www.jnbridge.com/downloads.htm 下載程序,安裝JNBridgePro 5.0后,啟動(dòng)JNBProxy v5.1.exe,選擇Create new Java->.NET Project,新建一個(gè)項(xiàng)目后,點(diǎn)擊Project->Java Options對(duì)系統(tǒng)進(jìn)行配置。首先設(shè)置好本機(jī)的Java.exe應(yīng)用程序和jvm.dll程序集的路徑,然后設(shè)置jnbcore.jar和bcel.jar的路徑(在5.1版本中,這兩個(gè)文件存在于“/JNBridge/JNBridgePro v5.1/jnbcore/”),***可以選擇HTTP或TCP通訊方式(在此例子當(dāng)中在下選擇TCP通訊,系統(tǒng)默認(rèn)接口為8085你也可以選擇自定義的接口)。點(diǎn)擊“OK”按鈕,配置完成時(shí),系統(tǒng)將自動(dòng)生成一個(gè) "/JNBridge/JNBridgePro v5.1/jnbcore/jnbcore_tcp.properties" 文件記錄TCP配置信息。

.NET服務(wù)端開發(fā)

假如閣下使用的是Visual Studio 2008或者Visual Studio 2010版本,系統(tǒng)將會(huì)感知JNBridge的存在,在新建項(xiàng)目時(shí),可以直接新建一個(gè)DotNetJavaProxies項(xiàng)目。在此在下想展示一下JNBridge的轉(zhuǎn)換性能,所以直接新一個(gè)解決方案。添加一個(gè)Model項(xiàng)目,加入Person類,為Person加入Serializable特性,注意要去除不必要的引用,因?yàn)閷?duì)Framework的引用在轉(zhuǎn)換時(shí)將變?yōu)閷?duì)應(yīng)的包。

  1. using System;
  2. namespace Model{    
  3.   [Serializable]     
  4.  public class Person     
  5.  {          
  6. public int ID        
  7.   {            
  8.   get;         
  9.      set;       
  10.    }       
  11.    public string Name  
  12.         {      
  13.         get;        
  14.       set;         
  15.  }         
  16.  public int Age     
  17.      {           
  18.    set;      
  19.         get;      
  20.     }    }} 

添加一個(gè)Manager項(xiàng)目,加入PersonManager類,在測(cè)試時(shí),只是把虛擬數(shù)據(jù)放在DataSource.sour文件中。

  1. using System;
  2. using Model;  
  3. using System.IO;  
  4. using System.Runtime.Serialization.Formatters.Binary;  
  5. using System.Collections.Generic;
  6. namespace Manager{   
  7. public class PersonManager    
  8.   {         
  9.  /// 虛擬數(shù)據(jù)源     
  10.      private List<Person> DataSource()        
  11.   {             
  12.  FileStream fileStream = new FileStream("./DataSource.sour", FileMode.Open, FileAccess.ReadWrite);       
  13.        BinaryFormatter formatter = new BinaryFormatter();         
  14.      List<Person> personList=(List<Person>)formatter.Deserialize((fileStream));             
  15.              return personList;       
  16.    }       
  17.    //獲取所有的Person       
  18.    public List<Person> GetList()      
  19.     {          
  20.     List<Person> personList = DataSource();         
  21.    return personList;        
  22.   }        
  23.   //根據(jù)輸入ID獲取對(duì)應(yīng)的Person       
  24.    public Person GetPersonByID(int id)        {             
  25.  foreach (Person person in DataSource())            {               
  26.    if (person.ID == id)                 
  27.      return person;      
  28.         }          
  29.     return null;     
  30.      }    }} 

添加一個(gè)ConsoleApplication作為啟動(dòng)項(xiàng)目,在項(xiàng)目中添加對(duì)JNBShare.dll的引用(文件路徑 “\JNBridge\JNBridgePro v5.1\4.0-targeted”),然后添加配置文件

config文件

  1. <?xml version="1.0" encoding="utf-8" ?><configuration>  <configSections>      
  2. <sectionGroup name="jnbridge">        
  3. <section name="dotNetToJavaConfig"        
  4.   type="System.Configuration.SingleTagSectionHandler"/>     
  5.  <section name="JavaToDotNetConfig"         
  6.  type="System.Configuration.SingleTagSectionHandler"/>    
  7.   <section name="tcpNoDelay"         
  8.  type="System.Configuration.SingleTagSectionHandler"/>   
  9.    <section name="JavaSideDeclarations"         
  10.  type="System.Configuration.NameValueSectionHandler"/>    
  11.   <section name="assemblyList"        
  12.   type="com.jnbridge.jnbcore.AssemblyListHandler, JNBShare"/>  
  13.   </sectionGroup> 
  14.  </configSections> 
  15.  <jnbridge>   
  16.  <dotNetToJavaConfig scheme="jtcp" host="localhost" port="8085"/>    
  17. <!--注意通訊接口必須與JNBridge中配置的接口一致-->   
  18.  <JavaToDotNetConfig scheme="jtcp" port="8086"/>   
  19.  <!-- 注冊(cè)共用程序集 -->   
  20.  <assemblyList>    
  21.   <assembly file=".\Model.dll"/>     
  22.  <assembly file=".\Manager.dll"/>    
  23. </assemblyList> 
  24.  </jnbridge></configuration> 

***啟動(dòng)服務(wù)

  1. using System;using com.jnbridge.jnbcore;namespace NET_Service{      
  2. class Program     
  3.  {        
  4.   static void Main(string[] args)      
  5.     {             
  6.  Console.WriteLine(".NET Start!");          
  7.     //啟動(dòng).NET端服務(wù),注意必須添加對(duì)JNBShare的引用,才可使用com.jnbridge.jnbcore.DotNetSide        
  8.     DotNetSide.startDotNetSide();          
  9.     Console.ReadKey();         
  10.      //關(guān)閉.NET端服務(wù)          
  11.     DotNetSide.stopDotNetSide();        
  12.   }    }} 

生成轉(zhuǎn)換層代碼

打開JNBridge,選擇工具欄 "Add class from assembly files",分別加入Model.dll,Manager.dll及mscorlib.dll(此程序集存在于“C:\Windows\Microsoft.NET\Framework\v4.0.30319\”,里面包含System,System.Collections,System.IO等等重要的命名空間)

在選擇必要的類以后,按下“Project->Build",系統(tǒng)就會(huì)對(duì)應(yīng)選擇把.NET里面的類生成對(duì)class放入Proxy.jar代理包。

Java端開發(fā)

新建一個(gè)Java項(xiàng)目,引用剛生成的代理包Proxy.jar,還有jnbcore.jar、bcel-5.1-jnbridge.jar(在5.1版本中,這兩個(gè)文件存在于“/JNBridge/JNBridgePro v5.1/jnbcore/”),把JNBridge的TCP配置文件jnbcore_tcp.properties復(fù)制到bin文件夾內(nèi),開發(fā)一個(gè)測(cè)試端。值得注意的是在生成Proxy.jar代碼包的時(shí)候,必須對(duì)System.Collections.Generic,System.String等等這些常用類的空間添加引用,否則,在Java里面就無法調(diào)用.NET里面的System.Collections.Generic.List等這些常用類。由于在Java里面對(duì)像List這些常用的類具有類名之間的沖突,所以在Proxy里面會(huì)對(duì)System.Collections.Generic.List這些類命名為System.Collections.Generic.List_1。

  1. package com.jnbridge.Javaclient;
  2. import com.jnbridge.jnbcore.*;
  3. import System.Collections.Generic.*;    
  4.  //引用Proxy.jar包內(nèi)System.Collection.Generice.*空間里面的代理類import Manager.*;
  5. import Model.*;
  6. public class Test {  
  7.   /**     
  8.   * @param args     
  9.   */     
  10.  public static void main(String[] args) {        
  11.   // TODO Auto-generated method stub       
  12.    try{         
  13.  //注冊(cè)JNBridge的TCP配置文件jnbcore_tcp.properties      
  14.   DotNetSide.init("E:\\Java Projects\\JNBridge Java\\Java Client\\bin\\jnbcore_tcp.properties");               
  15.  PersonManager personManager=new PersonManager();         
  16.  //注意此List_1是Proxy.jar包內(nèi)System.Collections.Generic.List的代理類,而并非JDK內(nèi)自帶的List類        
  17.   List__1 personList=personManager.GetList();        
  18.   if(personList.Get_Count()!=0){          
  19.     //注意此Get_Count()方法是Proxy.jar包內(nèi)System.Collections.Generic.List代理類的GetCount()方法            
  20.   for(int n=0;n<personList.Get_Count();n++){                
  21.   Person person=(Person)personList.Get_Item(n);               
  22.  System.out.println("Id:"+person.Get_ID()+" Age:"+person.Get_Age()+" Name:"+person.Get_Name());              
  23.   }        }      
  24.     }  
  25. catch(Exception ex){        
  26.       ex.printStackTrace();     
  27.      }    }} 

完成Java端后,先啟動(dòng).NET服務(wù)端,再啟動(dòng)Java端,Java就會(huì)調(diào)用到.NET端的數(shù)據(jù),屏幕將顯示出測(cè)試結(jié)果:

Id:0 Age:29 Name:Leslie
Id:1 Age:23 Name:Rose
Id:2 Age:22 Name:Jack

在JNBridge官網(wǎng)上有著許多的開發(fā)例子,在此不多介紹。對(duì)不同開發(fā)類型的轉(zhuǎn)換需要調(diào)用不同的工具包,各位可以直接參考官網(wǎng)上的教材。

Java與.NET的混合開發(fā)模式

在眾很多的大型系統(tǒng)開發(fā)中,開發(fā)工具往往不限制于同一種開發(fā)語言,而是會(huì)使用多種開發(fā)語言的混合型開發(fā)。像在開發(fā)底層與業(yè)務(wù)層的過程中,由于.NET只限制工作于Windows系統(tǒng),而Java可以在Windows、Unix、Linux中靈活運(yùn)用而更受到歡迎。但在開發(fā)UI表現(xiàn)層里,很明顯像Swing、Applet等開發(fā)工具受到的限制更多,而WPF、Siverlight、WinForms等開發(fā)工具因?yàn)榫哂谐墒斓目丶c華麗的頁面而倍受歡迎。所以使用Java來開發(fā)底層、業(yè)務(wù)層與Linux系統(tǒng)的UI層,同時(shí)使用.NET來開發(fā)Windows系統(tǒng)的UI層的例子很常見。在此開發(fā)過程中,利用JNBridge工具生成Proxy代理可以大大降低開發(fā)的難度,提高開發(fā)效率,使.NET平臺(tái)與Java平臺(tái)之間實(shí)現(xiàn)無縫連接。

綜上所述,JNBridge可視為Java平臺(tái)與.NET平臺(tái)之間通訊的橋梁,上述的例子利用JNBridge現(xiàn)實(shí)Java與.NET的無縫連接,可以使.NET的客戶端無需感知Java底層的存在,.NET的UI端直接調(diào)用Proxy代理就可以與Java端實(shí)現(xiàn)通訊,這不失為Java與.NET之間互相調(diào)用的一種好手段。

原文鏈接:http://www.cnblogs.com/leslies2/archive/2011/05/31/2052002.html

 

【編輯推薦】

  1. Visual Studio 2010中Xaml開發(fā)格式設(shè)置技巧
  2. Visual Studio 2010中手動(dòng)添加圖片文件
  3. 使用Visual Studio 2010統(tǒng)一管理數(shù)據(jù)庫對(duì)象
  4. Visual Studio 2010 TFS探索之旅
  5. Visual Studio 2010更改顏色背景的方法
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2015-11-12 09:32:03

Javascript設(shè)計(jì)模式

2022-01-14 09:22:22

設(shè)計(jì)模式橋接

2020-10-28 11:56:47

橋接模式

2021-03-05 07:57:41

設(shè)計(jì)模式橋接

2024-04-12 12:10:18

Python設(shè)計(jì)模式開發(fā)

2022-05-11 08:17:15

Java字符串API

2022-02-21 15:52:10

抽象橋梁模式結(jié)構(gòu)模式

2010-03-19 11:07:57

點(diǎn)對(duì)點(diǎn)無線橋接模式

2020-05-08 17:05:11

VMware網(wǎng)絡(luò)NAT

2010-02-06 15:17:41

Ubuntu Serv

2011-11-10 16:43:59

WDS無線橋接

2021-10-22 09:41:26

橋接模式設(shè)計(jì)

2022-03-03 10:20:02

編譯器橋接Java

2010-04-09 16:15:02

無線橋接設(shè)置

2009-05-13 09:39:00

雙網(wǎng)卡共享帶寬

2009-08-18 11:12:34

Ubuntu下Virt橋接網(wǎng)絡(luò)配置

2009-05-14 15:36:00

DHCP地址故障

2009-02-19 13:28:08

遠(yuǎn)程通訊技術(shù)及原理Java

2010-03-19 11:46:35

點(diǎn)對(duì)多點(diǎn)無線橋接

2010-04-08 17:02:14

無線橋接方案
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品精品视频一区二区三区 | 日日噜噜噜夜夜爽爽狠狠视频, | 国产乱码精品一品二品 | 日本成人中文字幕在线观看 | 日韩欧美中文在线 | 黄色毛片免费看 | 国产一区二区三区不卡av | 天天搞夜夜操 | 日韩第一夜 | 99re国产精品 | 亚洲欧美在线观看视频 | 欧美亚洲成人网 | 欧洲尺码日本国产精品 | 999免费观看视频 | 亚洲欧美在线视频 | 99久久精品免费看国产四区 | 性生活毛片 | 美女啪啪国产 | 一本一道久久a久久精品蜜桃 | 中文字幕一区在线 | 午夜在线观看免费 | 亚洲网站在线观看 | 四虎影院新地址 | 欧美成人精品 | 亚洲午夜av久久乱码 | 亚洲精品无人区 | 亚洲国产精品久久 | 欧美一级毛片久久99精品蜜桃 | 日韩视频在线观看中文字幕 | 国产乱码精品一区二区三区五月婷 | av中文字幕在线播放 | 国产精品久久午夜夜伦鲁鲁 | 中文字幕免费在线 | 日韩一区二区三区精品 | 国产精品视频网 | 在线免费观看成年人视频 | 欧美国产一区二区 | 成人欧美日韩一区二区三区 | 久草在线 | 日本免费黄色 | 精品国产99|