.NET服务端开发
假如阁下使用的是Visual Studio 2008或者Visual Studio 2010版本,系统将会感知JNBridge的存在,在新建项目时,可以直接新建一个DotNetJavaProxies项目。在此在下想展示一下JNBridge的转换性能,所以直接新一个解决方案。添加一个Model项目,加入Person类,为Person加入Serializable特性,注意要去除不必要的引用,因为对Framework的引用在转换时将变为对应的包。
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类,在测试时,只是把虚拟数据放在DataSource.sour文件中。
using System;
using Model;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Collections.Generic;
namespace Manager
{
public class PersonManager
{
/// 虚拟数据源
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<Person> GetList()
{
List<Person> personList = DataSource();
return personList;
}
//根据输入ID获取对应的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”),然后添加配置文件:
<!-- 注册共用程序集 -->
<assemblyList>
<assembly file=".\Model.dll"/>
<assembly file=".\Manager.dll"/>
</assemblyList>
最后启动服务:
using System;
using com.jnbridge.jnbcore;
namespace NET_Service
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(".NET Start!");
//启动.NET端服务,注意必须添加对JNBShare的引用,才可使用com.jnbridge.jnbcore.DotNetSide
DotNetSide.startDotNetSide();
Console.ReadKey();
//关闭.NET端服务
DotNetSide.stopDotNetSide();
}
}
}
生成转换层代码
打开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",系统就会对应选择把.NET里面的类生成对class放入Proxy.jar代理包。
Java端开发
新建一个Java项目,引用刚生成的代理包Proxy.jar,还有jnbcore.jar、bcel-5.1-jnbridge.jar(在5.1版本中,这两个文件存在于“/JNBridge/JNBridgePro v5.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。
package com.jnbridge.javaclient;
import com.jnbridge.jnbcore.*;
import System.Collections.Generic.*;
//引用Proxy.jar包内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包内System.Collections.Generic.List的代理类,而并非JDK内自带的List类
List__1 personList=personManager.GetList();
if(personList.Get_Count()!=0){
//注意此Get_Count()方法是Proxy.jar包内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.printStackTrace();
}
}
}
深圳网站建设www.sz886.com