真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JNBridge橋接模式如何實現(xiàn)Java與.NET遠程通訊

這篇文章給大家介紹JNBridge橋接模式如何實現(xiàn)Java與.NET遠程通訊,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

10年積累的成都網(wǎng)站建設(shè)、網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有永善免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

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

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

從2003年開始.NET當中就盛傳著.NET Remoting遠程對象調(diào)用的分布式開發(fā),.NET Remoting主要用于管理跨應(yīng)用程序域的同步和異步RPC 會話。在默認情況下,Remoting可以使用 HTTP 或 TCP 協(xié)議進行信息通訊,并使用 XML 編碼的 SOAP 或二進制消息格式進行數(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等通信方式,為程序之間傳遞信息數(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ā)項目當中,往往會集合著不同語言開發(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概述

JNBridge是一種領(lǐng)先的Java與.NET互操作的的產(chǎn)品,憑借JNBridge技術(shù),Java和.NET代碼無需交叉編譯器就可以實現(xiàn)對象共享。所有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)致雙方的行動被回滾;

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

JNBridge配置

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

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

假如閣下使用的是Visual Studio 2008或者Visual Studio 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;          }          public 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 DataSource()          {              FileStream fileStream = new FileStream("./DataSource.sour", FileMode.Open, FileAccess.ReadWrite);              BinaryFormatter formatter = new BinaryFormatter();              List personList=(List)formatter.Deserialize((fileStream));                          return personList;          }          //獲取所有的Person          public List GetList()          {              List 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的引用(文件路徑 “\JNBridge\JNBridgePro v5.1\4.0-targeted”),然后添加配置文件

config文件

                                                                                      

***啟動服務(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();              //關(guān)閉.NET端服務(wù)              DotNetSide.stopDotNetSide();          }    }}

生成轉(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等等重要的命名空間)

JNBridge橋接模式如何實現(xiàn)Java與.NET遠程通訊

在選擇必要的類以后,按下“Project->Build",系統(tǒng)就會對應(yīng)選擇把.NET里面的類生成對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_tcp.properties復(fù)制到bin文件夾內(nèi),開發(fā)一個測試端。值得注意的是在生成Proxy.jar代碼包的時候,必須對System.Collections.Generic,System.String等等這些常用類的空間添加引用,否則,在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.Collection.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_tcp.properties        DotNetSide.init("E:\\Java Projects\\JNBridge Java\\Java Client\\bin\\jnbcore_tcp.properties");                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

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

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

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

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

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

JNBridge橋接模式如何實現(xiàn)Java與.NET遠程通訊

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

關(guān)于JNBridge橋接模式如何實現(xiàn)Java與.NET遠程通訊就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


本文標題:JNBridge橋接模式如何實現(xiàn)Java與.NET遠程通訊
路徑分享:http://weahome.cn/article/ggspsh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部