ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [转载]使用 DB2 UDB 版本 8 开发企业 Java 应用程序

[转载]使用 DB2 UDB 版本 8 开发企业 Java 应用程序

原创 Linux操作系统 作者:dinner1007 时间:2019-03-14 15:06:04 0 删除 编辑

使用 DB2 UDB 版本 8 开发企业 Java 应用程序


本技术文章概述了 DB2 UDB 版本 8 Linux、UNIX 和 Windows 版中 Java 编程的增强,包括与 WebSphere 的集成、开发工具、 XML 技术以及有关新 JDBC 第 4 种驱动程序的信息。

简介

IBM® DB2® Universal Database™(UDB)支持所有关键的因特网标准,这使它成为可在 Web 上使用的理想数据库。它具有在内存中运行般的速度,使因特网搜索和复杂的文本匹配变得更容易,同时还融合了关系数据库的可伸缩性和可用性特征。DB2 UDB 支持 WebSphere®、Java™ 和 XML 技术,这为部署电子商务应用程序提供了方便。DB2 版本 8 还添加了自我管理的和资源调优的(self-managing and resource tuning,SMART)数据库技术来提高管理任务的自动化程度。

DB2 通用数据库支持许多类型的 Java 程序。它通过使用 JDBC 为用 Java 编写的客户机应用程序和 applet 提供了驱动程序支持。它还为嵌入式 SQL for Java(SQLJ)、Java 用户定义的函数(user-defined function,UDF)和 Java 存储过程提供支持。

本文讨论由 DB2 UDB Universal Developer's Edition 版本 8(UDE)提供的 Java 应用程序开发环境。




回页首


Java 支持

本节讨论下列特性:

DB2 JDBC 技术

按照 JDBC 2 规范,有四种类型的 JDBC 驱动程序体系结构:

  • 类型 1 — 这类驱动程序将 JDBC API 作为到另一类数据访问 API 的映射来实现,如开放式数据库连接(ODBC)。这类驱动程序通常依赖本机库,这限制了其可移植性。JDBC-ODBC 桥驱动程序就是类型 1 驱动程序的示例。
  • 类型 2 — 这类驱动程序部分用 Java 编程语言编写,部分用本机代码编写。这类驱动程序使用专门针对所连接数据源的本机客户机库。同样,由于使用本机代码,所以其可移植性受到限制。
  • 类型 3 — 这类驱动程序使用纯 Java 客户机,并使用独立于数据库的协议与中间件服务器进行通信。然后,中间件服务器将客户机请求传给数据源。
  • 类型 4 — 这类驱动程序是用纯 Java 语言编写,实现针对特定数据源的网络协议。客户机直接与数据源连接。

DB2 版本 8 支持类型 2、3 和 4 的 JDBC 驱动程序。前一个发行版中的 JDBC 驱动程序构建于 DB2 CLI(调用层接口,Call Level Interface)之上。DB2 版本 8 的类型 2 和类型 3 驱动程序继续使用 DB2 CLI 接口来与 DB2 UDB 服务器(OS/390® 和 z/OS™、UNIX®、Windows®、Linux 和 iSeries™)通信。 DB2 版本 8 添加了一种新的 DB2 JDBC 通用驱动程序(类型 4),它使用分布式关系数据库体系结构(Distributed Relational Database Architecture™(DRDA®))协议来进行客户机/服务器通信。

DB2 JDBC 应用程序驱动程序(类型 2)

DB2 JDBC 应用程序(类型 2)驱动程序( 图 1)使 Java 应用程序能够通过 JDBC 调用 DB2。对 JDBC 应用程序驱动程序的调用被转换成 Java 本机方法。使用这种驱动程序的 Java 应用程序必须在 DB2 客户机上运行,JDBC 请求通过该客户机流到 DB2 服务器。需要 DB2 Connect™ 版本 8 许可证/安装来访问 DB2 for OS/390 数据库。


图 1. DB2 Java 应用程序体系结构
DB2 Java 应用程序体系结构

COM.ibm.db2.jdbc.app包中包含了 DB2 JDBC 应用程序(类型 2)驱动程序。

JDBC 1 连接
用于建立至 DB2 UDB 服务器的连接的实现类包括:

  • COM.ibm.db2.jdbc.app.DB2Driver

JDBC 2 连接
用于建立至 DB2 UDB 服务器的连接的实现类包括:

  • COM.ibm.db2.jdbc.DB2ConnectionPoolDataSource
  • COM.ibm.db2.jdbc.DB2DataSource
  • COM.ibm.db2.jdbc.DB2XADataSource

要将应用程序配置成使用由 DB2 JDBC 应用程序(类型 2)驱动程序实现的 DataSource,需要下列信息:

databaseName
数据库名称。

user
用于连接数据库的用户标识。

password
用于连接数据库的密码。

用于 JDBC 和 SQLJ 的 DB2 瘦客户机驱动程序

DB2 UDB 版本 8 为 JDBC 和 SQLJ 应用程序提供了类型 3 和类型 4“瘦”驱动程序。 图 2 描述了这两种驱动程序的体系结构。


图 2. DB2 JDBC/SQLj 瘦驱动程序体系结构
DB2 JDBC/SQLj 瘦驱动程序体系结构

DB2 JDBC 类型 3 驱动程序

DB2 JDBC 类型 3 驱动程序,也称为 applet 或网络驱动程序,它由 JDBC 客户机和 JDBC 服务器组成。DB2 JDBC applet 驱动程序可以与 applet 一起由 Web 浏览器装入,或者可以在单独的 Java 应用程序中使用 applet 驱动程序。当 applet 请求至 DB2 数据库的连接时,applet 驱动程序打开至 DB2 JDBC applet 服务器的 TCP/IP 套接字,DB2 JDBC applet 服务器位于正在运行 Web 服务器的机器上。

建立好连接之后,applet 驱动程序通过 TCP/IP 连接将每个随后来自 applet 的数据库访问请求发送到 JDBC 服务器。然后,JDBC 服务器进行相应的 DB2 调用以执行任务。完成后,JDBC 服务器通过该连接将结果发回 JDBC 客户机。JDBC 服务器进程是 db2jd。

COM.ibm.db2.jdbc.net包中包含了 DB2 JDBC 类型 3 驱动程序。

JDBC 1 连接
用于建立至 DB2 UDB 服务器的连接的实现类包括:

  • COM.ibm.db2.jdbc.net.DB2Driver

JDBC 2 连接
用于建立至 DB2 UDB 服务器的连接的实现类包括:

  • COM.ibm.db2.DB2ConnectionPoolDataSource
  • COM.ibm.db2.DB2DataSource

要将应用程序配置成使用由 DB2 JDBC 类型 3 驱动程序实现的数据源,需要下列信息:

databaseName
数据库名称。

serverName
JDBC applet 服务器进程所驻留的服务器名。

portNumber
JDBC applet 服务器进程使用的端口号(缺省端口是 6789)。

user
用于连接到数据库的用户标识。

password
用于连接到数据库的密码。

DB2 JDBC 类型 3 驱动程序没有提供 Java 事务 API(JTA)支持。JTA 提供了一个接口来完成分布式(两阶段提交)事务。

IBM DB2 JDBC 通用驱动程序(类型 4 — 版本 8 中的新增功能)

在 DB2 版本 8 中,对 JDBC 驱动程序添加了许多新的特性和增强。在这些变化当中,最大的变化是体系结构的改进,它缩短了 JDBC 驱动程序和 DB2 服务器之间的代码路径。这种新的 IBM JDBC 通用驱动程序基于开放分布式协议(也就是分布式关系数据库体系结构(DRDA)),并与所有 DB2 服务器平台(UNIX、Windows、Linux 和 z/OS)相兼容,不过这些服务器平台必须具备相应的 DRDA 应用程序服务器(Application Server (AS))级别的支持,以及必须预先具备的存储过程。

新的 IBM DB2 JDBC 通用驱动程序所独有的特性包括:

  • 可更新的 ResultSet 支持
  • 改进的 DB2 认证安全性
  • 改进的 Java SQL 错误信息
  • 程序性跟踪工具

要使用 JDBC 通用驱动程序,在 Java CLASSPATH 环境变量中必须包含 db2jcc.jar

DB2 JDBC 通用驱动程序类型 4 驱动程序包含在

com.ibm.db2.jcc 包中。

JDBC 1 连接

DB2 UDB 版本 8 服务器将使用在 DB2 DBM 配置文件(SVCENAME)中指定的 TCP/IP 连接来与新的 DB2 JDBC 通用驱动程序通信。

用于建立至 DB2 UDB 服务器的连接的实现类包括:

  • com.ibm.db2.jcc.DB2Driver

可以使用下面的 URL 创建连接对象:jdbc:db2://server:port/database

JDBC 2 连接

用于建立至 DB2 UDB 服务器的连接的实现类包括:

  • com.ibm.db2.jcc.DB2SimpleDataSource

要将应用程序配置成使用由 DB2 JDBC 通用驱动程序(类型 4)实现的 DataSource,需要下列信息:

databaseName
数据库名称。

user
用于连接数据库的用户标识。

password
用于连接数据库的密码。

driverType
所使用的驱动程序类型(4)(必需)。

serverName
DRDA 服务器的 TCP/IP 地址或主机名。

portNumber
DRDA 服务器用来侦听至数据源的连接请求的 TCP/IP 端口号。

请参考 附录 A,以获取其它 DB2 JDBC 通用驱动程序(类型 4)信息。

SQLJ 支持(版本 8 中的新体系结构)

DB2 SQLJ 支持允许您构建和运行 SQLJ applet 和应用程序。这些 Java 程序包含被预编译并绑定到 DB2 UDB 数据库的嵌入式 SQL 语句。

SQLJ 标准有三个组件:转换器、定制器和运行时环境。转换器根据源 SQLJ 程序内部的嵌入式 SQL 语句产生 Java 代码。SQL 语句的二进制表示是在一个单独的序列化概要文件( .ser 文件)中创建的。当使用 db2sqljcustomize 命令定制该概要文件时,会创建静态 SQL 包。SQLJ 应用程序需要 db2jcc.jar 文件,SQLJ 程序准备同样需要 sqlj.zip 文件。


图 3. SQLJ 应用程序开发
SQLJ 应用程序开发

SQLJ 提供了:

  • 静态包级别的安全性模型
  • 静态 SQL 接口(例如, SELECT xxx INTO :hv1, :hv2
  • 与 JDBC 相比,提高了开发生产率,尤其是当从现有的嵌入式 SQL 体系结构(C 和 COBOL 等)移植应用程序时。

DB2 版本 8 提供了下列 SQLJ 实用程序,如 图 3中所示:

sqlj
IBM SQLJ 转换器。它转换 .sqlj 源文件并创建序列化概要文件和程序。

db2sqljcustomize
定制器和在线检查器。它为序列化概要文件创建 DB2 定制,可以选择在线检查能够动态预编译的 SQL 语句,也可以选择(缺省情况下)为该程序绑定 DB2 包。,并随意地(缺省情况下)为该程序绑定 DB2 包。

db2sqljbind
独立的绑定器。它将先前定制的 SQLJ 概要文件绑定到数据库。

db2sqljprint
打印 DB2 定制概要文件的内容。

在 sqlj 程序在运行时对 DB2 执行静态 SQL 之前,必须定制从 sqlj 转换器输出的序列化概要文件。如果没有进行定制,则应用程序将动态执行包含在概要文件中的 SQL 语句。

Java 2 平台,企业版(J2EE)

Java 2 平台,企业版(J2EE)定义用于开发多层企业应用程序的标准。J2EE 平台管理基础结构并支持 Web 服务,以开发安全的、健壮的和能够互操作的企业应用程序。J2EE 不仅利用了 Java 2 平台,标准版(J2SE)的许多特性(如“编写一次,就可以到处运行(Write Once, Run Anywhere)”的可移植性和用于数据库访问的 JDBC API ),而且还添加了对 Enterprise JavaBeans™(EJB)组件、Java Servlet、JavaServer Pages™(JSP)和 XML 技术的全面支持。有了简单性、可移植性、可伸缩性以及与旧系统的集成,J2EE 技术及其基于组件的模型就可以简化企业开发和部署。


图 4. J2EE 应用程序模型
J2EE 应用程序模型

J2EE 应用程序模型将企业应用程序分成三个基础部分: 组件容器连接器。组件是应用程序开发人员的主要关注点,而系统供应商实现容器和连接器以隐藏复杂性和提高可移植性。容器在客户机和组件之间进行协调,并透明地为两者提供服务,包括事务支持和资源合用。容器协调允许在部署时指定许多个组件行为,而不是在程序代码中指定。连接器位于 J2EE 平台之下,定义可移植的服务 API 以插入现有企业供应商所提供的东西。连接器通过启用各种特定服务的实现来提高灵活性。




回页首


DB2 UDB 版本 8 中的 Java 技术

这一节描述在 DB2 版本 8 中对 Java UDF 和存储过程的增强。

就象用其它语言一样,可以用 Java 创建存储过程和 SQL 语言扩展(又称为用户定义的函数)。必须在数据库中使用 CREATE PROCEDURE 语句注册存储过程。可以使用 CREATE FUNCTION 语句注册基于 Java 的 UDF。然后,可以使用任何受支持的客户机 API(如 JDBC、ODBC 和 SQLJ)从应用程序调用存储过程。可以使用任何 SQL 语句调用基于 Java 的 UDF。可以在其自己的地址空间(FENCED)或与 DB2 UDB 相同的地址空间(NOT FENCED)中执行该存储过程或 UDF。

现在,在 DB2 UDB 版本 8 中,可以将 Java 存储过程和 UDF 注册为 THREADSAFE 或 NOT THREADSAFE。Java 过程和函数的 THREADSAFE 选项将导致在 DB2 UDB 服务器上使用单个 JVM(Java 虚拟机)。版本 8 中 Java 过程和函数的缺省选项是 THREADSAFE,所以对于并发的 Java 存储过程,需要更少的内存。因为不再需要装入多个 JVM,所以还可以改进性能。




回页首


DB2 Java 应用程序开发环境

DB2 Development Center 是版本 8 中的一个新特性,其目的是为了简化创建 Java 存储过程和 UDF 的任务。WebSphere Studio 是一种集成开发环境(IDE),它允许您构建、测试 Java 应用程序并将其部署到 WebSphere Application Server 和 DB2 通用数据库。WebSphere Application Server 为电子商务应用程序提供了健壮的部署环境。其组件允许您快速、方便地构建和部署个性化的动态 Web 内容。在这一节中,将讨论 Java 应用程序工具,包括:

DB2 Development Center(版本 8 的新增功能)

DB2 Development Center 替代了存储过程构建器(Stored Procedure Builder)。它向应用程序开发人员提供了工具,以构建、调试、测试和部署 Java 存储过程和用户定义的函数。

它还可用于构建、测试和部署表函数,这些表函数可以读取 MQSeries®(WebSphere MQ)消息、访问 OLE DB 数据源以及从 XML 文档抽取数据。DB2 Development Center 为开发人员提供了独立的环境。它还可以与完整的 Java IDE(如 WebSphere Studio)一起使用。有关更多信息,请参阅 DB2 开发者园地中的 文章


图 5. DB2 Development Center
DB2 Development Center

WebSphere Studio

IBM WebSphere Studio 系列是一系列构建在公共的 IBM WebSphere Studio 工作台上的产品。WebSphere Studio 产品集替代了 IBM 的 VisualAge® for Java。WebSphere Studio 系列中的每个产品都提供了相同的集成开发环境(IDE)和公共的工具库,例如用于 Java 和 Web 开发。这些产品之间的差异在于每个配置中可以使用哪些插件工具。

WebSphere Studio 是一个单一的综合开发环境,是为了满足您所有的开发需求而设计的 — 从 Web 界面到服务器端应用程序、从个人开发到高级团队环境以及从 Java 开发到应用程序集成。WebSphere Studio 系列可在许多配置中使用并可得到 IBM 和其它供应商的扩展,它使开发人员能使用旨在满足其特定开发需求的单一开发环境。

WebSphere Studio 提供了开放标准、工具集成和灵活性,包括与现有应用程序集成的能力。这些仅仅是 WebSphere Studio 产品系列所提供的一些好处:

  • 开放标准:WebSphere Studio 系列中的所有产品都构建于 WebSphere Studio 工作台之上,该工作台是 Eclipse 平台的 IBM 实现。Eclipse 是一个开放源码项目,它为创建插件开发工具提供了一个公共平台和一组 API。有关 Eclipse 项目的更多信息,请参阅 www.eclipse.org
  • 垂直和水平集成:在工作台上构建的每个 WebSphere Studio 产品都将提供已经集成的工具,从而将您“解放”出来,把精力着重放在构建应用程序上,而不是放在集成工具上。
  • 具有一致外观的基于角色的开发。
  • 最大的编程性能。
  • J2EE 业务拓扑的支持。

WebSphere Studio Site Developer

WebSphere Studio Site Developer 满足内容作者、图形创作者、程序员和 Web 开发人员的需要。该集成工具使得协同创建、装配、发布、部署和维护动态交互式 Web 应用程序变得容易。在部署到生产服务器之前,可以快速地构建和测试业务逻辑,并用 IDE 中内置的 Web 创建工具来增强表示构件。

WebSphere Studio Site Developer 允许 Web 开发人员快速有效地创建和部署动态电子商务应用程序。它还提供了完整的 Web 服务和 XML 开发环境。WebSphere Studio Site Developer 可以与许多第三方工具进行无缝交互。

IBM WebSphere Application Server 为 Web 和 J2EE 应用程序提供了打包支持。它可以与 IBM WebSphere Application Server 或 Apache Tomcat 进行交互,以将 Web 应用程序直接发布到应用程序服务器。WebSphere Studio Site Developer 是最全面的 Web 创作工具集,它可以用来创建引人注目的高级网站。

可以使用下列技术开发 Web 应用程序:

  • JavaServer Pages(JSP) — 扩展 Web 服务器功能和创建动态 Web 内容的简单、快速且一致的方法。JSP 页面允许快速开发独立于服务器和平台的 Web 应用程序。
  • Servlet — 在 Web 应用程序内执行的服务器应用程序。WebSphere Studio Site Developer 支持 Java Servlet 规范。
  • Web 服务 — 可以在因特网上或内部网上描述、发布、定位和调用自包含的、模块化的应用程序。

WebSphere Studio Application Developer

WebSphere Studio Application Developer 包括 WebSphere Studio Site Developer 的所有特性,另外还有其它为开发人员提供的用于复杂的企业范围的 J2EE 应用程序的插件工具。除了上面提到的 HTML 和 JSP 开发工具外,WebSphere Studio Application Developer 还提供了业界领先的用于构建、测试和部署 EJB 组件的支持,还有如基于 Java Connector Architecture(JCA)的应用程序适配器之类的集成组件。它还为 WebSphere 软件平台进行优化。

WebSphere Studio Application Developer 提供了概要分析和日志记录工具,以便您可以在开发周期中较早地检测出应用程序性能问题。可以构建并部署定制的应用程序适配器来与后端系统集成,从而通过重用现有资源来提高生产率。此外,WebSphere Application Server 的内置测试环境和用于生成代码的高级工具可帮助缩短测试周期。

WebSphere Studio Application Developer 是一种完整的 Java、Web、Web 服务、Enterprise JavaBeans(EJB)和 XML 开发环境。它提供向导和其它工具以允许快速开发 Web 服务应用程序。WebSphere Studio Application Developer 中提供的 Web 服务开发工具是基于开放的、跨平台标准:统一描述、发现和集成(Universal Description Discovery and Integration (UDDI))、简单对象访问协议(Simple Object Access Protocol (SOAP))和 Web 服务描述语言(Web Services Description Language (WSDL))。

WebSphere Studio Application Developer 使下列帮助构建和部署支持 Web 服务的应用程序的过程变得容易:

  • 创建或转换。从现有构件(如 Java bean 和 XML 文档)创建 Web 服务。
  • 构建。将现有构件包装为 SOAP 和 HTTP 可访问的服务,并用 WSDL 描述它们。Web 服务向导帮助您生成用 WSDL 描述的 Web 服务的 SOAP 代理,并生成类的 bean 框架。
  • 部署。在 WebSphere Application Server 或 Tomcat 测试环境中部署 Web 服务。
  • 开发。生成样本应用程序以帮助您创建 Web 服务客户机应用程序。
  • 测试。测试本地或远程运行的 Web 服务。
  • 发布。将 Web 服务发布到 UDDI 商业注册中心,为 Web 服务做广告,以便其它企业可以访问它们。
  • 发现。浏览 UDDI 企业注册中心以找到用于集成的现有 Web 服务。

WebSphere Studio Application Developer 提供了一种全面的 XML 开发环境,它包括用于构建文件类型定义(Document Type Definitions (DTD))、XML 模式和 XML 文件的工具。它还支持关系数据和 XML 的集成。可以使用关系数据库(RDB)到 XML 的映射编辑器(Mapping Editor),方便地将关系数据映射成 XML 格式。编辑器可以将一个或多个关系表中的列映射到 XML 文档中的元素和属性。它可以生成文档存取定义(Document Access Definition (DAD))文件,DB2 XML Extender 使用它来将现有的 DB2 数据组成 XML 文档或将 XML 文档分解成 DB2 数据。

WebSphere Studio Application Developer 包含一个关系数据库环境,它用来创建和操作项目的数据设计。它是用于研究、导入、设计和查询数据库的环境。SQL 查询构建器(SQL Query Builder)提供了用于创建和执行 SQL 语句的可视化界面。

WebSphere Studio Application Developer 为测试企业应用程序提供了测试和发布工具。它提供了用于测试 JSP、servlet 和 HTML 文件的单元测试环境。它还提供了配置其它本地或远程服务器的能力,以集成 Web 和 EJB 应用程序的测试和调试。服务器可以是 WebSphere Application Server、Apache Tomcat 或 TCP/IP 监控服务器。

WebSphere Studio 的 DB2 UDB 插件(版本 8 的新增功能)

DB2 存储过程和 UDF 构建器组件提供了一些向导和工具,这些向导和工具用于创建和使用可以与 DB2 通用数据库一起使用的存储过程和用户定义的函数(UDF)。当创建访问 DB2 数据的应用程序时,可以通过合并向数据库服务器注册的存储过程和 UDF 来改进应用程序性能。

可以减少网络流量并更好地利用共享的业务逻辑。在用这些向导之一创建例程(存储过程或 UDF)之后,可以在文本编辑器中修改它。当您感到满意时,可以构建它并在 DB2 服务器上注册它。例程位于服务器上之后,可以执行它并运行包含在该例程中的 SQL 语句。当运行例程时,可以浏览 Output 视图,以查看如消息、参数(输入和输出)以及返回的结果集之类的相关信息。如果您对结果感到不满意,则可以继续修改并重构例程,直到它返回期望的结果为止。

使用该组件来创建下列类型的例程:

  • SQL 和 Java 存储过程
  • SQL UDF
  • 可以读取或接收来自 MQSeries 消息队列消息的 UDF

您可以:

  • 使用向导创建新例程。
  • 使用文本编辑器修改现有例程。
  • 在 DB2 数据库服务器上构建(注册)例程。
  • 在 DB2 数据库服务器上运行(执行)例程。
  • 在 Output 视图中查看结果集、消息和参数。
  • 从数据库删除例程。

WebSphere Application Server

WebSphere Application Server 是 WebSphere 软件平台的基础,WebSphere Application Server 提供了丰富的电子商务应用程序部署环境,并带有一组完整的应用程序服务,包括事务管理、安全性、群集、性能、可用性、连接性和可伸缩性的能力。它是一个符合 Java 2 平台,企业版(J2EE)的服务器。

DB2/WebSphere 连接合用
WebSphere Application Server 还提供了连接合用支持。WebSphere 连接合用是 JDBC 2.0 可选包 API 规范的实现。连接合用通过建立 servlet 可以使用的连接池,将连接开销分散到几个用户请求。最初,需使用资源来在池中建立连接,在这之后,可以忽略其它连接/断开的开销,因为可以重复使用现有的连接。

DB2 维护 DB2 UDB 服务器上的代理进程/线程池,以满足客户机对数据库资源的请求。可以与 DB2 服务器代理池分开,独立地维护 WebSphere Application Server(WAS)连接池。请确保已分配的 WAS 连接池与 DB2 服务器代理配置一起设置。

语句高速缓存
WebSphere Application Server 提供了预编译语句(仅 PreparedStatement 对象)高速缓存。该高速缓存应该与 DB2 包高速缓存(PCKCACHESZ)一起配置,以进行动态/静态 SQL 语句处理。取决于应用程序数据访问模式,WAS 预编译语句高速缓存可以改进应用程序性能。

会话持久性
对于将 HTTP 会话用于故障转移设施,持久会话是必不可少的。当应用程序服务器接收与当前不在内存中的会话标识相关联的请求时,它可以通过访问外部存储器(数据库或内存至内存)获得所需的会话状态。如果不支持持久性会话,那么应用程序服务器不能访问 HTTP 请求的会话信息,这些请求被发送到服务器,而不是发送到会话最初产生的地方。

WebSphere Application Server 将会话状态存储在 DB2 数据库中,为 Web 应用程序提供容错。如果应用程序服务器变成离线状态,那么当前会话的状态在 DB2 数据库中仍然可用。这将使其它应用程序服务器能够继续处理。DB2 表空间页面大小是在 WAS 内配置的。缺省的行大小是 4K。WebSphere Applicatoin Server 将利用 DB2 较大的页面大小(32KB),以保存会话对象。这种优化将会改进应用程序性能。

Enterprise JavaBeans
图 4 中所示,有两类称为 Enterprise JavaBeans(EJBs)的应用程序组件: 会话 bean实体 bean。用实体 bean 创建持久数据组件,而用会话 bean 创建应用程序逻辑组件。

会话 bean 封装与特定客户机相关联的临时数据。实体 bean 封装存储在 DB2 中的永久数据。持久性服务确保与实体 bean 相关联的数据与数据源中相应的数据正确地保持同步。为了实现这一任务,持久性服务在适当的时候使用事务服务来插入、更新、抽取和删除数据源中的数据。

有两类实体 bean:具有 容器管理的持久性(CMP)的实体 bean 和具有 bean 管理的持久性(BMP)的实体 bean。WebSphere Studio 为创建 CMP EJB 提供了理想环境。一旦 EJB 被映射到相应的 DB2 表和列,WebSphere Studio 就会生成所需的 JDBC 代码。如果使用 BMP EJB,那么 EJB 开发人员必须处理这个生成的 JDBC。

隔离级别设置指定由相应数据库提供的各种程度的运行时数据完整性。

表 1. 映射 J2EE 和 DB2 之间的隔离级别

J2EE 隔离级别 DB2 隔离级别 描述
可序列化 可重复读取 禁止脏读,不可重复读和幻像读
可重复读取 读稳定性 禁止脏读和不可重复读,但它允许幻像读
已提交的读操作 游标稳定性 禁止脏读,但允许不可重复读和幻像读
未提交的读操作 未提交的读操作 允许脏读,不可重复读和幻像读

新的 DB2 EJB 样本

DB2 版本 8 提供了一个新的基于 DB2 UDB EJB 的样本。该样本应用程序包括一个 Web 客户机,它使用至会话/实体 EJB 组件的 JSP/servlet 接口来访问 DB2 样本数据库(db2sampl)。该样本应用程序包含在

AccessEmployee.ear 文件中,可以从 Windows 平台的 samplesjavaWebsphere 目录和 UNIX 上的 /sqllib/samples/java/Websphere 目录中获得该文件。

在位于 samples/Java 目录中的自述文件中提供了 EJB 样本应用程序和部署信息的完整描述。

DB2 Web 服务

Web 服务技术实质上是一种新的编程范例,用它来帮助开发和部署公司内部或跨行业的松散耦合应用程序。

DB2 Web 服务是一种 XML 技术,用于简化访问关系数据库的 Web 服务的创建。DADX 文件用于定义 DB2 访问操作。有关 DB2 和 Web 服务的更多信息,请参阅 ibm.com/data/developer/webservices 上的 DB2 开发者园地 Web 服务参考资料中心。

DB2 集成的 Web 服务教程

IBM Video Central 教程为那些打算在 Web 上向其它公司提供商业服务的公司提供了一个样本解决方案。这种概念称为企业对企业(Business-to-Business)应用程序。IBM Video Central 教程演示了 DB2 和 WebSphere 的集成。许多技术被用来设计和构建一个功能完整的应用程序,包括:IBM 的 WebSphere Application Server、VisualAge for Java 和 DB2 XML Extender。通过使用简单对象访问协议(SOAP)访问用于个别视频产品零售商店的一组集中式服务(请参阅 http://www.w3.org/2000/xp/)。

IBM Video Central 教程演示了简单数据资源库的设计、开发和实现(插入和修改)以及查询服务。查询服务使用现有的 DB2 XML Extender。该教程的第一版是使用 Web 提供的,它包括:Java Servlet、JSP(Java Server Pages)和附带的教程文档。




回页首


DB2 UDB XML 技术

这一节讨论下列特性:

支持 XML 的 DB2 数据库

可扩展标记语言(Extensible Markup Language(XML))是应用程序之间数据交换的公认标准技术。XML 文档是由字符数据和标记组成的标记文档。标记可由文档作者定义。文档类型定义(Document Type Definition(DTD))用于声明 XML 文档所需的数据元素和属性。XML 模式可用于进一步限定 XML 文档的元素和属性的数据类型。DB2 XML Extender 为程序提供了使用 SQL 扩展对 XML 数据进行操作的机制。

以前,XML Extender 是一个单独安装的功能部件。在 DB2 版本 8 中,它是 DB2 正常安装的一部分。为了扩展 DB2 UDB 版本 8 数据库以使用 XML,只要使用 dxxadm 命令启用数据库。例如:

dxxadm enable_db sample

通过使用列集合,可以将 XML 文档存储在 DB2 中的单个列中,或作为一个集合存储。DB2 XML Extender 使用三种数据类型:XMLVARCHAR、XMLCLOB 和 XMLFILE。Extender 提供了 UDF 来存储、抽取和更新存储在单列中的 XML 文档。可以对整个 XML 文档进行搜索,或者通过使用位置路径根据结构化组件来执行搜索,位置路径使用由 XML 路径语言(XML Path Language(XPath))定义的简短语法的子集。对于经常查询的元素或属性,可以使用副表(Side table)改进搜索性能。

为了便于将 XML 文档存储为列集合,DB2 XML Extender 提供了管理工具来帮助设计者设计 XML 到关系数据库的映射。文档存取定义(Document Access Definition (DAD))用于维护 XML 数据的结构化数据和映射数据。DAD 被定义和存储为 XML 文档,以易于操作和理解。可以使用新的存储过程来组成或分解文档。

DB2 版本 8 的新 XML 特性包括:

  • XML 模式验证
  • XML 样式表(转换)支持
  • SQL/XML 增强包括:XMLAGG、XMLATTRIBUTES、XMLELEMENT 和 XML2CLOB。

WebSphere Studio — 关系数据库(RDB)到 XML 的映射编辑器

通过使用 WebSphere Studio RDB 到 XML 的映射编辑器,使得从 XML 到关系数据的映射变得很简单。WebSphere Studio 产品替代了先前用于创建文档存取定义(DAD)文件的 DB2 XML Extender 向导。可以将一个或多个关系表中的列映射到 XML 文档中的元素和属性。可以生成 DAD 脚本,从现有的 DB2 数据组成 XML 文档或将 XML 文档分解成 DB2 数据。也可以创建一个测试小程序来测试生成的 DAD 文件。

设计 RDB 至 XML 的映射编辑器的目的是为了与支持 XML 的 DB2 UDB 版本 8 数据库一起使用。它用下列方法简化了开发任务:

  • 提供可视化界面来方便定义关系数据和 XML 元素和属性之间的映射。
  • 自动生成 DAD 文件。
  • 自动生成测试程序。

有关更多信息,请参阅有关该主题的 WebSphere TechJournal 文章

MQSeries 支持

随同 DB2 通用数据库一起提供了一组 MQSeries 函数,允许 DB2 UDB 应用程序与异步消息传递操作进行交互。因为这些函数可以作为 SQL 来使用,所以这意味着使用 DB2 UDB 支持的任何编程语言所编写的应用程序可以用这些 MQSeries 支持。

DB2 UDB 版本 8 在 DB2 Development Center 内提供了 MQSeries Assist 向导。该向导创建一个表函数,该函数使用 MQSeries UDF 从 MQSeries 队列读取。该向导可以将每个 MQSeries 消息作为定界字符串或定长列字符串处理。创建的表函数按照您的规定对字符串进行解析,并将每个 MQSeries 消息作为表函数的一行返回。该向导还允许您在表函数之上创建一个视图,预览 MQSeries 消息和表函数结果。

有关 DB2 和 MQSeries 集成的更多信息,请参阅相关的 DB2 开发者园地 文章

通过 SQL 和 XML 使用 DB2 XML Extender 和 MQSeries

在 DB2 中提供了一系列 SQL UDF 和存储过程,使 DB2 客户机应用程序可以从单个请求做以下事情:

  • 将消息从 MQSeries 队列中读取到 DB2 XML 列中
  • 从 DB2 XML 列将消息发送和发布到 MQSeries 队列
  • 将由关系数据组成的 XML 消息发送到 MQSeries 队列
  • 将保存在 MQSeries 队列中的 XML 消息分解(拆开)成关系数据

有关更多信息,请参阅相关的 DB2 开发者园地 文章

Net Search Extender

DB2 Net Search Extender 使用一种索引创建技术(被称为 n-gram 索引)来提供新的高速文本搜索扩展器。在 Web 应用程序领域中大量地用到了这种扩展器,就象最终用户通常查询文本字段一样。根据文本字段索引查找有关文档可以改进 Web 用户的满意度。通过使用 N-Gram 索引,可以对任何基于 CHAR、VARCHAR 或 LONG VARCHAR 的列建立索引。当创建索引并激活后,可以使用新的存储过程来执行搜索。活动索引被存储在共享内存中,以优化搜索性能。

DB2 版本 8 Net Search Extender 替换了所有现有的文本扩展器:

  • DB2 Text Information Extender V7.2
  • DB2 Text Extender V7.1
  • DB2 Net Search Extender V7.2



回页首


结束语

DB2 UDB Universal Developer's Edition 版本 8 产品提供了快速构建和部署应用程序所需的所有工具。该软件包包括了功能齐全的集成开发环境、可伸缩的 Web 应用程序服务器和 DB2 UDB 功能部件(如 XML Extender)。DB2 通用数据库是一个可伸缩的、工业强度的数据库,它将是您电子商务数据管理的基础。




回页首


参考资料

有关其它信息,请参考下列网站:

DB2 通用数据库参考资料:

WebSphere 开发者园地:




回页首


附录 A. IBM DB2 JDBC 通用驱动程序(类型 4):

本附录描述下列有关 DB2 JDBC 类型 4 驱动程序的信息:

需求

需要 1.3.1 版本以上的 Java 运行时环境。

IBM DB2 JDBC 通用驱动程序(类型 4)需要在目标 DB2 UDB 服务器上有作为先决条件的存储过程和视图。UNIX、Linux 和 Windows 上的 DB2 UDB 版本 8 有所需的存储过程和视图。对于 OS/390 上的 DB2,必须手工安装存储过程。可以从 http://www.ibm.com/software/data/db2/os390/spb/sprocedure/index.html 网站获得有关将这些存储过程安装到 DB2 for OS/390 版本 6 和版本 7 的信息。

由于 IBM DB2 JDBC 通用驱动程序(类型 4)使用 TCP/IP 进行通信,所以必须将 DB2 UDB 目标服务器配置成使用 TCP/IP。

确定 JDBC 驱动程序信息

通过使用下列方法,可以以编程的方法确定应用程序已经装入了哪个 JDBC 驱动程序:

  • java.sql.DatabaseMetaData.getDriverName()
  • java.sql.DatabaseMetaData.getDriverMajorVersion()
  • java.sql.DatabaseMetaData.getDriverMinorVersion()
  • com.ibm.db2.jcc.DB2DatabaseMetaData.getJCCDriverBuildNumber()

跟踪工具

DB2 JDBC 通用驱动程序(类型 4)错误处理依赖于目标服务器上作为先决条件安装的存储过程。UNIX、Linux 和 Windows 上的 DB2 UDB 版本 8 服务器将创建所需的存储过程。DB2 for OS/390 版本 6 和版本 7 必须为 DB2 JDBC 通用驱动程序(类型 4)驱动程序安装存储过程,以提供额外的错误消息。

可以使用 DataSource 特性(logWriter、traceLevel、traceFile)启用跟踪。JDBC 1 连接必须使用 java.sql.DriverManager.setLogWriter() 方法。

行为差异

新的 DB2 JDBC 通用驱动程序(类型 4)消除了 DB2 调用层接口(CLI)上的任何相关性。因此,如果您先前使用了 DB2 JDBC 驱动程序,则应该考虑任何先前的 db2cli.ini 设置。

新的驱动程序特性

连接(性能)

  • boolean com.ibm.db2.jcc.DB2BaseDataSource.fullyMaterializeLobData - default is true
  • boolean com.ibm.db2.jcc.DB2BaseDataSource.deferPrepares - default is true

安全性

int com.ibm.db2.jcc.DB2BaseDataSource.securityMechanism

  • final static int com.ibm.db2.jcc.DB2BaseDataSource.USER_ONLY_SECURITY
  • final static int com.ibm.db2.jcc.DB2BaseDataSource. CLEAR_TEXT_PASSWORD_SECURITY
  • final static int com.ibm.db2.jcc.DB2BaseDataSource. ENCRYPTED_PASSWORD_SECURITY
  • final static int com.ibm.db2.jcc.DB2BaseDataSource. ENCRYPTED_USER_AND_PASSWORD_SECURITY
  • final static int com.ibm.db2.jcc.DB2BaseDataSource.KERBEROS_SECURITY

String com.ibm.db2.jcc.DB2BaseDataSource.kerberosServerPrincipal

transient org.ietf.jgss.GSSCredential com.ibm.db2.jcc.DB2BaseDataSource.gssCredential

void com.ibm.db2.jcc.DB2SimpleDataSource.setPassword (String password)

数据源

abstract class com.ibm.db2.jcc.DB2BaseDataSource

class com.ibm.db2.jcc.DB2SimpleDataSource

interface com.ibm.db2.jcc.DB2JccDataSource

  • String getJccVersion()

新的方法

DB2 设置客户机信息(应用程序标识)

  • void com.ibm.db2.jcc.DB2Connection.setDB2ClientUser (String user)
  • void com.ibm.db2.jcc.DB2Connection.setDB2ClientWorkstation (String name)
  • void void com.ibm.db2.jcc.DB2Connection.setDB2ClientApplicationInformation (String info)
  • void com.ibm.db2.jcc.DB2Connection.setDB2ClientAccountingInformation (String info)
  • String com.ibm.db2.jcc.DB2Connection.getDB2ClientUser()
  • String com.ibm.db2.jcc.DB2Connection.getDB2ClientWorkstation()
  • String com.ibm.db2.jcc.DB2Connection.getDB2ClientApplicationInformation()
  • String com.ibm.db2.jcc.DB2Connection.getDB2ClientAccountingInformation()

当前的 Packageset

  • void com.ibm.db2.jcc.DB2Connection.setDB2CurrentPackageSet(String packageset)
  • String com.ibm.db2.jcc.DB2Connection.getDB2CurrentPackageSet()
  • String com.ibm.db2.jcc.DB2BaseDataSource.currentPackageSet

跟踪

  • transient java.io.PrintWriter com.ibm.db2.jcc.DB2BaseDataSource.logWriter
  • void com.ibm.db2.jcc.DB2Connection.setJCCLogWriter (java.io.PrintWriter printWriter)
  • void com.ibm.db2.jcc.DB2Connection.setJCCLogWriter (java.io.PrintWriter printWriter, int traceLevel)
  • java.io.PrintWriter com.ibm.db2.jcc.DB2Connection.getJCCLogWriter()
  • int com.ibm.db2.jcc.DB2BaseDataSource.traceLevel
  • String com.ibm.db2.jcc.DB2BaseDataSource.traceFile
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_NONE
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_CONNECTION_CALLS
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_STATEMENT_CALLS
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_RESULT_SET_CALLS
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_DRIVER_CONFIGURATION
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_CONNECTS
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_DRDA_FLOWS
    • final static int com.ibm.db2.jcc.DB2BaseDataSource. TRACE_RESULT_SET_META_DATA
    • final static int com.ibm.db2.jcc.DB2BaseDataSource. TRACE_PARAMETER_META_DATA
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_DIAGNOSTICS
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_SQLJ
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_ALL

诊断

  • com.ibm.db2.jcc.DB2Diagnosable
    • DB2Sqlca getSqlca ()
    • java.lang.Throwable com.ibm.db2.jcc.DB2Diagnosable.getThrowable ()
    • void printTrace (java.io.PrintWriter printWriter, String messageHeader)
  • com.ibm.db2.jcc.DB2Sqlca
    • String[] getSqlErrmcTokens ()
    • String getSqlErrmc ()
    • String getSqlErrp ()
    • int[] getSqlErrd ()
    • char[] getSqlWarn ()
    • int getSqlCode ()
    • String getSqlState ()
    • String getMessage ()
  • com.ibm.db2.jcc.DB2ExceptionFormatter
    • static void printTrace (com.ibm.db2.jcc.DB2Sqlca sqlca, java.io.PrintWriter printWriter, String header)
    • static void printTrace (SQLException sqlca, java.io.PrintWriter printWriter, String header)
    • static void printTrace (java.lang.Throwable sqlca, java.io.PrintWriter printWriter, String header)

com.ibm.db2.jcc.DB2DatabaseMetaData

  • int getJCCDriverBuildNumber()

com.ibm.db2.jcc.DB2Driver

  • int getJCCBuildNumber()
  • int getJCCBuildCertification()
  • final static int jccTestBuild
  • final static int jccBetaBuild
  • final static int jccReleaseBuild
  • String[] getJCCCompatibleJREVersions()

JDBC 2 数据源和 JDBC 1 连接特性

  • int com.ibm.db2.jcc.DB2BaseDataSource.driverType
  • String com.ibm.db2.jcc.DB2BaseDataSource.databaseName - specified in URL for JDBC 1 connectivity
  • String com.ibm.db2.jcc.DB2BaseDataSource.description
  • int com.ibm.db2.jcc.DB2BaseDataSource.portNumber - specified in URL for JDBC 1 connectivity
  • String com.ibm.db2.jcc.DB2BaseDataSource.serverName - specified in URL for JDBC 1 connectivity
  • String com.ibm.db2.jcc.DB2BaseDataSource.user
  • int com.ibm.db2.jcc.DB2BaseDataSource.resultSetHoldability
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.HOLD_CURSORS_OVER_COMMIT
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.CLOSE_CURSORS_AT_COMMIT
  • boolean com.ibm.db2.jcc.DB2BaseDataSource.fullyMaterializeLobData
  • String com.ibm.db2.jcc.DB2BaseDataSource.currentPackageSet
  • String com.ibm.db2.jcc.DB2BaseDataSource.planName
  • int com.ibm.db2.jcc.DB2BaseDataSource.securityMechanism
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.USER_ONLY_SECURITY
    • final static int com.ibm.db2.jcc.DB2BaseDataSource. CLEAR_TEXT_PASSWORD_SECURITY
    • final static int com.ibm.db2.jcc.DB2BaseDataSource. ENCRYPTED_PASSWORD_SECURITY
    • final static int com.ibm.db2.jcc.DB2BaseDataSource. ENCRYPTED_USER_AND_PASSWORD_SECURITY
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.KERBEROS_SECURITY
  • String com.ibm.db2.jcc.DB2BaseDataSource.kerberosServerPrincipal
  • transient org.ietf.jgss.GSSCredential com.ibm.db2.jcc.DB2BaseDataSource.gssCredential
  • String com.ibm.db2.jcc.DB2BaseDataSource.traceFile
  • int com.ibm.db2.jcc.DB2BaseDataSource.traceLevel
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_NONE
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_CONNECTION_CALLS
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_STATEMENT_CALLS
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_RESULT_SET_CALLS
    • final static int com.ibm.db2.jcc.DB2BaseDataSource. TRACE_DRIVER_CONFIGURATION
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_CONNECTS
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_DRDA_FLOWS
    • final static int com.ibm.db2.jcc.DB2BaseDataSource. TRACE_RESULT_SET_META_DATA
    • final static int com.ibm.db2.jcc.DB2BaseDataSource. TRACE_PARAMETER_META_DATA
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_DIAGNOSTICS
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_SQLJ
    • final static int com.ibm.db2.jcc.DB2BaseDataSource.TRACE_ALL
  • transient java.io.PrintWriter com.ibm.db2.jcc.DB2BaseDataSource.logWriter
  • boolean com.ibm.db2.jcc.DB2BaseDataSource.deferPrepares
  • boolean com.ibm.db2.jcc.DB2BaseDataSource.readOnly
  • java.util.Properties com.ibm.db2.jcc.DB2BaseDataSource.getProperties()

目前限制

  • 用户定义的结构化类型
  • 连接合用
  • 数组
  • 分布式事务(JTA)
  • 行集合
  • 可调用的语句批处理



回页首


声明

所有有关 IBM 的未来方向或意向的信息都可以随时更改或撤消,而不另行通知,它们仅表示了目的和目标而已。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130342/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-08-23

  • 博文量
    406
  • 访问量
    258348