转载http://fengshujuan.iteye.com/blog/226993,加了些自己的理解
RMI
Remote Method Invocation,分布式程序的API。它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。
实现了夸JVM,操作系统间的java对象调用。RMI目前使用JRMP(Java Remote Messaging Protocol)进行通信
RMI使用stub代理机制,stub需要在远程和本地各存相同的一份。
要使用RMI,必须构建四个主要的类:远程对象的本地接口、远程对象实现、RMI客户机和RMI服务器。RMI服务器生成远程对象实现的一个实例,并用一个专有的URL注册。RMI客户机在远程RMI服务器上查找服务对象,并将它转换成本地接口类型,然后像对待一个本地对象一样使用它。
实例:
1.远程对象的本地接口
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hello extends Remote {
// 接口中的具体方法声明,注意必须声明抛出RemoteException
String sayHello( String name )throws RemoteException;
}
2.远程对象实现类
import java.rmi.RemoteException;
import javax.rmi.PortableRemoteObject;
public class HelloImpl extends PortableRemoteObject implements Hello {
public HelloImpl() throws RemoteException {
super();
}
public String sayHello(String message) throws RemoteException {
System.out.println("我在RMI的服务器端,客户端正在调用'sayHello'方法。 ");
System.out.println("Hello " + message);
return message;
}
}
3.RMI服务器类
import java.rmi.Naming;
public class HelloServer {
public static void main( String[] args ) {
// 在服务器端设置安全机制
/*
* if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); }
*/
try {
System.out.println( "开始 RMI Server ..." );
/* 创建远程对象的实现实例 */
HelloImpl hImpl = new HelloImpl();
System.out.println( "将实例注册到专有的URL " );
Naming.rebind( "HelloService", hImpl );
System.out.println( "等待RMI客户端调用..." );
System.out.println( "" );
}
catch ( Exception e ) {
System.out.println( "错误: " + e );
}
}
}
4.RMI客户机类
import java.rmi.Naming;
public class HelloClient {
public static void main( String[] args ) {
// 在服务器端设置安全机制
/*
* if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); }
*/
/* 默认为本地主机和默认端口 */
String host = "localhost:1099";
/* 带输入参数时,将host设置为指定主机 */
if ( args.length > 0 )
host = args[0];
try {
/* 根据指定的URL定位远程实现对象 */
/* “h”是一个标识符,我们将用它指向实现“Hello”接口的远程对象 */
Hello h = (Hello) Naming.lookup( "rmi://" + host + "/HelloService" );
System.out.println( "实现“Hello”接口的远程对象: " + h );
System.out.println( "我在客户端,开始调用RMI服务器端的'sayHello'方法" );
System.out.println( "欢迎, " + h.sayHello( "javamxj blog" ) );
}
catch ( Exception ex ) {
System.out.println( "错误 " + ex );
}
}
}
5. 编译代码与运行系统
在MS-DOS环境下,创建一个D:\RMISample目录,把上面4个文件复制到这个目录下,然后在此目录下新建两个文件夹:client和server(把它们分别看作是客户端与服务端)。
(1).编译所有的源代码
D:\RMISample> javac *.java
(2).生成客户端存根//这将生成HelloImpl_Stub.class
D:\RMISample> rmic HelloImpl
( 注:如果需要查看源代码,可以使用“ rmic -keep HelloImpl”语句)
(3).把Hello.class,HelloClient.class,HelloImpl_Stub.class复制到client目录;
把Hello.class,HelloServer.class,HelloImpl_Stub.class,HelloImpl.class 复制到server目录。
(4).启动RMI注册
D:\RMISample\server>rmiregistry
(注:我是在命令控制台下运行这个系统的,必须开启三个控制台窗口,一个运行RMIRegistry,一个运行服务器,还有一个运行客户端。)
(5).运行和调用
● 在服务器上执行HelloServer
D:\RMISample\server>java HelloServer
● 在本地客户机上运行HelloClient
D:\RMISample\client>java HelloClient
以下未验证:
● 在远程客户机上运行HelloClient(须指明RMI服务器主机名或IP地址)
java HelloClient 222.222.34.34
还有一点要注意,在上面的例子中我注释了安全管理的代码,如果把注释去掉,那么需要建立一个安全策略文件,比如其文件名为 policy.txt,内容如下:
grant {
permission java.security.AllPermission "", "";
};
这是一条简单的安全策略,它允许任何人做任何事,对于你的更加关键性的应用,你必须指定更加详细安全策略。把这个文件复制到Client和Server目录,然后如下运行:
D:\RMISample\server>java -Djava.security.policy=policy.txt HelloServer
D:\RMISample\client>java -Djava.security.policy=policy.txt HelloClient
分享到:
相关推荐
Java RMI实例
6. **RMI实例操作** - **创建远程接口**:例如定义一个名为`Calculator`的接口,包含加减乘除的远程方法。 - **实现远程接口**:实现`Calculator`接口,实现计算逻辑。 - **启动RMI服务**:在服务器端启动RMI服务...
这个“一个RMI实例”显然是一个供初学者使用的示例项目,可以帮助理解RMI的基本原理和操作流程。 在RMI中,主要有以下几个核心概念: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口,它继承自java...
中间件实验(RMI 实例)是 Java RMI(Remote Method Invocation,远程方法调用)的实验报告,旨在通过实验了解 Java RMI 的机制和开发流程。本实验报告主要介绍了 RMI 的基本概念、实验步骤、实验结果和结论分析等...
在"rmidemo"这个压缩包中,很可能包含了一个完整的RMI实例。通常,它会有一个服务端项目,用于实现和注册远程对象,以及一个客户端项目,用于查找并调用远程对象的方法。具体代码可能如下: - 服务端(Server.java...
这个简单的RMI实例可能是为了帮助初学者理解RMI的基本工作原理和实现步骤。 RMI的核心概念是客户端和服务端。服务端通过RMI注册一个远程接口,该接口定义了可供客户端调用的方法。客户端则通过RMI机制获取到服务端...
这个“简单的RMI实例”演示了如何在不依赖像Tomcat这样的Web服务器的情况下实现RMI。下面我们将深入探讨RMI的基本概念、配置过程以及如何创建和运行这个实例。 ### RMI基本概念 1. **远程对象(Remote Object)**:...
在Java RMI实例中,我们通常会经历以下几个步骤: 1. **创建远程接口**:首先,我们需要定义一个远程接口,这个接口需要扩展`java.rmi.Remote`。远程接口中的所有方法都需要抛出`RemoteException`,这是因为远程...
### Java分布式之RMI实例教程知识点详解 #### 一、RMI基础知识介绍 **RMI (Remote Method Invocation)** 是一种Java技术,用于实现分布式应用程序之间的远程过程调用。通过RMI,开发者可以在不同的JVM之间调用方法...
总结一下,这个简单的RMI实例展示了如何创建一个远程接口,实现该接口,启动服务器以导出远程对象,以及编写客户端代码进行调用。RMI的实现包括了接口定义、实现、服务器注册和客户端调用四个关键步骤。在实际应用中...
**标题:“RMI实例(Spring整合)”** 远程方法调用(Remote Method Invocation,简称RMI)是Java中的一种机制,允许一个Java对象在某个Java虚拟机(JVM)上执行另一个Java对象的方法,即使该对象位于不同的网络...
JAVA分布式之RMI实例教程网络通信原理[收集].pdf
【RMI实例详解】 远程方法调用(RMI,Remote Method Invocation)是Java JDK 1.1引入的一种分布式对象技术,旨在简化分布在不同环境下的Java应用程序间的通信。RMI允许对象在不同的Java虚拟机(JVM)之间进行交互,...
java rmi小例子源代码 ,运行Reg.java ,再执行Client客户端代码就能看效果。如果在不同jvm下执行,注意接口定义包路径客服端和服务端必须保持一致。 客服端包含文件有服务端接口的定义文件。
本实例将深入讲解如何使用Java RMI在Linux环境中启动远程服务,并在Windows环境下进行操作。 首先,理解RMI的基本原理:RMI系统由两部分组成,客户端和服务器端。服务器端暴露远程接口,客户端通过引用这个远程接口...
RMI(Remote Method Invocation,远程方法调用)是Java中的一种技术,用于构建分布式系统,使得在一台机器上的对象能够调用另一台机器上对象的方法,就像它们在同一个进程中一样。RMI使得开发者可以创建跨网络的、...
创建客户端RMI调用服务端的应用程序。 启动服务端,再启动客户端,测试是否调用成功。 如果客户端和服务端不在同一台电脑上,则需要对刚才定义的服务类采用rmic 编译一个客户端的框架类_stub并拷贝到客户端的类...
RMI远程调用开发实例,必须打开防火墙。 必须要在jdk安装目录D:\Java\jdk1.7\jre\lib\security javaws.policy文件加上 grant { permission java.security.AllPermission "", ""; };