Java RMI

RMI(remote method invoke)是Java实现透明远程调用的机制,客户端仅持有服务端的接口。RMI应用的两种写法:

[b]1、利用UnicastRemoteObject.exportObject()[/b]

server端:

public interface Business extends Remote {
public void call(String str) throws RemoteException;
}
public class BusinessImpl implements Business{//服务类实现Remote接口
public void call(String str) throws RemoteException{
System.out.println("client send:"+str);
}
}
public class Server {
public static void main(String[] args) throws Exception{
String name="business";
Business bus=new BusinessImpl();
Registry reg=LocateRegistry.createRegistry(1099);//在rmi默认端口创建rmi注册表
reg.bind(name, bus);//将remote对象绑定到rmi注册表
UnicastRemoteObject.exportObject(bus);//将remote对象暴露到匿名端口
}
}

client端:

public class Client {
public static void main(String[] args) throws Exception{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
Registry reg=LocateRegistry.getRegistry("192.168.1.110",1099);//获得指定主机的rmi注册表引用
String name="business";
Business bus=(Business)reg.lookup(name);//查找remote对象
String line;
while(!"bye".equals(line=in.readLine())){
bus.call(line);
}
in.close();
}
}


[b]2、Remote对象继承UnicastRemoteObject[/b]

第一种方式不需要生成服务器端remote对象存根(stub),但编码有些多。还可以通过继承UnicastRemoteObject的方式,利用Naming.bind()简化代码,但这种方式需要rmic生成remote实现类的存根。

//Business接口不变
...
//remote实现类继承UnicastRemoteObject
public class BusinessImpl extends UnicastRemoteObject implements Business{
public void call(String str) throws RemoteException{
System.out.println("client send:"+str);
}
}

服务端:

public class Server {
public static void main(String[] args) throws Exception{
String name="rmi://192.168.1.110:1099/business";
Business bus=new BusinessImpl();
Naming.bind(name, bus);
}
}

客户端:

public class Client {
public static void main(String[] args) throws Exception{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String name="rmi://192.168.1.110:1099/business";
Business bus=(Business)Naming.lookup(name);
String line;
while(!"bye".equals(line=in.readLine())){
bus.call(line);
}
in.close();
}
}

然后的步骤:
1)生成remote实现类的存根
rmic xx.xx.BusinessImpl
2)启动rmi注册表
windows下:start rmiregistry
linux下:rmiregistry
3)启动服务端
java xx.xx.Server
4)启动客户端请求
java xx.xx.Client

第2种方式其实更加不方便(需要手动生成存根、启动rmiregistry)

下一篇介绍利用Spring更方便的将普通的Service暴露为Remote服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值