微型机与应用
WEIXINGJI YU YINGYONG
1999年3月 第18卷 第3期 vol.18 No.3



基于Java技术的Web环境下分布式数据库互操作性的实现
李炽明　莫倩　徐明
　　摘　要：应用JDBC在Web环境下实现对异种数据库进行透明访问及采用RMI机制消除Java对Applet程序的安全性限制，实现Web环境下分布式数据库的互操作，给出了一个基于Java技术设计实现的Web环境下N层Client/Server结构分布式数据库应用系统的模型。
　　关键词：远程方法调用(RMI)　JDBC接口　环球网WWW　分布式数据库互操作性
　　Java是近几年随着网络的发展而流行的，它能够在短短几年间迅速成为计算机界的热点，这跟它的种种良好的特性是分不开的。在数据库处理方面，Java提供了JDBC API，为数据库开发应用提供了标准的应用程序编程接口。新兴的RMI技术提出了远程方法引用的概念，RMI技术更适合Java这种纯面向对象语言，它使得分布式环境下不同Java程序之间的通信更加简单自然，符合面向对象的语义，Java已经成为开发网络数据库应用的理想工具之一。
1　JDBC工作原理
　　JDBC(Java Database Connectivity)是1个Sun公司注册了的商标，代表用来执行SQL语句的Java语言应用程序编程接口API，它包括一系列用Java语言编写的类和接口，为数据库开发者开发数据库应用提供了标准的应用程序编程接口。
1.1　JDBC概述
　　采用JDBC可以很容易用SQL语句访问任何商用数据库，也就是说，通过JDBC API，数据库应用开发者就不需要编写1个程序访问Sybase数据库，编写另1个程序访问Oracle数据库，再编写第3个程序访问Informix数据库，而只需编写1个使用JDBC API的程序，就可以将SQL查询语句送往合适的数据库。同时，采用Java语言编写应用程序，具有平台无关性，不需要为不同的平台编写不同的应用程序。因此，采用Java和JDBC编写数据库应用程序的开发者可以真正做到“编写一次，随处可用”。
　　JDBC扩展了Java语言的功能。例如，使用Java和JDBC，可以制作1个能够从远程数据库上获取信息的具有Java应用小程序(Applet)的Web主页，或者开发1个能够使企业的员工通过企业内部网(Intranet)访问1个或多个内部数据库的应用。
　　采用Java和JDBC将使信息的收集和发送非常容易和经济，公司和企业可以继续保留以前的数据库系统，甚至这些数据库系统是互不相同的，仍然可以轻松地访问上面的信息。并且开发1个新的数据库应用的时间也将大大缩短。
1.2　JDBC的体系结构
　　JDBC的体系结构包含4个组件。
　　1.JDBC应用程序。JDBC应用程序负责用户与用户接口之间的交互操作，以及调用JDBC的对象方法以给出SQL语句并提取结果。
　　2.JDBC驱动程序管理器。JDBC驱动程序管理器为应用程序加载和调用驱动程序。
　　3.JDBC驱动程序。JDBC驱动程序执行JDBC对象方法的调用，发送SQL请求给指定的数据源，并将结果返回给应用程序。驱动程序也负责与任何访问数据源的必要软件层进行交互。
　　4.数据源。数据源由数据集和与其相关联的环境组成，主要指各数据库厂商的数据库系统。
　　与ODBC一样，JDBC提供给程序员的编程接口由2部分组成，即：面向应用程序的编程接口JDBC API和供底层开发的驱动程序接口JDBC Driver API。JDBC API是为应用程序员提供的，而JDBC Driver API则是为各个商业数据库厂商提供的。各个商业数据库厂商的JDBC驱动程序是由JDBC驱动程序管理器自动和统一管理的。
2　RMI工作原理
　　在1个分布式系统中，不同主机上的程序之间的通信，可以通过直接对Socket编程，这是比较底层的方法，也可以使用层次更高一些的RPC(Remote Procedure Call)机制来实现。但是对于Java这种纯面向对象的网络编程语言来说，这些方法和机制都不可避免地破坏了Java的面向对象的特性。Java的RMI技术所要做的事情就是实现分布式对象环境下的不同虚拟机上的对象之间的相互引用。
2.1　RMI概述
　　RMI就是远程方法调用(Remote Method Invocation)，是Java体系中新兴的一门技术。Java是一种纯面向对象的语言，每一个程序实体都是以对象的形式提交的。为了使分布式环境下的Java编程保持这一特性，Sum公司提出了分布式对象的概念，并且为分布式对象(即远程对象)之间互相引用提供了适合对象语义的基于抽象的对象层次的机制，这就是RMI。它使得分布式环境下的Java编程或者说Java程序之间的网络通信不再涉及底层的协议和数据的编码解码，从而更加简单和自然。　　
2.2　RMI的体系结构
　　如图1所示，RMI系统由以下3层组成：存根/架构(stub/skeleton)层，远程引用层和传输层。每一层的边界是由特定的界面和协议来界定的，因此，每一层相对于它的相邻层是独立的，也就是说，某一层在实现上的改变，是不会影响到其它层的。


图1  RMI的体系结构
　　stub/skeleton层是Java程序跟RMI系统其它部分的接口。在RMI系统中，这一层实际上是扮演着代理的角色，stub和skeleton分别是客户程序和服务程序的代理人。在客户端，客户程序向stub发出远程方法调用请求，stub则负责把这些请求传递给服务器，并且把调用结果返回给客户程序。而在服务器端，来自客户端的调用申请为skeleton所接收，并且由skeleton负责调用相应的对象方法为之服务，调用结果也是由skeleton返回给客户端。
　　远程引用层是具体的从语义上实现远程对象引用的部分，所有的包括对象的复制等对远程对象的操作都由远程引用层来管理。
　　传输层则负责侦听进来的调用请求，为它们建立连接，并且负责管理和监视这些连接，同时为所有存在于该地址空间的远程对象维持1张远程对象表，以便定位远程调用的目标。
2.3　对象序列化技术
　　RMI系统中还用到对象序列化技术(object serialization)。对象序列化实质是对Java对象的编码，在远程方法调用过程中，它负责把发送方要传送的Java对象先编码成字节流，然后再进行网络传送，而在接收方，它负责把接收的字节流还原成Java对象，从而实现了不同地址空间上的对象的透明传送。
2.4　RMI的目标
　　RMI技术是针对Java语言的，它的目标就是实现对存在于不同虚拟机上的对象的无缝的远程调用，把分布式对象模型自然地集成到Java语言里，尽可能地从语义上保留Java的面向对象的特性，也保留Java runtime环境所提供的安全性。
　　在RMI体系里，所有的远程方法调用的实现细节对Java程序来说都是透明的，远程对象之间的引用，就跟引用本地的Java对象一样的简单自然，符合面向对象的语义。
　　在RMI里，对远程方法的调用是很重要的，在语法上，跟对本地方法的调用是一致的。 
3　基于JAVA技术的Web环境下分布式数据库互操作性的实现
3.1　JDBC对异种数据库互操作性的实现
　　在JDBC中要实现对各种异种数据库的访问，有一种简单而又快捷的方法，就是利用ODBC，ODBC是目前较成熟的数据库应用技术，它提供了对各种异种数据库的统一的访问接口。因此，我们只需要通过JDBC-ODBC桥驱动程序，就可以实现对各种关系数据库的透明访问，从而使JDBC应用程序以及其驱动程序都获得了对数据库的独立性。
3.2　利用RMI解决Java对Applet的安全性限制问题
　　对于JDBC应用程序来说，RMI最大的优点是它可以超越Java Applet程序所受的网络安全方面的限制。Applet作为RMI系统的客户端部分，是从RMI服务器所在的主机节点下载的，它可以访问RMI服务器上的资源，可以向服务器发出数据库访问请求和接收服务器返回的数据，而作为Java Application的RMI服务器程序，它没有像Applet那样的限制，它可以访问其它主机上的资源，包括数据库。它负责接收客户Applet的数据库访问请求，根据请求通过JDBC去访问数据库资源，并且把访问结果数据返回给客户Applet。实际上RMI服务器程序成了客户Applet访问数据库的1个代理，屏蔽了Java对Applet的安全限制。
3.3　利用RMI和JDBC实现1个三层Client/Server结构模型
　　对传统的二层结构的一个改进办法，就是采用Client/Server三层结构，在客户端与数据库服务器之间增加1个“中间层”，客户端所有的数据库访问都是由中间层执行，访问的结果数据由中间层从数据库服务器接收，并负责转发给客户端。中间层实际上起着1个代理的作用。
　　RMI服务器是作为客户和数据库服务器之间的中间层，负责它们之间的数据通信。客户Apple t的数据库访问请求，通过RMI服务器来向数据库提交，而访问结果，也是由数据库服务器通 过RMI服务器向客户Applet传递。RMI服务器其实也是1个JDBC应用程序，它通过RMI系统与客 户Applet进行通信并为它服务，通过JDBC与数据库服务器建立连接，从而实现了客户Applet 与数据库服务器之间的连接。
　　使用RMI与JDBC结合的方法实现Web环境下的远程数据访问，有1个明显的优点，就是作为客 户的Java程序，不再需要进行低层的JDBC API调用，而是由服务器提供了相应的高层API， 而作为RMI服务器，完全可以对客户Applet的请求加上一定的约束，增加了系统的灵活性和 安全性。
3.4　实现1个n层Client/Server结构
　　上面所述的三层模型，是开发Web环境下分布式数据库应用的基础。基于RMI支持点对点通信 机制(即1个节点上的RMI程序既可作为服务器程序又可作为客户机程序)的特点，完全可以实 现1个如图2所示的n层客户机/服务器模式的应用。

图2  N层客户机/服务器模式在分布式数据库中的应用
　　这种应用系统，由许多分布在不同主机节点上的服务器以及它们的直接客户机所 组成，每1 个服务器与其直接客户机构成1个三层结构系统。服务器由HTTP服务器、RMI系统(Server/Cl ient)、JDBC、ODBC和SQL数据库服务器组成，每1个服务器通过RMI系统与和它相连的其它服 务器以及直接客户机进行通信。在整个系统里面，它既作服务器，为直接客户和其它服务器 提供数据服务，又作客户机，可以向其它服务器申请数据服务。
　　在实际应用时，每一个服务器上都有1张表，上面记录了与它相连的其它服务器的地址 ，每一个服务器的直接客户机可以向其服务器发出数据库访问申请，服务器首先到自己节点 的数据库去查询，如果存在相应信息，则将它返回给客户机，否则，就按照地址表向其它 服务器发送查询请求；如果其它服务器上有相应信息，也把它们返回给客户机，否则，告知 客户机查询失败。明显地，所有的客户机都能够透明访问所有服务器上的数据库。这样，就 可实现1个Web环境下的分布式数据库应用。
4　总　结
　　利用JDBC和RMI实现Web环境下的分布式数据库互操作性，是应用Java技术的一个尝试，同时 ，也是对传统C/S体系结构的一种改进，它具有简单、高效的优点，结合Java的各种良好特 性，特别是新兴的RMI技术和为业界所支持的JDBC技术，相信它会向着标准化的方向发展， 并且会得到更加广泛的应用。
作者单位：长沙国防科技大学并行与分布处理重点实验室(410073)
参考文献
　1　Rasmussen B.WDB-A Web Interface to SQL Databases.European Southern Observatory,http://arch-http.hq.eso.org/bfrasmus/wdb/wdb.html,1997
　2　Naguyen T,Srinivasan V.Accessing Relational Database From the World Wide Web. ACM SIGMOD ’96 Montreal,Canada,1996
　3　Yaylor A.JDBC Developer's Resource.Prentice Hall PTR,http://www.preh all.com,1997
(收稿日期：1998-09-01)
