RMI远程方法调用讲解教程1、RMI概述
RMI(Remote Method Invocation)
RMI是分布式对象软件包,它简化了在多台计算机上的JAVA应用之间的通信。
必须在jdk1.1以上
RMI用到的类
java.rmi.Remote
所有可以被远程调用的对象都必须实现该接口
java.rmi.server.UnicastRemoteObject
所有可以被远程调用的对象都必须扩展该类
什么是RMI
远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,
使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程
序语法规则和在本地机上对象间的方法调用的语法规则一样。
优点
这种机制给分布计算的系统设计、编程都带来了极大的方便。
只要按照RMI规则设计程序,可以不必再过问在RMI之下的网络细节了,如:TCP和Socket等等。
任意两台计算机之间的通讯完全由RMI负责。调用远程计算机上的对象就像本地对象一样方便。
1、面向对象:
RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。
也就是说,可以将类似Java哈西表这样的复杂类型作为一个参数进行传递。
2、可移动属性:
RMI可将属性从客户机移动到服务器,或者从服务器移动到客户机。
3、设计方式:
对象传递功能使您可以在分布式计算中充分利用面向对象技术的强大功能,如二层和三层结构系统。
如果用户能够传递属性,那么就可以在自己的解决方案中使用面向对象的设计方式。
所有面向对象的设计方式无不依靠不同的属性来发挥功能,如果不能传递完整的对象——包括实现和类型
——就会失去设计方式上所提供的优点。
4、安全性:
RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。
RMI使用专门为保护系统免遭恶意小程序侵害而设计的安全管理程序。
5、便于编写和使用
RMI使得Java远程服务程序和访问这些服务程序的Java客户程序的编写工作变得轻松、简单。
远程接口实际上就是Java接口。
为了实现RMI的功能必须创建远程对象任何可以被远程调用的对象必须实现远程接口。但远程
接口本身并不包含任何方法。因而需要创建一个新的接口来扩展远程接口。
新接口将包含所有可以远程调用的方法。远程对象必须实现这个新接口,由于新的接口扩展了
远程接口,实现了新接口,就满足了远程对象对实现远程接口的要求,所实现的每个对象都将
作为远程对象引用。
创建远程方法调用的5个步骤:
1、定义一个远程接口的接口,该接口中的每一个方法必须声明它将产生一个RemoteException异常。
2、定义一个实现该接口的类。
3、使用RMIC程序生成远程实现所需的残根和框架。
4、创建一个客户程序和服务器进行RMI调用。
5、启动Registry并运行自己的远程服务器和客户程序。
第一步、扩展远程接口
创建一个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远程方法调用讲解教程.doc`可能详细解释了RMI的工作原理,包括序列化、异常处理、安全性等方面。序列化是RMI的关键,因为所有的参数和返回值都必须能够被序列化以便在网络上传输。此外,RMI还支持安全性机制,如...
在学习RMI的过程中,阅读博客文章《RMI远程方法调用讲解教程》会是一个很好的资源,它可能涵盖了RMI的更多细节,如异常处理、NIO优化、以及如何处理RMI的常见问题。通过深入理解这些内容,你可以更熟练地利用Java的...
在提供的`动态代理与RMI远程调用.ppt`中,可能会详细解释这两个概念,通过PPT的讲解和实例,可以更直观地理解动态代理和RMI的工作原理。同时,`src`目录下的源码文件则提供了具体的实现示例,读者可以通过阅读代码,...
在Windows环境下,同样需要JRE,运行客户端程序来执行远程调用。 注意,RMI的安全性、异常处理和网络通信细节也是开发者需要考虑的问题。例如,需要处理可能的`RemoteException`,以及配置JVM的安全策略文件以允许...
### Java RMI 用于远程调用 进行分布式开发 #### 概述 Java RMI(Remote Method Invocation)是Java平台提供的一种实现分布式计算的技术,它允许开发者在不同JVM间进行方法调用,如同调用本地对象一样简单。通过...
远程接口定义了可供远程调用的方法,它必须继承自`java.rmi.Remote`接口。远程对象则是实现了这个远程接口的类实例,它驻留在服务器端,负责处理客户端的调用请求。RMI通过Java序列化机制将方法调用和参数封装成消息...
具体来说,RMI只能支持客户端和服务器端都是Java程序的远程调用,无法与其他非Java语言编写的应用进行通信。 #### 4. RMI的使用限制 RMI要求客户端和服务器都使用Java编写,但只要确保双方运行在兼容版本的Java...
2. 创建远程接口:讲解如何定义远程接口,它是远程方法调用的合同。 3. 实现远程对象:介绍如何实现远程接口,并创建远程对象实例,以及如何使对象变为可序列化。 4. 注册与查找:说明如何在RMI注册表中注册远程对象...
- **`java.rmi.RemoteException`**:远程调用异常。 综上所述,Java RMI是一种强大的分布式计算工具,它不仅能够简化分布式Java应用程序的开发,还能够在多种环境中实现高效的远程服务调用。然而,它的局限性也意味...
4. **调用远程方法**: 客户端使用stub像本地对象一样调用远程方法,实际的网络通信和方法调用由RMI系统自动处理。 ### 3. RMI的组件 - **Stub**: 本地对象,作为远程对象的代理,用于序列化参数和结果,发起网络...
【描述】提到的"asynchronism receive message"是指在RMI中处理远程调用时采用异步模式接收消息的能力。在传统的同步模式中,调用者必须等待远程方法执行完成并返回结果才能继续执行后续代码,而异步模式则允许调用...
1. **创建服务接口**:首先定义一个服务接口,这个接口将被远程调用。例如,我们有一个名为`UserService`的接口,其中包含用户管理的相关方法,如`getUserById`和`saveUser`。 ```java public interface ...
- ** skeletons**:在远程服务器上,用于接收和执行远程调用的代理。 - **注册表**:RMI注册表(RMIREGISTRY)是服务发现机制,用于查找和绑定远程对象的引用。 2. **RMI工作流程** - **导出远程对象**:在...
6. **现代替代方案**:随着技术的发展,诸如Hadoop的RPC、gRPC、Thrift等更现代化的远程调用框架出现了,它们提供了更多功能和更好的性能,但RMI依然是学习分布式系统和Java网络编程的经典案例。 7. **RMI的应用...
1. **远程接口**:声明了可供远程调用的方法。 2. **远程对象实现**:实现了远程接口的类,实际提供服务的实体。 3. **桩/框架**:客户端的桩(Stub)是远程对象的本地表示,服务器端的框架(Skeleton)处理客户端的...
在“JMS_ActiveMQ交流学习_演示文稿”中,可能会详细讲解ActiveMQ作为JMS实现的一种方式,以及如何利用它进行消息传递和远程调用。ActiveMQ是一个开源的消息代理,它支持多种协议,如AMQP、STOMP和OpenWire,能够...
4.3 错误处理:远程调用可能会遇到网络中断、超时等问题,应适当地处理异常。 总结,Spring整合RMI提供了一种方便、灵活的方式来实现分布式系统中的远程方法调用。通过"SpringRMIClient"和"SpringRMIServer"示例,...