RMI概述
远程方法调用就是本地对象能够调用远程对象的方法。它使得某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。
其优点在于这种机制给分布计算的系统设计、编程都带来了极大的方便。只要按照RMI规则设计程序,可以不必再过问在RMI之下的网络细节了(如TCP和Socket等)。任意两台计算机之间的通讯完全由RMI负责。调用远程计算机上的对象就像本地对象一样方便。现在流行的j2ee中的EJB的底层实现技术就是RMI,EJB的调用就是经过封装的,更高级的RMI调用。
创建RMI程序的步骤
1. 定义一个远程接口,该接口中的每一个方法必须声明它将产生一个RemoteException异常。
2. 定义一个实现该接口的类。
3. 使用rmic程序生成远程实现所需的Stub。
4. 创建一个服务端程序,用于发布(2)中的类。
5. 创建一个客户端程序进行RMI调用。
6. 启动rmiRegistry并运行远程服务端程序和客户端程序。
具体步骤及代码
1. 定义远程接口
package eric.rmi;
import java.rmi.*;
public interface MyRemote extends Remote {
public String sayHello() throws RemoteException;
}
2. 定义实现远程接口的类
package eric.rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote {
public MyRemoteImpl() throws RemoteException {}
public String sayHello() {
return "Server says, 'Hey'";
}
}
3. 使用rmic生成stub
在class文件所在的目录下(即bin目录下)执行以下命令。该命令将生成一个MyRemoteImpl_Stub.class文件。
rmic eric.rmi.MyRemoteImpl
4. 创建服务器端程序
package eric.rmi;
import java.rmi.Naming;
public class MyRemoteServer {
public static void main(String[] args) {
try {
MyRemote service = new MyRemoteImpl();
Naming.rebind("RemoteHello", service);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
5. 创建客户端程序
Naming.lookup()中的IP地址为服务器端的IP。如果是本地运行可以使用127.0.0.1。
package eric.rmi;
import java.rmi.*;
public class MyRemoteClient {
public static void main(String[] args) {
new MyRemoteClient().go();
}
public void go() {
try {
MyRemote service = (MyRemote) Naming.lookup("rmi://192.168.1.111/RemoteHello");
String s = service.sayHello();
System.out.println(s);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
6. 部署
(1) 在客户端需要有MyRemoteClient.class, Remote.class和MyRemoteImpl_Stub.class文件。不需要服务器端程序。
(2) 在服务器端需要有MyRemoteServer.class, Remote.class, MyRemoteImpl和MyRemoteImpl_Stub文件。
(3) 在服务器端开启RMI注册服务。
start rmiregistry
只有在启动了这个服务之后,server端程序才能调用rebind方法发布我们的类。
(4) 运行服务器端程序。(在bin目录下执行命令)
java -Djava.rmi.server.codebase=file:\E:\workspace\RMI/ eric.rmi.MyRemoteServer
如果不使用-D参数设置系统属性,系统可能会报找不到Stub类的错误,所以需要这个参数来指定Stub类的路径。
在所有部署中这一步最容易出错。
(5) 运行服务器端程序
java eric.rmi.MyRemoteClient
则将显示sayHello()中返回字符串,说明远程方法调用成功。
分享到:
相关推荐
通过RMI,开发者可以在一台计算机上编写一个类,并在另一台计算机上调用该类的方法,就如同在本地调用一样。 #### 二、RMI基础知识 在深入理解给定示例之前,我们首先简要介绍一些RMI的基础概念: 1. **接口**: 在...
分布式RMI(Remote Method Invocation)远程调用是一种在分布式系统中实现对象间通信的技术,它允许一个对象在某个进程中调用另一个位于不同进程或者不同计算机上的对象的方法,从而实现跨网络的对象交互。在C#中,...
### EJB 基于Java的远程方法调用(RMI)技术 #### 一、EJB概述 **Enterprise JavaBeans (EJB)** 是一种基于Java的...此外,通过RMI技术的支持,EJB能够实现高效的远程调用,使得跨系统的组件交互变得更加简单高效。
这个“基于RMI的远程控制”项目,虽然其界面设计可能不尽如人意,但核心功能是实现了通过网络在两台计算机之间进行交互操作。 RMI的工作原理基于对象的分布式计算模型,它允许一个Java对象调用位于另一台机器上的...
1. 定义远程接口:创建一个接口,继承自`java.rmi.Remote`,并在接口中声明将被远程调用的方法。方法声明中必须包含`throws RemoteException`,用于处理可能出现的远程通信异常。 2. 实现远程接口:创建一个类实现...
Java RMI是Java编程语言中一种用于实现远程过程调用的应用程序接口,它使用对象序列化方式在不同虚拟机之间传递对象,实现了远程方法的调用,允许在一台计算机上的Java虚拟机(JVM)调用另一台计算机上的Java虚拟机...
RMI允许Java对象在不同的Java虚拟机(JVMs)之间进行交互,仿佛这些对象是在同一台机器上一样。这种技术的核心理念是,一个对象可以调用另一个位于不同网络位置的对象的方法,使得开发者能够轻松地创建跨越多个...
在Java世界中,RMI(Remote Method Invocation,远程方法调用)和CORBA(Common Object Request Broker Architecture,通用对象请求代理架构)是两种关键的分布式对象系统,广泛应用于各种行业,如电子商务和医疗...
Java远程方法调用(RMI,Remote Method Invocation)是Java编程中的一个重要概念,它使得一个Java程序能够调用网络中另一台计算机上的Java方法,如同调用本地方法一样。RMI是Java开发分布式应用程序的关键技术,它极...
通过RMI,一个Java程序能够调用位于另一台计算机上的Java对象的方法,就好像它们在同一台机器上一样。这种能力使得RMI成为构建分布式系统的强大工具之一。 ### Java分布式对象模型 在RMI中,通常涉及两个独立的...
这两个JVM可以位于同一台计算机的不同进程中,也可以位于网络中的不同计算机上。 RMI的基础是远程过程调用(RPC),它允许一个进程调用另一个进程(可能在远程主机上)中的过程,从而实现了过程的分布能力。相比于...
RMI允许一个Java对象在一台计算机上执行另一个计算机上的对象的方法,就像是本地调用一样。本示例将深入探讨RMI的基本概念、配置以及如何创建一个简单的客户端和服务端程序。 首先,我们需要理解RMI的核心组件: 1...
C++ Remote Method Invocation (RMI) 是一种在分布式系统中实现对象间远程调用的技术,它允许一个程序在一台计算机上执行操作,而这些操作实际上是在另一台计算机上的对象上进行的。C++ 并非原生支持RMI,但通过第三...
RMI的核心是使Java对象能够跨越网络边界,像在同一台计算机上一样互相调用方法。这涉及到两个主要部分:远程接口(Remote Interface)和远程对象(Remote Object)。远程接口定义了可以跨网络调用的方法,而远程对象...
为了使用RMI,开发者首先需要定义远程接口,这些接口继承自java.rmi.Remote,并在方法声明中使用throws java.rmi.RemoteException来表明远程调用可能发生的异常。服务提供者需要实现这些接口,并通过继承...
RMI是Java平台上的一个特性,允许一个Java对象调用位于另一台计算机上的对象的方法,就像是本地调用一样。RMI客户端和服务器在分布式系统中发挥着重要作用,它们使得跨网络的对象交互成为可能。RMI客户端通过网络...
它允许一个Java对象在一台计算机上执行另一个Java对象的方法,即使该对象位于不同的网络另一端。这种技术使得开发者可以构建分布式应用程序,使得组件可以在网络上的不同节点之间相互通信。在本文中,我们将深入探讨...
RPC(远程过程调用)是一种允许程序在不同的计算机之间调用方法的技术,就像它们在同一台机器上运行一样。RPC的核心思想是透明性,客户端并不关心服务端的具体实现,只需要提供调用的参数即可。RPC框架会处理网络...
通过RMI,开发者可以在网络环境中实现分布式计算,使得一台计算机上的程序能够控制或访问另一台计算机上的资源。在会议系统中,RMI可能被用来使客户端(比如用户的工作站)与服务器端(负责处理会议管理逻辑)进行...