用RMI开发基于Java的分布式应用杜风雷(浙江警官职业学院,浙江杭州310018)摘要:由于Java具有跨平台、代码可移植性、安全高效等广泛而强大的功能,因而在开发网络分布式应用的时候,可以用它自身的机制实现分布式计算,一种基于Java的远程方法调用(RMI)为我们开发分布式应用提供了行之有效的解决方案。关键词:JavaRMI,分布式应用中图法分类号:TP390文献标识码:A:1000-7180(2006)07-004TheDistributedApplicationBasedonJavaWithRMIDUFeng-lei(ZhejiangPoliceVocationalAcademy,Hangzhou310018China)Abetract:Javacangobeyondoneplatform,itscodescanbereplanted,anditissafeandefficient.SowhenweempolderthedistributedapplicationofNetwork,wecanuseitsownmechanismtorealizethedistributedcalculation.AkindofRMIbasedonJavaprovidesanefficientresolventtoempolderthedistributedapplicationforus.Keywords:JavaRMI,Distributedapplication1引言随着信息化的发展,各系统之间的数据的交换量大大增加,但计算机网络硬件设备与操作系统千差万别,因此需要使用远程方法调用RMI(RemoteMethInvocation),可以在不同的Java虚拟机(JVM)之间实现对象与对象的通信。JVM可以位于相同或不同计算机上,在多个JVM中,一个JVM可以调用存储在其它JVM的对象的方法。2远程方法调用(RMI)的特点2.1RMI编程的特点(1)客户机可以向本地方法一样调用远程服务器上的方法;(2)可以根据接口指定客户机/服务器编程合约;(3)可以从服务器对象缺省二进制类文件,自动生成调动/反调动代码;(4)将Java编程模型扩展到机器边界(和Java虚拟机(JVM)边界之外),不需要任何特殊语法;(5)还可以和一个远程方法调用中的数据同时传输行为(代码)。2.2RMI与CORBA作为分布式应用程序框架的规范,COBRA首当其冲,它是由对象管理组织(OMG)开发的。与CORBA不同的是,CORBA能够利用不同编程语言(例如C/C++、Basic等)开发实现分布式应用,而RMI是一种纯Java解决方案。在RMI中,程序的所有部分都由Java语言编写,这样,开发出来的程序完全符合Java规范,便于实现跨平台访问、扩展和移植。按照笔者所在西北电力建设集团公司的情况看,服务器操作系统主要有Linux和Windows2000Server,分别存在于公司和部门当中,它们是不同的系统平台;同时,公司下属各个工程项目部又距离很远,近的几十公里,远则达到上千公里甚至位于国外,因此跨平台和远程访问这两大功能在开发应用系统时就必须考虑,而RMI恰恰能够用它的自身特点来满足编程需要。2.3RMI基本体系结构简介RMI通过TCP/IP在内部使用Socket,象其名称暗示的那样,它能够帮助我们查找并执行远程对象的方法。RMI的目的是让位于不同JVM中的对象,在外观及行为上都像是本地的对象。通常,我们把调用这种远程对象的JVM,称为客户机;而把包括这种远程对象的JVM,称为服务器。尽管对一个远程对象的引用和获得对本地对象的引用有所不同,但我们可以把远程对象像本地对象一样使用。应用收稿日期:2005-11-09程序并不知道一个对象是远程的还是本地的。实际上,远程对象上被调用的方法与本地对象上调用的方法,具有相同的语法结构。作为RMI的底层(会包含复杂的Socket操作),它会自动截获方法调用,找到远程对象,然后处理远程请求。RMI设计的重要之处,就在于不但在设计上实现了远程访问功能,而且实现了设计的透明性。RMI的基本体系结构,概括起来说,由三个抽象层组成:(1)存根/框架层(Stubs/SkeletonsLayer)RMI为我们引入了两种特殊类型的对象,称为存根(Stub)和框架(Skeleton),它们组成了RMI的第一层。在远程通信的时候,要利用TCP/IP协议,做很多底层数据的打包传输。运用Java技术,我们先要把数据或者对象转换成字节流,便于网络传输,这个过程叫汇集;当收到远程传来的字节流后,我们要把流信息转换成对象或者数据,这个过程叫解读,它与汇集刚好相反。Stub和Skeleton层位于实际应用程序之下,建立在Proxy(代理)设计方案之上。Stub类的作用是远程服务器实现的代理的角色,Stub是客户方对象;Skeleton类用于帮助对象通过RMI链接与Stub通信,它从链路中读取方法调用的参数,向远程服务实现对象进行调用,接受返回值,然后再把返回值写回到Stub。(2)远程引用层远...