12.2. JDBC 驱动程序

在 JBoss EAP 中定义数据源以供您的应用使用之前,必须先安装相应的 JDBC 驱动程序。

12.2.1. 将 JDBC 驱动程序作为核心模块安装

若要将 JDBC 驱动程序作为核心模块安装,您必须首先 将 JDBC 驱动程序添加为核心模块,然后在 datasources 子系统中 注册 JDBC 驱动程序

12.2.1.1. 将 JDBC 驱动程序添加为核心模块

JDBC 驱动程序可以作为核心模块安装,使用管理 CLI 可以执行下列步骤:

  1. 下载 JDBC 驱动程序。

    从您的数据库供应商下载适当的 JDBC 驱动程序。有关常见 数据库的 JDBC 驱动程序的标准 下载位置,请参阅 JDBC 驱动程序下载位置。

    如果 JDBC 驱动程序 JAR 文件包含在 ZIP 或 TAR 存档中,请确保提取存档。

  2. 启动 JBoss EAP 服务器。
  3. 启动管理 CLI。

    $ EAP_HOME/bin/jboss-cli.sh
  4. 使用 模块 add management CLI 命令,添加新的核心模块。

    [disconnected /] module add --name=MODULE_NAME --resources=PATH_TO_JDBC_JAR --dependencies=DEPENDENCIES

    示例

    以下命令添加 MySQL JDBC 驱动程序模块:

    [disconnected /] module add --name=com.mysql --resources=/path/to/mysql-connector-java-8.0.12.jar --dependencies=javax.transaction.api,sun.jdk,ibm.jdk,javaee.api,javax.api

    示例

    要启动管理 CLI 并在一个步骤中添加新的核心模块,请使用以下命令:

    $ EAP_HOME/bin/jboss-cli.sh --command="module add --name=MODULE_NAME --resources=PATH_TO_JDBC_JAR --dependencies=DEPENDENCIES"
    重要

    使用 模块 管理 CLI 命令添加和删除模块,仅作为技术预览提供。此命令不适合在受管域中使用,或在远程连接管理 CLI 时使用。在生产环境中,应当手动 添加 和删除 模块。

    技术预览功能不包括在红帽生产服务级别协议(SLA)中,且其功能可能并不完善。因此,红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

    如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。

    执行 模块 --help 获取关于使用此命令添加和删除模块的更多详细信息。

接下来,您必须将它注册为 JDBC 驱动程序,供应用数据源引用。

12.2.1.2. 注册 JDBC 驱动程序

驱动程序 作为核心模块安装 之后,您必须使用以下管理 CLI 命令将它注册为 JDBC 驱动程序:在受管域中运行时,请确保在此命令前加上 /profile=PROFILE_NAME

/subsystem=datasources/jdbc-driver=DRIVER_NAME:add(driver-name=DRIVER_NAME,driver-module-name=MODULE_NAME,driver-xa-datasource-class-name=XA_DATASOURCE_CLASS_NAME, driver-class-name=DRIVER_CLASS_NAME)
注意

只有 JDBC 驱动程序 jar 在 /META-INF/services/java.sql.Driver 文件中定义了多个类,才需要 driver- class-name 参数。

例如,MySQL 5.1.36 JDBC 驱动程序 JAR 中的 /META-INF/services/java.sql.Driver 文件定义了两个类:

  • com.mysql.cj.jdbc.Driver
  • com.mysql.fabric.jdbc.FabricMySQLDriver

在本例中,您将传递 driver-class-name=com.mysql.cj.jdbc.Driver

例如,以下命令注册了 MySQL JDBC 驱动程序:

/subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-xa-datasource-class-name=com.mysql.cj.jdbc.MysqlXADataSource, driver-class-name=com.mysql.cj.jdbc.Driver)

JDBC 驱动程序现在可供应用数据源引用。

12.2.2. 将 JDBC 驱动程序安装为 JAR 部署

JDBC 驱动程序可以使用管理 CLI 或管理控制台作为 JAR 部署进行安装。只要驱动程序符合 JDBC 4 规范,部署时将自动识别并作为 JDBC 驱动程序安装。

下列步骤介绍了如何使用管理 CLI 安装 JDBC 驱动程序。

注意

JDBC 驱动程序的建议安装方法是将它们安装 为核心模块

  1. 下载 JDBC 驱动程序。

    从您的数据库供应商下载适当的 JDBC 驱动程序。有关常见 数据库的 JDBC 驱动程序的标准 下载位置,请参阅 JDBC 驱动程序下载位置。

    如果 JDBC 驱动程序 JAR 文件包含在 ZIP 或 TAR 存档中,请确保提取存档。

  2. 如果 JDBC 驱动程序不兼容 JDBC 4,请参阅 将 JDBC 驱动程序 JAR 更新为 JDBC 4-Compliant 的步骤。
  3. 将 JAR 部署到 JBoss EAP.

    deploy PATH_TO_JDBC_JAR
    注意

    在受管域中,指定适当的服务器组。

    例如,以下命令将部署 MySQL JDBC 驱动程序:

    deploy /path/to/mysql-connector-java-8.0.12.jar

    JBoss EAP 服务器日志中将显示一条消息,显示部署的驱动程序名称,该名称将在定义数据源时使用。

    WFLYJCA0018: Started Driver service with driver-name = mysql-connector-java-8.0.12.jar

JDBC 驱动程序现在可供应用数据源引用。

将 JDBC 驱动程序 JAR 更新为 JDBC 4-Compliant

如果 JDBC 驱动程序 JAR 不兼容 JDBC 4,可以通过下列步骤使它可部署:

  1. 创建一个空临时目录。
  2. 创建 META-INF 子目录。
  3. 创建 META-INF/services 子目录。
  4. 创建 META-INF/services/java.sql.Driver 文件,再添加一行来指示 JDBC 驱动程序的完全限定类名称。

    例如,MySQL JDBC 驱动程序将添加下面这一行:

    com.mysql.cj.jdbc.Driver
  5. 使用 JAR 命令行工具将此新文件添加到 JAR。

    jar \-uf jdbc-driver.jar META-INF/services/java.sql.Driver

12.2.3. JDBC 驱动程序下载位置

下表提供了用于 JBoss EAP 的常见数据库的 JDBC 驱动程序的标准下载位置。

注意

这些链接指向不受红帽控制或主动监控的第三方网站。有关数据库的最新驱动程序,请查看您的数据库供应商文档和网站。

表 12.1. JDBC 驱动程序下载位置

vendor下载位置

MySQL

http://www.mysql.com/products/connector/

PostgreSQL

http://jdbc.postgresql.org/

Oracle

http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html

IBM

http://www-01.ibm.com/support/docview.wss?uid=swg21363866

Sybase

jConnect JDBC 驱动程序是用于 SAP ASE 安装的 SDK 的一部分。目前此驱动程序本身没有单独的下载网站。

Microsoft

http://msdn.microsoft.com/data/jdbc/

12.2.4. 访问供应商特定类

在某些情况下,应用需要使用不属于 JDBC API 的供应商特定功能。在这些情况下,您可以通过在该应用程序中声明依赖项来访问特定于供应商的 API。

警告

这是高级使用。只有 JDBC API 中没有功能的应用才应实施此过程。

重要

在使用重新身份验证机制和访问特定于供应商的类时,此过程是必需的。

您可以使用 MANIFEST.MF 文件或 jboss-deployment-structure.xml 文件定义应用的依赖项。

如果您还没有这样做,请将 JDBC 驱动程序作为核心模块安装

使用 MANIFEST.MF 文件
  1. 编辑应用的 META-INF/MANIFEST.MF 文件。
  2. 添加 Dependencies 行,并指定模块名称。

    例如,下面这一行将 com.mysql 模块声明为依赖项:

    Dependencies: com.mysql
使用 jboss-deployment-structure.xml 文件
  1. 在应用的 META -INF/ 或 WEB-INF/ 文件夹中创建名为 jboss-deployment- structure.xml 的文件。
  2. 使用 dependencies 元素指定模块。

    例如,以下示例 jboss-deployment-structure.xml 文件将 com.mysql 模块声明为依赖项:

    <jboss-deployment-structure>
      <deployment>
        <dependencies>
          <module name="com.mysql"/>
        </dependencies>
      </deployment>
    </jboss-deployment-structure>

以下示例代码将访问 MySQL API:

import java.sql.Connection;
...
Connection c = ds.getConnection();
if (c.isWrapperFor(com.mysql.jdbc.Connection.class)) {
    com.mysql.jdbc.Connection mc = c.unwrap(com.mysql.jdbc.Connection.class);
}
重要

随着连接由 IronJacamar 容器控制,请严格遵循特定于供应商的 API 准则。