周书锋(聊城大学数学科学学院,山东聊城252059)摘要:随着网络技术、面向对象技术的成熟,分布计算已成为软件设计的主流技术。本文对远程方法调用的体系结构与调用机制进行研究,通过一个实例给出利用Java RMI开发分布计算系统的方法。基于Java RMI的远程方法调用为实现企业分布计算提供了行之有效的解决方案。
关键词:远程方法调用;分布计算;Java;体系结构中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)21-40804-03Development of Distributed Computing Application System based on RMIZHOU Shu-feng(School of Mathematics Science,Liaocheng University,Liaocheng 252059,China)Abstract:With the maturity of network technology and object-oriented technology,distributed computing technology has be-come mainstream in software design.With the research of architecture and invocation of Remote Method Invocation,gives anmeans to develop distributed computing system with an example.Java Remote Method Invocation is one of best solution to realizeenterprise distributed computing.
Key words:RMI;distributed computing;Java;architecture1引言随着计算机技术和网络技术的迅速发展,企业信息化建设也不断深入,企业内部和企业与企业之间的数据交换量大大增加,这些数据越来越需要在不同的计算机网络间传送和交流。同时,由于各单位、各部门之间的现存的计算机网络硬件设备与操作系统千差万别,应用水平参差不齐,因此,开发出跨平台、可移植、高效安全的网络分布式计算系统来服务于企业,就显得尤为重要。
在实际开发中我们经常用到TCP/IP编程,这样就会涉及到Socket编程。但是,使用Socket编程需要大量重复编码,在处理复杂分布式计算时显得非常麻烦,而且易于出错。因此,如何快速、高效、安全、可扩展地进行网络分布式计算,是开发者们一贯追求和倡导的主题。由于Java具有跨平台、代码可移植性、安全高效等广泛而强大的功能,因而在开发网络分布式应用的时候,可以用它自身的机制实现分布式计算,一种基于Java的远程方法调用(RMI)为我们开发企业分布式应用提供了很好的解决方案。同时,JavaRMI是一种纯Java解决方案,在RMI中,程序的所有部分都由Java语言编写,这样,开发出来的程序完全符合Java规范,便于实现跨平台访问、扩展和移植。
2 RMI的体系结构Java RMI是一种分布式技术,它允许JVM之间对象相互调用对方方法,启动对方进程的一种机制,用这种机制,某一台JVM上的对象在调用另外一台JVM上的对象方法时,使用的语序语法规则和在本地JVM上对象间的方法调用一样。这种机制给分布计算的系统设计和编程都带来了极大的方便性,特别是对于开发大型系统尤为重要,它使得多台机器上分布资源和处理负载的想法成为可能。任意两台JVM之间的通信完全由JVM自己的RMI来负责。对程序员来讲,这两台JVM之间完全是透明的。
RMI的基本体系结构概括如下:
存根与框架层:RMI为我们引入了两种特殊类型的对象,称为存根和框架,它们组成了RMI的第一层。在远程通信时,要利用TCP/IP协议,做很多底层数据的打包传输。存根和框架层位于实际应用程序之下,建立在代理设计方案之上。存根类的作用是远程服务器实现的代理的角色,是客户对象;框架类用于帮助对象通过RMI链接与存根的通信,它从链路中读取方法调用的参数,向远程服务实现对象进行调用,接收返回值,然后再写回到存根。
远程引用层:主要处理低端远程方法调用连接的调用语义,也负责执行专门的远程方法协议,这一层提供专用于Java远程方法协议的RemoteRef对象,代表着远程对象的一个句柄。RemoteRef使用远程引用来执行远程对象的一个远程方法调用。
传输层:实现具体的客户端到服务器端的基于流的网络连接。主要执行以下动作:建立远程地址空间的连接;对连接进行管理和监控连接状态;监听新的调用;建立并维护地址空间的远程对象表;建立新调用的连接;定位远程调用的调度程序,并建立与此调度程序的连接。
在这种体系结构中每个RMI服务都由一个接口定义,该接口描述了可以远程执行的对象方法。可以创建接口的多个实现,而且开发者无需了解使用的是哪个实现以及该实现位于何处。另外,用于进行远程调用的对象称为客户机对象,远程对象称为服务器对象;客户机与服务器的职责完全可能在某个位置上互相对换,进行前一个方法调用的服务器本身,在它调用驻留在另一个计算机上的远程方法时,将变成客户机。因此,基于这种体系结构开发大型系统时,可以将复杂的逻辑处理分散于不同的服务器中,更便于分布式系统的的开发。
3 Java RMI实现分布计算在Java语言中,RMI主要使用Java.rmi和Java.rmi.
server包中定义的接口和类,下面,通过一个具体的实例来说明利用Java RMI进行分布式计算的开发。在本例中客户端通过远程调用服务器方法实现两矩阵相加的运算,当然也可以推广到其他的更复杂的运算。