IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management  >

在 Web 应用程序中使用全异数据

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

C. M. Saracco, DBMS 与 Web 应用程序服务器集成, IBM 硅谷实验室

2002 年 8 月 01 日

联邦 DBMS 向 Web 架构设计师提供了一些使用全异数据的帮助。在这三篇文章的第一篇中,作者 C. M. Saracco 研究了一些访问来自 Web 应用程序服务器的联邦数据相关的关键技术,并讨论了用于配置 DB2 联邦的技术,以便 Web 组件开发人员可以构建透明地访问广泛分布的数据的 J2EE 组件和 Web 服务。

简介

和企业不断为更高的收益和更大的运营效率而努力一样,IT 主管们也不断地寻求访问、集成和操作关键业务数据的更佳方法。这个任务决不轻松,因为该数据通常分散在多种系统上,并以多种格式存储。这些数据中的一部分甚至可能是业务伙伴所拥有的,或是由应用程序、Web 服务或 Java™ 2 Enterprise Edition(J2EE)服务器端组件动态地生成的。

合并和使用这种为数众多的数据给许多 IT 组织带来了重大的挑战 — 在软件开发周期通常很短的基于 Web 的环境中,这种挑战是一种值得争论的极端情形。在此类环境中,Web 应用程序服务器层通常是关键业务逻辑(通常嵌入到可重用软件组件中,如 Enterprise JavaBeans™ (EJB)、Web 服务、servlet 等)必须最终使用广泛数据的地方,这些数据由多个远程系统存储或生成。如果不能以透明和可靠的方式这样做,将限制这些中间层服务器的有效性,并且进而限制构建在其上的应用程序的能力。

联邦数据库管理系统(DBMS)为 Web 架构设计师提供了一些使用全异数据的帮助。此类系统提供了以多种格式存储(或生成)的分布式数据的单站点映象。此外,联邦 DBMS 还为 Web 程序员提供了访问这种数据的公共接口。最后,有效的联邦 DBMS 将能够维护有关远程数据的统计信息的扩展目录作为特色,并使用这些统计信息来全局地优化数据访问。

因此,联邦 DBMS 可以帮助企业快速而有效地集成信息,并减轻了组件开发人员大量与连接到、访问、组合、过滤和转换来自多个源的数据相关联的大部分负担。在本文中,我们将研究一些与访问来自 Web 应用程序服务器的联邦数据相关的关键技术。我们还将讨论配置联邦 DBMS(用于 Linux、UNIX® 和 Windows® 平台的 DB2® 版本 8)的技术以便 Web 组件开发人员可以构建透明地访问广泛数据的 J2EE 组件和 Web 服务。后续的文章将研究设计和编程问题,这些问题与联邦数据库上会话 bean 、Web 服务和带有容器管理的持久性的实体 bean 的开发相关联。





回页首


了解关键技术

为了确定联邦 DBMS 是否有助于您的 Web 应用程序开发人员,理解构成我们正在讨论的环境的技术很重要。关键技术包括 联邦 DBMSWeb 应用程序服务器EJBWeb 服务。在这里我们将简要地浏览上述每种技术;更多详细信息,请参阅 参考资料和相关读物中列出的一些参考资料。

联邦 DBMS

联邦 DBMS(如 Linux、UNIX 和 Windows 上的 IBM DB2)提供了针对多个数据源的虚拟数据库。这些数据源可能运行在不同的硬件和操作系统平台上,可能是由不同供应商销售的,也有可能使用不同的应用程序编程接口(包括不同的 SQL“方言”)。联邦 DBMS 对程序员屏蔽了这些差异,使程序员可以在比本来可能的更高的抽象级别上工作。例如,表(或者其它数据对象,如文件)的 别名向程序员提供了位置透明性,使他们不必确切地知道所需要的数据驻留在哪里。功能补偿可以掩盖不同数据源之间的差异并模拟不能本地支持的能力。多站点连接和联合促进了来自多个源的数据的集成。

联邦 DBMS 技术于上世纪 90 年代开始商用。出售的产品名称各异:下一代网关、数据访问中间件和多数据库服务器。DataJoiner® 是 IBM 有关该技术的第一个商业发行版;它曾经作为单独的产品出售,但目前已经增强并集成到了 DB2 V8 中。除了我们刚讨论过的能力之外,DB2 还支持“封装器”体系结构,它使程序员能够定制联邦 DBMS 以访问他们选定的数据源。IBM 为 DB2 提供了各种现成的封装器,使其联邦 DBMS 能够与许多关系和非关系数据源接口。关系数据源包括 DB2 系列的所有成员、Microsoft® SQL Server、Oracle、Sybase 和 Informix®。要获得所支持的数据源和可用的封装器的完整列表,请下载 DB2 V8 beta 测试版图书库并参阅关于“联邦系统”的文档。通过 DB2 主页上的链接 http://www.software.ibm.com/data/db2可下载 DB2 V8 图书库以及产品本身。

图 1显示了样本联邦 DBMS 服务器体系结构。JDBC 应用程序连接到联邦 DB2 服务器,该服务器被配置成访问位于不同平台上的三个不同数据源。这使得 JDBC 应用程序能够透明地使用任何或所有这些数据源。此外,可以创建跨这些数据源的视图以简化只读应用程序的数据集成问题。


图 1. 配置成访问三个远程 DBMS 的样本联邦 DBMS 环境
配置成访问三个远程 DBMS 的样本联邦 DBMS 环境

当然,DB2 可以存储和管理自己的本地数据对象,如表、视图和索引。DB2 优化器的设计目的旨在考察其环境的全异和物理分布的本质,以便每一次查询都可以选择有效的数据访问策略。构建封装器的开发人员可以提供成本估算信息,以帮助优化器在使用定制数据源时进行有效的选择。但是,在撰写本文时,还不支持两阶段提交处理。因此,程序员应该避免尝试在单个事务中插入、更新或删除来自多个数据源的数据。

Web 应用程序服务器

Web 应用程序服务器有助于企业管理和部署服务器端的业务逻辑。这种逻辑(通常是用 Java 编写的)对于支持多层因特网、内部网与外部网应用程序都是很关键的。根据应用程序需求,可以使用不同的技术来实现这种逻辑。示例包括 Java Server Pages™(JSP)、Java servlet、EJB 和 Web 服务。我们将简要地讨论其中一些技术。

图 2中显示了样本 Web 应用程序服务器环境。中间层服务器可以管理来自各种远程客户机的需求。安装在中间层上的是 HTTP Web 服务器(如 IBM HTTP Server)以及 Web 应用程序服务器(如 IBM 的 WebSphere Application Server 高级版)。应用程序服务器支持各种技术,如 EJB 和 Web 服务,它们执行支持客户机应用程序的相关功能。其中的一些功能可能会访问来自各种供应商的本地或远程数据源;该配置仅说明了本地数据源访问。


图 2. 用本地 DBMS 配置的样本 Web 应用程序服务器安装
用本地 DBMS 配置的样本 Web 应用程序服务器安装

Web 应用程序服务器使用各种技术来支持对本地或远程数据的有效访问。例如,连接合用可以节约资源,并可以防止软件组件持续地产生在数据源创建新连接(以及稍后终止连接)的开销。使用 EJB,适当设置事务属性和隔离级别可以改进并发的数据访问并可能最大程度地减少死锁。

联邦 DBMS 技术可以补充由 Web 应用程序服务器提供的内置数据库支持。它可以使跨多个数据源连接和联合数据,象编写一条 SQL 语句一样简单。与以下备选方案相比,这是个相当大的进步:单独地连接到每个数据源、用不同的本机 API 抽取需要的数据以及手工地过滤、排序和合并数据。后一种方法不但具有复杂性和易错的本质,而且几乎不可能确保高性能。在这种情况下,软件开发人员不得不手工处理全局优化问题,并失去了用全局目录维护有关远程数据重要统计信息的益处。

除了提供对跨越多个数据源数据的透明而有效的访问之外,联邦 DBMS 还可以扩展 Web 应用程序服务器的范围以包括对(物理存储的或动态生成的)远程数据(应用程序服务器不能本地支持的)的支持。

Enterprise JavaBeans (EJB)

EJB 是服务器端软件 Java 组件,它的设计目的旨在促进代码重用并提供对生产应用程序而言非常关键的功能(如事务管理、安全性和持久性)的内置支持。Java 客户机应用程序可以用远程方法调用(RMI)通过因特网 ORB 间协议(Internet Inter-Orb Protocol,IIOP)直接访问 EJB。另一方面,Web 客户机间接地访问 EJB;它们使用 HTTP 与 HTTP 服务器通信,而 HTTP 服务器可以调用访问 EJB 的 servlet、JSP 或 Web 服务。 图 3说明了这两种方法。


图 3. 基于 HTTP 的客户机和“传统的”Java 应用程序都可以使用 EJB
基于 HTTP 的客户机和“传统的”Java 应用程序都可以使用 EJB

将 EJB 部署到运行在 Web 应用程序服务器上的 容器中。此处我们对 EJB 容器的角色不作详细讨论。但是,值得注意的是,这些容器可以提供持久性支持。某些类型的 EJB 依靠容器来实现和管理对目标数据源的访问。这使得 EJB 开发人员无需编写数据访问例程,并有助于提高其 bean 的 DBMS 可移植性。在未来的文章中,我们将研究如何在联邦数据上构建此类 bean,并探索何时这样做是有益的。但现在,让我们继续关于 EJB 的一般讨论。

EJB 1.1 规范定义了两种总的 bean 类型: 会话EJB(其本质是瞬态的)和 实体EJB(它是持久的)。会话 bean 本身可以是 无状态有状态的,此类 bean 的开发人员可以用 JDBC 对支持的 DBMS 进行读/写访问。实际上,许多会话 bean 的编写目的是为了执行一些数据库操作或事务工作。但是,任何与会话 bean 相关联的数据都被认为是瞬态的;容器并未提供对持久性的自动支持。相反,认为实体 EJB 拥有持久的数据。开发人员可以自己管理这种持久性(通过 bean 管理的持久性)或将这个职责委托给容器(通过 容器管理的持久性)。

不同类型的 EJB 对 EJB 开发人员提出了不同的编码需求,并意味着客户机可用的最小服务将有某些程度的差异。未来的文章将更详细地讨论不同类型的 EJB,并说明如何构建跨越联邦数据的会话和实体 bean。

Web 服务

尽管许多主要供应商(包括 IBM、 Microsoft、Oracle 和 Sun Microsystems)已经发布或交付了支持 Web 服务的产品,但 Web 服务技术还是相对较新的技术。即使您还没有使用过 Web 服务,也可能对其基本概念有几分熟悉。

Web 服务是一个或多个业务功能的集合,可以由应用程序或其它 Web 服务通过因特网以编程手段调用。因此,它们促进了分布式计算并旨在提高互操作性。几种底层技术在对 Web 服务的支持中起了关键作用,包括 HTTP、可扩展标记语言(Extensible Markup Language,XML)、简单对象访问协议(Simple Object Access Protocol,SOAP)、Web 服务定义语言(Web Services Definition Language,WSDL)和统一描述、发现和集成(Universal Description,Discovery and Integration,UDDI)。Web 服务 供应商发布其 Web 服务,以便客户机可以通过 HTTP 使用 SOAP 访问这些服务。客户机请求引起 Web 服务调用业务功能并(在大多数情况下)将响应返回到客户机。Web 服务本身是由存储在资源库(如 UDDI 注册中心)中或 Web 服务供应商服务器上的 WSDL 文档描述的。将 Web 服务描述存储在适当的资源库中为感兴趣的客户提供了发现服务存在的可能,进而可能为 Web 服务供应商生成了新业务。

Java 通常是开发 Web 服务的首选编程语言。因此,需要频繁访问 DBMS 数据的 Web 服务使用了 JDBC。在未来的文章中,我们将研究如何编写这些 Web 服务以利用联邦数据库技术。





回页首


用于 WebSphere 和 DB2 联邦技术的样本体系结构

此刻,您可能想确切知道 如何配置 DB2 的联邦技术和 WebSphere 产品,以便二者能够协同工作。有多种安装选项都是可行的,我们将研究作者用于内部项目的配置。用 Windows NT® 4.0 工作站充当开发平台。我们在这台机器上运行带有 FixPak 6 的 DB2 V7.2 客户机软件,以及 WebSphere Studio Application Developer 集成版(WSADIE)4.1。后一种产品提供了 Java 集成开发环境,并包含了 WebSphere Application Server 4.0.2 单服务器版,我们可以将它用作测试环境,以测试构建用来访问联邦数据的 EJB 和 Web 服务。

远程 AIX 4.3.3 服务器包含一个 DB2 V8 实例。我们将各种预测试版级别的驱动程序用于工作,但这些驱动程序所支持的功能现在是 DB2 V8开放测试版的一部分。DB2 服务器被配置成联邦 DBMS,它能够访问远程 Oracle、Sybase and Microsoft SQL Server DBMS 中的数据。DB2 支持对其它数据源的访问 — 如 DB2 for OS/390™ 和 z/OS™ 以及 Informix® — 因此肯定有可能构建包含比我们所用的三个数据源更多数据源的联邦数据库环境。软件先决条件和配置过程因所涉及的数据源而异,因此我们将不详细研究这个主题。但是,我们将概述基本步骤,以使您大体了解设置工作环境包括哪些操作。请参考 DB2 V8 测试版手册以获取进一步的信息。

配置 DB2 客户机和服务器

要使 DB2 客户机能够连接到远程 DB2 服务器,确保基本网络连接是可用的。我们使用 TCP/IP 作为通信网络,并在每个系统上的 services 文件中添加一些项,以指定我们使用的服务名和端口号。

要配置 DB2 服务器,我们更新数据库管理器配置以设置 SVCENAMEFEDERATED 特性。我们连接到在本地创建的 DB2 数据库(在我们的环境中是 rdjdb)。然后,对于我们希望访问的每个数据源(Oracle、Sybase 和 Microsoft SQL Server DBMS 各有一个实例),创建必要的封装器对象、服务器对象和用户映射。下列示例显示了用于完成这一操作的脚本文件中所包含的命令。以斜体显示的项是特定于我们环境的。

db2 update dbm cfg using svcename 
        myID authentication server
db2 update dbm cfg using federated yes
db2 connect reset
db2stop
db2start
db2 connect to 
        rdjdb user 
        user1 using 
        pass1word

db2 create wrapper net8 options (DB2_FENCED 'N')

db2 create server 
        oracle8 type oracle version 8.1.5 wrapper net8 authorization
        
oracleuser1 password oraclepwd options (node ' oracle8.world', password 'Y',
pushdown 'Y') db2 create user mapping for user1 server oracle8 options ( REMOTE_AUTHID
' oracleuser1', REMOTE_PASSWORD ' oraclepwd' ) . . .

要配置 DB2 客户机,您可以使用 DB2 客户机配置助手(Client Configuration Assistant)或通过 DB2 命令行处理器发出语句。我们采用后者,发出语句来标识 DB2 服务器驻留的远程节点(在我们的示例中是 blackcat.ibm.com),并指定我们打算使用的远程联邦数据库的逻辑数据库名称( djdb)。无论您用哪种方法来配置客户机,在开发依赖于联邦环境的 Java 应用程序或组件之前,测试您的配置以确保基本连接可用都是明智的。

以下是我们用来完成客户机配置的脚本摘要,斜体文本用来表示特定于我们环境的输入:

db2 catalog tcpip node 
        fednode remote 
        blackcat.ibm.com server 
        myID
db2 catalog database 
        rdjdb as djdb at node 
        fednode
db2 terminate
db2stop
db2start
db2 connect to 
        djdb user 
        user1 using 
        pass1word

      

启用透明数据访问

在启用透明数据访问这个最后步骤中,我们创建希望访问的远程数据的 别名。至少有两种方法可以做到这一点。对于现有的远程数据,使用 CREATE NICKNAME 语句将远程对象(如存储在 Oracle 数据库中的表)映射为 DB2 可以理解的别名。然后,应用程序就可以引用该别名来访问相关 Oracle 表中的数据,而不用手工地连接到 Oracle 系统(通过 SET PASSTHRU 语句)并直接引用其表。下列示例连接到联邦数据库,并为驻留在远程 Oracle 系统上的“budget”表创建了别名(nickname)“budget”。

db2 connect to djdb user user1 using pass1word
db2 create nickname budget for oracle8.oracleuser1.budget

但是,如果您希望在远程关系 DBMS 上创建新的数据对象并将这些对象映射到别名,最容易的方法通常是使用 DB2 数据定义语言(DDL)的透明性特性。这样做可以使您必须编写的 SQL 语句的数量减到最少。发出一条 CREATETABLE ... WITH OPTIONS 语句会完成两项任务:在远程数据源上创建一个表并为该表创建相应的 DB2 别名。下面的示例在远程 Oracle 系统上创建了“project”表,并在我们的 DB2 联邦数据库中创建了相应的“project”别名。

db2 connect to djdb user user1 using pass1word
db2 create table project (
	ID 		 int   	primary key not null,
	name             varchar(30),
	managerID	 varchar(10))
	options (remote_server 'oracle8', remote_schema 'oracleuser1')

配置 Java IDE 和 Web 应用程序服务器

尽管使用 Java 集成开发环境(IDE)构建中间层服务器组件不是必需的,但它肯定可以加速和简化这个过程。正如先前提到过的,我们安装了 IBM 的 WSADIE 4.1 产品,它包含一个用于测试目的的 WebSphere Application Server 版本。要使 WSADIE 及其内嵌的 WebSphere 版本能够使用 DB2 联邦数据,在完成了前一节概述的任务之后,您还要做少量工作。

当使用 WSADIE 开发服务器端 Java 组件和 Web 服务时,请确保与您的项目相关联的 Java 构建路径中包括 db2java.zip 文件的位置。这个文件位于您的 DB2 安装位置的 \java 子目录中。例如,如果您将 DB2 安装在 c:\sqllib 目录中,则您需要在 WSADIE 项目的 Java 构建路径中指定 c:\sqllib\java\db2java.zip

此外,您应该在 WebSphere 环境中创建一个 DataSource 对象,它映射到您用于联邦支持而配置的 DB2 数据库。DataSource 对象(JDBC 规范的一部分)提供了 WAS 中的连接合用。DataSource 很容易创建;WSADIE 所包含的 WebSphere 测试环境和 WebSphere 的独立版本都提供了支持您创建 DataSource 的图形化工具。要做到这一点,需要您为目标数据源指定名称、用户标识和密码。在我们的环境中,我们为 JDBC URL jdbc:db2:djdb 定义了名称为 jdbc/Federated 的 DataSource。我们将用户标识和密码分别设置为 user1pass1word。在未来的文章中,我们将更详细地讨论 DataSource,并研究一些如何使用 DataSource 的示例。





回页首


成功部署的技巧

至此,您已经对联邦 DBMS 技术能给 Web 应用程序开发环境带来什么有了一些了解。您也理解了设置各种环境一般包括哪些步骤。如果 WSADIE、WebSphere 和联邦 DBMS 技术的组合听起来对您有吸引力,最好考虑一下几个您可以采用的步骤,以便将这些技术成功地部署到您的环境中。以下是一些值得考虑的技巧:

  • 在尝试将所有软件技术集成到一起之前,确保体系结构的子组件都在正常工作。例如,在尝试将 DB2 与 WSADIE 或 WebSphere Application Server 集成之前,确保 DB2 环境对于所有必要的后端数据源都是正确配置的。这将有助于任何与安装相关问题的调试。
  • 熟悉可用于您正在使用产品的问题诊断工具。尤其是,在调试时,尽早尝试隔离故障的根源。例如,如果数据库访问活动发生故障,确定要发出的正确 SQL 语句,并从连接到 DB2 联邦数据库的 DB2 命令行处理器运行这条语句,以帮助减少导致故障的原因。
  • 理解您正在使用的产品的性能监控和调优工具。如果与数据库相关的活动显得很慢,则向数据库管理员寻求支持。诸如添加适当的索引或更新目录统计信息(包括由 DB2 保存的用于全局优化目的的信息)之类的活动会给性能带来相当大的影响。
  • 如果您希望在远程关系数据源中创建新的数据对象以支持您的工作,请考虑使用 DB2 的 DDL 透明性特性。这能够节省时间并简化您的工作。




回页首


参考资料和相关读物

可以从 http://www.middlewarespectra.com/abstracts/5_96_07.htm订购 Bontempo,Charles J. 和 C. M. Saracco 编写的“Data Access Middleware:Seeking Out the Middle Ground”(InfoDB,第 4 册第 9 卷,1995 年 8 月)

Bontempo,Charles J. 和 C. M. Saracco. 编写的 Database Management:Principles and Products(Prentice Hall,1995 年,ISBN 0-13-380189-6)。特别地,请参阅第 9 章。

Glass,Graham. 编写的“The Web services (r)evolution”,是以电子形式发表于 IBM developerWorks 网站 http://www.ibm.com/developerworks的多部分文章。

Haas,Laura 和 Eileen Lin. 编写的发表于 DB2 开发者园地的文章 IBM Federated Database Technology位于 http://www.ibm.com/developerworks/dmdd/library/techarticles/0203haas/0203haas.shtml(2002 年 3 月)。

Monson-Haefal,Richard. 编写的 Enterprise JavaBeans,O'Reilly and Associates,1999 年,ISBN 1-55860-519-3。

Purnell,Micks. 编写的 Fundamentals of IBM DB2 Federated Server and Relational Connect位于 http://www7b.software.ibm.com/dmdd/library/techarticle/0206purnell/0206purnell.html(2002 年 6 月)。

Roth,M. Tork 和 P. Schwarz. 编写的“Don't scrap it, wrap it!a wrapper architecture for legacy sources”,1997 年于希腊雅典举行的第 23 届 VLDB 会议的会议录。

Saracco,C. M. 编写的 An Introduction to Data Access Middleware,IBM Corp.,Technical Report STL 03.529,1993 年 10 月。

Saracco,C. M. 编写的 Universal Database Management:A Guide to Object/Relational Technology,Morgan Kaufmann,1998 年,ISBN 1-55860-519-3。特别地,请参阅第 9 章。

Schlimmer,Jeffery C. 编写的 W3C 最新草案 Web Service Description Requirements, Working Draft,可通过 http://www.w3.org/TR/ws-desc-reqs进行访问。

White,Seth 等人编写的 JDBC API Tutorial and Reference,第二版,Addison-Wesley,1999 年,ISBN 0-201-43328-1。

有用的网站

Java 教程、规范和新闻消息:

IBM DB2 手册、文章和白皮书:

IBM WebSphere Application Server 手册、文章和白皮书:

关于各种主题的 IBM 红皮书:

Web 服务文章和论文:

致谢

作者要感谢 Vander Alves、Jordan Barnes 和 Dirk Wollscheid 对本项目的技术贡献。



关于作者

C. M. Saracco是 IBM 硅谷实验室的高级软件工程师以及 UC Santa Cruz 延伸计划的前软件技术讲师。她已经就各种技术主题在北美、南美、欧洲和中东各地举行了演讲。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款