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 相集成。
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 简化了 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 解决方案相关的更多信息。
|
除了 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)。
0
收藏
转载于:https://blog.51cto.com/zhaocz/118739