Java EE 核心技术之RMI

RMI(Remote Method Invocation):远程方法调用

RMI是Enterprise JavaBean的支柱;其设计基础是[color=red]接口[/color],它的架构基于一个重要的原理:[color=blue]定义接口和定义接口的实现是分开的[/color]

一个正常的RMI系统组成部分,如下:
1、远程服务的接口定义
2、远程服务接口的具体实现
3、桩(stub)和框架(skeleton)文件的生成--->rmic命令的使用
4、一个RMI的命名服务,它允许远程调用的客户端去发现该服务
5、类文件的提供者(HTTP或FTP服务)
6、远程调用该服务的客户端

根据上述的简要说明,编写一个简单的RMI形式的calculator系统,实现远程调用加减乘除四种基本运算,let's go

1、定义远程服务的接口(Calculator)
|-该接口声明四个方法,分别是:add()、sub()、mul()、div()
|-该接口需要继承Remote,而且每个方法都必须抛出一个RemoteException的异常

具体代码如下:

pubilc interface Calculator extends Remote
{
public long add(long a,long b) throws RemoteException;
public long sub(long a,long b) throws RemoteException;
public long mul(long a,long b) throws RemoteException;
public long div(long a,long b) throws RemoteException;
}


2、远程服务接口的具体实现
|-继承UnicastRemoteObject,必须提供一个构造函数而且抛出一个RemoteException对象,当这个构造函数调用super()时,它就会激活UnicastRemoteObject中的代码完成RMI的连接和远程对象的初始化
|-如果一个类不是从UnicastRemoteObject上继承,则必须使用它的exportObject()方法去联接到RMI
使用继承UncastRemoteObject类来实现该服务接口,具体代码如下

public CalculatorImpl implements Calculator extends UnicastRemoteObject
{
public Calculator() throws RemoteException
{
super();
}
public long add(long a,long b) throws RemoteException
{
return a+b;
}
public long sub(long a,long b) throws RemoteException
{
return a-b;
}
public long mul(long a,long b) throws RemoteException
{
return a*b;
}
public long div(long a,long b) throws RemoteException
{
return a/b;
}
}


3、使用javac命令编译远程服务接口类和远程服务接口具体实现类
4、生成桩(stub)和框架(skeleton)文件
|-使用rmic编译刚刚编译了的远程服务接口具体的实现类
|-编译完在classes下会生成了一个CalculatorImpl_Stub.class文件
5、编写远程主机服务器
|-远程RMI服务必须在一个服务器中运行
具体代码如下

public class Server
{
public Server()
{
try
{
Calculator cal = new CalculatorImpl();
Naming.rebind("rmi://localhost:1099/Service",cal);
}
catch (Exception e)
{
System.out.println("访问时出现以下的错误:"+e);
}
}

public static void main(String[] args)
{
new Server();
}
}

6、编写远程调用的客户端
具体代码如下

public class Client
{

public static void main(String[] args)
{
try
{
CalculatorInterface cal = (CalculatorInterface)Naming.lookup("rmi://localhost/Service");

System.out.println(cal.add(3,4));
System.out.println(cal.sub(3,4));
System.out.println(cal.mul(3,4));
System.out.println(cal.div(12,4));
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

7、运行测试,具体步骤
|-启动RMI注册(Registry)程序,使用[color=red]start rmiregistry[/color]启动注册表服务器
|-启动远程服务器[color=red]java Server[/color]
|-启动远程调用客户端[color=red]java Client[/color]

RMI通过上面的7个步骤基本上可以实现,希望通过代码的具体演示可以为更多人对RMI有初步的了解,写得不足之处望多多指导,同时也要多多支持与交流
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值