一、RMI系统运行机理
RMI应用程序通常包括两个独立的程序:服务器程序和客户机程序。典型的服务器应用程序将创建多个远程对象,使这些远程对象能够被引用,然后等待客户机调用这些远程对象的方法。而典型的客户机程序则从服务器中得到一个或多个远程对象的引用,然后调用远程对象的方法。RMI为服务器和客户机进行通信和信息传递提供了一种机制。
在与远程对象的通信过程中,RMI使用标准机制:stub和skeleton。远程对象的stub担当远程对象的客户本地代表或代理人角色。调用程序将调用本地stub的方法,而本地stub将负责执行对远程对象的方法调用。在RMI中,远程对象的stub与该远程对象所实现的远程接口集相同。调用stub的方法时将执行下列操作:(1) 初始化与包含远程对象的远程虚拟机的连接;(2) 对远程虚拟机的参数进行编组(写入并传输);(3) 等待方法调用结果;(4) 解编(读取)返回值或返回的异常;(5) 将值返回给调用程序。
为了向调用程序展示比较简单的调用机制,stub将参数的序列化和网络级通信等细节隐藏了起来。在远程虚拟机中,每个远程对象都可以有相应的skeleton(在JDK1.2环境中无需使用skeleton)。Skeleton负责将调用分配给实际的远程对象实现。它在接收方法调用时执行下列操作:(1) 解编(读取)远程方法的参数;(2) 调用实际远程对象实现上的方法;(3) 将结果(返回值或异常)编组(写入并传输)给调用程序。
stub和skeleton由rmic编译器生成。
利用RMI编写分布式对象应用程序需要完成以下工作:(1) 定位远程对象。
应用程序可使用两种机制中的一种得到对远程对象的引用。它既可用RMI的简单命名工具rmiregistry来注册它的远程对象,也可以将远程对象引用作为常规操作的一部分来进行传递和返回。(2)与远程对象通信。
远程对象间通信的细节由RMI处理,对于程序员来说,远程通信看起来就像标准的Java方法调用。(3)给作为参数或返回值传递的对象加载类字节码。
因为RMI允许调用程序将纯Java对象传给远程对象,所以,RMI将提供必要的机制,既可以加载对象的代码又可以传输对象的数据。在RMI分布式应用程序运行时,服务器调用注册服务程序以使名字与远程对象相关联。客户机在服务器上的注册服务程序中用远程对象的名字查找该远程对象,然后调用它的方法。
二、对象序列化
在RMI分布式应用系统中,服务器与客户机之间传递的Java对象必须是可序列化的对象。不可序列化的对象不能在对象流中进行传递。对象序列化扩展了核心Java输入/输出类,同时也支持对象。对象序列化支持把对象编码以及将通过它们可访问到的对象编码变成字节流;同时,它也支持流中对象图形的互补重构造。序列化用于轻型持久性和借助于套接字或远程方法调用(RMI)进行的通信。序列化中现在包括一个 API(Application Programming Interface,应用程序接口),允许独立于类的域指定对象的序列化数据,并允许使用现有协议将序列化数据域写入流中或从流中读取,以确保与缺省读写机制的兼容性。
为编写应用程序,除多数瞬态应用程序外,都必须具备存储和检索 Java对象的能力。以序列化方式存储和检索对象的关键在于提供重新构造该对象所需的足够对象状态。存储到流的对象可能会支持 Serializable(可序列化)或 Externalizable(可外部化)接口。
对于Java对象,序列化形式必须能标识和校验存储其内容的对象所属的 Java类,并且将该内容还原为新的实例。对于可序列化对象,流将提供足够的信息将流的域还原为类的兼容版本。对于可外部化对象,类将全权负责其内容的外部格式。序列化 Java 对象的目的是:提供一种简单但可扩充的机制,以序列化方式维护 Java对象的类型及安全属性;具有支持编组和解编的扩展能力以满足远程对象的需要;具有可扩展性以支持 Java 对象的简单持久性;只有在自定义时,才需对每个类提供序列化自实现;允许对象定义其外部格式。
三、分布式应用的实现和运行步骤
编写Java RMI分布式应用程序的步骤主要包括以下几步:
(1) 将远程类的功能定义为Java接口。在Java中,远程对象是实现远程接口的类的实例。在远程接口中声明每个要远程调用的方法。远程接口具有如下特点:1) 远程接口必须声明为public。
如果不这样,则除非客户端与远程接口在同一个包内,否则当试图装入实现该远程接口的远程对象时会得到错误结果。2) 远程对象扩展java.rmi.Remote接口
。3) 除了所有应用程序特定的例外之外,每个方法还必须抛出java.rmi.RemoteException例外
。4) 任何作为参数或返回值传送的远程对象的数据类型必须声明为远程接口类型,而不是实现类。
(2) 编写和实现服务器类。该类是实现(1)中定义的远程接口。所以在该类中至少要声明实现一个远程接口,并且必须具有构造方法。在该类中还要实现远程接口中所声明的各个远程方法。
(3) 编写使用远程服务的客户机程序。在该类中使用java.rmi.Naming中的lookup()方法获得对远程对象的引用 ,依据需要调用该引用的远程方法,其调用方式和对本地对象方法的调用相同。
实现了服务器和客户机的程序后,就是编译和运行该RMI系统。其步骤有:
(1) 使用javac编译远程接口类,远程接口实现类和客户机程序。
(2) 使用rmic编译器生成实现类的stub和skeleton。
(3) 启动RMI注册服务程序rmiregistry。
(4) 启动服务器端程序。
(5) 启动客户机程序。
分享到:
相关推荐
通过实际操作,这些理论知识将更加生动和深刻。 文件列表中的"RMI"可能包含实验报告文档、源代码文件(`.java`)、编译后的Class文件(`.class`)以及可能的配置文件。这些文件共同构成了一个完整的RMI应用实例,...
3. **理论基础**:对 Java 基础有一定了解,尤其是关于类、接口和序列化的概念。 #### 四、实验步骤详解 1. **定义远程接口**: - 首先需要定义一个远程接口,该接口中的方法必须抛出 `java.rmi.RemoteException`...
总的来说,"RMI设置"涵盖了Java分布式计算的核心技术,从理论概念到实践操作,包括源码编写、工具使用以及在特定服务器环境下的配置。学习和掌握RMI,能够帮助开发者构建可扩展的、分布式的Java应用程序。
对于初学者来说,动手实践是掌握知识的重要步骤,它可以帮助你巩固理论知识,并提升问题解决能力。 总结来说,RMI技术和多线程Web服务器都是Java编程中的重要概念。RMI使得分布式计算变得简单,而多线程技术则是...
在IT领域,客户端-服务器架构、多线程服务器和远程方法调用...文件列表中的"客户端服务器多线程"很可能包含了客户端和服务器的源代码,以及多线程实现的相关文件,学生可以通过阅读和运行这些代码来加深对理论的理解。
在IT领域,特别是数据分析和信息理论中,"RMI_newmark_rmi_TheInformation_源码" 提到的概念主要涉及到“Newmark RMI”(Newmark's Reduced Mutual Information)和“The Information”这两个核心知识点。...
RMI(Remote Method Invocation,远程方法调用)是Java平台中的一个重要特性,它允许Java对象在不同的Java虚拟机(JVM)之间进行通信,从而...建议解压后仔细研究,结合理论知识与实践代码,能更好地掌握RMI的使用。
总结来说,这个"java rmi+corba实现的军舰游戏"项目是一个很好的学习案例,它将理论知识与实际应用相结合,帮助初学者理解分布式系统的设计和实现,以及RMI和CORBA在解决实际问题中的应用。通过深入研究和实践,不仅...
实际的编程示例和案例研究可以帮助开发者更好地理解和应用理论知识,手册可能包含这些实践性的部分,展示如何解决特定问题和实现高效算法。 通过这份详尽的手册,开发者不仅可以掌握RMI多核MIPS处理器的底层原理,...
总结来说,通过对比JMS和RMI这两种技术,本文对构建一个高效、稳定、实时的数据库性能监测系统提供了理论和技术支持,介绍了相关技术在实际应用中的设计与实现策略,并通过结构图和时序图等提供了具体的应用示例。
在这些课件中,可能涵盖了中间件的基础理论、每种技术的工作原理、实际应用案例以及如何使用它们来构建分布式应用等内容。Lecture_1可能介绍了中间件的基本概念和重要性,Lecture_3可能深入讨论了Jini的架构和实现...
通过实际操作,你将不仅能学习到理论知识,还能积累实践经验,加深对网络编程和分布式计算的理解。 总结来说,这个实验涵盖了HTTP基础、多线程Web服务器的实现以及Java RMI的应用,这些都是构建复杂网络应用程序的...
总结,"dubbo_rpc_hession_rmi"这个主题涵盖了Dubbo作为RPC框架的核心概念,Hessian作为RPC协议的实现,以及RPC基础理论。通过学习这些内容,开发者可以更好地理解和应用分布式服务框架,提高系统的可扩展性和可维护...
实验报告文档应该包含了对这些中间件技术的理论介绍、实践步骤和案例分析,而源码部分则提供了实际应用这些技术的示例,帮助你更好地理解它们的工作原理和使用方式。通过深入研究这些内容,你不仅可以掌握中间件的...
通过观看这个视频,开发者可以获得更直观的理解,并能够将理论知识应用到实践中。 总的来说,掌握Dubbo和RPC原理对于成为一位优秀的架构师至关重要。这不仅有助于设计和实施高效、可扩展的分布式系统,还能提高团队...
RMI方法不仅可以作为一种理论工具来研究和解决数学问题,也可以作为一个技术框架来开发实用的数学软件,从而在数学研究和工程实践中发挥重要的作用。这一方法的提出及其求解器的设计,在当时的数学研究领域无疑具有...
【标题】:“College-...在“College-RMI-Exp-3”这个项目中,开发者可以实践以上理论,了解RMI的使用方式,同时体验到分布式编程的魅力。通过实际操作,可以更深刻地理解Java RMI的工作原理及其在实际项目中的应用。
总的来说,"SDJ-Assignment3RMI-TicTacToe"项目旨在提升学生对Java RMI的理解,同时提供了一个有趣的实战平台,将理论知识与实际应用相结合,增强开发分布式应用程序的能力。通过这个项目,学生可以深入学习Java的...
这表明项目不仅关注技术实现,还涉及理论分析和学术讨论。 **Java RMI 知识点详解:** 1. **远程方法调用(RMI)**:RMI是Java提供的一种机制,它使得一个对象可以调用远程机器上的另一个对象的方法,就像调用本地...
RMII(Reduced Media Independent...实践是检验真理的唯一标准,动手编写和调试RMI程序将有助于巩固理论知识。同时,结合其他参考资料和在线社区,如Pudn网站,可以帮助解决在学习过程中遇到的问题,提升你的技能水平。