您的位置:首页 > 其它

DB2 Magazine:快速数据访问的捷径

2008-12-11 11:04 204 查看
Java 无处不在。如果您是一名应用程序开发人员,那么您很可能正在使用 Java 进行开发。如果是这样,您应该知道这样的开发并非总是那么有趣。
使用 Java Database Connectivity(JDBC) 创建应用程序需要很多的步骤,其中不少步骤都比较麻烦。您不仅需要创建一个 Java 数据访问对象层,还需要处理 CRUD(create, replace, update, delete)SQL 操作。为此,通常不得不使用两套工具:一套用于 Java 开发,另外一套用于数据库 CRUD 操作。如果有一套工具可以同时处理这两种工作,不是更方便吗?IBM 也这么认为,并着手创建了这样的工具。这个名为 pureQuery(之前的代码名称为“JLINQ”)的新的高性能平台包括用于应用程序的开发工具、API 和高级运行库。IBM 的 pureQuery 是为简化访问数据的应用程序的开发和管理而设计的。它对应用程序生命周期中的开发、部署、管理和治理等各个阶段都有帮助(详见图 1)。
图 1. pureQuery 体系结构概览



pureQuery 工具、API 和运行时环境提供了对数据库中的数据以及内存中的 Java 对象的访问。作为 IBM Data Studio 工具集的一个组件,一个公共的数据库应用程序开发和管理平台, pureQuery 提供了高级的 Java 数据访问功能,并真正避免了 JDBC 编程,因为它将查询语言与 Java 相集成。
数据访问 API 的问题
Java 开发人员可以选择多种 Java 数据访问 API 来构建应用程序,从 JDBC 到 Java Persistence Architecture(JPA)。这些 API 可以分为两大类:直接 SQL 访问和托管对象。每种方法都有其支持者和反对者。图 2 总结了每种方法的优缺点。
图2. 几种数据访问方法比较



直接 SQL 访问很好理解。它便于控制发出的 SQL,从而提高 SQL 的性能。但是,JDBC 开发过程会比较单调乏味,并耗时较长。在直接 SQL 访问方法学中,Java 程序员必须将结果集从 JDBC 映射到 Java 对象,并创建语句和绑定参数占位符。为获得最佳性能,开发人员必须掌握 JDBC API,并利用批处理和结果优化等特性。为提高 JDBC 性能,有些人可能会考虑 SQLJ;但是,这种选择要求开发人员重新编写数据访问层。
JDBC 开发的单调乏味促使对象关系映射(ORM) 框架问世,该框架提供一个数据访问抽象层。利用 ORM 通常可以更轻松地创建数据访问层。但是,ORM 对发出的 SQL 的控制比较有限,而且,它们给运行时性能问题的诊断加多了一层的复杂性。调优和诊断变得更加困难,因为开发人员无法再控制将什么样的 SQL 发送到数据库;因此,难以更改 SQL 或者决定由哪个应用程序发出 SQL。
IBM 创建了 pureQuery,以解决这些方法的局限性。pureQuery 提供了一个具有 SQL 智能的 Java 编辑器,但是它并不是另一种类 SQL 的语言――它是一种可以以声明的方式查询关系数据库以及 Java 集合和数据库缓存的语言。扩展的 Java 编辑器包括一个集成的 SQL 编辑器,开发人员可以像编辑 Java 那样利用代码完成、验证和执行辅助等特性。此外,IBM 正在致力于通过 pureQuery 增强对 JPA 的支持。








回页首
洞察 pureQuery
pureQuery 简化了 Java 数据访问应用程序整个开发周期(开发、部署、管理和问题诊断)中与数据服务器(尤其是对于 IBM 数据服务器)和 Java 对象相关的工作。pureQuery 运行时可以与所有具有 JDBC 驱动程序的数据库打交道,并提供了与所有版本的 DB2 和 Informix Dynamic Server(IDS)的附加工具的集成。您可以选择和 JPA(一种 J2EE 标准)或 Spring 和 iBatis 等流行的开源项目一起使用 pureQuery。pureQuery 与最近宣布的 Project Zero 计划 ―― zero.data 中的底层技术――相集成。 pureQuery 技术将 SQL 编辑带入到 Java 开发环境中。
简言之,pureQuery 使很多与 Java 相关的数据访问编程任务变得容易很多。它提供了一个良好的环境,可帮助您在开发周期中尽早发现问题,并从数据库一直追踪回应用程序源代码。可以通过相同的 Java API 同时使用静态和动态 SQL。对静态 SQL 的支持改善了问题诊断和治理。DB2 DBA 应该理解静态 SQL 访问对于应用程序性能、应用程序管理和数据访问安全(治理)的好处。
pureQuery 简化并统一了所有数据访问的实现。它并没有强迫您使用特定的 API(例如 EJB2、JPA、Spring 或 iBatis),但确实为某些用于访问数据的已有 API 的实现提供了便利。利用 pureQuery,可以直接在 Java 中编写数据访问代码。在编写查询时,可以获得设计时语法和模式检查以及更好的工具支持(例如代码完成/辅助)。
IBM Data Studio 解决方案将很多重复的 JDBC 和对象构造任务自动化。例如,pureQuery 的SQL 智能可以帮助您在开发过程中完成 SQL 语句。
SQL 编辑器集成(如图 3 所示)包括了以下特性,以提供对语义和语法验证的支持:

设计时编译
智能内容辅助
语法着色

图 3. SQL 编辑器集成



直接在 Java 编辑器中测试 SQL,这可以提高生产率;您可以在数据库上快速地测试 SQL,并标记错误,就像处理 Java 编程错误一样。
通过使用 pureQuery,可以缩短 Java 编辑-编译-调试开发周期中的 SQL 周期。您不必等到运行时就可以知道一个查询字符串是否格式良好,或者是否将返回错误。图 4 显示了 pureQuery 如何在 Eclipse Java Perspective 中像对待 Java 错误一样标记 SQL 错误。
图 4. Eclipse Java Perspective 中 pureQuery 的错误标记



这种工具集成可以像 Java 开发人员编写代码时一样提供交互式的、智能的代码辅助和即时 SQL 错误警告,从而大幅提升 Java 程序员的生产率。pureQuery 还使开发人员可以查询内存中不受管的对象。它可以查询堆上没有副本或存储的原始对象。这些对象可以与来自一个数据服务器查询的结果相连接,因为 pureQuery 使用完全标准的 SQL。例如,清单 1 中的查询使用 pureQuery 的内存中查询特性连接两个 Java 集合。
清单 1. 使用 pureQuery 的内存中查询 API 连接两个 Java 集合

Department[ ] depts = ...;
Employee[ ] emps = ...;
Data qoc = DataFactory.getData();
List<Employee> e = data.queryList(“select e.firstname,
e.lastname, e.empno, e.workdept from
?test.Employee as e,?test.Department as d where
e.workdept = d.deptno”,Employee.class, emps, depts);
这里不管理、复制或更改对象,而是在内存(堆)中访问它们。注意,? 占位符在 WHERE 子句中用于标识谓词值,在 FROM 子句中用于标识 Java 集合。
pureQuery 使用常规的 SQL 来查询内存中的对象。这个功能可以缓存常被访问的固定数据集,例如美国各州的查找表,然后,可以将这个表与其他数据相连接,以显示州的全称,避免与数据库服务器之间不必要的来回访问。
pureQuery 另一个有趣的特性是同一个 API 可同时用于 Java 静态和动态 SQL 数据访问。在此之前,JDBC 提供动态 SQL 数据访问,SQLJ 提供静态 SQL 数据访问。pureQuery 中对静态 SQL 的支持可以为应用程序带来很多好处――提高运行时性能、简化问题和代码错误的识别,以及提高管理能力。静态 SQL 可以监视静态 SQL 包,从而提高可管理性。静态 SQL 不仅提供最快的数据库访问方法,还允许开发人员锁定数据访问路径,以提供更确定的高性能(这对满足对终端用户的服务级别保证很重要)。最后,静态 SQL 提供了更强大的授权模型。在部署时,可以通过运行时配置将相同的 pureQuery 代码在动态与静态 SQL 之间切换,从而使开发人员可以在开发时使用动态 SQL 构建应用程序,而在部署时切换到静态 SQL,而且无需更改代码。








回页首
先有什么……
……先有数据库还是先有应用程序?如果先有应用程序,那么就采用自上而下的方法设计系统,从对象域模型开始。pureQuery 支持自上而下的方法,可以从对象生成表定义;然后,它帮助您生成域对象域模型相符的 Java 数据访问模型(持久层)。
另一方面,假设先有数据库。在此情况下,采用自下而上的方法来设计系统,从一个已有的数据库开始,pureQuery 可以为之生成一个 Java 数据访问模型。
但是,有很多已有的系统处于“中间地带”,数据库和对象模型都已经存在。对于这种情况, pureQuery 提供了一些工具,可以使用这些工具将 Java 数据访问模型映射到已有的对象,以及将已有的数据库映射到 Java 数据访问模型。
pureQuery 支持两种风格的 SQL 执行:一种是带注释的方法风格,另一种是内联方法风格。带注释的方法风格使用接口中的 Java 注释或 XML 文件中的 SQL 来定义对象到关系的映射。它创建接口(其中定义了 CRUD 方法)、接口的实现以及表示数据的 Java bean。对于带注释的方法风格,接口不会向使用 Java 方法调用的应用程序开发人员显示任何持久技术。这种方法使用 Java 注释将 SQL 映射封装到接口中。而内联方法风格则直接执行 SQL。例如,下面的代码是以内联方法风格使用 employee bean 的一个例子:
清单 2. 内联方法使用 employee bean

employee = db.queryFirst("SELECT NAME, ADDRESS, PHONE FROM EMP WHERE
NAME=:name", Employee.class,name);
这些工具可以轻松生成基于 Java 集合的表、视图和存储过程结果集。








回页首
纯净而简单
pureQuery 为 Java 数据访问,包括性能和问题诊断提供了一种简单的编程模型。作为 JDBC 之上很小的一个层,pureQuery 简化了与 Java 访问开发相关的大多数常见任务。它还可以比 JDBC 程序更快地执行,因为它封装了使用类 JDBC 批量更新的“最佳实践”,利用特定于数据库的 API 提供比使用标准 JDBC API 情况下更好的性能,以及为开发人员提供最有效的 JDBC 选项。pureQuery 将静态 SQL 的优点释放出来,允许在不更改任何代码的情况下生成静态 SQL。此外,它还提供对存储和检索 Java bean 以及与数据库之间的来回映射的即开即用的支持。pureQuery 是一种可扩展的平台,拥有可插式的定制的结果处理模式。
结果怎样?pureQuery 使 Java 中的 SQL 编程像 Java 编程本身一样有效率。
pureQuery 和它的 IBM Data Studio 同伴 Data Web Services 协力,通过简化这些通常比较复杂的任务,提高开发人员的效率,并缩短开发周期。请参照参考资源中,与 pureQuery 和 IBM Data Studio 解决方案相关的更多信息。








回页首
附录:Data Web Services
除了 pureQuery 之外,IBM Data Studio 解决方案还包括很多其他的特性。其中一种新特性就是 Data Web Services,它提供了无需编写任何代码就能生成访问数据的 Web 服务的功能。通过使用 Data Web Services,可以将查询(SQL 或 XQuery)和存储过程公布为 Web 服务;这些服务可以构成面向服务架构(SOA)解决方案的基础。
越来越多的公司正在将 SOA 应用于他们的应用程序,并将底层的组件向松散耦合的、基于服务的访问转移。在数据访问端,数年来公司已经通过存储过程、触发器等封装或实现了大量业务逻辑。如果能将这些数据访问操作和底层的规则利用起来,将它们公布为随时可用的 Web 服务,就可以帮助加快采纳 SOA。目前,通过服务访问数据库需要很多应用程序开发方面的专业知识。这需要将 SQL 操作或存储过程包装在应用程序代码中,然后将其部署到某种应用程序服务器上。通常,Web 开发人员不是 SQL 专家,反之亦然,因此开发和部署那样的应用程序将比较痛苦――最终,也许只能得到一个性能糟糕的应用程序。
Data Web Services 避免了所有的编程。只需通过拖放操作,就可以以 Web 服务的方式启用数据库,并生成 SOAP 和 REST(Representational State Transfer)型端点,这些端点可以 GET 或 POST 数据。然后,可以通过任何 Web 服务使用者来访问数据。Data Web Services 支持各种各样的端点,为调用这些服务提供了多种客户机选项,包括 SOAP 和基于浏览器的客户机及 Xforms、HTML 表单等。
服务生成过程会产生一个 WSDL(Web Service Definition Language)文件,用于描述服务。然后,可以将最终的 Data Web Service 解决方案部署到已有的 Java 应用程序服务器基础设施上。关键的特性包括:

通过拖放操作创建 Web 服务
无需编程的部署
完整的 Web 服务接口
HTTP 上的 SOAP 和 WSDL 生成
REST 型服务接口
HTTP GET/POST 绑定
Web 2.0 功能(JSON,feeds via XSLT,AJAX)
将遗留应用程序组件公布为服务的能力

包含 Data Web Services 的 IBM Data Studio 是基于 Eclipse 的,易于集成到其他 Eclipse 解决方案中。
Data Web Services 可以避免编写大量代码,从而简化 Web 服务的开发。Data Studio 工具为 Web 服务提供了向导驱动的开发步骤,另外还提供了一个集成的测试环境。而且,可以将 XSLT 应用于输入和输出,以满足服务格式的要求。WSDL 是在幕后自动生成的,这使用户可以将其提供给 Web 服务客户机使用。








回页首
参考资料

本文从 DB2 Magazine 期刊取得授权并进行翻译,参见 DB2 Magazine 站点 上的 英文原文
IBM Data Studio 下载:IBM Data Studio 解决方案拥有许多新特性,其中包括 Data Web Services 支持。
pureQuery 下载:IBM Data Studio pureQuery Runtime V1.1 提供了一个高性能的 Java 数据库访问平台。
Project Zero:Project Zero 是 IBM 的一个孵化器项目,侧重遵从面向服务的体系结构( Service-Oriented Architecture,SOA)的 Web 2.0 应用程序的敏捷开发。
zero.data:Project Zero 项目中 Zero 数据访问库(简称为 zero.data)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐