|
C. M. Saracco
Senior Software Engineer, IBM
2004 年 12 月
IBM® DB2® Information Integrator 和 DB2 Alphablox® 使得 Web 应用程序开发者能快速地构建组件,这些组件把各种各样资源中的数据集成到一个单一的报表或者图表中。作者 C.M. Saracco 将告诉我们如何去做。
简介
这里有一句许多 IT 架构师和开发者都熟悉的名言:
“说事容易做事难(The devil's in the details.)”。
首先,行业要求是这样的:在正确的时间以正确的方式为决策者和支持专家提供正确的信息。说起来很简单,但是做起来不容易。
其次,看看行业现实。 很少出现“合适的”信息都在一个地方,以相同的格式存储,甚至可以通过一个应用编程接口(API)访问的情况。而且,“合适的”表示形式经常随着目标客户而改变 —— 经理可能喜欢仪表板样式的显示,他能一眼看到关键的总体数据,然而客户服务工作人员和金融分析人员可能比较喜欢能包含相当多信息的表格、电子数据表和复杂的图表。最后,在今天快节奏的商业氛围中, “合适的”时间通常意味着立即访问到最新的信息。
毫无疑问,现实中没有魔弹。 但是两种技术的结合体 —— 企业信息集成 (EII)和在线分析处理 —— 能有助于许多 IT 组织以比他们认识到的更快的速度达到这些目标。 同时,这些技术使得开发者可以迅速地装配基于 Web 的分析应用程序,这些分析应用程序通过交互式报表、图表、图形为不同的公司数据提供了一个完整的视图。这些功能可以很容易地部署成独立的、基于 Web 的应用程序,或者合成到现有的 Web 应用程序中,以提高价值。
本文描述如何结合使用 IBM 的 DB2 Information Integrator (DB2 II) 和 DB2 Alphablox 来开发一种业务分析组件,用于集成来自各种不同数据源的数据。下面是对每种产品的一个简短的概述。
理解 DB2 Information Integrator
DB2 II 为用户提供了对不同数据的一站式的视图,这些数据可能以不同格式存储,通过不同的 API 检索,由不同的远程服务器管理。这些服务器可能由同一个企业中不同业务流程所占有,或者也可能被业务伙伴或为公众提供服务的第三方所占有。程序员可以透明地使用来自这些不同数据源的数据,并通过 DB2 II 全局查询优化器来选择一个有效的数据访问策略。
这些功能有时候也被称作“联邦数据服务”。通过这样的服务,DB2 II 支持对多种不同关系型 DBMS、电子表格、消息队列、XML 文档、Web 内容、Web 服务以及文件系统的访问。还可以添加(或单独使用) DB2 II 家族的另一个成员,即 DB2 II Classic Federation for z/OS®, 来提供对大型机(例如 VSAM、IMS™、CA-IDMS、CA-Datacom 和 Adabas)数据源的类似访问。合作伙伴还可以提供供新功能,使得 DB2 II 能够访问更多的数据源。
除了这些联邦数据服务外,DB2 II 还支持远程数据的本地缓存(通常是出于性能的原因)、两个或多个数据源之间的数据复制以及用户数据的持久存储。不过,本文主要讨论联邦数据服务。
理解 DB2 Alphablox
DB2 Alphablox 提供了一组分析组件和支持服务,以方便使用 Java™ Server Pages (JSP) 标签快速组装分析应用程序。 这些组件被称作“Blox”(与在“构建块”中一样),它们基于 Java 2 Enterprise Edition (J2EE) 架构,并部署在一个 Web 应用服务器上。可视化 Blox 包括具有高度交互性的图形、图表和报表。这些可视化 Blox 使用数据 Blox 来支持对关系和多维数据的分析。
DB2 Alphablox 开发人员使用 Blox 来连接数据库,检索信息,并定制适合用户需要的表现方式。管理员将 DB2 Alphablox 应用程序部署到 Web 应用服务器上,例如 IBM 的 WebSphere® Application Server,BEA 的 ® Weblogic,或者 Apache Jakarta Project 的 Tomcat servlet 引擎。
每个主要的 Blox 使用户可以交互式地浏览和分析数据。例如,用户可以将数据导出到 Adobe PDF 文件或 Microsoft® Excel 电子表格中,将列隐藏在报表中,根据指定的列值创建红绿灯式的报表,修改被显示图表的格式,等等。这些服务 Blox 可以用来提供有指南作用的分析、个性化、定制以及合作设施。Blox 用户可以通过 JSP 标签定制这些功能和服务,从而为各种商业用户和分析人员提供适当的功能。
参考架构
至此,您可能已经猜到如何结合使用 DB2 II 和 DB2 Alphablox 来提高 Web 应用程序开发人员的生产率了。DB2 II 提供了对多种数据的透明访问。DB2 Alphablox 提供了先进的标签库来快速访问、检索和向 Web 用户提供关系数据。通过结合使用这两种技术,可以扩展现有 Web 应用程序,或者构建新的 Web 应用程序,这种 Web 应用程序带有报表、图表和仪表板,从而为用户提供了不同业务数据的综合视图。
图 1 描绘了一个示例环境,在这个环境中,DB2 Alphablox 运行在一个 J2EE Web 应用服务器上,并使用 DB2 II 来访问和集成来自多个数据源的数据。
图 1. DB2 Alphablox 和 DB2 II 的示例架构
DB2 II 为 DB2 Alphablox 用户带来了两大关键好处:它将预制的 Blox 组件所触及的范围扩展到很多本地不支持的数据源,此外,它减少了为用户检索、集成和表示统一的信息所需的代码。
开始
至此,您已经理解了 DB2 II 和 DB2 Alphablox 可以做什么,接下来让我们探索一下如何开始的问题。下面的例子是以我自己的配置为基础,其中包括 DB2 Alphablox V5.6、Tomcat V3.2.4 和 DB2 II Advanced Edition V8.2。
在将这些产品放到一起之前,最好先分别安装和测试每个产品。例如,首先配置 DB2 II,然后配置 DB2 Alphablox。
配置 DB2 II
为了使用 DB2 Alphablox 或 Tomcat,DB2 II 不需要专门的配置。遵照下面用于安装和配置该产品的步骤,并确信您可以访问对于您环境来说很重要的数据。要了解详细信息,请参阅在线产品手册或者 InfoCenter、 IBM 红皮书 或 在线教程。
为了支持我的工作,我创建了很多 DB2 II 联邦数据库对象。通常,我喜欢编写脚本来做这些。您将在后面发现一个这样的例子。您也可以启动 DB2 II 的管理工具 DB2 Control Center,并让向导指导您完成这个过程。
清单 1. 用于配置到远程 Oracle 数据库的访问的示例脚本
. . .
CREATE WRAPPER "orca1" LIBRARY 'db2net8.dll';
CREATE SERVER ORACLESERVER TYPE ORACLE VERSION '8'
WRAPPER "orca1" OPTIONS( ADD NODE 'leopard.ibm.com', PASSWORD 'Y');
CREATE USER MAPPING FOR "saracco" SERVER "ORACLESERVER"
OPTIONS ( ADD REMOTE_AUTHID 'demo',
ADD REMOTE_PASSWORD 'demopwd') ;
CREATE NICKNAME BOBJECT1.CUSTOMER for
ORACLESERVER.BOBJECT1.CUSTOMER;
CREATE NICKNAME BOBJECT1.PRODUCT for
ORACLESERVER.BOBJECT1.PRODUCT;
. . .
|
不管是使用向导还是编写自己的 SQL,都需要创建一些基本类型的对象,使 DB2 II 可以与远程数据源交互。例如,您必须为想要访问的每种类型的数据源定义 包装器(wrapper)。换句话说,如果您需要访问三个 Oracle DBMS 实例,以及一个 Teradata 实例,那么您将定义两个包装器:一个用于 Oracle®,另一个用于 Teradata®。我的示例脚本为 Oracle 创建一个包装器。
接下来,需要为每个包装器指定 服务器(server);这些服务器标识了所需数据的位置,例如主机或 TCP/IP 名称。我们的示例脚本为 "leopard.ibm.com" 系统上的一个 Oracle DBMS 创建了一台服务器。
在大多数生产环境中,管理员还会定义 用户映射(user mapping),以便将 DB2 II 用户 ID 和密码翻译成远程数据源上的有效帐户。我的示例脚本为 "saracco" 帐户创建了一个用户映射;在远程 Oracle 系统上,这个 ID 将被映射到带有密码 "demopwd" 的 "demo" 用户。
最后,还需要创建 昵称(nickname)来标识每个服务器上感兴趣的数据集(例如表、视图和文件)。我们的脚本创建了两个昵称 —— 一个用于 Oracle 的 BOBJECT1.CUSTOMER 表,一个用于 Oracle 的 BOBJECT1.PRODUCT 表。
而且,虽然这里没有显示,但我还是配置了我的 DB2 II 环境,以访问本地 XML 文件、本地 MySQL DBMS 以及远程 Microsoft SQL Server DBMS 中的数据。
配置 DB2 Alphablox
为了使用 DB2 II,需要对 DB2 Alphablox 做一点工作。我们将简短地谈论一些需要做的工作。不过,DB2 Alphablox 有一先决条件,包括一个特定版本的 Java 2 平台和一个受支持的 Web 应用服务器。在安装 DB2 Alphablox 之前,必须分别下载、安装并测试这些必备软件。如果您不确定需要什么产品,可以参阅产品附带的 DB2 Alphablox 文档。我使用 Sun Microsystems 的 J2SE (Java 2 Standard Edition) SDK V1.4.2 和来自 Apache's Jakarta 项目的 Tomcat V3.2.4。
配置好先决软件之后,遵照 DB2 Alphablox 文档安装产品。在安装过程中,安装程序会提示您指定 DB2 Alphablox 将使用的 JDBC 驱动程序的位置。指定 DB2II_installation_root/java 子目录。
假设安装顺利完成,那么就可以配置 DB2 Alphablox,以便使用 DB2 II。这需要创建一个指向 DB2 II 联邦数据库的数据源定义。
启动 DB2 Alphablox Analytics Administrative Pages。您应该可以看到一个如图 2 所示的屏幕。
图 2. DB2 Alphablox administration
单击 Data Sources 标签并选择 Create,创建一个新的数据源定义。完成显示出来的表单。图 3 展示了我如何定义一个本地 DB2 II 系统上的 "Cubetest" 数据源;该数据源指向 "cubetest" 数据库,之前我已经在这个数据库中创建了用于远程数据的包装器、服务器、用户映射和昵称。注意,我选择了 DB2 Type 4 JDBC driver 作为该数据源。
图 3. 为一个 DB2 II 联邦数据库创建一个 Data Source
创建一个简单报表
安装和配置好 DB2 II 和 DB2 Alphablox 之后,现在就可以创建为 Web 用户显示报表、图形和其他数据的服务器端 Java 组件。我将展示如何使用最少的 Blox 标签来创建一个简单的 "关系" 报表。实际上,这个报表根本不是基于关系数据的。SQL 语句引用我为 XML 文件定义的 DB2 II 昵称。但是因为 DB2 II 可以向程序员提供对不同数据的一站式的、可视化的数据库视图,因此我可以使用 DB2 Alphablox 的关系 Blox 标签来进行我的工作。
DB2 Alphablox 附带了一些示例 JSP,一开始您可以修改这些 JSP。我修改了一个简单的关系报表示例,该示例创建了如图 4 中所示的报表。
图 4. 基于被映射到 DB2 II 昵称的 XML 文件的示例报表
如前所述,DB2 II 使多种类型的本地和远程数据看上去像是一个单独的关系数据库中的本地表。例如,图 4 中所示报表的实际数据源是一个 XML 文件。我在图 5 中展示了其部分内容。在我的环境中,这个 XML 文件是用来跟踪有关产品的信息的重要数据源之一。这个文件被映射到 DB2 II 的昵称 CUSTCOMMENT。很快,您将看到我在一条 SQL 语句中引用这个昵称,这条 SQL 语句是我提供给一个 Blox 标签用于创建图 4 中所示报表的。
图 5. 跟踪客户关于产品的意见的 XML 文件
对于我的简单报表,我创建了如图 6 所示的 JSP 页面。它包含少量可用于关系报表的 DB2 Alphablox 标签,其中包括 ReportBlox、SQLDataBlox 和 DataSourceConnectionBlox。ReportBlox (以 "bloxreport:report" 开头)将所有其他用于检索、操纵和格式化一个报表的 Blox 包装起来。SQLDataBlox("bloxreport:sqlData")指定要执行的 SQL 查询。对于我的简单的报表,我选择 CUSTCOMMENT 的全部内容,CUSTCOMMENT 就是图 5 中所示 XML 文件的 DB2 II 昵称。最后,DataSourceBlox ("bloxreport:dataSourceName")指定执行 SQL 查询时所针对的数据源。注意,我在这里引用了 "Cubetest" 。这是用于早先我在配置 DB2 Alphablox 时创建的 DB2 II 数据库的数据源。
图 6. 用于创建简单报表的带有 Blox 的 JSP 文件
当然,在这个 JSP 中,还有很多工作可以做,例如定制报表的格式,以合理的方式处理错误,或者执行其他功能。但是我只是想展示已有的 Blox 能够轻松地引用 DB2 II 对象。这使您可以为很多种在本地不受 DB2 Alphablox 支持的数据源创建报表,并且不必进行额外的编程。
用 Blox 集成不同的数据
至此您已经看到了 DB2 II 如何与 Blox 组件集成,接下来让我们考虑一个更有挑战性的场景。在这个场景中,我将向您展示我如何使用 Blox 构建一个交互式的 JSP,这个 JSP 使用 DB2 II 来集成 Oracle 与 XML 数据,并将结果显示在一个表("网格")和饼图中,Web 用户可以对这样的表或饼图进行定制。图 7 展示了该 JSP 的输出,后面我们将回顾一下这个 JSP。
图 7. 基于 Oracle 和 XML 相结合的数据的报表
构建这个 JSP 的一种方法是使用 PresentBlox,这是一种 DB2 Alphablox 组件,它可以组合其他一些 Blox 的功能,其中包括用于图表、网格(表)、工具条的功能。我使用了 DB2 Alphablox 的 DHTML Query Builder 来生成这次的 Blox 代码。然后,我将这些代码传递到我创建的一个 JSP 框架中。
您可以从 DB2 Alphablox 的管理控制台启动 DHTML Query Builder。单击 Administration 标签,选择 Assembly,然后选择 Workbench。启动 DHTML Query Builder,并建立到一个有效数据源的连接,如图 8 所示。
图 8. 使用 DHTML Query Builder 建立一个数据库连接
接着,编写并执行这些查询。我的查询结合了 Oracle 和 XML 数据,以报告对于每种产品的客户意见的数量。执行这个查询后将导致系统显示一个列表状报表和一个图表,如图 9 中所示。我修改了默认的图表类型,以便显示饼图。
图 9. 使用 DHTML Query Builder 生成查询的输出
如果您对显示的结果满意,那么请单击 PresentBlox 显示屏中的 Generate Blox Tag 链接。在图 9 中,该链接就在饼图的右上方。单击该链接将弹出一个新的窗口,其中包括了 PresentBlox 输出中显示的表、网格和工具条的源代码。您可以将这些源代码剪切并粘贴到一个 JSP 页面中。图 10 展示了我的源代码。用 "blox:present" 标签界定的源代码是由 DHTML Query Builder 生成的。
图 10. 用于创建一个复杂的、交互式的、跨多个数据源的报表的 JSP 文件
值得考虑的是,在没有 DB2 II 的情况下,如何完成相同的任务。一种方法是开发多个基于 Blox 的 JSP,每个 JSP 连接到一个不同的数据源,并通过发出特定于这些数据源的 SQL 语句来检索正确的数据。如果所有这些数据源在本地都受 DB2 Alphablox 的支持,那么这样做是行得通的。但不幸的是,我的数据源没有一个是受支持的。
而且,开发多个单独的 JSP,或者在一个 JSP 开发不同的报表,都将把集成数据的负担加在用户的身上。对于需要高级关联、聚合和连接的复杂业务分析应用程序,这样做很难被接受。
另一种方法是编写 JavaBeans 或 Java scriptlet,手动地连接到每个数据源,使用本地 API 检索所需的数据,并在内部执行连接、联合、聚合或其他函数来创建单独的、合并的结果集。然后这个结果集可以形成一个单独的网格和/或图表的基础。
不幸的是,这样的工作通常很复杂,并且容易出错。它要求程序员转换数据类型,在不同后端数据源之间弥补它们的不同,以及编写很难的代码来支持数据访问组件的策略,后者是相当富有挑战性的;为了决定一个有效的访问策略,开发者需要考虑以下问题:有效访问后端数据源的方法,数据值在不同表格或者文件中的失真度,有多少数据位于您感兴趣的表格或文件中等。
因为 DB2 II 是透明地执行这些功能的,所以程序员无需编写高难度的代码来完成这类工作。实际上, 研究 已经表明,把 DB2 II 用于要求集成访问不同数据的 Java 开发项目中可以减少 40% 到 65% 的编码量,并大大缩短开发周期。
结束语
通过使用 DB2 II 和 DB2 Alphablox,可以快速地创建服务器端 Java 组件,用这些组件来集成业务分析活动。DB2 II 为不同数据提供了一个一站式的视图,而 DB2 Alphablox 为创建复杂报表提供了构建块("Blox"),用户可以通过浏览器显示和定制报表。通过结合使用这两个产品,IT 专家可以构建连接和合并来自多个重要企业数据源的报表,这些数据源包括关系 DBMS、非关系 DBMS、Web 服务、XML 文件、大型机数据源等。
本文描述了用于组合 DB2 II 和 DB2 Alphablox 的一个参考架构,并提供了一些简单的编码实例来帮助您入门。在本文最后的参考资料列表中,可以发现更多关于 DB2 II 和 DB2 Alphablox 的资料。
关于作者
C. M. Saracco 是 IBM 硅谷实验室的一名高级软件工程师。她写了两本关于数据库管理方面的书(一本是与 Charles J. Bontempo 合著的),而且曾在北美、南美和欧洲执教。 |
|