13.2. JDBC 驱动程序


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

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

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

  1. 下载 JDBC 驱动程序。

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

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

  2. 启动 JBoss EAP 服务器。
  3. 启动管理 CLI,但不使用 --connect-c 参数连接正在运行的实例。

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

    module add --name=MODULE_NAME --resources=PATH_TO_JDBC_JAR --dependencies=DEPENDENCIES

    例如,以下命令添加了 MySQL JDBC 驱动程序模块:

    module add --name=com.mysql --resources=/path/to/mysql-connector-java-5.1.36-bin.jar --dependencies=javax.api,javax.transaction.api
    重要

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

    执行 module --help 以了解有关使用这个命令添加和删除模块的更多详细信息。

  5. 使用 连接 管理 CLI 命令连接正在运行的实例。

    connect
  6. 注册 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.jdbc.Driver
    • com.mysql.fabric.jdbc.FabricMySQLDriver

    在本例中,您将传递 driver-class-name=com.mysql.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.jdbc.jdbc2.optional.MysqlXADataSource, driver-class-name=com.mysql.jdbc.Driver)

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

13.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-5.1.36-bin.jar

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

    WFLYJCA0018: Started Driver service with driver-name = mysql-connector-java-5.1.36-bin.jar_com.mysql.jdbc.Driver_5_1

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.jdbc.Driver
  5. 使用 JAR 命令行工具将此新文件添加到 JAR。

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

13.2.3. JDBC 驱动程序下载位置

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

注意

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

表 13.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-306.ibm.com/software/data/db2/java/

Sybase

jConnect JDBC 驱动程序是 SAP ASE 安装的 SDK 的一部分。目前,没有单独的下载站点用于这个驱动程序。

Microsoft

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

13.2.4. 访问特定于供应商的类

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

警告

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

重要

使用 reauthentication 机制和访问特定于供应商的类时,需要这个过程。

您可以使用 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;
import org.jboss.jca.adapters.jdbc.WrappedConnection;

...

Connection c = ds.getConnection();
WrappedConnection wc = (WrappedConnection)c;
com.mysql.jdbc.Connection mc = wc.getUnderlyingConnection();
重要

遵循特定于供应商的 API 指南,因为连接是由 IronJacamar 容器控制的。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.