第 13 章 数据源管理

13.1. 关于 JBoss EAP 数据源

关于 JDBC

JDBC API 是一个标准,它定义了 Java 应用程序如何访问数据库。一个应用程序需要配置一个数据源(datasource)来指代一个 JDBC 驱动,然后,应用程序代码就可以对驱动进行写操作,而不需要直接对数据库进行写操作。驱动会把相应的代码转换为数据库的语言。这意味着,通过安装正确的驱动,应用程序可以使用任何支持的数据库。

更多信息请参考 JDBC 4.0 规格

支持的数据库

关于 JBoss EAP 7 支持的兼容 JDBC 的数据库的列表,请参考 JBoss EAP 支持的配置

数据源类型

数据源一般被分为两类:非 XA 数据源XA 数据源

非 XA 数据源
用于不使用事务的应用程序,或者使用的事务只有一个数据库的应用程序。
XA 数据源
将多个数据库或其他 XA 资源作为 XA 事务的一部分使用的应用程序会使用它。XA 数据源会导致额外的负荷。

当使用 JBoss EAP 管理接口创建数据源时,您需要指定所用的数据源类型。

ExampleDS 数据源

JBoss EAP 附带了数据源配置示例(ExampleDS),它演示了如何定义数据源。这个数据源使用一个 H2 数据库,它是一个轻量级关系数据库管理系统,为开发人员提供了快速构建应用程序的功能。

警告

ExampleDS 数据源和 H2 数据库应该用在生产环境里。这是一个非常小的、自包容的数据源,它支持所有测试和构建应用程序所需的标准,但对于生产环境,它不够稳定且扩展性不强。

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 管理 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
    重要

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

    关于使用这个命令添加或删除模块的详情,请执行 module --help

  5. 使用 connect 管理 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)
    注意

    driver-class-name 参数只有在 JDBC 驱动 JAR 在其 /META-INF/services/java.sql.Driver 文件里定义了多个类时才需要。

    例如,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 里的步骤。
  3. 部署 JAR 至 JBoss EAP。

    部署 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

如果 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 驱动的下载位置

提供商下载位置

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 里没有的功能时才执行这个操作。

重要

当使用重验证机制,并访问厂商的专有类时,需要执行这个操作。

您可以用 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 容器所控制的。

13.3. 创建数据源

数据源可以用管理控制台或管理 CLI 来创建。

JBoss EAP 7 允许您在数据源属性值里使用表达式,例如 enabled 属性。关于在配置里使用表达式的细节,请参考属性替换章节。

13.3.1. 创建非 XA 数据源

非 XA 数据源可以用 data-source add 管理 CLI 命令来定义。您也可以用管理控制台定义非 XA 数据源,请选择 ConfigurationSubsystemsDatasourcesNon-XA 并点击 Add 打开 Create Datasource 向导。

下面的步骤描述了如何用管理 CLI 定义非 XA 数据源。

  1. 如果您还没有这样做,请将 JDBC 驱动安装和注册为核心模块
  2. 请用 data-source add 命令定义数据源,并指定合适的参数值。

    data-source add --name=DATASOURCE_NAME --jndi-name=JNDI_NAME --driver-name=DRIVER_NAME  --connection-url=CONNECTION_URL
    注意

    在受管域里,您必须指定 --profile=PROFILE_NAME 参数。

    关于这些参数值的详情,请参考下面的数据源参数章节。

关于详细的例程,请参考数据源配置示例

数据源参数
jndi-name
数据源的 JNDI 名称必须以 java:/java:jboss/ 开始。例如,java:jboss/datasources/ExampleDS
driver-name

驱动名称的值取决于 JDBC 驱动是否被安装为核心模块或 JAR 部署。

  1. 对于核心模块,驱动名的值将是注册时赋予 JDBC 驱动的名称。
  2. 对于 JAR 部署,如果 /META-INF/services/java.sql.Driver 文件里只列出了一个类,驱动名就是 JAR 的名称。如果列出了多个类,那它的值是 JAR_NAME + "_" + DRIVER_CLASS_NAME + "_" + MAJOR_VERSION + "_" + MINOR_VERSION(例如 mysql-connector-java-5.1.36-bin.jar_com.mysql.jdbc.Driver_5_1)。

    当部署 JDBC JAR 时,您也可以在 JBoss EAP 服务器日志里查看驱动名称。

    WFLYJCA0018: Started Driver service with driver-name = mysql-connector-java-5.1.36-bin.jar_com.mysql.jdbc.Driver_5_1
connection-url
关于受支持的数据库的连接 URL 格式的细节,请参考数据源连接 URL 列表。

关于所有可用的数据源参数的完整列表,请参考数据源参数章节。

13.3.2. 创建 XA 数据源

XA 数据源可以用 xa-data-source add 管理 CLI 命令来定义。您也可以用管理控制台定义 XA 数据源,请选择 ConfigurationSubsystemsDatasourcesXA 并点击 Add 打开 Create XA Datasource 向导。

下面的步骤描述了如何用管理 CLI 定义 XA 数据源。

注意

在受管域里,您需要指定使用的配置集。根据管理 CLI 命令的格式,您要么在命令前使用 /profile=PROFILE_NAME,要么传入 --profile=PROFILE_NAME 参数。

  1. 如果您还没有这样做,请将 JDBC 驱动安装和注册为核心模块
  2. 请用 xa-data-source add 命令定义数据源,并指定合适的参数值。

    xa-data-source add --name=XA_DATASOURCE_NAME --jndi-name=JNDI_NAME --driver-name=DRIVER_NAME --xa-datasource-class=XA_DATASOURCE_CLASS --xa-datasource-properties={"ServerName"=>"HOSTNAME","DatabaseName"=>"DATABASE_NAME"}

    关于这些参数值的详情,请参考下面的数据源参数一节。

  3. 设置 XA 数据源属性

    当定义 XA 数据源时要求至少有一个 XA 数据源属性,否则您在添加它时会遇到错误。任何在定义 XA 数据源时没有设置的属性都可以在之后单独进行设置。

    1. 设置服务器名称。

      /subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME/xa-datasource-properties=ServerName:add(value=HOSTNAME)
    2. 设置数据库名称。

      /subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME/xa-datasource-properties=DatabaseName:add(value=DATABASE_NAME)

关于详细的例程,请参考数据源配置示例

数据源参数
jndi-name
数据源的 JNDI 名称必须以 java:/java:jboss/ 开始。例如,java:jboss/datasources/ExampleDS
driver-name

驱动名称的值取决于 JDBC 驱动是否被安装为核心模块或 JAR 部署。

  1. 对于核心模块,驱动名的值将是注册时赋予 JDBC 驱动的名称。
  2. 对于 JAR 部署,如果 /META-INF/services/java.sql.Driver 文件里只列出了一个类,驱动名就是 JAR 的名称。如果列出了多个类,那它的值是 JAR_NAME + "_" + DRIVER_CLASS_NAME + "_" + MAJOR_VERSION + "_" + MINOR_VERSION(例如 mysql-connector-java-5.1.36-bin.jar_com.mysql.jdbc.Driver_5_1)。

    当部署 JDBC JAR 时,您也可以在 JBoss EAP 服务器日志里查看驱动名称。

    WFLYJCA0018: Started Driver service with driver-name = mysql-connector-java-5.1.36-bin.jar_com.mysql.jdbc.Driver_5_1
xa-datasource-class
javax.sql.XADataSource 类的 JDBC 驱动实现指定 XA 数据源类。
-properties
当定义 XA 数据源时要求至少有一个 XA 数据源属性,否则您在添加它时会遇到错误。在定义之后可以在 XA 数据源里添加其他的属性。

关于所有可用的数据源参数的完整列表,请参考数据源参数章节。

13.4. 修改数据源

使用管理控制台或管理 CLI 可以修改数据源。

JBoss EAP 7 允许您在数据源属性值里使用表达式,例如 enabled 属性。关于在配置里使用表达式的细节,请参考属性替换章节。

13.4.1. 修改非 XA 数据源

非 XA 数据源设置可以用 data-source 管理 CLI 命令更新。您也可以从管理控制台的 datasources 子系统里更新数据源属性。

注意

非 XA 数据源可以与 JTA 事务集成。要继承数据源和 JTA,请确保 jta 参数被设置为 true

数据源的设置可以用下列管理 CLI 命令来更新。

data-source --name=DATASOURCE_NAME --ATTRIBUTE_NAME=ATTRIBUTE_VALUE
注意

在受管域里,您必须指定 --profile=PROFILE_NAME 参数。

要使更新生效,必须重新启动服务器。

13.4.2. 修改 XA 数据源

XA 数据源设置可以用 xa-data-source 管理 CLI 命令更新。您也可以从管理控制台的 datasources 子系统里更新数据源属性。

  • XA 数据源的设置可以用下列管理 CLI 命令来更新。

    xa-data-source --name=XA_DATASOURCE_NAME --ATTRIBUTE_NAME=ATTRIBUTE_VALUE
    注意

    在受管域里,您必须指定 --profile=PROFILE_NAME 参数。

  • XA 数据源属性可以用下列管理 CLI 命令来更新。

    /subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME/xa-datasource-properties=PROPERTY:add(value=VALUE)
    注意

    在受管域里,您必须在这个命令之前使用 /profile=PROFILE_NAME

要使更新生效,必须重新启动服务器。

13.5. 删除数据源

数据源可以用管理控制台或管理 CLI 来删除。

13.5.1. 删除非 XA 数据源

您可以用 data-source remove 管理 CLI 命令删除非 XA 数据源。您可以在管理控制台的 datasources 子系统里删除非 XA 数据源。

data-source remove --name=DATASOURCE_NAME
注意

在受管域里,您必须指定 --profile=PROFILE_NAME 参数。

删除数据源后要求重启服务器。

13.5.2. 删除 XA 数据源

您可以用 xa-data-source remove 管理 CLI 命令删除 XA 数据源。您可以在管理控制台的 datasources 子系统里删除 XA 数据源。

xa-data-source remove --name=XA_DATASOURCE_NAME
注意

在受管域里,您必须指定 --profile=PROFILE_NAME 参数。

删除 XA 数据源后要求重启服务器。

13.6. 测试数据源连接

一旦在 JBoss EAP 里添加了数据源,您可以测试连接以检验设置是否正确。数据源连接可以用管理 CLI 命令或管理控制台的 datasources 子系统里的 Test Connection 按钮进行测试。

您可以使用下列管理 CLI 命令来测试数据源连接。

/subsystem=datasources/data-source=DATASOURCE_NAME:test-connection-in-pool
注意

在受管域里,您必须在这个命令之前使用 /host=HOSTNAME/server=SERVER_NAME

13.7. XA 数据源的恢复

XA 数据源就是一个可以参与到一个 XA 全局事务中的数据源,它由事务管理器(transaction manager)进行协调,并可以在一个事务中分散到多个资源。如果其它的一个参与者无法提供它的改变,其它参与者会终止这个事务,并把它们的状态恢复到事务发生以前的状态。这么做的目的是,维护数据的一致性,并避免潜在的数据丢失或破坏。

XA 恢复(XA recovery)是一个过程,它确保了受一个事务影响的所有资源都会被更新或回滚,即使任何资源或事务参与者崩溃或无法访问。XA 恢复不需要用户的干涉。

每个 XA 资源都需要一个和它的配置相关联的恢复模块。这个模块包括了在恢复发生时需要执行的代码。JBoss EAP 会自动为 JDBC XA 资源注册恢复模块。如果需要执行自定义的恢复代码,则需要在 XA 数据源中注册一个自定义的模块。恢复模块需要扩展类 com.arjuna.ats.jta.recovery.XAResourceRecovery

13.7.1. 配置 XA 恢复

对于多数的 JDBC 资源,恢复模块会自动和资源关联。此时,您只需要配置允许恢复模块连接资源以执行恢复的选项。

下表描述了 XA 恢复专有的 XA 数据源参数。这些配置属性都可以在数据源创建期间或之后进行设置。您可以用管理控制台或管理 CLI 命令来设置它们。关于配置 XA 数据源的信息,请参考修改 XA 数据源

表 13.2. XA 恢复的数据源参数

属性描述

recovery-username

连接恢复资源所使用的用户名称。请注意如果没有指定,将使用数据源安全设置。

recovery-password

连接恢复资源所使用的密码。请注意如果没有指定,将使用数据源安全设置。

recovery-security-domain

连接用于恢复的资源时使用的安全域。

recovery-plugin-class-name

如果您需要使用自定义的恢复模块,请将这个属性设置为模块的全限定类名。这个模块必须继承 com.arjuna.ats.jta.recovery.XAResourceRecovery

recovery-plugin-properties

如果您使用了要求设置属性的自定义模块,请将这个属性设置为用逗号隔开的 KEY=VALUE 列表。

禁用 XA 恢复

如果多个 XA 数据源连接至相同的物理数据库,那 XA 恢复通常都需要对其中一个进行配置。

使用下列管理 CLI 命令来禁用 XA 数据源的恢复。

/subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME:write-attribute(name=no-recovery,value=true)

13.7.2. 厂商专有的 XA 恢复

厂商专有的配置

某些数据库要求专门的配置与 JBoss EAP 事务管理者管理的 XA 事务进行协作。如需了解最新的相关信息,请参考数据库厂商的文档。

MySQL
这里不要求特殊的配置。更多的信息请参考 MySQL 文档。
PostgreSQL 和 Postgres Plus Advanced Server
要使 PostgreSQL 可以处理 XA 事务,把配置参数 max_prepared_transactions 设置为一个大于 0 并大于或等于 max_connections 的值。
Oracle

请确保 Oracle 用户 (USER) 具有对恢复所需的表的访问权限。

GRANT SELECT ON sys.dba_pending_transactions TO USER;
GRANT SELECT ON sys.pending_trans$ TO USER;
GRANT SELECT ON sys.dba_2pc_pending TO USER;
GRANT EXECUTE ON sys.dbms_xa TO USER;

如果 Oracle 用户没有正确的权限,您可能会遇到这样的错误信息:

WARN  [com.arjuna.ats.jta.logging.loggerI18N] [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery  got XA exception javax.transaction.xa.XAException, XAException.XAER_RMERR
Microsoft SQL 服务器
如需了解更多信息,请参考 Microsoft SQL 服务器文档,包括 http://msdn.microsoft.com/en-us/library/aa342335.aspx
IBM DB2
这里不要求特殊的配置。更多的信息请参考 IBM DB2 文档。
Sybase

Sybase 需要 XA 事务在数据库中启用。如果没有正确的数据库设置,XA 事务将无法正常工作。使用 enable xact coordination 参数可以启用或禁用 Adaptive Server 事务协调服务。当启用这个参数时,Adaptive Server 会确保,在远程 Adaptive Server 数据提交或回滚时,使用原始事务进行更新。

要启用事务协调,请使用:

sp_configure 'enable xact coordination', 1
MariaDB
这里不要求特殊的配置。更多的信息请参考 MariaDB 文档。
已知问题

这些与处理 XA 事务相关的已知问题是针对于 JBoss EAP 7 支持的特定数据库和 JDBC 驱动版本的。如需了解支持数据库的最新信息,请参考JBoss EAP 支持的配置

MySQL
MySQL 并不能完全处理 XA 事务。如果客户端断开与 MySQL 的连接,那么事务的所有信息都会丢失。详情请参考 MySQL 程序错误。请注意 MySQL 5.7 已修复了这个问题。
PostgreSQL 和 Postgres Plus Advanced Server

在二阶段提交(2PC)的提交阶段发生网络故障时,JDBC 驱动会返回 XAER_RMERR XAException 错误代码。这个错误代表了事务管理器的一个不可恢复的严重事件,但在数据库端,这个事务会处于 in-doubt 状态,并在网络连接重新建立后可以容易地进行修复。正确的返回错误代码应该是 XAER_RMFAILXAER_RETRY。不正确的错误代码会导致事务在 JBoss EAP 中处于 Heuristic 状态,并会在数据库中被锁定,需要手工干预才可以解决这个问题。如需了解更多相关信息,请参阅 PostgreSQL bug

如果在使用一阶段提交时出现连接错误,JDBC 驱动会返回 XAER_RMERR,但正确的错误返回代码应该是 XAER_RMFAIL。因此,如果数据库在一阶段提交的提交阶段出现连接问题时,会导致数据不统一的问题,客户端会接收到事务被回滚的信息。

Postgres Plus JDBC 驱动会为 Postgres Plus Server 中存在的所有准备的事务返回 XID,因此无法决定 XID 属于哪个数据库。如果为 JBoss EAP 中的同一个数据库定义了多个数据源,一个 in-doubt 事务恢复尝试会在错误的账户中返回,这将导致恢复失败。

Oracle

当恢复管理器使用由一些用户的凭证信息配置的数据源调用恢复时,JDBC 驱动返回属于数据库实例中所有用户的 XID。JDBC 驱动会产生异常 ORA-24774: cannot switch to specified transaction,这是因为它尝试恢复属于其它用户的 XID。

解决这个问题的一个临时方法是,为用来配置恢复数据源的用户分配 FORCE ANY TRANSACTION 权限。如需了解更多相关信息,请参阅 http://docs.oracle.com/database/121/ADMIN/ds_txnman.htm#ADMIN12259

Microsoft SQL 服务器

在二阶段提交(2PC)的提交阶段发生网络故障时,JDBC 驱动会返回 XAER_RMERR XAException 错误代码。这个错误代表了事务管理器的一个不可恢复的严重事件,但在数据库一端,这个事务会处于 in-doubt 状态,并在网络连接重新建立后可以容易地进行修复。正确的返回错误代码应该是 XAER_RMFAILXAER_RETRY。不正确的错误代码会导致事务在 JBoss EAP 中处于 Heuristic 状态,并会在数据库中被锁定,需要手工干预才可以解决这个问题。如需了解更多相关信息,请参阅 Microsoft SQL Server issue report

如果在使用一阶段提交时出现连接错误,JDBC 驱动会返回 XAER_RMERR,但正确的错误返回代码应该是 XAER_RMFAIL。因此,如果数据库在一阶段提交的提交阶段出现连接问题时,会导致数据不统一的问题,客户端会接收到事务被回滚的信息。

IBM DB2
如果在使用一阶段提交时出现连接错误,JDBC 驱动会返回 XAER_RETRY,但正确的错误返回代码应该是 XAER_RMFAIL。因此,如果数据库在一阶段提交的提交阶段出现连接问题时,会导致数据不统一的问题,客户端会接收到事务被回滚的信息。
Sybase

在二阶段提交(2PC)的提交阶段发生网络故障时,JDBC 驱动会返回 XAER_RMERR XAException 错误代码。这个错误代表了事务管理器的一个不可恢复的严重事件,但在数据库一端,这个事务会处于 in-doubt 状态,并在网络连接重新建立后可以容易地进行修复。正确的返回错误代码应该是 XAER_RMFAILXAER_RETRY。不正确的错误代码会导致事务在 JBoss EAP 中处于 Heuristic 状态,并会在数据库中被锁定,需要手工干预才可以解决这个问题。

如果在使用一阶段提交时出现连接错误,JDBC 驱动会返回 XAER_RMERR,但正确的错误返回代码应该是 XAER_RMFAIL。因此,如果数据库在一阶段提交的提交阶段出现连接问题时,会导致数据不统一的问题,客户端会接收到事务被回滚的信息。

MariaDB
MySQL 并不能完全处理 XA 事务。如果客户断开 MySQL,那么事务的所有信息都会丢失。

13.8. 数据库连接检验

数据库维护、网络问题或其他断电事件都可能导致 JBoss EAP 丢失数据库连接。为了从这些状况中恢复,您可以为数据源启用数据库连接检验。

在配置数据库连接验证时,需要指定验证时间(验证在什么时间发生)、验证机制(验证如何执行),以及异常处理(验证出现异常时如何处理)。

  1. 选择其中一个检验时间。

    validate-on-match

    如果 validate-on-match 选项被设置为 true,每次从连接池中调出数据库连接时,都会使用下一步中指定的验证机制进行验证。

    如果连接没有通过验证,则会在日志中写一个警告信息,池中的下一个连接会被调出。这个过程会一直继续,直到获得了一个有效的连接。如果您不希望检查池中的每一个连接,则可以使用 use-fast-fail 选项。如果无法在池中找到有效连接,则会向请求的应用程序返回一个异常。

    这种设置可以最快获得结果,但对数据库所产生的负载也是最高的。不过,如果性能的小损失不是非常重要,则这种设置会是一个最安全的选择。

    background-validation

    background-validation 选项被设置为 true 时,连接会在使用前,在后台线程中被定期验证。验证的频率由 background-validation-millis 属性指定。background-validation-millis 的默认值是 0,这意味着它被禁用。

    在确定 background-validation-millis 属性的值时,请考虑下列情况:

    • 这个值不应该和 idle-timeout-minutes 设置相同。
    • 这个值越低,池中的连接会被越频繁地验证,无效连接会被更快地从池中删除。
    • 如果这个值比较低,则会消耗更多数据库资源。较高值意味着验证检查发生的频率会降低,并使用较少的数据库资源,但需要更长的时间来发现无效的连接。
    注意

    这些选项是互斥的。如果 validate-on-match 被设置为 true,则 background-validation 必须被设置为 false。如果 background-validation 被设置为 true,则 validate-on-match 必须被设置为 false

  2. 选择其中一个检验机制。

    valid-connection-checker-class-name

    valid-connection-checker-class-name 是首选的验证机制。它指定了一个连接检查程序(connection checker)类用来对使用的特定数据库的连接进行验证。JBoss EAP 提供了以下的连接检查程序:

    • org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLReplicationValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.novendor.JDBC4ValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.novendor.NullValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker
    check-valid-connection-sql

    通过 check-valid-connection-sql 提供用于检验连接的 SQL 语句。

    下面是您可以用来检验 Oracle 连接的 SQL 语句示例。

    select 1 from dual

    下面是您可以用来检验 MySQL 或 PostgreSQL 连接的 SQL 语句示例。

    select 1
  3. 设置 exception sorter 的类名。

    当一个异常被标记为致命(fatal)时,连接会被马上关闭,即使这个连接参与了一个事务。在致命连接异常发生后,使用 exception sorter 选项来正确发现并清理。这需要为您的数据源类型选择恰当的 JBoss EAP exception sorter。

    • org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.informix.InformixExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.novendor.NullExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseExceptionSorter

13.9. 数据源的安全性

数据源安全是指对数据源连接的密码进行加密。这些密码可以以明文的形式保存在配置文件中,但这将会导致潜在的安全风险。

数据源安全的首选解决方案是使用安全域或密码库。下面是两者的例子。

用安全域保护数据源

下面定义了数据源的安全域。

 <security-domain name="DsRealm" cache-type="default">
  <authentication>
    <login-module code="ConfiguredIdentity" flag="required">
      <module-option name="userName" value="sa"/>
      <module-option name="principal" value="sa"/>
      <module-option name="password" value="sa"/>
    </login-module>
  </authentication>
</security-domain>
注意

如果一个安全域将和多个数据源一起使用,则应该在安全域中禁用数据缓存。把 cache-type 参数的值设为 none,或完全删除这个参数。但是,如果需要使用缓存,则每个数据源都需要一个独立的安全域。

然后 DsRealm 被数据源配置所引用。

<datasources>
  <datasource jndi-name="java:jboss/datasources/securityDs"
    pool-name="securityDs">
    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
      <driver>h2</driver>
      <new-connection-sql>select current_user()</new-connection-sql>
      <security>
        <security-domain>DsRealm</security-domain>
      </security>
    </datasource>
</datasources>

关于安全域的更多信息,请参考如何配置身份管理章节。

用密码库保护数据源

<security>
  <user-name>admin</user-name>
  <password>${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}</password>
</security>

关于密码库的更多信息,请参考如何配置服务器安全性章节。

13.10. 数据源统计

您可以查看定义的数据源的核心JDBC 运行时的统计数据。如需了解统计数据的完整列表,请参阅数据源统计一节。

启用数据源统计

在默认情况下,数据源统计是启用的。下面的管理 CLI 命令启用了 ExampleDS 数据源的统计收集。

注意

在受管域里,命令前加入 /profile=PROFILE_NAME

/subsystem=datasources/data-source=ExampleDS/statistics=pool:write-attribute(name=statistics-enabled,value=true)
/subsystem=datasources/data-source=ExampleDS/statistics=jdbc:write-attribute(name=statistics-enabled,value=true)

查看数据源统计

所有的数据源统计信息都可以通过 CLI 命令来获取。这些统计的子集可以从管理控制台的 Runtime 标签页里查看。

下面的管理 CLI 命令获取 ExampleDS 数据源的核心统计。

注意

在受管域里,请在这些命令之前使用 /host=HOST_NAME/server=SERVER_NAME

/subsystem=datasources/data-source=ExampleDS/statistics=pool:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "ActiveCount" => 1,
        "AvailableCount" => 20,
        "AverageBlockingTime" => 0L,
        "AverageCreationTime" => 122L,
        "AverageGetTime" => 128L,
        "AveragePoolTime" => 0L,
        "AverageUsageTime" => 0L,
        "BlockingFailureCount" => 0,
        "CreatedCount" => 1,
        "DestroyedCount" => 0,
        "IdleCount" => 1,
        ...
}

下面的管理 CLI 命令获取了 ExampleDS 数据源的 JDBC 统计信息。

/subsystem=datasources/data-source=ExampleDS/statistics=jdbc:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "PreparedStatementCacheAccessCount" => 0L,
        "PreparedStatementCacheAddCount" => 0L,
        "PreparedStatementCacheCurrentSize" => 0,
        "PreparedStatementCacheDeleteCount" => 0L,
        "PreparedStatementCacheHitCount" => 0L,
        "PreparedStatementCacheMissCount" => 0L,
        "statistics-enabled" => true
    }
}
注意

因为统计都是运行时信息,请确保指定了 include-runtime=true 参数。

13.11. 容量策略

JBoss EAP 支持为 JCA 部署定义包括数据源在内的容量策略。容量策略定义了一个池的物理连接如何创建(增加容量)和销毁(减少容量)。默认的策略是,在增加容量时,为每个请求创建一次连接;当调度空闲超时来减少容量时,销毁所有超时的连接。

要配置容量策略,您需要指定一个容量 incrementer 或 decrementer 类:

命令示例

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=capacity-incrementer-class, value="org.jboss.jca.core.connectionmanager.pool.capacity.SizeIncrementer")

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=capacity-decrementer-class, value="org.jboss.jca.core.connectionmanager.pool.capacity.SizeDecrementer")

您也可以在指定的容量 incrementer 或 decrementer 类上配置属性:

命令示例

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=capacity-incrementer-properties.size, value=2)

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=capacity-decrementer-properties.size, value=2)

MaxPoolSize Incrementer 策略

类名org.jboss.jca.core.connectionmanager.pool.capacity.MaxPoolSizeIncrementer

MaxPoolSize incrementer 策略会为每个请求把池添充到最大值。如果您需要一直保持有最多数量的可用连接时,可以使用这个策略。

Size Incrementer 策略

类名org.jboss.jca.core.connectionmanager.pool.capacity.SizeIncrementer

Size incrementer 策略会为每个请求在池中添充指定数量的连接。如果您预测每个请求的下一个请求也需要连接,所以需要为当前的请求增加一定数量的连接时,可以使用这个策略。

表 13.3. Size 策略属性

名称描述

Size

应该创建的连接数量

注意

这是默认策略,它的 size 值为 1。

Watermark Incrementer 策略

类名org.jboss.jca.core.connectionmanager.pool.capacity.WatermarkIncrementer

Watermark incrementer 策略会为每个请求把池添充到特定连接数量。如果您需要池中总保留特定数量的连接时,可以使用这个策略。

表 13.4. Watermark 策略属性

名称描述

Watermark

连接数量的 watermark 值

MinPoolSize Decrementer 策略

类名: org.jboss.jca.core.connectionmanager.pool.capacity.MinPoolSizeDecrementer

MinPoolSize decrementer 策略会为每个请求把池减到它的最小值。如果您希望在每个空闲超时请求时限制连接数量,可以使用这个策略。这个池会以先进先出(FIFO)的模式操作。

Size Decrementer 策略

类名: org.jboss.jca.core.connectionmanager.pool.capacity.SizeDecrementer

Size decrementer 策略会在每个空闲超时请求时,为池减少特定数量的连接。

表 13.5. Size 策略属性

名称描述

Size

需要被销毁的连接数量

如果您预测随着时间的推移,池的使用情况会下降,因此希望在每个空闲请求时减少特定数量的连接时,可以使用这个策略。

池会以先进先出(FIFO)模式操作。

TimedOut Decrementer 策略

类名: org.jboss.jca.core.connectionmanager.pool.capacity.TimedOutDecrementer

TimedOut decrementer 策略会为每个空闲超时请求删除池中所有的超时连接。池以先进后出(FILO)的形式操作。

注意

这个策略是默认的 decrement 策略。

TimedOut/FIFO Decrementer 策略

类名: org.jboss.jca.core.connectionmanager.pool.capacity.TimedOutFIFODecrementer

TimedOutFIFO decrementer 策略会为每个空闲超时请求删除池中所有的超时连接。池以先进先出(FIFO)的形式操作。

Watermark Decrementer 策略

类名: org.jboss.jca.core.connectionmanager.pool.capacity.WatermarkDecrementer

Watermark incrementer 策略会为每个空闲超时请求把池减少到特定连接数量。如果您需要池中总保留特定数量的连接时,可以使用这个策略。池会以先进先出(FIFO)的形式操作。

表 13.6. Watermark 策略属性

名称描述

Watermark

连接数量的 watermark 值

13.12. 登记跟踪

登记跟踪(enlistment trace)会被记录,它会被用来帮助在登记 XAResource 实例时定位错误的发生。这个功能会对性能有一定影响,您可能会在特定情况下需要禁用它。

您可以使用管理 CLI 禁用记录登记跟踪的功能。您需要把 enlistment-trace 属性的值设置为 false

禁用非 XA 数据源的 enlistment 跟踪

data-source --name=DATASOURCE_NAME --enlistment-trace=false

禁用 XA 数据源的 enlistment 跟踪

xa-data-source --name=XA_DATASOURCE_NAME --enlistment-trace=false
警告

禁用登记跟踪会使在事务登记的过程中查找错误变得比较困难。

13.13. 数据源配置示例

13.13.1. MySQL 数据源示例

这是一个带有连接信息、基本安全性和检验选项的 MySQL 数据源配置示例。

MySQL 数据源配置示例
<datasources>
  <datasource jndi-name="java:jboss/MySqlDS" pool-name="MySqlDS">
    <connection-url>jdbc:mysql://localhost:3306/jbossdb</connection-url>
    <driver>mysql</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="mysql" module="com.mysql">
      <driver-class>com.mysql.jdbc.Driver</driver-class>
      <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
MySQL JDBC Driver module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql">
  <resources>
    <resource-root path="mysql-connector-java-5.1.36-bin.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 MySQL JDBC 驱动添加为核心模块。

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

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 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)
  3. 添加 MySQL 数据源。

    data-source add --name=MySqlDS --jndi-name=java:jboss/MySqlDS --driver-name=mysql --connection-url=jdbc:mysql://localhost:3306/jbossdb --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter

13.13.2. MySQL XA 数据源示例

这是一个带有 XA 数据源属性、基本安全性和检验选项的 MySQL XA 数据源配置示例。

MySQL XA 数据源配置示例
<datasources>
  <xa-datasource jndi-name="java:jboss/MySqlXADS" pool-name="MySqlXADS">
    <xa-datasource-property name="ServerName">
      localhost
    </xa-datasource-property>
    <xa-datasource-property name="DatabaseName">
      mysqldb
    </xa-datasource-property>
    <driver>mysql</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="mysql" module="com.mysql">
      <driver-class>com.mysql.jdbc.Driver</driver-class>
      <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
MySQL JDBC Driver module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql">
  <resources>
    <resource-root path="mysql-connector-java-5.1.36-bin.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 MySQL JDBC 驱动添加为核心模块。

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

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 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)
  3. 添加 MySQL XA 数据源。

    xa-data-source add --name=MySqlXADS --jndi-name=java:jboss/MySqlXADS --driver-name=mysql --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter --xa-datasource-properties={"ServerName"=>"localhost","DatabaseName"=>"mysqldb"}

13.13.3. PostgreSQL 数据源示例

这是一个带有连接信息、基本安全性和检验选项的 PostgreSQL 数据源配置示例。

PostgreSQL 数据源配置示例
<datasources>
  <datasource jndi-name="java:jboss/PostgresDS" pool-name="PostgresDS">
    <connection-url>jdbc:postgresql://localhost:5432/postgresdb</connection-url>
    <driver>postgresql</driver>
    <security>
        <user-name>admin</user-name>
        <password>admin</password>
    </security>
    <validation>
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
        <validate-on-match>true</validate-on-match>
        <background-validation>false</background-validation>
        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="postgresql" module="com.postgresql">
        <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
PostgreSQL JDBC 驱动的 module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.postgresql">
  <resources>
    <resource-root path="postgresql-9.3-1102.jdbc4.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 PostgreSQL JDBC 驱动添加为核心模块。

    module add --name=com.postgresql --resources=/path/to/postgresql-9.3-1102.jdbc4.jar --dependencies=javax.api,javax.transaction.api
    重要

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 PostgreSQL JDBC 驱动。

    /subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=com.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
  3. 添加 PostgreSQL 数据源。

    data-source add --name=PostgresDS --jndi-name=java:jboss/PostgresDS --driver-name=postgresql --connection-url=jdbc:postgresql://localhost:5432/postgresdb --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter

13.13.4. PostgreSQL XA 数据源示例

这是一个带有 XA 数据源属性、基本安全性和检验选项的 PostgreSQL XA 数据源配置示例。

PostgreSQL XA 数据源配置示例
<datasources>
  <xa-datasource jndi-name="java:jboss/PostgresXADS" pool-name="PostgresXADS">
    <xa-datasource-property name="ServerName">
      localhost
    </xa-datasource-property>
    <xa-datasource-property name="PortNumber">
      5432
    </xa-datasource-property>
    <xa-datasource-property name="DatabaseName">
      postgresdb
    </xa-datasource-property>
    <driver>postgresql</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="postgresql" module="com.postgresql">
      <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
PostgreSQL JDBC 驱动的 module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.postgresql">
  <resources>
    <resource-root path="postgresql-9.3-1102.jdbc4.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 PostgreSQL JDBC 驱动添加为核心模块。

    module add --name=com.postgresql --resources=/path/to/postgresql-9.3-1102.jdbc4.jar --dependencies=javax.api,javax.transaction.api
    重要

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 PostgreSQL JDBC 驱动。

    /subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=com.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
  3. 添加 PostgreSQL XA 数据源。

    xa-data-source add --name=PostgresXADS --jndi-name=java:jboss/PostgresXADS --driver-name=postgresql --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --xa-datasource-properties={"ServerName"=>"localhost","PortNumber"=>"5432","DatabaseName"=>"postgresdb"}

13.13.5. Oracle 数据源示例

这是一个带有连接信息、基本安全性和检验选项的 Oracle 数据源配置示例。

Oracle 数据源配置示例
<datasources>
  <datasource jndi-name="java:jboss/OracleDS" pool-name="OracleDS">
    <connection-url>jdbc:oracle:thin:@localhost:1521:XE</connection-url>
    <driver>oracle</driver>
    <security>
        <user-name>admin</user-name>
        <password>admin</password>
    </security>
    <validation>
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
        <validate-on-match>true</validate-on-match>
        <background-validation>false</background-validation>
        <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="oracle" module="com.oracle">
        <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Oracle JDBC 驱动的 module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.oracle">
    <resources>
        <resource-root path="ojdbc7.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 Oracle JDBC 驱动添加为核心模块。

    module add --name=com.oracle --resources=/path/to/misc/jdbc_drivers/oracle/ojdbc7.jar --dependencies=javax.api,javax.transaction.api
    重要

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 Oracle JDBC 驱动。

    /subsystem=datasources/jdbc-driver=oracle:add(driver-name=oracle,driver-module-name=com.oracle,driver-xa-datasource-class-name=oracle.jdbc.xa.client.OracleXADataSource)
  3. 添加 Oracle 数据源。

    data-source add --name=OracleDS --jndi-name=java:jboss/OracleDS --driver-name=oracle --connection-url=jdbc:oracle:thin:@localhost:1521:XE --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter --stale-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker

13.13.6. Oracle XA 数据源示例

重要

下面的设置必须应用于访问 Oracle XA 数据源的用户以让 XA 恢复正常操作。user 的值是连接 JBoss EAP 至 Oracle 的用户。

  • GRANT SELECT ON sys.dba_pending_transactions TO user;
  • GRANT SELECT ON sys.pending_trans$ TO user;
  • GRANT SELECT ON sys.dba_2pc_pending TO user;
  • GRANT EXECUTE ON sys.dbms_xa TO user;

这是一个带有 XA 数据源属性、基本安全性和检验选项的 Oracle XA 数据源配置示例。

Oracle XA 数据源配置示例
<datasources>
  <xa-datasource jndi-name="java:jboss/OracleXADS" pool-name="OracleXADS">
    <xa-datasource-property name="URL">
      jdbc:oracle:thin:@oracleHostName:1521:orcl
    </xa-datasource-property>
    <driver>oracle</driver>
    <xa-pool>
      <is-same-rm-override>false</is-same-rm-override>
    </xa-pool>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="oracle" module="com.oracle">
      <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Oracle JDBC 驱动的 module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.oracle">
    <resources>
        <resource-root path="ojdbc7.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 Oracle JDBC 驱动添加为核心模块。

    module add --name=com.oracle --resources=/path/to/misc/jdbc_drivers/oracle/ojdbc7.jar --dependencies=javax.api,javax.transaction.api
    重要

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 Oracle JDBC 驱动。

    /subsystem=datasources/jdbc-driver=oracle:add(driver-name=oracle,driver-module-name=com.oracle,driver-xa-datasource-class-name=oracle.jdbc.xa.client.OracleXADataSource)
  3. 添加 Oracle XA 数据源。

    xa-data-source add --name=OracleXADS --jndi-name=java:jboss/OracleXADS --driver-name=oracle --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter --stale-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker --same-rm-override=false --xa-datasource-properties={"URL"=>"jdbc:oracle:thin:@oracleHostName:1521:orcl"}

13.13.7. Microsoft SQL Server 数据源示例

这是一个带有连接信息、基本安全性和检验选项的 Microsoft SQL 服务器数据源配置示例。

Microsoft SQL Server 数据源配置示例
<datasources>
  <datasource jndi-name="java:jboss/MSSQLDS" pool-name="MSSQLDS">
    <connection-url>jdbc:sqlserver://localhost:1433;DatabaseName=MyDatabase</connection-url>
    <driver>sqlserver</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="sqlserver" module="com.microsoft">
      <xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Microsoft SQL Server JDBC 驱动的 module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.microsoft">
  <resources>
    <resource-root path="sqljdbc41.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 Microsoft SQL Server JDBC 驱动添加为核心模块。

    module add --name=com.microsoft --resources=/path/to/sqljdbc41.jar --dependencies=javax.api,javax.transaction.api
    重要

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 Microsoft SQL Server JDBC 驱动。

    /subsystem=datasources/jdbc-driver=sqlserver:add(driver-name=sqlserver,driver-module-name=com.microsoft,driver-xa-datasource-class-name=com.microsoft.sqlserver.jdbc.SQLServerXADataSource)
  3. 添加 Microsoft SQL Server 数据源

    data-source add --name=MSSQLDS --jndi-name=java:jboss/MSSQLDS --driver-name=sqlserver --connection-url=jdbc:sqlserver://localhost:1433;DatabaseName=MyDatabase --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter

13.13.8. Microsoft SQL Server XA 数据源示例

这是一个带有 XA 数据源属性、基本安全性和检验选项的 Microsoft SQL Server XA 数据源配置示例。

Microsoft SQL Server XA 数据源配置示例
<datasources>
  <xa-datasource jndi-name="java:jboss/MSSQLXADS" pool-name="MSSQLXADS">
    <xa-datasource-property name="ServerName">
      localhost
    </xa-datasource-property>
    <xa-datasource-property name="DatabaseName">
      mssqldb
    </xa-datasource-property>
    <xa-datasource-property name="SelectMethod">
      cursor
    </xa-datasource-property>
    <driver>sqlserver</driver>
    <xa-pool>
      <is-same-rm-override>false</is-same-rm-override>
    </xa-pool>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="sqlserver" module="com.microsoft">
      <xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Microsoft SQL Server JDBC 驱动的 module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.microsoft">
  <resources>
    <resource-root path="sqljdbc41.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 Microsoft SQL Server JDBC 驱动添加为核心模块。

    module add --name=com.microsoft --resources=/path/to/sqljdbc41.jar --dependencies=javax.api,javax.transaction.api
    重要

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 Microsoft SQL Server JDBC 驱动。

    /subsystem=datasources/jdbc-driver=sqlserver:add(driver-name=sqlserver,driver-module-name=com.microsoft,driver-xa-datasource-class-name=com.microsoft.sqlserver.jdbc.SQLServerXADataSource)
  3. 添加 Microsoft SQL Server XA 数据源

    xa-data-source add --name=MSSQLXADS --jndi-name=java:jboss/MSSQLXADS --driver-name=sqlserver --user-name=admin --password=admin --validate-on-match=true --background-validation=false --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter --same-rm-override=false --xa-datasource-properties={"ServerName"=>"localhost","DatabaseName"=>"mssqldb","SelectMethod"=>"cursor"}

13.13.9. IBM DB2 数据源示例

这是一个带有连接信息、基本安全性和检验选项的 IBM DB2 数据源配置示例。

IBM DB2 数据源配置示例
<datasources>
  <datasource jndi-name="java:jboss/DB2DS" pool-name="DB2DS">
    <connection-url>jdbc:db2://localhost:50000/ibmdb2db</connection-url>
    <driver>ibmdb2</driver>
    <pool>
      <min-pool-size>0</min-pool-size>
      <max-pool-size>50</max-pool-size>
    </pool>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker"/>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="ibmdb2" module="com.ibm">
        <xa-datasource-class>com.ibm.db2.jcc.DB2XADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
IBM DB2 JDBC 驱动的 module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.ibm">
  <resources>
    <resource-root path="db2jcc4.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 IBM DB2 JDBC 驱动添加为核心模块。

    module add --name=com.ibm --resources=/path/to/db2jcc4.jar --dependencies=javax.api,javax.transaction.api
    重要

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 IBM DB2 JDBC 驱动。

    /subsystem=datasources/jdbc-driver=ibmdb2:add(driver-name=ibmdb2,driver-module-name=com.ibm,driver-xa-datasource-class-name=com.ibm.db2.jcc.DB2XADataSource)
  3. 添加 IBM DB2 数据源。

    data-source add --name=DB2DS --jndi-name=java:jboss/DB2DS --driver-name=ibmdb2 --connection-url=jdbc:db2://localhost:50000/ibmdb2db --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter --stale-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker --min-pool-size=0 --max-pool-size=50

13.13.10. IBM DB2 XA 数据源示例

这是一个带有 XA 数据源属性、基本安全性和检验选项的 IBM DB2 XA 数据源配置示例。

IBM DB2 XA 数据源配置示例
<datasources>
  <xa-datasource jndi-name="java:jboss/DB2XADS" pool-name="DB2XADS">
    <xa-datasource-property name="ServerName">
      localhost
    </xa-datasource-property>
    <xa-datasource-property name="DatabaseName">
      ibmdb2db
    </xa-datasource-property>
    <xa-datasource-property name="PortNumber">
      50000
    </xa-datasource-property>
    <xa-datasource-property name="DriverType">
      4
    </xa-datasource-property>
    <driver>ibmdb2</driver>
    <xa-pool>
      <is-same-rm-override>false</is-same-rm-override>
    </xa-pool>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <recovery>
      <recover-plugin class-name="org.jboss.jca.core.recovery.ConfigurableRecoveryPlugin">
        <config-property name="EnableIsValid">
          false
        </config-property>
        <config-property name="IsValidOverride">
          false
        </config-property>
        <config-property name="EnableClose">
          false
        </config-property>
      </recover-plugin>
    </recovery>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker"/>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="ibmdb2" module="com.ibm">
        <xa-datasource-class>com.ibm.db2.jcc.DB2XADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
IBM DB2 JDBC 驱动的 module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.ibm">
  <resources>
    <resource-root path="db2jcc4.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 IBM DB2 JDBC 驱动添加为核心模块。

    module add --name=com.ibm --resources=/path/to/db2jcc4.jar --dependencies=javax.api,javax.transaction.api
    重要

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 IBM DB2 JDBC 驱动。

    /subsystem=datasources/jdbc-driver=ibmdb2:add(driver-name=ibmdb2,driver-module-name=com.ibm,driver-xa-datasource-class-name=com.ibm.db2.jcc.DB2XADataSource)
  3. 添加 IBM DB2 XA 数据源。

    xa-data-source add --name=DB2XADS --jndi-name=java:jboss/DB2XADS --driver-name=ibmdb2 --user-name=admin --password=admin --validate-on-match=true --background-validation=false --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter --stale-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker --same-rm-override=false --recovery-plugin-class-name=org.jboss.jca.core.recovery.ConfigurableRecoveryPlugin --recovery-plugin-properties={"EnableIsValid"=>"false","IsValidOverride"=>"false","EnableClose"=>"false"} --xa-datasource-properties={"ServerName"=>"localhost","DatabaseName"=>"ibmdb2db","PortNumber"=>"50000","DriverType"=>"4"}

13.13.11. Sybase 数据源示例

这是一个带有连接信息、基本安全性和检验选项的 Sybase 数据源配置示例。

Sybase 数据源配置示例
<datasources>
  <datasource jndi-name="java:jboss/SybaseDB" pool-name="SybaseDB">
    <connection-url>jdbc:sybase:Tds:localhost:5000/DATABASE?JCONNECT_VERSION=6</connection-url>
    <driver>sybase</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="sybase" module="com.sybase">
      <xa-datasource-class>com.sybase.jdbc4.jdbc.SybXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Sybase JDBC 驱动的 module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.sybase">
    <resources>
      <resource-root path="jconn4.jar"/>
    </resources>
    <dependencies>
      <module name="javax.api"/>
      <module name="javax.transaction.api"/>
    </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 Sybase JDBC 驱动添加为核心模块。

    module add --name=com.sybase --resources=/path/to/jconn4.jar --dependencies=javax.api,javax.transaction.api
    重要

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 Sybase JDBC 驱动。

    /subsystem=datasources/jdbc-driver=sybase:add(driver-name=sybase,driver-module-name=com.sybase,driver-xa-datasource-class-name=com.sybase.jdbc4.jdbc.SybXADataSource)
  3. 添加 Sybase 数据源。

    data-source add --name=SybaseDB --jndi-name=java:jboss/SybaseDB --driver-name=sybase --connection-url=jdbc:sybase:Tds:localhost:5000/DATABASE?JCONNECT_VERSION=6 --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseExceptionSorter

13.13.12. Sybase XA 数据源示例

这是一个带有 XA 数据源属性、基本安全性和检验选项的 Sybase XA 数据源配置示例。

Sybase XA 数据源配置示例
<datasources>
  <xa-datasource jndi-name="java:jboss/SybaseXADS" pool-name="SybaseXADS">
    <xa-datasource-property name="ServerName">
      localhost
    </xa-datasource-property>
    <xa-datasource-property name="DatabaseName">
      mydatabase
    </xa-datasource-property>
    <xa-datasource-property name="PortNumber">
      4100
    </xa-datasource-property>
    <xa-datasource-property name="NetworkProtocol">
      Tds
    </xa-datasource-property>
    <driver>sybase</driver>
    <xa-pool>
      <is-same-rm-override>false</is-same-rm-override>
    </xa-pool>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="sybase" module="com.sybase">
      <xa-datasource-class>com.sybase.jdbc4.jdbc.SybXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Sybase JDBC 驱动的 module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.sybase">
    <resources>
      <resource-root path="jconn4.jar"/>
    </resources>
    <dependencies>
      <module name="javax.api"/>
      <module name="javax.transaction.api"/>
    </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 Sybase JDBC 驱动添加为核心模块。

    module add --name=com.sybase --resources=/path/to/jconn4.jar --dependencies=javax.api,javax.transaction.api
    重要

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 Sybase JDBC 驱动。

    /subsystem=datasources/jdbc-driver=sybase:add(driver-name=sybase,driver-module-name=com.sybase,driver-xa-datasource-class-name=com.sybase.jdbc4.jdbc.SybXADataSource)
  3. 添加 Sybase XA 数据源。

    xa-data-source add --name=SybaseXADS --jndi-name=java:jboss/SybaseXADS --driver-name=sybase --user-name=admin --password=admin --validate-on-match=true --background-validation=false --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseExceptionSorter --same-rm-override=false --xa-datasource-properties={"ServerName"=>"localhost","DatabaseName"=>"mydatabase","PortNumber"=>"4100","NetworkProtocol"=>"Tds"}

13.13.13. MariaDB 数据源示例

这是一个带有连接信息、基本安全性和检验选项的 MariaDB 数据源配置示例。

MariaDB 数据源配置示例
<datasources>
  <datasource jndi-name="java:jboss/MariaDBDS" pool-name="MariaDBDS">
    <connection-url>jdbc:mariadb://localhost:3306/jbossdb</connection-url>
    <driver>mariadb</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="mariadb" module="org.mariadb">
      <driver-class>org.mariadb.jdbc.Driver</driver-class>
      <xa-datasource-class>org.mariadb.jdbc.MySQLDataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
MariaDB JDBC 驱动的 module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="org.mariadb">
  <resources>
    <resource-root path="mariadb-java-client-1.2.3.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 MariaDB JDBC 驱动添加为核心模块。

    module add --name=org.mariadb --resources=/path/to/mariadb-java-client-1.2.3.jar --dependencies=javax.api,javax.transaction.api
    重要

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 MariaDB JDBC 驱动。

    /subsystem=datasources/jdbc-driver=mariadb:add(driver-name=mariadb,driver-module-name=org.mariadb,driver-xa-datasource-class-name=org.mariadb.jdbc.MySQLDataSource, driver-class-name=org.mariadb.jdbc.Driver)
  3. 添加 MariaDB 数据源。

    data-source add --name=MariaDBDS --jndi-name=java:jboss/MariaDBDS --driver-name=mariadb --connection-url=jdbc:mariadb://localhost:3306/jbossdb --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter

13.13.14. MariaDB XA 数据源示例

这是一个带有 XA 数据源属性、基本安全性和检验选项的 MariaDB XA 数据源配置示例。

MariaDB XA 数据源配置示例
<datasources>
  <xa-datasource jndi-name="java:jboss/MariaDBXADS" pool-name="MariaDBXADS">
    <xa-datasource-property name="ServerName">
      localhost
    </xa-datasource-property>
    <xa-datasource-property name="DatabaseName">
      mariadbdb
    </xa-datasource-property>
    <driver>mariadb</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="mariadb" module="org.mariadb">
      <driver-class>org.mariadb.jdbc.Driver</driver-class>
      <xa-datasource-class>org.mariadb.jdbc.MySQLDataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
MariaDB JDBC 驱动的 module.xml 文件示例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="org.mariadb">
  <resources>
    <resource-root path="mariadb-java-client-1.2.3.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI 命令示例

这个配置示例可以用下列管理 CLI 命令来实现。

  1. 将 MariaDB JDBC 驱动添加为核心模块。

    module add --name=org.mariadb --resources=/path/to/mariadb-java-client-1.2.3.jar --dependencies=javax.api,javax.transaction.api
    重要

    Using the module management CLI command to add and remove modules is provided as technology preview only. This command is not appropriate for use in a managed domain or when connecting to the management CLI remotely. Modules should be added and removed manually in a production environment.

  2. 注册 MariaDB JDBC 驱动。

    /subsystem=datasources/jdbc-driver=mariadb:add(driver-name=mariadb,driver-module-name=org.mariadb,driver-xa-datasource-class-name=org.mariadb.jdbc.MySQLDataSource, driver-class-name=org.mariadb.jdbc.Driver)
  3. 添加 MariaDB XA 数据源。

    xa-data-source add --name=MariaDBXADS --jndi-name=java:jboss/MariaDBXADS --driver-name=mariadb --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter --xa-datasource-properties={"ServerName"=>"localhost","DatabaseName"=>"mariadbdb"}