`
jackyclein
  • 浏览: 9093 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论
阅读更多

RMI 初步研究报告

前言
由于项目需要,今有机会研究RMI技术,不用多说,咨询了“狗狗”先生,得到一箩筐的答案。于是乎随便翻阅几篇,大同小异。阅读后,感觉RMI的原理很容易理解,于是乎开始demo之路,不料,道路有些坎坷,调试良久才成功。望对RMI感兴趣的同学看了该篇文章,能对RMI有进一步的认识;同时也希望资深人员能提出更宝贵的建议。
RMI简介
RMI(Remote Method Invocation)采用JRMP(Java Remote Method Protocol)通讯协议,是构建在TCP/IP协议上的一种远程调用方法。其主要调用原理如下:

RMI 采用stubs 和 skeletons(jdk1.5以上版本已经隐藏skeletons)来进行远程对象的通讯。stub 充当远程对象的客户端代理,有着和远程对象相同的远程接口,远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的。

分布式计算系统要求运行在不同地址空间不同主机上的对象互相调用,RMI的诞生,简化了异地调用,实现了类本地调用的效果。
RMI实例

编写java类
包结构:com.rmi.server
RmiHelloRemoteIntfc.java
RmiHelloRemoteObj.java
RmiHelloServer.java
RmiHelloClient.java

编译java类
进入shell界面
javac *.java
生成stub和skeletons对象
进入shell界面
rmic com.rmi.server.RmiHelloRemoteObj

部署编译文件
1. 执行rmic后,生成文件列表如下:
RmiHelloRemoteIntfc.class
RmiHelloRemoteObj.class
RmiHelloServer.class
RmiHelloClient.class
RmiHelloRemoteObj_Stub.class
RmiHelloRemoteObj_Skel.class(jdk1.4及以下版本)

2. Copy以下文件到Server端(目录结构必须符合类的包结构):
RmiHelloRemoteIntfc.class
RmiHelloRemoteObj.class
RmiHelloServer.class
RmiHelloRemoteObj_Stub.class
RmiHelloRemoteObj_Skel.class

3. Copy以下文件到Client端(目录结构必须符合类的包结构):
RmiHelloRemoteIntfc.class
RmiHelloClient.class
RmiHelloRemoteObj_Stub.class

4. 编写server端安全管理配置
  由于在RmiHelloServer.java中设置了安全管理,因此需要单独配置policy权限
  编写RmiHelloServer.policy
grant  {
              permission java.net.SocketPermission "localhost:1099-", "accept,connect,listen,resolve";
        };
将RmiHelloServer.policy存在某个目录下,假设存入D盘根目录,即d:RmiHelloServer.policy
启动RMI服务
重新打开一个shell界面
执行RMIRegistry ,默认1099端口


启动server端
java –Djava.security.policy=d:RmiHelloServer.policy com.rmi.server.RmiHelloServer
成功后,将打印

启动client端
java com.rmi.server.RmiHelloClient
成功后,将打印
注意事项
1. 系统环境变量必须配置正确
2. 安全管理器
为安全起见,server端通常需要设置安全管理器,代码如下

设置安全管理后,必须要修改jdk的policy文件。

3. Client端与server端类的包结构必须相同
4. 启动RMI服务时,务必确保stub.class已经被加入classpath,否则后续将出现找不到stub.class的Exception
Error 排查:
在windows xp上执行正常的程序,放在linux中后,当运行java com.rmi.server.RmiHelloServer时,却出现如下错误:
java.lang.ClassNotFoundException: com.rmi.server.RmiHelloRemoteObj_Stub
几经周折,豁然发现,在linux中,当启动rmiregistry时的classpath没有加入*_Stub.class的路径!废话少说,赶紧加上,测试通过,哇咔咔……

测试说明
1、 以上实例已经在一台windows XP下成功运行。
2、 以上实例已经在两台linux下成功运行。

0
0
分享到:
评论

相关推荐

    java RMI demo

    在"java RMI demo"中,通常包含两个主要部分:rmiclient和rmiserver,分别代表客户端和服务器端。 1. **RMI服务器(rmiserver)**: - **注册表(Registry)**:RMI系统的核心组件,用于存储远程对象的引用。...

    java rmi demo 一个客户端,一个服务端,一个最顶服务端

    java rmi demo1 一个客户端,一个服务端,一个最顶服务端,客户端向服务端上传下载文件,服务端传输到最顶服务端,然后服务端删除文件,当客户端下载的时候,先判断服务端有无文件,如果没有的话就从最顶服务端下载...

    java rmi demo2 N个客户端,N个P2P节点,一个服务端

    java rmi demo2 N个客户端,N个P2P节点,一个服务端,客户端连接P2P节点,服务端保存当前所有在线的客户端的IP和端口,客户端相当于我们的电脑。用户上传文件,都从客户端传到P2P节点中,然后每个P2P节点互相传输,...

    Java RMI demo多对象

    Java Remote Method Invocation(RMI)是Java平台上的一个特性,它允许在分布式环境中进行对象间的交互,即在一台机器上的对象可以调用另一台机器上对象的方法,仿佛它们是在同一台机器上一样。这个特性使得Java成为...

    Java RMI demo

    在这个"Java RMI demo"中,我们可以通过分析和运行提供的代码来理解RMI的工作原理。 1. **RMI基本概念** - **远程接口(Remote Interface)**:定义了客户端可以调用的远程方法,它继承自`java.rmi.Remote`接口。 ...

    RMI+EHCACHE Demo

    【RMI+EHCACHE Demo】是一个面向初学者的示例项目,旨在帮助理解如何结合Remote Method Invocation(远程方法调用)和Ehcache缓存技术。这个Demo将展示如何利用RMI来创建分布式系统,并利用Ehcache进行高效的数据...

    java RMI简单Demo

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同网络节点上的Java对象之间进行透明的交互。在Java RMI中,一个对象可以调用另一个位于不同JVM(Java虚拟机)...

    java rmi demo

    java rmi入门级实例:分为三个javase项目,rmi-api(存放公共的接口和实体),rmi-server(rmi服务器端),rmi-client(rmi客户端),其中服务端和客户端都依赖rmi-api项目

    Java RMI(远程方法调用)Demo

    Java RMI,全称为Remote Method Invocation,是Java平台上的一个...对于初学者,通过实践Java RMI Demo可以深入理解远程方法调用的概念和流程。在实际项目中,根据需求可能会选择更为复杂但功能强大的分布式系统框架。

    Spring RMI小例子

    Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架,能够帮助开发者轻松地创建分布式应用程序。在这个"Spring RMI小例子"中,我们将深入理解Spring如何简化RMI的使用,以及...

    javaRMIDemo实例

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种用于在分布式环境中进行对象间通信的技术。它允许一个Java对象在某一台机器上执行,并能够调用位于另一台机器上的对象的方法,仿佛它们是在...

    【Java RMI介绍以及编写Demo】

    ### 编写RMI Demo 以下是一个简单的RMI示例: 1. **定义远程接口**: ```java import java.rmi.Remote; import java.rmi.RemoteException; @Remote public interface MyRemoteInterface extends Remote { String...

    RMI的简单完整例子

    远程方法调用(Remote Method Invocation,...通过这个RMI的完整demo,初学者可以深入理解RMI的工作原理,逐步掌握如何创建、运行和测试RMI应用程序。这是一个很好的实践项目,可以帮助开发者建立起分布式编程的基础。

    ehcache rmi集群demo

    在这个“ehcache rmi集群demo”中,我们将探讨如何将Ehcache与RMI结合,实现一个跨节点的缓存集群。 首先,Ehcache的核心概念包括缓存管理器(Cache Manager)、缓存(Cache)、缓存项(Cache Entry)等。缓存管理...

    rmi-demo.zip_DEMO_Java RMI_rmi

    本示例"rmi-demo.zip"是一个关于Java RMI的演示项目,旨在帮助开发者理解并实践RMI的基本原理和用法。 在RMI中,一个Java对象可以定义其方法为远程方法,这些方法可以在网络上的另一个Java虚拟机上执行。这个过程...

    RMI-demo.zip_DEMO_rmi

    "RMI-demo.zip_DEMO_rmi"是一个示例项目,用于教学目的,展示了RMI的基本用法。 该压缩包包含以下四个主要文件: 1. **FirstProblem.jar**:这是一个包含服务器端和客户端所需类的Java可执行jar文件。RMI应用通常...

    一个简单的RMI程序demo

    该demo分为MainService.java服务端和MainClient.java客户端,既可以都在本地运行, 也可以上传到Linux环境使用 java -cp RMITest-0.0.1-SNAPSHOT.jar com.xxz.mainclient.MainClient 命令运行

    rmi-demo.zip

    在“rmi-demo.zip”这个压缩包中,我们可以预见到一个包含RMI示例代码的项目,帮助我们理解并实践RMI的基本概念和工作原理。 首先,RMI的核心思想是透明性:客户端和服务器之间的通信细节被隐藏,使得开发者可以...

Global site tag (gtag.js) - Google Analytics