`
阅读更多

RMI相关概述

  RMI是Java的一组拥护开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。简单地说,这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用,由于J2EE是分布式程序平台,它一RMI机制实现程序组件在不同操作系统之间的通信。比如,一个EJB可以通过RMI调用Web上另一台机器上的EJB远程方法。

  RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。

  RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。JRMP是专为Java的远程对象制定的协议。因此,Java RMI具有Java的“Write Once,Run Anywhere”的优点,是分布式应用系统的百分之百纯Java解决方案。用Java RMI开发的应用系统可以部署在任何支持JRE(Java Run Environment Java,运行环境)的平台上。但由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。不能与用非Java语言书写的对象进行通信。

  Java Remote Method Invocation ( RMI -- Java远程方法调用)允许您使用Java编写分布式对象。本文将介绍RMI的优点以及如何将其连接到现有的和原有的系统中,以及与用Java 编写的组件的连接。

  RMI为采用Java对象的分布式计算提供了简单而直接的途径。这些对象可以是新的Java对象,也可以是围绕现有API的简单的Java包装程序。Java体现了“编写一次就能在任何地方运行的模式。而RMI可将Java模式进行扩展,使之可在任何地方运行”。

  因为RMI是以Java为核心的,所以,它将Java的安全性和可移植性等强大功能带给了分布式计算。您可将代理和梢?务逻辑等属性移动到网络中最合适的地方。如果您要扩展Java在系统中的使用,RMI将使您充分利用其强大功能。

  RMI可利用标准Java本机方法接口JNI与现有的和原有的系统相连接。RMI还可利用标准JDBC包与现有的关系数据库连接。RMI/JNI和RMI/JDBC相结合,可帮助您利用RMI与目前使用非Java语言的现有服务器进行通信,而且在您需要时可扩展Java在这些服务器上的使用。RMI可帮助您在扩展使用时充分利用Java的强大功能。
  
RMI(远程方法调用)的组成

  一个正常工作的RMI系统由下面几个部分组成:

  ·远程服务的接口定义

  ·远程服务接口的具体实现

  ·桩(Stub)和框架(Skeleton)文件

  ·一个运行远程服务的服务器

  ·一个RMI命名服务,它允许客户端去发现这个远程服务

  ·类文件的提供者(一个HTTP或者FTP服务器)

  ·一个需要这个远程服务的客户端程序
  
RMI(远程方法调用)的原理

  RMI系统结构,在客户端和服务器端都有几层结构。

  --------- ----------
  | 客户 | | 服务器|
  ---------- ----------
  | |
  ------------- ----------
  | 占位程序 | | 骨干网 |
  -------------- -----------
  | |
  ------------------------------------
  | 远 程 引 用 层 |
  ------------------------------------
  | |
  ------------------------------------
  | 传 输 层 |
  ------------------------------------

  方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传 输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。 占位程序扮演着远程服务器对象的代理的角色,使该对象可被客户激活。 远程引用层处理语义、管理单一或多重对象的通信,决定调用是应发往一个服务器还是多个。传输层管理实际的连接,并且追追踪可以接受方法调用的远程对象。服务器端的骨干网完成对服务器对象实际的方法调用,并获取返回值。返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返回。最后,占位程序获得返回值。

  要完成以上步骤需要有以下几个步骤:

  1、生成一个远程接口

  2、实现远程对象(服务器端程序)

  3、生成占位程序和骨干网(服务器端程序)

  4、编写服务器程序

  5、编写客户程序

  6、注册远程对象

  7、启动远程对象

  具体实现如下:

  1、生成一个远程接口

  package c15.ptime;

  import java.rmi.*;

  public interface PerfectTimeI extends Remote {

  long getPerfectTime() throws RemoteException;

  }

  2、实现远程对象(服务器端程序)

  package c15.ptime;

  import java.rmi.*;

  import java.rmi.server.*;

  import java.rmi.registry.*;

  import java.net.*;

  public class PerfectTime

  extends UnicastRemoteObject

  implements PerfectTimeI {

  public long getPerfectTime()

  throws RemoteException {

  return System.currentTimeMillis();

  }

  public PerfectTime() throws RemoteException {

  super();

  }

  public static void main(String[] args) {

  System.setSecurityManager(

  new RMISecurityManager());

  try {

  PerfectTime pt = new PerfectTime();

  Naming.rebind(

  "//zhouty:2005/PerfectTime" , pt);

  System.out.println("Ready to do time");

  } catch(Exception e) {

  e.printStackTrace();

  }

  }

  }

  4、编译远程对象(服务器端程序)

  javac -classpath . -d . PerfectTime.java

  5、生成根和干(占位程序和骨干程序)

  rmic -classpath . -d . c15.ptime.PerfectTime

  6、注册远程对象

  start rmiregistry 2005

  7、启动服务器端程序

  java -Djava.rmi.server.codebase=file:///d:/TestRMI/ c15.ptime.Per

  fectTime

  8、编写客户端程序

  package c15.ptime;

  import java.rmi.*;

  import java.rmi.registry.*;

  public class DisplayPerfectTime {

  public static void main(String[] args) {

  System.setSecurityManager(

  new RMISecurityManager());

  try {

  PerfectTimeI t =

  (PerfectTimeI)Naming.lookup(

  "192.168.0.171:2005/PerfectTime");

  for(int i = 0 ; i < 10; i++)

  System.out.println("Perfect time =" +

  t.getPerfectTime());

  } catch(Exception e) {

  e.printStackTrace();

  }

  }

  }

  9、编译客端程序

  javac -classpath . -d . DisplayPerfectTime.java

  10、修改JVM的配置文件 (客户机和服务器的都需要经过修改)

  %JRE_HOME%\policytool.exe

  11、启动客户程序

  java -classpath . c15.ptime.DisplayPerfectTime

  12、返回结果

  Perfect time =967274884390

  Perfect time =967274884450

  Perfect time =967274884450

  Perfect time =967274884450

  Perfect time =967274884500

  Perfect time =967274884500

  Perfect time =967274884560

  Perfect time =967274884610

  Perfect time =967274884610

  Perfect time =967274884610
  RMI(远程方法调用)的优点
  从最基本的角度看,RMI是Java的远程过程调用(RPC)机制。与传统的RPC系统相比,RMI具有若干优点,因为它是Java面向对象方法的一部分。传统的RPC系统采用中性语言,所以是最普通的系统--它们不能提供所有可能的目标平台所具有的功能。

  RMI以Java为核心,可与采用本机方法与现有系统相连接。这就是说,RMI可采用自然、直接和功能全面的方式为您提供分布式计算技术,而这种技术可帮助您以不断递增和无缝的方式为整个系统添加Java功能。

  RMI的主要优点如下:

  面向对象:RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,您可以将类似Java哈希表这样的复杂类型作为一个参数进行传递。而在目前的RPC系统中,您只能依靠客户机将此类对象分解成基本数据类型,然后传递这些数据类型,最后在服务器端重新创建哈希表。RMI则不需额外的客户程序代码(将对象分解成基本数据类型),直接跨网传递对象。

       可移动属性:RMI可将属性(类实现程序)从客户机移动到服务器,或者从服务器移到客户机。例如,您可以定义一个检查雇员开支报告的接口,以便察看雇员是否遵守了公司目前实行的政策。在开支报告创建后,客户机就会从服务器端获得实现该接口的对象。如果政策发生变化,服务器端就会开始返回使用了新政策的该接口的另一个实现程序。您不必在用户系统上安装任何新的软件就能在客户端检查限制条件--从而向用户提供烁快的反馈,并降低服务器的工作量。这样就能具备最大的灵活性,因为政策改变时只需要您编写一个新的Java类,并将其在服务器主机上安装一次即可。


  设计方式:对象传递功能使您可以在分布式计算中充分利用面向对象技术的强大功能,如二层和三层结构系统。如果您能够传递属性,那么您就可以在您的解决方案中使用面向对象的设计方式。所有面向对象的设计方式无不依靠不同的属性来发挥功能,如果不能传递完整的对象--包括实现和类型--就会失去设计方式上所提供的优点。

  安  全:RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。RMI使用专门为保护系统免遭恶意小应用程序侵害而设计的安全管理程序,可保护您的系统和网络免遭潜在的恶意下载程序的破坏。在情况严重时,服务器可拒绝下载任何执行程序。

  便于编写和使用:RMI使得Java远程服务程序和访问这些服务程序的Java客户程序的编写工作变得轻松、简单。远程接口实际上就是Java接口。服务程序大约用三行指令宣布本身是服务程序,其它方面则与任何其它Java对象类似。这种简单方法便于快速编写完整的分布式对象系统的服务程序,并快速地制做软件的原型和早期版本,以便于进行测试和评估。因为RMI程序编写简单,所以维护也简单。

  可连接现有/原有的系统:RMI可通过Java的本机方法接口JNI与现有系统进行进行交互。利用RMI和JNI,您就能用Java语言编写客户端程序,还能使用现有的服务器端程序。在使用RMI/JNI与现有服务器连接时,您可以有选择地用Java重新编写服务程序的任何部分,并使新的程序充分发挥Java的功能。类似地,RMI可利用JDBC、在不修改使用数据库的现有非Java源代码的前提下与现有关系数据库进行交互。

  编写一次,到处运行:RMI是Java“编写一次,到处运行 ”方法的一部分。任何基于RMI的系统均可100%地移植到任何Java虚拟机上,RMI/JDBC系统也不例外。如果使用RMI/JNI与现有系统进行交互工作,则采用JNI编写的代码可与任何Java虚拟机进行编译、运行。

  分布式垃圾收集:RMI采用其分布式垃圾收集功能收集不再被网络中任何客户程序所引用的远程服务对象。与Java 虚拟机内部的垃圾收集类似,分布式垃圾收集功能允许用户根据自己的需要定义服务器对象,并且明确这些对象在不再被客户机引用时会被删除。

  并行计算:RMI采用多线程处理方法,可使您的服务器利用这些Java线程更好地并行处理客户端的请求。Java分布式计算解决方案:RMI从JDK 1.1开始就是Java平台的核心部分,因此,它存在于任何一台1.1 Java虚拟机中。所有RMI系统均采用相同的公开协议,所以,所有Java 系统均可直接相互对话,而不必事先对协议进行转换。
  
RMI与CORBA的关系

  RMI 和 CORBA 常被视为相互竞争的技术,因为两者都提供对远程分布式对象的透明访问。但这两种技术实际上是相互补充的,一者的长处正好可以弥补另一者的短处。RMI 和 CORBA 的结合产生了 RMI-IIOP,RMI-IIOP 是企业服务器端 Java 开发的基础。

  1997 年,IBM 和 Sun Microsystems启动了一项旨在促进 Java 作为企业开发技术的发展的合作计划。两家公司特别着力于如何将 Java 用作服务器端语言,生成可以结合进现有体系结构的企业级代码。所需要的就是一种远程传输技术,它兼有 Java 的 RMI(Remote Method Invocation,远程方法调用)较少的资源占用量和更成熟的 CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)技术的健壮性。出于这一需要,RMI-IIOP问世了,它帮助将 Java 语言推向了目前服务器端企业开发的主流语言的领先地位。  
0
1
分享到:
评论

相关推荐

    java分布式之RMI简介及实例

    ### Java分布式之RMI简介及实例 #### RMI概述 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算框架,它允许开发者创建可以在网络上跨多台计算机运行的对象。RMI的目标是使得...

    java rmi 参考文档

    #### 一、Java RMI简介 Java RMI(Remote Method Invocation)是一种允许调用不同Java虚拟机(JVM)上方法的机制。这些JVM可能位于不同的机器上,也可能在同一台机器上。无论哪种情况,被调用的方法都在与调用过程...

    rmi原理及应用ppt

    #### 一、RMI简介与背景 - **RMI (Remote Method Invocation)** 是一种允许在不同的Java虚拟机(JVM)之间调用方法的技术。它使得开发人员能够像调用本地对象一样调用远程对象的方法,极大地简化了分布式系统的编程...

    rmi入门学习,实用的小例子

    #### 一、Java RMI简介 Java Remote Method Invocation (RMI) 是Java平台提供的一种分布式计算技术,允许开发者在不同Java虚拟机(JVM)之间调用远程对象的方法,从而实现分布式应用程序的开发。RMI简化了网络编程的...

    RMI远程调用代码及使用方法

    #### 一、RMI简介 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算技术,它允许开发人员在不同的Java虚拟机(JVM)之间进行对象的远程调用。通过RMI,开发者可以在一台计算机上...

    JavaRMI超棒书

    #### 一、Java RMI简介 Java远程方法调用(Java Remote Method Invocation,简称Java RMI)是一种用于实现远程对象之间通信的技术,它是Java平台的一个核心组件,主要用于解决分布式环境中不同进程间的数据交换问题...

    rmi简单例子

    ### RMI简介 RMI是Java平台提供的一种分布式计算框架,它使得在一个JVM中的对象可以调用另一个JVM中的对象的方法,就好像调用本地对象一样。这种能力对于构建分布式应用非常有用。RMI的核心协议是JRMP(Java Remote ...

    实验2 RMI.doc

    #### 二、Java RMI简介 Java RMI 是一种允许对象通过网络调用远程对象上的方法的技术。它使得开发者可以像调用本地对象一样调用远程对象的方法,而无需关注这些对象是否位于不同的虚拟机或不同的计算机上。RMI 使用...

    Java RMI的简单例子

    #### 一、RMI简介 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种用于实现分布式应用的技术。它允许对象在不同的JVM之间通过网络相互调用对方的方法,就像调用本地对象一样。通过RMI,...

    使用RMI和CORBA进行分布式java程序设计

    ### RMI简介 RMI是Java平台内置的一种分布式对象模型,简化了Java程序员创建分布式应用的难度。RMI的核心理念是提供一种透明的方式来调用远程对象的方法,就像调用本地对象一样。开发者无需关心底层的网络协议细节...

    一个RMI的分布式应用的实例

    #### 一、RMI简介及分布式应用原理 RMI (Remote Method Invocation) 是 Java 提供的一种远程方法调用技术,它允许开发者在不同的 JVM 上像调用本地方法那样调用远程方法。RMI 的主要优势在于其提供了透明的远程方法...

    RMI最简单的一个实例

    #### 一、RMI简介与应用场景 远程方法调用 (RMI) 是 Java 平台提供的一种机制,允许在一台机器上的虚拟机中的对象调用另一台机器上虚拟机中的对象的方法。RMI 结合了面向对象技术与远程过程调用的优点,为开发...

    JDK5新版RMI编程指南

    #### RMI简介与发展历程 RMI(Remote Method Invocation),即远程方法调用,是一种允许在不同的Java虚拟机(JVM)之间进行远程调用的技术。它是Java平台上最早的远程访问技术之一,为后续的EJB等高级远程访问技术...

    rmi入门

    1. **RMI简介**:解释RMI的基本概念,包括它的设计目标和工作原理。 2. **RMI组件**:介绍RMI中的关键组件,如远程接口、远程对象、注册表和客户机。 3. **RMI的生命周期**:阐述一个RMI应用程序从创建到运行的步骤...

    rmi技术应用demoPDF版

    #### 一、RMI简介 **远程方法调用(RMI)**是Java平台提供的一种分布式计算技术,它允许一个Java对象通过网络调用另一个Java对象中的方法,就如同本地方法调用一样。RMI的实现基于Java Remote Method Protocol (JRMP)...

    基于-JavaRMI的分布式计算.doc

    2. Java RMI简介 Java RMI是Java 1.1引入的一个特性,它为Java开发者提供了一种在客户端和服务器之间进行远程方法调用的能力。RMI允许一个Java对象(通常称为远程对象)在一台机器上创建,并且可以在另一台机器上的...

    bea RMI 培训

    【分布式对象与RMI简介】 分布式对象是一种跨越网络的编程模型,它允许不同的计算机系统间的对象互相调用方法,仿佛它们都在同一台机器上。这种技术使得构建大规模、跨平台的应用程序成为可能,尤其在企业级应用中...

    ecacheRMIManual集群示例

    RMI简介** 远程方法调用(Remote Method Invocation,RMI)是Java平台的一项功能,允许一个对象在一台机器上的一个Java虚拟机(JVM)中调用另一台机器上的JVM中的对象的方法。在Ehcache的集群配置中,RMI用于节点间...

    关于RMI方面的规范知识

    **1.3 CORBA和DCOM简介** - **CORBA**:由对象管理组织(Object Management Group)制定的标准,包括对象请求代理(ORB)、公共对象服务和公共设施三层结构。ORB是基础,负责对象间通信和互操作,提供各种公共服务...

    RMI使用学习 小结

    #### 一、RMI简介及应用场景 远程方法调用(Remote Method Invocation,简称RMI)是一种Java技术,允许开发者在不同的JVM(Java虚拟机)之间通过网络进行对象间的通信。它使得在一台机器上的Java对象能够调用另一台...

Global site tag (gtag.js) - Google Analytics