Sun Java System Application Server Enterprise Edition 8.1 2005Q2 管理指南

第 3 章 JDBC 资源

本章说明如何配置访问数据库的应用程序所需的 JDBC 资源。本章包括以下几个部分:

关于 JDBC 资源和连接池

JDBC 资源

为了存储、组织和检索数据,大多数应用程序都采用了关系数据库。J2EE 应用程序通过 JDBC API 访问关系数据库。

JDBC 资源(数据源)为应用程序提供了连接数据库的方法。通常,管理员要为部署在域中的应用程序访问的每个数据库创建 JDBC 资源。(但是,可以为一个数据库创建多个 JDBC 资源。)

要创建 JDBC 资源,需要指定标识资源的唯一 JNDI 名称。(请参见“JNDI 名称和资源”部分。)JDBC 资源的 JNDI 名称应在 java:comp/env/jdbc 子上下文中。例如,工资单数据库资源的 JNDI 名称可以为 java:comp/env/jdbc/payrolldb。由于所有资源 JNDI 名称都位于 java:comp/env 子上下文中,因此在管理控制台中指定 JDBC 资源的 JNDI 名称时仅需输入 jdbc/name。例如,对于工资单数据库,可以指定 jdbc/payrolldb

JDBC 连接池

要创建 资源,请指定与其关联的连接池。多个 JDBC 资源可以指定一个连接池。

连接池是用于特定数据库的一组可重复使用的连接。由于每创建一个新的物理连接都会耗费时间,因此服务器维护了可用连接池以提高性能。应用程序请求连接时可以从池中获取一个连接。应用程序关闭连接时,连接将返回到池中。

连接池的属性可能会随数据库供应商的不同而有所不同。有一些属性是通用的,如数据库名称 (URL)、用户名和密码。

JDBC 资源和连接池如何协同工作

为了存储、组织和检索数据,大多数应用程序都采用了关系数据库。J2EE 应用程序通过 JDBC API 访问关系数据库。应用程序必须获得一个连接之后才可以访问数据库。

以下是运行时应用程序连接到数据库时所发生的情况:

  1. 应用程序通过 JNDI API 进行调用获取与数据库关联的 JDBC 资源(数据源)。

    给定资源的 JNDI 名称、命名和目录服务定位 JDBC 资源。每个 JDBC 资源指定一个连接池。

  2. 通过 JDBC 资源,应用程序获得一个数据库连接。

    应用程序服务器秘密地从与该数据库相对应的连接池中检索物理连接。池定义了数据库名称 (URL)、用户名和密码等连接属性。

  3. 由于已将应用程序连接到数据库,所以该应用程序可以读取和修改数据库中的数据以及将数据添加到数据库中。

    应用程序通过对 JDBC API 进行调用来访问数据库。JDBC 驱动程序将应用程序的 JDBC 调用转换为数据库服务器的协议。

  4. 访问数据库完成之后,应用程序将关闭该连接。

    应用程序服务器将连接返回连接池。连接返回连接池之后,下一个应用程序就可以使用该连接。

设置数据库访问

Procedure设置数据库访问

  1. 安装支持的数据库产品。

    有关 Application Server 支持的数据库产品列表,请参见发行说明

  2. 安装适用于该数据库产品的 JDBC 驱动程序。

  3. 使域的服务器实例可以访问此驱动程序的 JAR 文件。请参见集成 JDBC 驱动程序

  4. 创建数据库。

    通常,应用程序供应商提供了用于创建和填充数据库的脚本。

  5. 为数据库创建连接池。请参见创建 JDBC 连接池

  6. 创建指向连接池的 JDBC 资源。请参见创建 JDBC 资源

Procedure集成 JDBC 驱动程序

JDBC 驱动程序将应用程序的 JCBC 调用转换为数据库服务器的协议。

  1. 要将 JDBC 驱动程序集成到管理域中,请执行以下操作之一:

    • 使通用类加载器可以访问该驱动程序。

      1. 将驱动程序的 JAR 和 ZIP 文件复制到 domain-dir/lib 目录或将其类文件复制到 domain-dir/lib/ext 目录中。

      2. 重新启动该域。

    • 使系统类加载器可以访问驱动程序。

      1. 在管理控制台的树视图(左窗格)中,选择“配置”。

      2. 选择所需的配置(例如 default-config)。

      3. 选择“JVM 设置”。

      4. 在“JVM 设置”页面中,单击“路径设置”选项卡。

      5. 在“类路径后缀”字段中,输入驱动程序 JAR 文件的全限定路径名。

      6. 单击“保存”。

      7. 重新启动服务器。

关于 JDBC 连接池

Procedure创建 JDBC 连接池

连接池是用于特定数据库的一组可重复使用的连接。使用管理控制台创建池时,管理员实际上是在定义到特定数据库的连接的各个方面。

开始之前

创建池之前,您必须首先安装并集成 JDBC 驱动程序。请参见集成 JDBC 驱动程序

设置“创建连接池”页面时,必须输入特定于 JDBC 驱动程序和数据库供应商的特定数据。继续创建之前,请先收集以下信息:

  1. 在管理控制台的树视图(左窗格)中,展开“资源”节点。

  2. 在“资源”节点下,展开 "JDBC" 节点。

  3. 在 "JDBC" 节点下,选择“连接池”节点。

  4. 在“连接池”页面中,单击“新建”。

  5. 在“创建连接池”的第一个页面中,指定以下常规设置:

    1. 在“名称”字段中,输入池的逻辑名称。

      创建 JDBC 资源时将指定此名称。

    2. 从“资源类型”组合框中选择一个条目。

    3. 从“数据库供应商”组合框中选择一个条目。

  6. 单击“下一步”。

  7. 在“创建连接池”的第二个页面中,为“DataSource 类名”字段指定值。

    如果 JDBC 驱动程序具有与在上一页中指定的资源类型和数据库供应商相应的 DataSource 类,则系统会提供“DataSource 类名”字段的值。

  8. 单击“下一步”。

  9. 在“创建连接池”的第三个也即最后一个页面中,执行以下任务:

    1. 在“常规设置”部分中,检验各个值是否正确。

    2. 对于“池设置”、“连接验证”和“事务隔离”部分中的字段,保留默认值。

      以后更改这些设置非常方便。请参见编辑 JDBC 连接池

    3. 在“其他属性”表中,添加必需的属性,如数据库名称 (URL)、用户名和密码。

  10. 单击“完成”。

等效的 asadmin 命令

create-jdbc-connection-pool

Procedure编辑 JDBC 连接池

“编辑 JDBC 连接池”页面使您可以更改现有池的所有设置(池的名称除外)。

  1. 在树组件中,展开“资源”节点。

  2. 在“资源”节点下,展开 "JDBC" 节点。

  3. 在 "JDBC" 节点下,展开“连接池”节点。

  4. 选择要编辑的池的节点。

  5. 在“编辑 JDBC 连接池”页面中进行必要的更改。

    1. 更改常规设置。

      常规设置的值取决于安装的特定 JDBC 驱动程序。这些设置是 Java 编程语言中的类名或接口名称。

      参数 

      说明 

      DataSource 类名 

      实现 DataSource 和/或 XADataSource API 的特定于供应商的类名。该类位于 JDBC 驱动程序中。

      资源类型 

      选项包括 javax.sql.DataSource(仅本地事务) 、javax.sql.XADataSource(全局事务)和 java.sql.ConnectionPoolDataSource(本地事务,性能可能会提高)。

    2. 更改池设置。

      一组物理数据库连接保存在池中。应用程序请求连接时,将从池中删除该连接;而应用程序释放该连接之后,连接将返回到池中。

      参数 

      说明 

      初始和最小池大小 

      池中连接的最小数目。该值还确定了首次创建池或应用程序服务器启动时被置于池中的连接的数目。 

      最大池大小 

      池中连接的最大数目。 

      池大小调整数量 

      当池向最小池大小方向收缩时,将成批调整大小。此值确定批处理中的连接数目。如果将该值设置得过大,会延迟连接回收;如果将该值设置得过小,则会降低效率。 

      空闲超时 

      连接在池中保持空闲的最长时间(以秒为单位)。一旦超过此时间,即从池中删除该连接。 

      最长等待时间 

      在达到连接超时之前,请求连接的应用程序所等待的时间。由于默认等待时间过长,应用程序可能会出现无限期挂起的情况。 

    3. 更改连接验证设置。

      (可选)应用程序服务器可以在将连接传送给应用程序之前验证连接。如果由于网络出现故障或数据库服务器崩溃造成数据库不可用,此验证将允许应用程序服务器自动重新建立数据库连接。连接验证会带来额外开销,并会导致性能稍有下降。

      参数 

      说明 

      连接验证 

      选中“需要”复选框以启用连接验证。 

      验证方法 

      应用程序服务器可以使用三种方法来验证数据库连接:自动提交、元数据和表。 

      自动提交和元数据—应用程序服务器通过调用 con.getAutoCommit()con.getMetaData() 方法来验证连接。但是,由于许多 JDBC 驱动程序高速缓存了这些调用的结果,因此这两种方法无法始终提供可靠的验证。请与驱动程序供应商进行核实,以确定这些调用是否被高速缓存。

      表-应用程序将查询指定的数据库表。表必须存在并且可以访问,但不要求表的行数。请不要使用包含许多行的现有表或经常访问的表。 

      表的名称 

      如果从“验证方法”组合框中选择了表,请在此指定数据库表的名称。 

      一旦失败 

      如果选中标有“关闭所有连接”的复选框,则单个连接失败时,应用程序服务器将关闭池中的所有连接,然后重新建立这些连接。如果未选中此复选框,则仅当要使用各个连接时才会重新建立连接。 

    4. 更改事务隔离设置。

      由于许多用户通常可以并行访问一个数据库,因此可能出现一个事务在更新数据而另一个事务尝试读取同一数据的情况。事务的隔离级别定义了正在更新的数据对于其他事务的可见程度。有关隔离级别的详细资料,请参见数据库供应商的文档。

      参数 

      说明 

      事务隔离 

      使您可以为该池的连接选择事务隔离级别。如果不指定此参数,连接将使用 JDBC 驱动程序提供的默认隔离级别进行操作。 

      保证隔离级别 

      该项仅在指定了隔离级别的情况下才适用。如果选中“保证”复选框,则从池中获取的所有连接都具有相同的隔离级别。例如,如果上次使用连接时通过编程方式(使用 con.setTransactionIsolation)更改了连接的隔离级别,此机制会将状态更改回指定的隔离级别。

    5. 更改属性。

      在“其他属性”表中,可以指定数据库名称 (URL)、用户名和密码等属性。由于随数据库供应商的不同,属性也会有所不同,因此请参考供应商的文档以了解有关详细信息。

  6. 单击“保存”。

另请参见

Procedure检验连接池设置

  1. 启动数据库服务器。

  2. 单击 "Ping"。

    管理控制台将尝试连接到数据库。如果显示错误消息,请检查数据库服务器是否已重新启动。

Procedure删除 JDBC 连接池

  1. 在树组件中,展开“资源”节点。

  2. 在“资源”节点下,展开 "JDBC" 节点。

  3. 在 "JDBC" 节点下,选择“连接池”节点。

  4. 在“连接池”页面中,选中要删除的池的复选框。

  5. 单击“删除”。

等效的 asadmin 命令

delete-jdbc-connection-pool

关于 JDBC 资源

Procedure创建 JDBC 资源

JDBC 资源(数据源)为应用程序提供了连接数据库的方法。

开始之前

创建 JDBC 资源之前,请先创建 JDBC 连接池。请参见创建 JDBC 连接池

  1. 在树组件中,展开“资源”节点。

  2. 在“资源”节点下,展开 "JDBC" 节点。

  3. 在 "JDBC" 节点下,选择“JDBC 资源”节点。

  4. 在“JDBC 资源”页面中,单击“新建”。

  5. 在“创建 JDBC 连接器资源”页面中,指定资源的设置:

    1. 在“JNDI 名称”字段中,键入唯一的名称。

      按照约定,该名称应以 jdbc/ 字符串开头。例如:jdbc/payrolldb。请不要忘记正斜杠。

    2. 从“池名称”组合框中选择要与新的 JDBC 资源关联的连接池。

    3. 如果要使资源不可用,请取消选中“已启用”复选框。

      默认情况下,创建资源之后立即可以使用资源(已启用)。

    4. 在“说明”字段中,键入资源的简短说明。

    5. 在“目标”部分,指定具有可用资源的目标(群集和独立服务器实例)。

      在左侧选择所需的目标,然后单击“添加”以将其添加到选定目标的列表中。

  6. 单击“确定”。

等效的 asadmin 命令

create-jdbc-resource

Procedure编辑 JDBC 资源

  1. 在树组件中,展开“资源”节点。

  2. 在“资源”节点下,展开 "JDBC" 节点。

  3. 在 "JDBC" 节点下,展开“JDBC 资源”节点。

  4. 选择要编辑的 JDBC 资源的节点。

  5. 在“编辑 JDBC 资源”页面中,可以执行以下任务:

    1. 从“池名称”组合框中选择其他连接池。

    2. 在“说明”字段中,更改资源的简短说明。

    3. 选中或取消选中复选框以启用或禁用资源。

    4. 选择“目标”选项卡,以更改具有可用资源的目标(群集和独立服务器实例)。

      选中列表中的现有目标的复选框,然后单击“启用”以启用该目标的资源,或者单击“禁用”以禁用该目标的资源。

      单击“管理目标”可以在列表中添加或删除目标。在“管理目标”页面中,从左侧的“可用”列表中选择所需的目标,然后单击“添加”以将其添加到选定目标的列表中。单击“删除”可以从“已选择”列表中删除目标。

      单击“确定”可以保存对可用目标的更改。

  6. 单击“保存”以应用所做的编辑。

Procedure删除 JDBC 资源

  1. 在树组件中,展开“资源”节点。

  2. 在“资源”节点下,展开 "JDBC" 节点。

  3. 在 "JDBC" 节点下,选择“连接池”节点。

  4. 在“连接池”页面中,选中要删除的池的复选框。

  5. 单击“删除”。

Procedure启用或禁用 JDBC 资源

  1. 在树组件中,展开“JDBC 资源”节点或展开“独立实例”以选择“服务器实例节点资源”选项卡。

  2. 在“资源”页面中,选中要启用或禁用的资源的复选框。

  3. 单击“启用”或“禁用”。

关于持久性管理器资源

Procedure创建持久性管理器资源

向后兼容需要此功能。要在 Application Server 7 版上运行,使用容器管理的持久性 Bean(一种 EJB 组件)的应用程序需要持久性管理器资源。建议改为使用 JDBC 资源。

  1. 在树组件中,展开“资源”节点。

  2. 在“资源”节点下,选择“持久性管理器”节点。

  3. 在“持久性管理器”页面中,单击“新建”。

  4. 在“创建持久性管理器”页面中,指定以下设置:

    1. 在“JNDI 名称”字段中,键入唯一的名称。

      例如:jdo/mypm。请不要忘记正斜杠。

    2. 在“工厂类”字段中,保留此版本提供的默认类,或键入其他实现类。

    3. 从“连接池”组合框中选择新的持久性管理器资源所属的连接池。

    4. 要禁用新的持久性管理器资源,请取消选中“已启用”复选框。

      默认情况下,将启用新的持久性管理器资源。

    5. 在“目标”部分,指定具有可用资源的目标(群集和独立服务器实例)。

      在左侧选择所需的目标,然后单击“添加”以将其添加到选定目标的列表中。

  5. 单击“确定”。

等效的 asadmin 命令

create-persistence-resource

Procedure编辑持久性管理器资源

  1. 在“编辑持久性管理器属性”选项卡中,选择“添加属性”按钮。

    “其他属性”表中将添加一个新行。

  2. 添加所需的属性和值。

Procedure管理资源目标

  1. 选择“目标”选项卡,以更改资源所在的目标(群集和独立服务器实例)。

  2. 选中列表中的现有目标的复选框,然后单击“启用”以启用该目标的资源,或者单击“禁用”以禁用该目标的资源。

  3. 单击“管理目标”可以在列表中添加或删除目标。

    在“管理目标”页面中,从左侧的“可用”列表中选择所需的目标,然后单击“添加”以将其添加到选定目标的列表中。单击“删除”可以从“已选择”列表中删除目标。

  4. 单击“确定”可以保存对可用目标的更改。

  5. 单击“保存”。

Procedure删除持久性管理器资源

  1. 在树组件中,展开“持久性管理器”节点。

  2. 选择“持久性管理器”节点。

  3. 在“持久性管理器”页面中,选中要删除的持久性管理器的复选框。

  4. 单击“删除”。

等效的 asadmin 命令

delete-persistence-resource

Procedure启用或禁用持久性管理器资源

  1. 在树组件中,展开“持久性管理器”节点。

  2. 选中要启用或禁用的资源的复选框。

  3. 单击“启用”或“禁用”。