操作RMI实现JAVA分布式操纵[Java编程]
本文“操作RMI实现JAVA分布式操纵[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Java 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语言书写的对象举行通信.本文拟从程序的角度举例介绍怎样操纵RMI实现Java分布式利用.
1、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分布式利用程序运行时,服务器调用注册服务程序以使名字与远程对象相关联.客户机在服务器上的注册服务程序顶用远程对象的名字查找该远程对象,然后调用它的办法.
2、对象序列化
在RMI分布式利用系统中,服务器与客户机之间传送的Java对象必须是可序列化的对象.不可序列化的对象不能在对象流中举行传送.对象序列化扩大了核心Java输入/输出类,同时也支持对象.对象序列化支持把对象编码以及将通过它们可拜候到的对象编码变成字节俭;同时,它也支持流中对象图形的互补重构造.序列化用于轻型长期性和借助于套接字或远程办法调用(RMI)举行的通信.序列化中目前包含一个 API(Application Programming Interface,利用程序接口),答应独立于类的域指定对象的序列化数据,并答应利用现有协议将序列化数据域写入流中或从流中读取,以确保与缺省读写机制的兼容性.
为编写利用程序,除大都瞬态利用程序外,都必须具有存储和检索 Java对象的本领.以序列化方法存储和检索对象的关键在于供应重新构造该对象所需的充足对象状况.存储到流的对象大概会支持 Serializable(可序列化)或 Externalizable(可外部化)接口.关于Java对象,序列化情势必须能标识和校验存储其内容的对象所属的Java类,并且将该内容复原为新的实例.关于可序列化对象,流将供应充足的信息将流的域复原为类的兼容版本.关于可外部化对象,类将全权负责其内容的外部格局.序列化 Java 对象的目的是:供应一种简单但可扩大的机制,以序列化方法保护 Java对象的范例及安全属性;具有支持编组和解编的扩大本领以满意远程对象的需求;具有可扩大性以支持 Java 对象的简单长期性;只有在自定义时,才需对每个类供应序列化自实现;答应对象定义其外部格局.
以上是“操作RMI实现JAVA分布式操纵[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |