介绍
你听说过这样一个报道:还有另一种新技术承诺让Java 2企业版(J2EE)开发者更便于进行J2EE的开发---一项能削减开发工作达百分之三十、四十甚至是五十的突破。一个新的软件能使复杂的开发任务简化。一 个新产品增强你现有的Java集成开发平台和网络应用程序服务器环境。
我们也听说了同样的报道。在同事间讨论时,我们听说IBM的新DB2 Information Integrator,能够提供存在于不同平台上的、使用不同格式保存的、能通过各种不同的应用编程接口(API)访问的数据的单地址映射。我们想知道这种技术能为需要使用完全不同的数据构建网络组件的J2EE程序员做点什么。
在本文中,我们将讨论一系列的servlet,在我们的案例中,我们构建这些需要访问跨多个数据源-- DB2、Oracle和Excel的数据的servlet。一类 servlet使用DB2 Information Integrator模拟这些数据源的单一地址映像,而另一类直接地访问每个所需的数据源。
结果很让我们吃惊,我们计划把它们和你分享。
在这三部分的文章系列中,我们将带你进入我们的工作,这样你就可以自己比较不同的实现之间的差异,然后了解我们必需克服的挑战。本文是这个系列的第一篇文章,描述了我们的工程并概括了我们的重要的发现。 第二篇文章将把注重力放在我们的开发工作中,用更加详尽的细节让你了解设计和编程问题。最后一篇文章将描述我们碰到的执行性能问题,以及介绍用于我们的联合数据库和本地数据访问实现的一些性能数据。
但是假如你等不及把这些全部学完,那么我在这里告诉你:我们发现,当我们使用DB2 Information Integrator的联合数据库技术的时候,我们的开发工作实际上比我们直接访问每个数据源要更简单、更快捷。尤其是,我们减少代码量达百分之四十,并且缩短了设计、开发和测试周期达百分之五十。这正是我们所期待的。
并且,也许同样重要,我们发现虽然不同的查询结果变化很大(一些联合查询比直接数据访问快,而其它一些要慢一些),我们的基于联合数据库技术的servlet的性能也比直接访问数据的servlet更有竞争力。当然,基于特定的查询问题和servlet设计实现,结果可能有差异。但是你将得到一个机会,评论我们的工作,这样你就能看到它可能正好反映你的机构中的日常工作中的问题。
要害技术的概述
了解联合数据库治理系统(DBMS)技术和servlet对于领会我们的工程非常重要。在这里,每个技术我们只是简略的提到几点,因为许多网站(包含这个)已经在这些主题上发布了许多教材和技术文献。假如你已经熟悉联合数据库治理系统和服务器端Java技术,那么请跳过这一节,开始阅读关于我们做的工程的细节。
了解联合数据库治理系统(DBMS)
一个联合DBMS提供了到多个数据源的单一应用编程接口(API)。这些数据源可能运行在不同硬件和操作系统平台,可能由不同的供给商开发并且可能使用不同的API (包含不同的非标准SQL语言)。程序员使用联合服务器就可以以一种抽象程度很高的方式工作,因为服务器提供了物理上不同的数据的单一地址映像。 使用表(或者其它数据对象,比如文件)的别名能够提供程序员位置透明性,消除那种他们必须精确知道要求的数据存放在何处的需要。功能补偿可以掩盖不同供给商的产品之间的差异,并且模拟一个给定数据源本身不支持的能力。多地址联合推动来自不同数据源的数据的整合。
数据源支持和产品功能在不同的供给商之间差别很大。DB2 Information Integrator支持所有的IBM DB2家族的成员,IBM Informix、Microsoft SQL Server、Oracle、Sybase、能使用ODBC的数据源、XML、网络服务、WebSphere MQ、Excel电子数据表、普通文件和生命科学数据源。此外,DB2 Information Integrator还可以通过IBM Lotus Extended Search访问网络搜索引擎、内容贮存器、电子邮件数据库和其它基于内容的数据源。
因为DB2 Information Integrator包含一个非常强劲的关系数据库治理系统,它可以存储和治理它自己的本地数据对象,比如表、视图和检索。它的优化程序被设计来研究它的不同的和物理分布特性,以便它可以选择对于每种查询更有效的数据存取策略。DB2 Information Integrator的这个版本支持从单一事务中的多个数据源中读取数据;编写每个事务的数据源支持的行为。
了解服务器端Java组件
在许多网络应用程序服务器环境中,公司经常地使用servlet和企业JavaBean ( EJB)来实现要害的业务程序逻辑,包含访问可能保存在远程服务器中的公司数据。 servlet是这两个技术中较早的一种,经常用来替代公共网关接口(CGI)脚本来支持网络页面的动态内容。 servlet依靠一个请求-响应程序设计模型。
Java程序设计环境提供了带有用于编写servlet和利用构建servlet时某些编程需求的接口和类的程序包。 例如,servlet包含服务器在适当的时候自动调用的基本的生命周期方法(比如从init,service和destroy)。 程序员可以--同时也经常这样--根据需要覆盖这些方法。 例如,我们的servlet在初始化期间查找DataSource对象(用于连接)以最小化额外消耗。 大部分的servlet工作都发生在doGet和doPost方法中。 我们的servlet使用这些方法执行相应的查询并返回结果。
EJB是实现极小行为集合的服务器端软件组件,使用一种简化应用程序开发和有助于促进其可移植性的方法来封装业务程序逻辑。对生产应用程序,比如事务、安全和持久性等需要的函数的支持,是由EJB规范委托的。这个网站上的其它文章描述了如何整合entity EJB和DB2 Information Integrator,所以我们将不在此讨论这个问题了。 然而,值得注重的是,我们为这个工程构建的servlet可以很轻易的被转化为会话EJB。实际上,我们在某些案例中确实是这样做的,并且发现开发成本和性能结果是大致一样的 。