作者:李炽明 莫倩 徐明
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

基于Java技术的Web环境下分布式数据库互操作性的实现相关推荐

  1. 基于JAVA技术的WEB网管软件开发方案

    2019独角兽企业重金招聘Python工程师标准>>> 随着Web/Java技术的成熟及其在Internet上的广泛应用,网络管理技术和模式迎来了又一次革命.在网络管理领域,通过We ...

  2. 互联网环境下分布式事务处理系统现状与趋势

    互联网环境下分布式事务处理系统现状与趋势 马鹏玮, 魏凯, 姜春宇 中国信息通信研究院云计算与大数据研究所,北京 100191 摘要:传统集中式数据处理系统由于摩尔定律的逐渐失效,开始显露出性能瓶颈, ...

  3. 基于java技术的装潢公司网站开发计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java技术的装潢公司网站开发计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java技术的装潢公司网站开发计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源 ...

  4. PHP是脚本语言 因此不能通过浏览器运行,SQL_基于ASP技术的Web数据库应用开发

    基于ASP技术的Web数据库应用开发 第一节 Web数据库解决方案 一.Web数据库访问过程 Web数据库访问过程如下图: 可以将上述过程分为四步: 1.在浏览器地址栏输入http://mynetse ...

  5. 海量数据及多云环境下,数据库运维、分布式转型、国产化改造实践丨DAMS峰会(文末有福利)

    随着大数据与云原生的相互碰撞,各技术领域的新一波挑战和创变正以迅雷之势向我们宣战.利用云原生技术的简便快捷.动态调度.按需伸缩等优势,如何加速大数据基础软件和系统的迭代更新频率.确保整体环境的最终一致 ...

  6. 海量数据及多云环境下,数据库运维、分布式转型、国产化改造实践丨DAMS峰会

    随着大数据与云原生的相互碰撞,各技术领域的新一波挑战和创变正以迅雷之势向我们宣战.利用云原生技术的简便快捷.动态调度.按需伸缩等优势,如何加速大数据基础软件和系统的迭代更新频率.确保整体环境的最终一致 ...

  7. 基于Android9的非root环境下frida-gadget持久化

    基于Android9的非root环境下frida持久化 博客: http://www.zhuoyue360.com 参考: 小肩膀安卓系统沙箱课程 https://bbs.pediy.com/thre ...

  8. SSM毕设项目基于Java技术的医院在线挂号系统s73ib(java+VUE+Mybatis+Maven+Mysql)

    SSM毕设项目基于Java技术的医院在线挂号系统s73ib(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + ...

  9. 基于java订单管理系统_基于JAVA技术的订单管理系统(DOC毕业设计论文)

    基于JAVA技术的订单管理系统(DOC毕业设计论文) 摘要本 论 文 的 研 究 课 题 是 < 基 于 JSP 技 术 的 订 单 管 理 系 统 > 的 实 现 . 本 系 统 通过 ...

最新文章

  1. A站被黑,你应该做些什么?
  2. 【网页前端设计Front end】HTML语言基础.下(看不懂你来打我)
  3. Android下的数据存储与访问、权限
  4. Spring3向Spring4升级过程中quartz修改
  5. CocoaAsyncSocket 套接字
  6. BootStrap 用法
  7. 智慧交通day04-特定目标车辆追踪01:总览概述
  8. C++工作笔记-getter/setter方法中大佬的风格
  9. 了解下JavaScript中的prototype
  10. c#划分目录和文件(小白的一点经验)
  11. oracle数据库字段的值加一_天天面试--数据库乐观锁和悲观锁
  12. 乐优商城(一)项目介绍
  13. C# http请求挂代理
  14. 基于工作流平台的ITSM系统
  15. linux系统配置sftp服务器,linux配置sftp服务器配置
  16. Linux(Ubuntu)同步互联网时间(ntpdate)
  17. L7 U2 希望与梦想
  18. 2018.10.2模拟赛
  19. vb向mysql写入字节流_vb向数据库写入数据
  20. Saturn Executor部署过程

热门文章

  1. 剪辑视频的软件怎么二次剪辑才算原创
  2. ResNext架构解析:深度神经网络的聚合残差变换
  3. USB转串口数据线Vista驱动
  4. 三部曲简史mobi_尤瓦尔简史三部曲:人类简史+未来简史+今日简史
  5. [微语 20.11.21] 洞天
  6. 国际商务英语学习[三]
  7. 数据安全管理软件-企业如何保护数据安全?
  8. 家乡旅游风景区介绍——茂名风景区网页设计HTML+CSS+JavaScript
  9. SQL-10-14 4-4 查询具有最高价格的机器的型号,机器包括PC、Laptop、Printer (10分)
  10. 程序员遇到有远见的丈母娘