RMI远程调用过程

来源:互联网 发布:centos共享文件夹在哪 编辑:程序博客网 时间:2024/05/01 02:49
创建远程方法调用的5个步骤:
1、定义一个远程接口的接口,该接口中的每一个方法必须声明它将产生一个RemoteException异常。
2、定义一个实现该接口的类。
3、使用RMIC程序生成远程实现所需的残根和框架。
4、创建一个客户程序和服务器进行RMI调用。

5、启动Registry并运行自己的远程服务器和客户程序。




RMI是Java对象进行远程访问的一种规范——也就是说,从Java虚拟机(Java Virtual Machine,JVM)而不是特定对象的主机访问。这些对象可能位于拥有JVM的同一个物理主机上,或者位于其他计算机上,并通过某个网络连接到宿主主机(服务器)。规范包括这些对象进行编码的规则,如何定位对象,如何远程调用,方法的参数和计算结果如何在JVM之间传递。RMI的缺省实现是 JRMP(Java Remote Method Protocol),这是一个百分之百的Java实现。此外,RMI也可以使用其它的协议,例如IIOP。
下面详细的说明几个步骤:
第一步、扩展远程接口
创建一个RMI程序首先要做的就是创建一个扩展远程接口的接口。在这个接口中可以添加任意希望能在
远程机器上调用的方法。

接口示例

import java.rmi.Remote;
import.java.rmi.RemoteException;
public interface RemoteInterface extends java.rmi.Remote
{
public String start(String msg) throws RemoteException;
}


在接口中定义了一个返回字符串的方法
本地接口(RemoteInterface)必须是公共的,否则客户机在加载一个实现该接口的远程对象时就会出错。
它必须从java.rmi.Remote继承而来,接口中的每一个方法都必须抛出远程异常java.rmi.RemoteException。
抛出这个异常的原因
由于任何远程方法调用实际上要进行许多低级网络操作,因此网络错误可能在调用过程中随时发生。
因此,所有的RMI操作都应放到try-catch块中。

第二步、定义一个实现该接口的类。
该类必须继承UnicastRemoteObject类。
扩展java.rmi.server.UnicastRemoteObject
UnicastRemoteObject顾名思义,是让客户机与服务器对象实例建立一对一的连接。
扩展实现接口的类例程
服务器关键语句
Naming.rebind("/RMITest",rmiTest);
//名字和接口绑定

第三步、生成残根和框架代码
在RMI中,客户机上生成的调动调用参数和反调动返回值的代码称为残根。有的书上称这部分代码为“主干”。
服务器上生成的反调动调用参数和进行实际方法调用调动返回值的代码称为框架。
生成残根和框架的工具
Rmic命令行工具(RMI Compiler)
格式:
Rmic classname

第四步、创建一个客户程序进行RMI调用

import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
public class RemoteClientTest{
static RemoteInterface gserver=null;
void display(){
try{//查找远程对象
gserver=(RemoteInterface)Naming.lookup("//localhost/RMITest");
String msg=gserver.start();
System.out.println("服务器返回信息:"+msg);}
catch (Exception e1) {System.out.println(e1);}
}
public static void main (String[] args){
RemoteClientTest app=new RemoteClientTest();
app.display();}
}

客户端端关键语句

gserver=(RemoteInterface)Naming.lookup("//localhost/RMITest");
//查找远程对象
第五步、用RmiRegistry找到远程对象
这是一个使用工具,维护文本名和远程对象之间的映射,可以进行远程访问。

RMI是Java对象进行远程访问的一种规范——也就是说,从Java虚拟机(Java Virtual Machine,JVM)而不是特定对象的主机访问。这些对象可能位于拥有JVM的同一个物理主机上,或者位于其他计算机上,并通过某个网络连接到宿主主机(服务器)。规范包括这些对象进行编码的规则,如何定位对象,如何远程调用,方法的参数和计算结果如何在JVM之间传递。RMI的缺省实现是 JRMP(Java Remote Method Protocol),这是一个百分之百的Java实现。此外,RMI也可以使用其它的协议,例如IIOP。
下面详细的说明几个步骤:
第一步、扩展远程接口
创建一个RMI程序首先要做的就是创建一个扩展远程接口的接口。在这个接口中可以添加任意希望能在
远程机器上调用的方法。

接口示例

import java.rmi.Remote;
import.java.rmi.RemoteException;
public interface RemoteInterface extends java.rmi.Remote
{
public String start(String msg) throws RemoteException;
}


在接口中定义了一个返回字符串的方法
本地接口(RemoteInterface)必须是公共的,否则客户机在加载一个实现该接口的远程对象时就会出错。
它必须从java.rmi.Remote继承而来,接口中的每一个方法都必须抛出远程异常java.rmi.RemoteException。
抛出这个异常的原因
由于任何远程方法调用实际上要进行许多低级网络操作,因此网络错误可能在调用过程中随时发生。
因此,所有的RMI操作都应放到try-catch块中。

第二步、定义一个实现该接口的类。
该类必须继承UnicastRemoteObject类。
扩展java.rmi.server.UnicastRemoteObject
UnicastRemoteObject顾名思义,是让客户机与服务器对象实例建立一对一的连接。
扩展实现接口的类例程
服务器关键语句
Naming.rebind("/RMITest",rmiTest);
//名字和接口绑定

第三步、生成残根和框架代码
在RMI中,客户机上生成的调动调用参数和反调动返回值的代码称为残根。有的书上称这部分代码为“主干”。
服务器上生成的反调动调用参数和进行实际方法调用调动返回值的代码称为框架。
生成残根和框架的工具
Rmic命令行工具(RMI Compiler)
格式:
Rmic classname

第四步、创建一个客户程序进行RMI调用

import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
public class RemoteClientTest{
static RemoteInterface gserver=null;
void display(){
try{//查找远程对象
gserver=(RemoteInterface)Naming.lookup("//localhost/RMITest");
String msg=gserver.start();
System.out.println("服务器返回信息:"+msg);}
catch (Exception e1) {System.out.println(e1);}
}
public static void main (String[] args){
RemoteClientTest app=new RemoteClientTest();
app.display();}
}

客户端端关键语句

gserver=(RemoteInterface)Naming.lookup("//localhost/RMITest");
//查找远程对象
第五步、用RmiRegistry找到远程对象
这是一个使用工具,维护文本名和远程对象之间的映射,可以进行远程访问。