用RMI开发基于Java的分布式应用_杜风雷
rmi2002标准

RMI 2002 标准是指关于远程方法调用(Remote Method Invocation,RMI)的Java 企业版(Java EE)规范的一部分。
RMI 是一种在Java 企业版中用于实现分布式对象通信的技术。
RMI 2002 标准主要定义了以下几个方面:1. 远程对象模型:RMI 2002 定义了远程对象模型,包括远程接口、远程对象、远程引用等概念,以及如何在不同Java 虚拟机(JVM)之间传递对象引用和调用远程方法。
2. 远程方法调用:RMI 2002 规定了如何通过远程引用调用远程对象的方法。
这包括方法调用的参数传递、返回值处理以及异常处理等。
3. 对象传输:RMI 2002 定义了对象传输机制,支持将Java 对象序列化为二进制数据并在网络中传输。
这使得远程对象能够在不同JVM 之间进行通信。
4. 命名服务:RMI 2002 提供了命名服务,用于在分布式系统中查找和引用远程对象。
命名服务基于Java Naming and Directory Interface(JNDI)规范。
5. 事务支持:RMI 2002 支持事务处理,确保分布式对象之间的操作具有原子性和一致性。
6. 安全机制:RMI 2002 提供了安全机制,包括身份验证、授权和加密等,以确保分布式系统中的数据和对象安全。
7. 国际化支持:RMI 2002 支持Java 国际化规范,使得分布式应用程序可以处理多种语言和文化。
RMI 2002 标准为实现分布式系统提供了基础架构支持。
它使得Java 开发人员可以轻松地创建、部署和维护分布式应用程序。
在实际应用中,RMI 2002 与其他Java EE 技术(如EJB、JMS 等)紧密结合,共同构建高性能、可扩展的分布式系统。
分布式对象技术RMI

5.1 RMI结构 结构
RMI 实现结构可以分为三层: 实现结构可以分为三层: 1. Stub/Skeleton层 层 2. 远程引用层 3. 传输层 Stub Sub/Skeleton层实现传输数据的调度和 层实现传输数据的调度和 反调度机制。 反调度机制。调度就是把数据或对象 转换成字节流, 转换成字节流,反调度则把字节流转 换成数据或对象。 换成数据或对象。 远程引用层定义了RMI连接的调用语义 连接的调用语义 远程引用层定义了 即如何调用远程对象的方法。 即如何调用远程对象的方法。Java远程 远程 方法协议(Java Remote Method Protocol) 方法协议 使用java.rmi.server.RemoteRef 使用 Skeleton 客户调用远程对象 方法 远程对象
JavaRMI 第2例: 例 分为以下四个步骤 1. 创建远程接口及声明远程方法(HelloInterface.java) 创建远程接口及声明远程方法( ) 2. 实现远程接口及远程方法(继承 实现远程接口及远程方法(继承UnicastRemoteObject)(Hello.java) ) 3. 启动 启动RMI注册服务,并注册远程对象(HelloServer.java) 注册服务, 注册服务 并注册远程对象( ) 4. 客户端查找远程对象,并调用远程方法(HelloClient) 客户端查找远程对象,并调用远程方法( ) 5. 执行程序:启动服务 执行程序:启动服务HelloServer;运行客户端 ;运行客户端HelloClient进行调用 进行调用
1. 定义远程接口(服务接口 定义远程接口 服务接口) 服务接口
import java.rmi.Remote; import java.rmi.RemoteException; /** * RMI调用对象接口定义 * @author 王华东 */ public interface InterfaceService extends Remote { /**远程服务对象所必须实现的方法 * 所有的远程调用的方法,必须声明throws RemoteException * */ Object service(Object obj) throws RemoteException; }
基于Java RMI的分布式数据库系统开发与应用

学报 , 2 0 0 3 , 1 4 ( 6 ) : 1 ] 4 2 1 1 4 7 .
调用 , 它 能 使 客 户 机 上 运 行 的 程 序 调 用 远 程 服 务 上 的 对 象 。J a v a RMI 远程方法调用特性使得 J a v a编 程 人 员 能 够
系 统 的应 用 过 程 中 , 通 过 利 用 RMI实 现 了对 数 据 对 象 的
反复使用 , 从而提高了系统 的使用 效率 , 降低 了 系 统 的 开
发 难 度 。而 在 基 于 J a v a RMI 的基础上 , 因 J a v a的 安 全 机
稳定 、 多线程等特点 , 非 常 适 用 于 网络 编 程 。J a v a是 跨 平 台 的 ,J a v a开 发 的软 件 程 序 可 以 在 有 着 J a v a解 释 器 的 系 统 中使 用 , 而 现今 所有 的 I n t e r n e t 平 台都 具 有 J a v a解 释 器, 故使用 J a v a开 发 的软 件 可 以在 所 有 I n t e r n e t 平 台 上运 行 。分 布 式 开 发 是 现 在 大 型 企 业 开 发 最 重 要 的部 分 , J a v a 可 以实 现 分 布 式 , 主 要 通 过 Rmi 、 E j b 、 We b s e r v i c e等 方 式
0 引 言
J a v a是 S u n公 司于 1 9 9 5年 5月 推 出 的一 种 跨 平 台 的
面 向对 象 的 编程 语 言 。J a v a具 有 面 向对 象 、 跨平 台 、 安 全
Java-第9章 RMI编程

信息工程学院
通过RMI签名对象
• 签名了的对象
Java分布式程序设计
信息工程学院
通过RMI签名对象
• 定义一个远程接口
Java分布式程序设计
信息工程学院
通过RMI签名对象
• 服务器程序
• 客户端程序
Java分布式程序设计
信息工程学院
第九章 RMI编程
Java分布式程序设计
信息工程学院
目 录
1. 2. 3. 4. “城市信息”服务器 实现工厂 实现回调 通过RMI签名对象
Java分布式程序设计
信息工程学院
概述
• RMI客户程序不能启动RMI服务器程序 (UnicastRemoteInterface)以及创建 它的实例 • 可以通过工厂,来建立一个动态的服务 器程序 • 利用接口实现回调 • 构建较安全的基于RMI的应用程序
Java分布式程序设计
信息工程学院
1.“城市信息”服务器
• 城市信息服务器的客户程序通过提供城 市名,获得这个城市的相关信息
1. 2. 3. 4. 5. 6. 定义一个远程接口 实现远程接口 开发一个客户程序 产生桩和架构 启动RMI注册表 运行服务器和客户程序
Java分布式程序设计
信息工程学院
Java分布式程序设计
信息工程学院
• 实现Callback接口
3. 实现回调
Java分布式程序设计
信息工程学院
3. 实现回调
• 实现register callback方法
Java分布式程序设计
信息工程学院
3. 实现回调
• 注册回调
Java分布式程序设计
信息工程学院
Java分布式之RMI简介及实例

Java分布式之RMI简介及实例前言最近的联通项目,下一阶段可能会涉及到和各省间的RMI接口,所以总结一下08年中国移动自动拨测系统用到的RMI技术,以备不时之需。
同时也给广大初哥提供一些学习资料,哈哈。
前几年,一直忙于项目,没怎么做系统总结。
以后计划写一些以前项目用过的Java分布式技术实例教程,如:RMI、Socket、Mina、SNMP、SOAP、Web Service、Hessian、JMS等。
希望和大家一起交流,分享经验,一起提高。
RMI简介RMI,远程方法调用(Remote Method Invocation是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。
RMI是非常容易使用的,但是它非常的强大。
RMI的基础是接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的。
看看jboss-remoting:基本原理要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络IO来实现,其中传输协议比较出名的有http、tcp、udp等等,http、tcp、udp都是在基于Socket概念上为某类应用场景而扩展出的传输协议,网络IO,主要有bio、nio、aio三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。
主要步骤分为以下几个步骤:1. 创建远程接口及声明远程方法(RmiMonitorService.java2. 实现远程接口及远程方法(继承UnicastRemoteObject(RmiMonitorServiceImpl.java3. 启动RMI注册服务,并注册远程对象(RmiServer.java4. 客户端查找远程对象,并调用远程方法(MonitorClient.java5. 运行实例业务场景在移动拨测系统管理端中要融合实时显示。
Java分布式处理技术(RMI,JDNI)

本文由我司收集整编,推荐下载,如有疑问,请与我司联系Java 分布式处理技术(RMI,JDNI)2013/01/29 0 Java 分布式处理技术(RMI,JDNI)2010-08-15 11:232740 人阅读评论(5)收藏举报目录(?)[ ]RMI 的基本概念什么是RMIRMI 的用途RMI 应用程序分类创建RMI 应用程序步骤RMI 接口和类简介JNDI 基本概念JNDI 应用程序结构RMI 与JNDI 集成学习总结Java 分布式处理技术1.1 RMI 的基本概念1.1.1 什么是RMIRMI(Remote Method Invocation)远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。
1.1.2 RMI 的用途1、分布式体系结构我们为什么要使用分布式计算呢?Ø当我们想与多个用户或客户机共享一个中央资源(如一个数据库)时,就会使用分布式计算。
Ø分布式计算用来利用多个系统的组合计算能力,以便比在单个系统上更有效或更快地解决问题。
可以用多种方法配置多个计算机系统以共享处理,包括共享内存、共享磁盘或只是共享一条公共通信通道。
最新的技术允许物理上相隔很远的系统能够在处理计算问题时协同工作。
关于利用计算能力这一主题,因特网及伴随的通信协议TCP/IP 的出现已使无数的计算机系统史无前例地连接起来。
对一些应用程序来说,能够利用如此多的计算功能来解决问题是令人满意的。
甚至更吸引人的是,大多数计算机系统都有充足的空闲时间,可以帮助解决其它问题。
将来,网计算会利用分布式计算能力进行出售,这与电力行业出售电能非常相。
2、Java 分布式对象编程技术RMI 是Enterprise JavaBeans 的支柱,是建立分布式Java 应用程序的方便途径。
JAVA中最简单的分布式调用RMI

JAVA中最简单的分布式调用RMI 系统中目前存在两个JAVA 服务,分别是服务A、服务B。
现在服务A 想要调用服务B中的某个服务,我们怎么实现呢?有人觉得这不很简单,服务B暴露一个服务接口,服务A通过RPC 的方式来访问这个接口,这里的RPC 可以引用第三方实现,也可以通过简单的REST 请求的方式实现。
是的,解决这场景的方法有很多,其实JAVA 自身也提供了一种更简单的方式,即通过RMI 实现跨JVM 虚拟机的远程调用。
虽然它和现在主流的RPC 相比,可能显得比较无力。
但是其设计思想,加上它的简单易用,我们不妨来看一下。
RMI 简介RMI(Remote Method Invocation)是一种用于实现远程过程调用的应用程序编程接口。
它使客户机上运行的程序可以调用远程服务器上的对象。
远程方法调用特性使Java编程人员能够在网络环境中分布操作。
特点∙是JAVA 自带的功能,无需集成任何的外部扩展;∙数据传输是面向对象的;∙动态下载对象资源;∙仅限JAVA 间通信;通信协议服务间的通信通过TCP 传输。
协议约定为rmi://,仅限JAVA之间的远程通信;成员∙RMI Registry:作为存储远程服务的代理对象的仓库∙Server:服务端,暴露远程对象,并将其代理对象注册进RMI Registry∙Client:客户端,查找远程代理对象,远程调用服务对象运行机制从上图可以看出,虽然RMI 目前看上去有点过时了,但其思想和现在的服务注册与发现还是很相似的。
归纳起来,包含以下几点:1.启动注册中心2.服务端:暴露服务3.服务端:服务注册4.客户端:获取服务地址(代理对象)5.客户端:远程调用服务使用方法∙启动RMI Registry这里启动仓库有两种方式,一种是在程序中启动:import java.rmi.registry.LocateRegistry;Registry registry = LocateRegistry.createRegistry(REGISTRY_PORT);另一种通过命令启动:/usr/bin/rmiregistry REGISTRY_PORT∙获取RMI Registry∙通过环境变量java.rmi.server.hostname 来设置仓库地址import java.rmi.registry.LocateRegistry;Registry registry = LocateRegistry.getRegistry(REGISTRY_PORT)∙定义远程服务接口∙接口继承Remote∙接口方法必须抛出RemoteExceptionimport java.rmi.Remote;public interface RemoteService extends Remote { / /define your functionObject run() throws RemoteException;}∙UnicastRemoteObject.exportObject(Remote obj, int port)∙创建Remote 对象的代理类,并实现Serializable 接口∙在TCP 上暴露远程服务∙port 为0 表示使用匿名随机端口(使用1~1023的已知端口时,注意权限问题)import java.rmi.server.UnicastRemoteObject;Remote remoteProxy = UnicastRemoteObject.exportObject(your_remote_service, 0);∙注册远程对象到RMI Registry(在Registry 中的都是对象的远程代理类,并非真正的对象)获取Registry 的远程代理类,然后调用它的rebind 将代理对象注册进仓库中(Naming.rebind(String name, Remote obj) 本质上也是解析name 中的仓库地址,获取仓库的代理对象,进而进行远程注册)// 本地创建或远程获取 RegistryRegistry registry = ...registry.rebind(String name, Remote obj);∙查找远程调用对象Registry registry = LocateRegistry.getRegistry(REGISTRY_PORT);Remote obj = registry.lookup(REMOTE_NAME);示例###准备工作:定义远程对象接口package com.test.remote;import java.rmi.Remote;import java.rmi.RemoteExcept ion;public interface RemoteService extends Remote { Object run() throws RemoteException; Object run(Object obj) throws RemoteException;}###服务B:注册远程服务∙实现远程服务对象package com.test.serviceB.publishService;import com.test.remote.RemoteServi ce;import java.rmi.RemoteException;public class pService1 implements RemoteService { public Object run() {System.out.println("invoke pService1."); return "success"; } public Object run(Object obj) throws RemoteException {System.out.println("invoke pService1, params is " + obj.toString ()); return "success";}}∙启动服务∙创建RMI Registry(也可在通过命令rmiregistry 在应用外创建)∙实例化远程服务∙导出远程对象,使其能接受远程调用∙将导出的远程对象绑定到仓库中∙等待服务调用public class Boot { private static final String REMOTE_P1 = "serviceB:p1 "; private static final int REGISTRY_PORT = 9999; public static voi d main(String[] args) throws RemoteException {// 实例化远程对象,并创建远程代理类RemoteService p1 = new pService1();Remote stub1 = UnicastRemoteObject.exportObject(p1, 0);// 本地创建 Registry,并注册远程代理类Registry registry = LocateRegistry.createRegistry(REGISTRY_PORT); registry.rebind(REMOTE_P1, stub1);System.out.println("service b bound");}}###服务A:调用远程服务∙启动服务∙连接仓库∙在Registry 中查找所调用服务的远程代理类∙调用代理类方法public class Boot { private static final String REMOTE_P1 = "serviceB:p1 "; private static final int REGISTRY_PORT = 9999; public static void main(String[] args) throws RemoteException { try {Registry registry = LocateRegistry.getRegistry(REGISTRY_POR T); // 从仓库中获取远程代理类RemoteService p1 = (RemoteService) registry.lookup(REMOTE_P 1); // 远程动态代理String res1 = (String)p1.run();System.out.printf("The remote call for %s %s \n", REMOTE_P1, re s1);} catch (NotBoundException e){e.printStackTrace();} catch (RemoteException e){e.printStackTrace();}}}演示结果∙启动服务Bservice b bound∙启动服务AThe remote call for serviceB:p1 successProcess finished with exit code 0∙查看服务B 调用情况service b boundinvoke pService1.高级用法上面示例没有涉及到远程调用的传参问题。
利用RMI实现JAVA分布式应用

利用RMI实现JAVA分布式应用周夕崇【期刊名称】《电子与电脑》【年(卷),期】2000(7)5【摘要】Java RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。
Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。
其实它可以被看作是RPC的Java版本。
但是传统RPC并不能很好地应用于分布式对象系统。
而Java RMI则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
RMI目前使用Java远程消息交换协议JRMP(Java Remote Messa-ging Protocol)进行通信。
JRMP是专为Java的远程对象制定的协议。
因此,Java RMI具有Java的"Write Once,RunAnywhere"的优点,是分布式应用系统的百分之百纯Java解决方案。
用Java RMI开发的应用系统可以部署在任何支持JRE(Java Run Environment Java,运行环境)的平台上。
但由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。
不能与用非Java语言书写的对象进行通信。
本文拟从程序的角度举例介绍怎样利用RMI实现Java分布式应用。
【总页数】5页(P123-127)【作者】周夕崇【作者单位】陕西省西安市纬二传真陕西财经学院计算机科学系【正文语种】中文【中图分类】TP311【相关文献】1.利用RMI实现分布式应用 [J], 夏阳;殷兆麟2.利用JAVA RMI实现分布式应用系统 [J], 葛建芳;凌永丰3.基于Java RMI和JDBC的多层分布式应用系统的构造与实现 [J], 刘一松4.利用RMI实现JAVA分布式应用的方法与实例 [J], 周夕崇5.利用JAVA RMI开发分布式应用 [J], 邱庆华; 戴倩雯因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用RMI 开发基于Java 的分布式应用杜风雷( 浙江警官职业学院, 浙江杭州310018)摘要: 由于Java 具有跨平台、代码可移植性、安全高效等广泛而强大的功能, 因而在开发网络分布式应用的时候, 可以用它自身的机制实现分布式计算, 一种基于Java 的远程方法调用(RMI)为我们开发分布式应用提供了行之有效的解决方案。
关键词: Java RMI, 分布式应用中图法分类号: TP390 文献标识码: A 文章编号: 1000- 7180(2006)07- 004The Distributed Application Based on Java With RMIDU Feng-lei(Zhejiang Police Vocational Academy, Hangzhou 310018 China)Abetract: Java can go beyond one platform, its codes can be replanted, and it is safe and efficient. So when weempolder the distributed application of Network, we can use its own mechanism to realize the distributed calculation. Akind of RMI based on Java provides an efficient resolvent to empolder the distributed application for us.Key words: Java RMI, Distributed application1 引言随着信息化的发展, 各系统之间的数据的交换量大大增加, 但计算机网络硬件设备与操作系统千差万别, 因此需要使用远程方法调用RMI(RemoteMeth Invocation), 可以在不同的Java 虚拟机(JVM)之间实现对象与对象的通信。
JVM可以位于相同或不同计算机上, 在多个JVM中, 一个JVM可以调用存储在其它JVM的对象的方法。
2 远程方法调用(RMI)的特点2.1 RMI 编程的特点(1) 客户机可以向本地方法一样调用远程服务器上的方法;(2) 可以根据接口指定客户机/服务器编程合约;(3) 可以从服务器对象缺省二进制类文件, 自动生成调动/反调动代码;(4) 将Java 编程模型扩展到机器边界( 和Java虚拟机(JVM)边界之外), 不需要任何特殊语法;(5) 还可以和一个远程方法调用中的数据同时传输行为(代码)。
2.2 RMI 与CORBA作为分布式应用程序框架的规范, COBRA 首当其冲, 它是由对象管理组织(OMG) 开发的。
与CORBA 不同的是, CORBA 能够利用不同编程语言( 例如C/C++、Basic 等) 开发实现分布式应用, 而RMI 是一种纯Java 解决方案。
在RMI 中, 程序的所有部分都由Java 语言编写, 这样, 开发出来的程序完全符合Java 规范, 便于实现跨平台访问、扩展和移植。
按照笔者所在西北电力建设集团公司的情况看, 服务器操作系统主要有Linux 和Windows2000Server, 分别存在于公司和部门当中, 它们是不同的系统平台; 同时, 公司下属各个工程项目部又距离很远, 近的几十公里, 远则达到上千公里甚至位于国外, 因此跨平台和远程访问这两大功能在开发应用系统时就必须考虑, 而RMI 恰恰能够用它的自身特点来满足编程需要。
2.3 RMI 基本体系结构简介RMI 通过TCP/IP 在内部使用Socket, 象其名称暗示的那样, 它能够帮助我们查找并执行远程对象的方法。
RMI 的目的是让位于不同JVM中的对象,在外观及行为上都像是本地的对象。
通常, 我们把调用这种远程对象的JVM, 称为客户机; 而把包括这种远程对象的JVM, 称为服务器。
尽管对一个远程对象的引用和获得对本地对象的引用有所不同,但我们可以把远程对象像本地对象一样使用。
应用收稿日期: 2005-11-09程序并不知道一个对象是远程的还是本地的。
实际上, 远程对象上被调用的方法与本地对象上调用的方法, 具有相同的语法结构。
作为RMI 的底层(会包含复杂的Socket 操作),它会自动截获方法调用, 找到远程对象, 然后处理远程请求。
RMI 设计的重要之处, 就在于不但在设计上实现了远程访问功能, 而且实现了设计的透明性。
RMI 的基本体系结构, 概括起来说, 由三个抽象层组成:(1) 存根/框架层(Stubs/Skeletons Layer)RMI 为我们引入了两种特殊类型的对象, 称为存根(Stub) 和框架(Skeleton) , 它们组成了RMI 的第一层。
在远程通信的时候, 要利用TCP/IP 协议,做很多底层数据的打包传输。
运用Java 技术, 我们先要把数据或者对象转换成字节流, 便于网络传输, 这个过程叫汇集; 当收到远程传来的字节流后, 我们要把流信息转换成对象或者数据, 这个过程叫解读, 它与汇集刚好相反。
Stub 和Skeleton 层位于实际应用程序之下, 建立在Proxy( 代理) 设计方案之上。
Stub 类的作用是远程服务器实现的代理的角色, Stub 是客户方对象; Skeleton 类用于帮助对象通过RMI 链接与Stub通信, 它从链路中读取方法调用的参数, 向远程服务实现对象进行调用, 接受返回值, 然后再把返回值写回到Stub。
(2) 远程引用层远程引用层定义和支持着RMI 连接的调用语义。
RMI 进行远程访问要用到JRMP (Java Remote Method Protocol, 即Java 远程方法协议), 这一层提供专用于JRMP 的RemoteRef 对象, 它位于java. rmi.server 包内, 代表着远程对象的一个句柄。
Re- moteRef 使用远程引用来执行远程对象的一个远程方法调用。
(3) 传输层传输层在JVM之间建立基于流的网络连接, 并且负责设置和管理这些连接。
这时候, RMI 使用一种线级协议进行基于TCP/IP 的连接, 该协议就是Java 远程方法协议(JRMP, 即Java Remote Method Protocol)。
在JDK 版本1.2 开始, JRMP 不再需要Skeleton, 而是使用reflection 来建立与远程服务的连接。
为了生成Stub, 我们须用rmic。
当前的RMI 实现中, 传输层建立在TCP/IP 基础上, 设计用于在客户和服务器之间建立一条连接(即使联网有障碍)。
2.4 开发的基本步骤使用RMI 编写Client/Server 模式( 客户/服务器)应用程序, 包括 6 个基本步骤:(1) 定义远程接口;(2) 实现远程接口;(3) 准备远程调用的服务器对象;(4) 生成残根Stub( 客户代理) 和框架Skeleton(服务器实体);(5) 用rmiregistry 找到远程对象;(6) 运行测试RMI 分布式应用。
2.5 开发信息发布系统实例在开发RMI 进行分布式访问之前, 需要将各项功能模块化, 即把实际应用抽象成符合Java 规范的类和接口模型, 使这些类和接口之间互相协作, 能实现各自独立的功能, 最后, 可以把它们组合成统一的网络分布式系统。
现在, 以开发公司信息发布系统为例, 把主模块( 主要的类文件) 的名称定为信息发布服务, 为了保持应用开发的数据一致性和清晰度, 接下来涉及的其它模块命名也将以这个模块命名为基准。
(1) 定义远程接口Java RMI 运行环境要求任何可以远程调用的方法必须放在远程接口中。
该远程接口用来扩展java.rmi.Remote 接口, 在Java API 中, 可以发现它没有任何方法, 只是个标志性接口, 这样, 可以让Java 运行环境(JRE) 认识每个接口的特殊属性, 以便能够远程访问。
因此, 按照信息发布服务的命名, 首先须将信息发布服务定义为远程接口, 同时仅放入一个供测试的方法getRemoteInfo()来实现编码, 将所有模块至于新建的enterprise.distribute 包中, 代码如下:// - - - - - - - - InfoDistributeRemote. java- - - - - - - - package enterprise. distribute;import java.rmi.Remote;import java.rmi.RemoteException;public interface InfoDistributeRemote extends Remote{ public String getRemoteInfo( ) throws RemoteException; }(2) 实现远程接口这是一个实现远程对象的类。
如果实现了远程接口, 就能够覆盖该对象中的所有方法, 因此, 远程对象的实现类将真正包含我们希望导出的方法的代码。
在远程信息发布系统中, 我们至少实现一个远程接口的对象, 它就是远程可访问的对象。
这里, 信息发布服务类可以为我们生成远程可访问对象的实例:// - - - - - - - - - InfoDistributeService. java- - - - - - - package enterprise. distribute;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class InfoDistributeServiceextends UnicastRemoteObject implements InfoDistribute Remote{public InfoDistributeService() throws RemoteException{ super();}// The return value of the method only for testing... public String getRemoteInfo(){return“Hello! I am a remote object.”;}}信息发布服务类类实现远程接口InfoDis- tributeRemote, 并继承java.rmi.server.UnicastRemo- teObject。
由于符合InfoDistributeRemote 接口, 因此该类除构造方法之外, 还应有getRemoteInfo( )方法,而且必须将该方法实现。