用rmi开发基于java的企业分布式应用(1)

上传人:bin****86 文档编号:60614249 上传时间:2018-11-17 格式:DOCX 页数:15 大小:22.76KB
返回 下载 相关 举报
用rmi开发基于java的企业分布式应用(1)_第1页
第1页 / 共15页
用rmi开发基于java的企业分布式应用(1)_第2页
第2页 / 共15页
用rmi开发基于java的企业分布式应用(1)_第3页
第3页 / 共15页
用rmi开发基于java的企业分布式应用(1)_第4页
第4页 / 共15页
用rmi开发基于java的企业分布式应用(1)_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《用rmi开发基于java的企业分布式应用(1)》由会员分享,可在线阅读,更多相关《用rmi开发基于java的企业分布式应用(1)(15页珍藏版)》请在金锄头文库上搜索。

1、从本学科出发,应着重选对国民经济具有一定实用价值和理论意义的课题。课题具有先进性,便于研究生提出新见解,特别是博士生必须有创新性的成果用RMI开发基于Java的企业分布式应用(1)摘要由于Java具有跨平台、代码可移植性、安全高效等广泛而强大的功能,因而在开发网络分布式应用的时候,可以用它自身的机制实现分布式计算,一种基于Java的远程方法调用(RMI)为我们开发企业分布式应用提供了行之有效的解决方案。关键词JavaRMI企业分布式应用1概述随着电力企业信息化建设的不断深入和发展,企业内部和企业与企业之间对信息、对数据的交换量大大增加,这些信息与数据越来越需要在不同的计算机网络间传送和交流。同

2、时,由于各单位、各部门之间的现存的计算机网络硬件设备与操作系统千差万别,应用水平也参差不齐,因此,开发出跨平台、可移植、高效安全的网络分布式应用来服务于电力企业,就显得尤为重要。在当今的编程术语里,分布式计算已经成为很常见的词,它将企业的业务数据和程序分布在网络的不同物理位置上,通过调动网络上多台计算机的处理能力,发挥远程调用数据的功能。远程方法调用(RemoteMethodInvocation,RMI),可以在不同的Java虚拟机(JVM)之间实现对象与对象的通信。JVM可以位于相同或不同计算机上,在多个JVM中,一个JVM可以调用存储在其它JVM的对象的方法。本文主要介绍RMI的特点,分析

3、应用RMI进行企业分布式计算的原理,以及利用RMI实现基于Java的企业分布式应用的具体步骤。2远程方法调用(RMI)的特点TCP编程的缺点由于Java编程语言设计之初就是面向对象和支持网络的,因此,基于对象的RMI机制已经内置在Java平台中。我们经常会在网络开发中使用TCP/IP编程,这样,自然而然地就会涉及到Socket编程。但是,使用Socket编程需要大量重复编码,在复杂分布式操作时显得非常麻烦,而且易于出错。因此,如何快速、高效、安全、可扩展地进行网络分布式计算,是开发者们一贯追求和倡导的主题。直到RMI的出现,这种繁杂、低效的开发情况才有很大改观。RMI编程的特点当我们利用对象序

4、列化在网络上分配对象时,RMI提供了非Java平台无法匹敌的独特而强大的分布式计算模型,RMI主要有以下特点:?客户机可以向本地方法一样调用远程服务器上的方法;?可以根据接口指定客户机/服务器编程合约;?可以从服务器对象缺省二进制类文件,自动生成调动/反调动代码;?将Java编程模型扩展到机器边界(和Java虚拟机(JVM)边界之外),不需要任何特殊语法;?还可以和一个远程方法调用中的数据同时传输行为(代码)。尽管RMI不是唯一的企业级远程对象访问方案,但它却是最容易实现的。RMI与CORBA作为分布式应用程序框架的规范,COBRA首当其冲,它是由对象管理组织(OMG)开发的。与CORBA不同

5、的是,CORBA能够利用不同编程语言开发实现分布式应用,而RMI是一种纯Java解决方案。在RMI中,程序的所有部分都由Java语言编写,这样,开发出来的程序完全符合Java规范,便于实现跨平台访问、扩展和移植。按照笔者所在西北电力建设集团公司的情况看,服务器操作系统主要有Linux和WindowsXXServer,分别存在于公司和部门当中,它们是不同的系统平台;同时,公司下属各个工程项目部又距离很远,近的几十公里,远则达到上千公里甚至位于国外,因此跨平台和远程访问这两大功能在开发企业应用系统时就必须考虑,而RMI恰恰能够用它的自身特点来满足编程需要。 3RMI基本体系结构简介RMI通过TCP

6、/IP在内部使用Socket,象其名称暗示的那样,它能够帮助我们查找并执行远程对象的方法。RMI的目的是让位于不同JVM中的对象,在外观及行为上都像是本地的对象。通常,我们把调用这种远程对象的JVM,称为客户机;而把包括这种远程对象的JVM,称为服务器。尽管对一个远程对象的引用和获得对本地对象的引用有所不同,但我们可以把远程对象像本地对象一样使用。应用程序并不知道一个对象是远程的还是本地的。实际上,远程对象上被调用的方法与本地对象上调用的方法,具有相同的语法结构。作为RMI的底层,它会自动截获方法调用,找到远程对象,然后处理远程请求。笔者认为,RMI设计的重要之处,就在于不但在设计上实现了远程

7、访问功能,而且实现了设计的透明性。RMI的基本体系结构,概括起来说,由三个抽象层组成:存根/框架层(Stubs/SkeletonsLayer)RMI为我们引入了两种特殊类型的对象,称为存根(Stub)和框架(Skeleton),它们组成了RMI的第一层。在远程通信的时候,要利用TCP/IP协议,做很多底层数据的打包传输。运用Java技术,我们先要把数据或者对象转换成字节流(bytestream),便于网络传输,这个过程叫汇集(marshaling);当收到远程传来的字节流后,我们要把流信息转换成对象或者数据,这个过程叫解读(unmarshaling),它与汇集刚好相反。Stub和Skeleto

8、n层位于实际应用程序之下,建立在Proxy设计方案之上。Stub类的作用是远程服务器实现的代理的角色,Stub是客户方对象;Skeleton类用于帮助对象通过RMI链接与Stub通信,它从链路中读取方法调用的参数,向远程服务实现对象进行调用,接受返回值,然后再把返回值写回到Stub。远程引用层(RemoteReferenceLayer)远程引用层定义和支持着RMI连接的调用语义(semantics)。RMI进行远程访问要用到JRMP(JavaRemoteMethodProtocol,即Java远程方法协议),这一层提供专用于JRMP的RemoteRef对象,它位于包内,代表着远程对象的一个句柄

9、。RemoteRef使用远程引用来执行远程对象的一个远程方法调用。传输层(TransportLayer)传输层在JVM之间建立基于流的网络连接,并且负责设置和管理这些连接。这时候,RMI使用一种线级(wire-level)协议进行基于TCP/IP的连接,该协议就是Java远程方法协议(JRMP,即JavaRemoteMethodProtocol)。在JDK版本开始,JRMP不再需要Skeleton,而是使用reflection来建立与远程服务的连接。为了生成Stub,我们须用rmic。当前的RMI实现中,传输层建立在TCP/IP基础上,设计用于在客户和服务器之间建立一条连接。4开发的基本步骤我

10、们使用RMI编写Client/Server模式(客户/服务器)应用程序,包括6个基本步骤:1)定义远程接口2)实现远程接口3)准备远程调用的服务器对象4)生成残根Stub(客户代理)和框架Skeleton(服务器实体)5)用rmiregistry找到远程对象6)运行测试RMI分布式应用 5开发企业信息发布系统实例在开发RMI进行分布式访问之前,需要将各项功能模块化,即把实际应用抽象成符合Java规范的类和接口模型,使这些类和接口之间互相协作,能实现各自独立的功能,最后,可以把它们组合成统一的网络分布式系统。现在,我们就以开发公司信息发布系统为例,把主模块(主要的类文件)的名称暂定为InfoDi

11、stributeService(信息发布服务),为了保持应用开发的数据一致性和清晰度,接下来涉及的其它模块命名也将以这个模块命名为基准。定义远程接口JavaRMI运行环境要求任何可以远程调用的方法必须放在远程接口中。该远程接口用来扩展接口,在JavaAPI中,可以发现它没有任何方法,只是个标志性接口,这样,可以让Java运行环境认识每个接口的特殊属性,以便能够远程访问。因此,按照信息发布服务的命名(InfoDistributeService),首先须将InfoDistributeRemote定义为远程接口,同时仅放入一个供测试的方法getRemotEinfo()来实现编码,将所有模块至于新建的

12、包中,代码如下:/-packageenterprise.distribute;import;import;publicinterfaceInfoDistributeRemoteextendsRemotepublicStringgetRemotEInfo()throwsRemoteException;实现远程接口这是一个实现远程对象的类。如果实现了远程接口,就能够覆盖(override)该对象中的所有方法,因此,远程对象的实现类将真正包含我们希望导出的方法的代码。在远程信息发布系统中,我们至少实现一个远程接口的对象,它就是远程可访问的对象。这里,InfoDistributeService类可以为

13、我们生成远程可访问对象的实例:/-packageenterprise.distribute;import;import;publicclassInfoDistributeServiceextendsUnicastRemoteObjectimplementsInfoDistributeRemotepublicInfoDistributeService()throwsRemoteExceptionsuper();/Thereturnvalueofthemethodonlyfortesting.publicStringgetRemoteInfo()return“Hello!Iamaremoteobj

14、ect.”;InfoDistributeService类实现远程接口InfoDistributeRemote,并继承。由于符合InfoDistributeRemote接口,因此该类除构造方法之外,还应有getRemoteInfo()方法,而且必须将该方法实现。同时我们注意到,getRemoteInfo()方法抛出了异常。由于远程方法调用过程中,要进行很多的低级网络操作,因此网络错误可能在调用过程中随时发生,这样,远程接口中的每个方法都必须抛出RemoteException异常,而且,都要在代码中显式处理,即将所有RMI活动涉及的代码都要放在try-catch块中。准备供远程调用的服务器对象这是

15、一个作为服务器使用的类,它是相对于要访问远程方法的客户端而言的。它存储着绑定的字符串和对象。将远程对象设置成接受远程调用就像启动了侦听ServerSocket对象的socket服务器。事实上在使用RMI时,TCP/IP协议的传输方式,在幕后发生了很多底层网络操作,但是此刻,用户不需要知道这些细节,只需要逐步导出远程对象:在Java开发工具的较新版本JDK中,可以选择或者。其中,更多用到的是UnicastRemoteObject,因为它顾名思义,就是在客户机与服务器对象实例之间建立一对一连接。生成Stub和Skeleton由RMI生成的调动与反调动的远程调动代码也和Java的其它代码一样,都包含在后缀是.class的文件中。运用RMI之后,在客户机上生成的调动参数和反调动返回值的代码称为残根(Stub),服务器上生成的反调动参数和进行实际方法调用调动返回值的代码称为框架(Skeleton)。可以使用RMI自带的命令行工具rmic(即RMICompiler),先扫描远程对象的.class文件,随之生成残根与框架代码。工具rmic的原理如图1。远程客户端:这是一个帮助我们访问远程方法提供帮助的类,它也是最终用户。我们将使用查找和调用远程方法的方法在该类中调用远程方法。典型的rmic调用如下:我们有了远程接口

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号