级别: 初级 【程序编程相关:Kylix 3 构建 DB2 Web 服】
【推荐阅读: 服务引擎的 DB2 瘦客户机:第 2 】 【扩展信息:细看 DB2 Stinger .NET 】c. m. saracco, senior software engineer, ibm
jacques labrie, senior software engineer, ibm julien muller, software engineering intern, ibm 2004 年 7 月 本文将解释为什么使用 enterprise information integration 技术开发那些集成来自不同数据源数据的门户应用程序组件时能够简化设计问题,并可以将编码需求裁减 50% 甚至更多.本文还将考察一个项目,在该项目中,我们分别使用 eii 与不使用 eii 来构建功能相同的门户组件.门户应用程序开发人员经常碰到的一个设计问题是:构建那些访问与集成来自各种不同数据源数据的软件组件的最好方法是什么?
最容易想到的方法是自己编写数据集成代码,但这种方法会让您花费超乎想象的时间与精力.确实如此,就拿我们的一个项目来说,我们发现,当我们自己管理数据集成工作时,自己编写的代码比起将这一工作委托给一个 enterprise information integration (eii) 软件层来要多出一倍.在本文中,我们将带您看一看我们所做的工作,以便您能够理解每种方法所牵涉到的权衡.
在某些方面,本文可以说是 "用 db2 information integrator 扩展门户" 的第二代.那篇文章研究了开发人员如何使用 eii 扩展现有门户组件(例如 ibm 的 my query reports 与 jdbc business object builder)的作用范围与功能.不过那篇文章主要关注在不编写 java 代码的情况下构建数据集成门户,而本文的重心在于通过编写自己的门户组件来完成类似的工作.在开始之前,我们将告诉您更多关于我们的示例开发项目及其底层环境的情况.
项目概览
为了帮助我们调查 eii 技术如何使门户开发人员受益,我们构建了一个示例门户应用程序,用它来模拟对保险代理的客户服务中心的支持.我们的门户允许使用呼叫中心代表(call center representative)来回答客户的问题,例如判断索赔状态或者复审策略信息.与大多数门户开发人员一样,我们希望用户可以单点访问完成其工作所需的所有信息.对于我们,这意味着提供对 db2 udb 数据库.lotus domino 数据库与 xml 文件的访问.db2 管理客户联系方式与策略信息.domino 存储索赔单信息,包括索赔性质.索赔日期以及对由谁对错误负责的判断.xml 文件包含事件的警方报告,我们可以通过事件编号将事件追溯到索赔单.图 1 展示了一份经过简化的该数据模式的视图.
图 1. 客户.索赔单与事件数据
我们研究了用来支持直接请求的设计与开发选项:显示与某个给定客户相关的所有索赔单与事件报告.从技术上来讲,这种请求相当简单.对于入门者来说,这涉及到一个等于("=")的搜索谓词(特定的客户 id).此外,它没有聚合(aggregation).日期/时间表达式或者更复杂的数据过滤操作.最后,它不涉及数据集的集成,否则就会产生排序或更复杂的连接(join)逻辑.实际上,这种请求之所以非常简单部分是由于我们可以在数据模式上随心所欲地施加约束,例如索赔单与事件报告之间的 1:1 关系.
您可能想知道为什么我们选择一个这么简单的案例.实际上,之前我们已经研究过在使用 servlet 与实体 enterprise javabeans (ejbs) 实现对异种数据的更复杂查询时所涉及的设计与开发方面的权衡. "将 db2 information integrator 用于 j2ee 开发:成本/收益分析"与 "针对各种全异的数据源开发实体 ejb 的经验" 中对这些项目已作了描述,它们使用更广范围的数据对象,所有这些对象都可以通过 jdbc 接口来访问.而对于这个项目,我们是想理解使用每种数据源的本地应用程序编程接口(api)集成数据(甚至是以一种简单的方式)的影响.
此外,我们选择手工编写我们的自定义 portlet(或者说门户应用程序组件)来支持我们的工作.一种实现是使用 db2 information integrator (db2 ii) 来提供 eii 服务与管理数据访问工作.另一种实现是直接访问每种数据源来提供等价的功能.最后,基于 db2 ii 的情况下需要大约 180 行代码,而在手工编写的情况下却需要大约 380 行的代码.当我们在本文后面讨论中遇到连接管理.数据检索与数据合并等问题时,您就会开始明白这是为什么.
不过,如果您还不熟悉 eii 技术.联邦数据服务或者 db2 ii,我们建议您先阅读 "用 db2 information integrator 扩展门户".这篇文章将快速概述 db2 ii,并解释如何让联邦数据管理技术在门户环境中发挥作用.
软件配置
为了支持我们的工作,我们安装了下面一些软件产品: websphere portal version 5.0 websphere application server version 5.0.1 websphere studio application developer version 5.0.2(该软件仅用于开发与测试). portal toolkit version 5 for websphere studio(该软件仅用于开发与测试). db2 information integrator version 8.1 (该软件仅用于基于 eii 的 portlet 与对 fixpacks 3 与 fixpacks 5 进行独立测试). db2 universal database version 8.1 (我们在不同场景中对 fixpacks 3 与 fixpacks 5 进行测试). lotus domino 5.0.10 支持 xml 1.0 版本文档的 xml 解析器.
这给我们提供了两套运行时配置,它们都显示在图 2 中.
图 2. 运行时体系结构
portlet 体系结构
与所有设计在 websphere portal 中运行的 portlet 一样,我们的 portlet 是以 java servlet 的一个子类的形式实现的.因此,我们在工作中采纳了 servlet 开发的很多“最佳实践”指南.这包括实现 model-view-controller (mvc) 体系结构,在该体系结构中,我们用 javabeans 表示我们的数据模型,用 java server pages (jsps) 提供视图或表示层,我们的 portlet 则用作控制器对象.如果您对 mvc 设计模式不熟悉,有大量的书籍与网站可以提供关于这方面的教程信息.(其中一个资源就是 ibm redbook legacy modernization with websphere studio enterprise developer 的第 4 章.)按照这个设计,我们的 javabeans 包含用来访问每个所需数据源与检索适当数据的逻辑.在使用 db2 ii 时,我们只编写了一个这样的 bean.... 下一页