首页 理论教育Java与RMI实现分布式数据库技术

Java与RMI实现分布式数据库技术

【摘要】:可以把RMI看成是远程过程调用的Java版本,RMI能够按照请求传递对象。RMI按以下三个层次实现。CORBA与Java/RMI的主要区别在于以下两个方面。Java起因于一个研究计划,目的是开发适合各种网络设备和嵌入式系统的先进软件。

按照Sun Microsystems公司[4]对JavaTM的界定,Java是一个应用程序开发平台,它提供了可移植性、可解释性、高性能和面向对象的编程语言及运行环境。RMI(remote method invocation,远程方法调用)是分布在网络中的在各类Java对象之间进行方法调用的ORB机制。RMI也是程序员使用Java编程和开发环境的一种编程方法,它可以使程序员面向对象编程,结果的对象可以运行在网络的不同计算机上,它们之间可以互相交互。可以把RMI看成是远程过程调用(RPC)的Java版本,RMI能够按照请求传递对象。对象可以包括各种信息,诸如施加在远程计算机上的服务是如何改变的,改变了哪些等。Sun Microsystems公司将之称为移动行为(moving behavior)。

RMI按以下三个层次实现。

●Client/Server关系中客户端的一个桩程序(stub program),一个在服务器端的梗概(skeleton)(Sun Microsystems公司使用Proxy这个词作为stub的同义词)。

●远程参考层(remote reference layer)取决于调用它的不同参数。例如,该层可以决定请求时是调用一个单一的远程服务,还是多点广播中的多点远程程序。

●RMI是作为Sun Microsystems公司的Java Development Kit(JDK)一部分提供的。

CORBA技术与Java技术存在天然的联系,Sun Microsystems公司是OMG的创始成员,CORBA标准中的许多内容(如IDL标准、IIOP标准)是以Sun Microsystems公司提交的方案为核心而制定的。

CORBA与Java/RMI的主要区别在于以下两个方面。

●程序设计语言无关性是CORBA的重要设计原则,而Java/RMI依赖于Java语言与Java虚拟机(JVM)。

●Java/RMI技术的最大成就是使对象能够在Internet上迁移和执行,而CORBA 2.0标准中只考虑对象的远程访问,并没有将对象作为“值”传递的承诺。

Java是为了满足异构化、网络化分布式环境对应用开发的挑战而设计的。它面对的重要挑战是:如何消耗最少的系统资源运行在不同的软/硬件平台上,同时又可以动态扩展。

Java起因于一个研究计划,目的是开发适合各种网络设备嵌入式系统的先进软件。其目标是开发一个小型、可靠、便携、分布、实时的操作系统。结果提出了一种成功的分布式、基于网络的、适用于广泛范围(从基于网络的嵌入式设备到World Wide Web和桌面)的计算机语言。

Sun Microsystems公司提出了一个基于Java平台的多层应用软件的体系结构。在这种体系结构中,各种应用是一组能够被共享的服务的集合,并且各种服务是跨应用的,不同的服务分别在不同的层次中实现。

Sun Microsystems公司最初提出的三层结构如图12.11所示。

图12.11 Sun Microsystems公司提出的三层结构

在三层结构中,第一层是客户层,提供用户接口的功能;第二层是服务器层,提供完成所有业务逻辑和数据库存取的功能;第三层是数据库层,提供数据持续存储的功能。

客户层的运行环境主要是Web浏览器,运行的程序是客户端的Java Applet程序。服务器层主要由两部分组成:一部分是Web服务器,它通过HTTP协议向客户层提供Java Applet程序;另一部分是应用服务器,它包含完成业务逻辑所需要的各种服务,一方面通过远程方法调用(RMI)与运行在客户层的Java Applet程序通信,另一方面通过JDBC来访问存储在数据库中的数据。数据库层往往采用某种大型的关系数据库系统,以满足大量数据的存储要求。

最初提出的三层结构中存在两个问题:Java Applet程序的下载时间长和网络资源访问安全性受到Java限制。

常见的企业级网络应用架构通常是这样的:由分布在各地机构中的一组计算机组成一个局域网,各局域网又组成一个广域网,数据分布存储在各地。在最初的三层体系结构中,客户端所需的Java Applet程序是在运行时从服务器层的某台服务器上下载。但在复杂的广域网环境下,由于带宽和流量的不同,常使得下载时间可能从秒级升到分钟级,甚至更长。这就需要一种机制来缓存各局域网中客户端经常使用的JavaApplet程序和静态数据,从而减少下载时间和网络流量。

在最初的三层体系结构中,客户端的Java Applet程序如果要访问某台计算机上的文件,就只能通过中间层,即文件只有先从存储它的计算机传送到中间层,然后传送到这个客户端,从而导致在广域网上产生大量的数据传输。同样,客户端的Java Applet程序无法访问打印机资源,即无法在程序中自由地控制打印,只能利用Web浏览器的打印功能,这对于复杂的应用是远远不够的。

为了进一步提高系统的效率,建立一个真正的由跨应用和客户可重用的服务组成的多层应用软件体系结构,Sun公司提出了如图12.12所示的多层应用软件结构。

图12.12 多层应用软件结构

由图12.12可见,整个系统由四层组成,分别是客户层(client tier)、顶端Web服务层(Web top server tier)、应用服务层(application server tier)和数据库层(database tier)。

1.客户层

客户层通常向用户提供应用接口,一个图形用户界面。在这一层运行JavaApplet程序,这些程序既可以运行在Web浏览器环境下,也可以运行在任何Java软件的环境下(例如网络计算机)。客户层不需要完成任何重要的业务逻辑,也不需要以任何方式直接与数据库交互,同时也不保存任何本地的状态信息,它只提供与用户交互的功能,提供一个良好的人机界面。这样就保证了系统中的客户机是一个真正的“瘦”客户机。(www.chuimin.cn)

2.顶端Web服务层

顶端Web服务层主要起代理和缓存的作用。

一台顶端Web服务器,用缓存来存储应用需要的Java Applet程序和静态数据,提供访问本地资源(如用户文件和打印机)的能力,起到JavaApplet主机访问其他服务的代理作用。

顶端Web服务层主要包括代理服务器、服务定位Servlet(service locator Servlet)、本地服务(local service)和代理Servlet(proxy Servlet)这几部分。

代理服务器的作用是缓存本地各客户机经常使用的JavaApplet程序和静态数据,与普通代理服务器的作用相同。服务定位Servlet的功能是根据客户机发送来的请求寻找适当的服务,从而完成对客户机需要的数据和网络资源的存取。本地服务主要包括文件存取、打印、登录、配置和会话等,这些服务是根据各客户机的请求来完成对本地资源的访问。例如,一个客户机需要使用本地的打印机,它向服务定位Servlet发出请求,并从服务定位Servlet得到一个访问打印服务的句柄,然后就可以使用这个“句柄”来访问打印服务,完成其打印任务。代理Servlet的功能是访问远端数据。如果客户机需要访问远端数据,那么它向服务定位Servlet发出请求,并从服务定位Servlet获得一个访问“句柄”,从而通过代理Servlet访问远端数据。

在这一层中,代理服务器完全由Java语言编写而成。服务定位Servlet、本地服务和代理Servlet都是由Servlet技术实现的。

3.应用服务层

应用服务层是多层应用软件结构中最重要的一层,它提供所有的业务逻辑处理功能。整个系统中,所有对数据库的操作都在这一层中完成。应用服务层包括完成业务逻辑处理所需要的各种服务,这些服务以API的方式提供,客户端通过调用这些API来完成对数据库的操作。例如,认证服务(authentication service)通过访问企业的认证数据库来验证用户口令是否正确。

对于每一种应用服务,都有一个代理Servlet相对应,它自动地从应用服务层下载到顶端Web服务层。当某个客户端请求某种服务时,顶端Web服务层的服务定位Servlet会传给它对应这种服务的一个“句柄”。客户端利用这个“句柄”向一个代理Servlet发送请求,这个代理Servlet将这个请求发送到应用服务层,再由应用服务层中的某个服务完成对这个请求的响应。

4.数据库层

最后一层是数据库层,它的功能是存储应用中的数据。它一般采用关系数据库或面向对象数据库。数据库层和应用服务层共同完成业务规则、验证和持续存储的任务。应用服务层与数据库层之间通过JDBC[5]的接口采用SQL语言进行交互。

Sun公司提出的多层应用软件结构中,各层之间的通信方式是比较复杂的。客户层与顶端Web服务层之间使用的协议有HTTP和RMI两种。客户层通过使用HTTP协议将存储在顶端Web服务层的Java Applet程序下载到本地运行。客户层还可以使用HTTP协议调用顶端Web服务层的服务定位Servlet,服务定位Servlet返回一个RMI对象索引。客户层利用这个索引与代理Servlet通信,这时使用的协议是RMI,从而获得所需的数据或服务。

顶端Web服务层与应用服务层之间使用的协议是HTTP和RMI两种。顶端Web服务层使用HTTP协议从应用服务层下载Java Applet程序和Java Servlet程序。当顶端Web服务层通过RMI获得客户层的请求时,同样使用RMI与应用服务层中的某种服务通信转发请求,并在获得应用服务层发送的结果后再转发给客户层。

多层应用软件结构具有以下几个优点。

●可伸缩性好。

由于系统的业务逻辑处理完全在应用服务层完成,因此所有客户端不直接与数据库连接,应用服务层通过数据库连接池与数据库连接,系统可以根据客户端请求的多少来动态调整池中的连接数,使系统消耗较少的资源来完成客户端的请求。

●网络效率高。

由于使用顶端Web服务层,因此,通过广域网大大减少了传输的数据流量,提高了网络效率。

●可管理性强。

系统的客户层基本实现了“零管理”,局域网内的主要管理工作集中在顶端Web服务层,整个系统的主要管理工作集中在应用服务层。业务逻辑的修改对客户层没有影响。

●安全性高。

应用服务层上的安全服务作为一个公用服务被所有应用调用,不必为每一个应用编写安全服务。整个系统的安全数据的工作只能由安全服务来访问,各个客户机无法直接访问到数据库,这大大提高了系统的安全性。

●可重用性好。

整个系统由许多服务组成,每个服务可以被不同的应用重用。构建系统时采用了面向对象的组件模式,每个服务又由许多可重用的组件构成,进一步增加了系统的可重用性。