Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

配置指南

Red Hat JBoss Enterprise Application Platform 7.0

用于 Red Hat JBoss Enterprise Application Platform 7.0

Red Hat Customer Content Services

摘要

本文档为管理员提供了配置 Red Hat JBoss Enterprise Application Platform 7.0 的实际指南。

第 1 章 概述

本指南的目的是涵盖设置和维护 JBoss EAP 以及在其上运行应用程序和其他服务所需的许多配置任务。在使用本指南配置 JBoss EAP 之前,它假定已下载并安装最新版本的 JBoss EAP。有关安装说明,请参阅 JBoss EAP 安装指南

重要

由于 JBoss EAP 的安装位置在主机机器之间有所不同,本指南将安装位置称为 EAP_HOME。在执行管理任务时,应使用 JBoss EAP 安装的实际位置,而不是 EAP_HOME

第 2 章 启动和停止 JBoss EAP

2.1. 启动 JBoss EAP

JBoss EAP 以两种操作模式之一运行:作为单机服务器或受管域,并在多种平台上受支持:Red Hat Enterprise Linux、Windows Server、Oracle Solaris 和 Hewlett-Packard HP-UX。

启动 JBoss EAP 的具体命令取决于底层平台和所需的工作模式。

启动 JBoss EAP 作为单机服务器

$ EAP_HOME/bin/standalone.sh
注意

对于 Windows Server,请使用 EAP_HOME\bin\standalone.bat 脚本。

此启动脚本使用 EAP_HOME/bin/standalone.conf 文件(或用于 Windows 服务器的 standalone.conf.bat )来设置一些默认首选项,如 JVM 选项。您可以自定义此文件中的设置。

JBoss EAP 默认使用 standalone.xml 配置文件,但可使用其他配置文件启动。有关可用独立配置文件以及如何使用它们的详情,请查看单机服务器配置文件部分。

有关所有可用启动脚本参数及其目的的完整列表,请使用 --help 参数或查看 服务器运行时参数 部分。

在受管域中启动 JBoss EAP

域控制器必须在域中任何服务器组的服务器之前启动。使用此脚本首先启动域控制器,然后为每个关联的主机控制器启动。

$ EAP_HOME/bin/domain.sh
注意

对于 Windows Server,请使用 EAP_HOME\bin\domain.bat 脚本。

此启动脚本使用 EAP_HOME/bin/domain.conf 文件(或用于 Windows 服务器的 domain.conf.bat )来设置一些默认首选项,如 JVM 选项。您可以自定义此文件中的设置。

JBoss EAP 默认使用 host.xml 主机配置文件,但可使用其他文件启动。有关可用的受管域配置文件和使用方法的详细信息,请参阅受管域配置文件部分。

在设置受管域时,需要将其他参数传递到启动脚本。有关所有可用启动脚本参数及其目的的完整列表,请使用 --help 参数或查看 服务器运行时参数 部分。

2.2. 停止 JBoss EAP

停止 JBoss EAP 的方式取决于它的启动方式。

停止 JBoss EAP 的交互实例

在启动 JBoss EAP 的终端中按 Ctrl+C

停止 JBoss EAP 的后台实例

使用管理 CLI 连接正在运行的实例并关闭服务器。

  1. 启动管理 CLI。

    $ EAP_HOME/bin/jboss-cli.sh --connect
  2. 发出 shutdown 命令。

    shutdown
注意

在受管域中运行时,您必须通过将 --host 参数与 shutdown 命令搭配使用来指定要关闭的主机名。

2.3. 在 Admin-Only 模式下运行 JBoss EAP

JBoss EAP 能够以 admin-only 模式启动。这可让 JBoss EAP 运行并接受管理请求,但不启动其他运行时服务或接受最终用户请求。单机服务器和受管域中都提供了 admin-only 模式。在受管域中,如果域控制器以 admin-only 模式启动,它将不接受来自从属主机控制器的传入连接。

若要以 admin-only 模式启动 JBoss EAP 实例,可在启动 JBoss EAP 实例时使用 --admin-only 运行时开关。

注意

显示的管理 CLI 命令假定您正在运行 JBoss EAP 单机服务器。有关使用 JBoss EAP 受管域的管理 CLI 的详情,请参阅 JBoss EAP 管理 CLI 指南

以 Admin-Only Mode 启动 JBoss EAP

$ EAP_HOME/bin/standalone.sh --admin-only

检查 JBoss EAP 是否在 Admin-Only Mode 中运行

要确定 JBoss EAP 实例是否在 admin-only 模式下运行:

注意

显示的管理 CLI 命令假定您正在运行 JBoss EAP 单机服务器。有关使用 JBoss EAP 受管域的管理 CLI 的详情,请参阅 JBoss EAP 管理 CLI 指南

:read-attribute(name=running-mode)

如果 JBoss EAP 实例以 admin-only 模式运行,则结果将是:

{
  "outcome" => "success",
  "result" => "ADMIN_ONLY"
}

否则,结果将是:

{
  "outcome" => "success",
  "result" => "NORMAL"
}

通过管理 CLI 以不同模式重新启动

除了停止和启动具有不同运行时交换机的 JBoss EAP 实例外,也可以使用管理 CLI 重新加载服务器并以其他模式启动它。重新载入 JBoss EAP 实例以 admin-only 模式启动:

注意

显示的管理 CLI 命令假定您正在运行 JBoss EAP 单机服务器。有关使用 JBoss EAP 受管域的管理 CLI 的详情,请参阅 JBoss EAP 管理 CLI 指南

reload --admin-only=true

重新载入 JBoss EAP 实例以正常模式启动:

reload --admin-only=false
注意

与当前运行的模式分开,也可以使用以下命令检查初始运行模式: /core-service=server-environment:read-attribute (name=initial-running-mode)。此命令与 :read-attribute (name=running-mode) 不同,方法是显示启动 JBoss EAP 的运行模式,而不是其当前正在运行的模式。

2.4. 挂起和关闭 JBoss EAP Gracefully

JBoss EAP 可以暂停或正常关闭。这允许活动请求正常完成,而无需接受任何新请求。超时值指定挂起或关闭操作将等待活跃请求完成的时间。在服务器被暂停时,仍然处理管理请求。

安全关闭在服务器范围内协调,主要侧重于请求进入服务器的入口点。以下子系统支持安全关闭:

Undertow
undertow 子系统将等待所有请求完成。
mod_cluster
modcluster 子系统将通知负载均衡器正在 PRE_SUSPEND 阶段挂起。
EJB
ejb3 子系统将等待所有远程 EJB 请求和 MDB 消息发送完成。在 PRE_SUSPEND 阶段停止发送到 MDB 的交付。EJB 定时器将被暂停,在服务器恢复时将激活 missed 计时器。
EE Concurrency

服务器将等待所有活动作业完成。所有排队的作业都将被跳过。目前,由于 EE Concurrency 没有持久性,因此跳过的已排队的作业将会丢失。

虽然服务器处于暂停状态,但调度的任务将继续在调度的时间执行,但会抛出 java.lang.IllegalStateException。服务器恢复后,调度的任务将继续正常执行,在大多数情况下,不需要重新调度任务。

batch
服务器将在超时时间内停止所有正在运行的作业,并延迟所有调度的作业。
注意

当前安全关闭不会拒绝入站远程分布式事务或新的入站 JMS 消息。目前,由动态活动调度的 EE 批处理作业和 EE 并发任务目前被允许进行。但是,提交的 EE 并发任务会在执行时传递超时窗口当前错误。

请求由 request-controller 子系统跟踪。如果没有此子系统,暂停和恢复能力有限,服务器在暂停或关机之前不会等待请求完成。但是,如果您不需要此功能,则可以删除 request-controller 子系统来显著提高性能。

2.4.1. 挂起服务器

JBoss EAP 7 引入了 挂起 模式,可安全暂停服务器操作。这允许所有活动请求正常完成,但不接受任何新请求。暂停服务器后,可以将其关闭,返回到正在运行的状态,或者保持暂停状态来执行维护。

注意

管理接口不受暂停服务器的影响。

可以使用管理控制台或管理 CLI 暂停服务器并恢复。

检查 Server Suspend State

可以使用以下管理 CLI 命令查看服务器挂起状态:生成的值为 RUNNINGPRE_SUSPENDSUSPENDINGSUSPENDED 之一。

  • 检查单机服务器的挂起状态。

    :read-attribute(name=suspend-state)
  • 检查受管域中服务器的暂停状态。

    /host=master/server=server-one:read-attribute(name=suspend-state)
suspend

使用以下管理 CLI 命令暂停服务器,指定超时值(以秒为单位),让服务器等待活动请求完成。默认值为 0, 它将立即暂停。值 -1 将导致服务器无限期等待所有活跃请求完成。

每个示例最多等待 60 秒,以便请求在挂起前完成。

  • 暂停单机服务器。

    :suspend(timeout=60)
  • 暂停受管域中的所有服务器。

    :suspend-servers(timeout=60)
  • 在受管域中暂停单个服务器。

    /host=master/server-config=server-one:suspend(timeout=60)
  • 暂停服务器组中的所有服务器。

    /server-group=main-server-group:suspend-servers(timeout=60)
resume

可以使用适当级别的 restore 命令(服务器、服务器组、整个域),服务器可以返回到正常的运行状态,以接受新请求。例如:

:resume

2.4.2. 正常关闭服务器

如果在停止服务器时指定了适当的超时值,服务器将被正常关闭。发出该命令后,服务器将被暂停,并等待所有请求的指定超时,然后再关机。

使用以下管理 CLI 命令正常关闭服务器。指定服务器等待活跃请求完成的超时值(以秒为单位)。默认值为 0, 它将立即关闭服务器。值 -1 将导致服务器无限期等待所有活跃请求完成,然后再关机。

每个示例都等待 60 秒,以便请求在关闭前完成。

  • 正常关闭单机服务器。

    :shutdown(timeout=60)
  • 正常停止受管域中的所有服务器。

    :stop-servers(timeout=60)
  • 在受管域中正常停止单个服务器。

    /host=master/server-config=server-one:stop(timeout=60)
  • 正常停止服务器组中的所有服务器。

    /server-group=main-server-group:stop-servers(timeout=60)

2.5. 启动和停止 JBoss EAP (RPM 安装)

与 ZIP 或安装程序安装相比,启动和停止 JBoss EAP 对于 RPM 安装是不同的。

2.5.1. 启动 JBoss EAP (RPM 安装)

用于启动 JBoss EAP 的 RPM 安装的命令取决于您要启动哪个操作模式(单机服务器或受管域),以及您正在运行的 Red Hat Enterprise Linux 版本。

启动 JBoss EAP 作为单机服务器(RPM 安装)
  • Red Hat Enterprise Linux 6:

    $ service eap7-standalone start
  • Red Hat Enterprise Linux 7:

    $ systemctl start eap7-standalone.service

默认情况下,这将使用 standalone.xml 配置文件启动 JBoss EAP。您可以通过在 RPM 服务配置文件 中设置属性,使用不同的 单机服务器配置文件 启动 JBoss EAP。如需更多信息,请参阅下面的 配置 RPM 服务属性 部分。

在受管域中启动 JBoss EAP (RPM 安装)
  • Red Hat Enterprise Linux 6:

    $ service eap7-domain start
  • Red Hat Enterprise Linux 7:

    $ systemctl start eap7-domain.service

默认情况下,这将使用 host.xml 配置文件启动 JBoss EAP。您可以通过在 RPM 服务配置文件 中设置属性,通过使用不同的 受管域配置文件 启动 JBoss EAP。如需更多信息,请参阅下面的 配置 RPM 服务属性 部分。

配置 RPM 服务属性

本节介绍如何为 JBoss EAP 安装配置 RPM 服务属性和其他启动选项。请注意,建议在进行修改前备份您的配置文件。

有关 RPM 安装的所有可用启动选项的列表,请参阅 RPM 服务配置属性 部分。

重要

对于 Red Hat Enterprise Linux 7,RPM 服务配置文件使用 systemd 加载,因此不会扩展变量表达式。

  • 指定服务器配置文件。

    在启动独立服务器时,默认使用 standalone.xml 文件。在受管域中运行时,默认使用 host.xml 文件。您可以通过在适当的 RPM 配置文件中设置 WILDFLY_SERVER_CONFIG 属性来启动 JBoss EAP,例如 eap7-standalone.conf

    WILDFLY_SERVER_CONFIG=standalone-full.xml
  • 绑定到特定 IP 地址。

    默认情况下,JBoss EAP RPM 安装绑定到 0.0.0.0。您可以通过在适当的 RPM 配置文件中设置 WILDFLY_BIND 属性来将 JBoss EAP 绑定到特定的 IP 地址,如 eap7-standalone.conf

    WILDFLY_BIND=192.168.0.1
    注意

    如果要将管理接口绑定到特定的 IP 地址,可以在 JBoss EAP 启动配置文件中进行配置,如下例中所示。

  • 设置 JVM 选项或 Java 属性。

    您可以通过编辑启动配置文件来指定 JVM 选项或 Java 属性来传递到 JBoss EAP 启动脚本。此文件是单机服务器的 EAP_HOME/bin/standalone.conf,或受管域的 EAP_HOME/bin/domain.conf。以下示例配置堆大小,并将 JBoss EAP 管理接口绑定到 IP 地址。

    JAVA_OPTS="$JAVA_OPTS -Xms2048m -Xmx2048m"
    JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address.management=192.168.0.1"
    注意

    如果需要,必须使用 WILDFLY_BIND 属性配置 JBoss EAP 绑定地址,而不是在此处使用 jboss.bind.address 标准属性。

注意

如果属性在两个 RPM 服务配置文件中具有相同的名称(例如,/etc/sysconfig/eap7-standalone)和 JBoss EAP 启动配置文件(如 EAP_HOME/bin/standalone.conf),则优先的值是 JBoss EAP 启动配置文件中的值。一个这样的属性是 JAVA_HOME

2.5.2. 停止 JBoss EAP (RPM 安装)

用于停止 JBoss EAP 的 RPM 安装的命令取决于哪个操作模式(单机服务器或受管域),以及您正在运行的 Red Hat Enterprise Linux 版本。

停止 JBoss EAP 作为单机服务器(RPM 安装)
  • Red Hat Enterprise Linux 6:

    $ service eap7-standalone stop
  • Red Hat Enterprise Linux 7:

    $ systemctl stop eap7-standalone.service
在受管域中停止 JBoss EAP (RPM 安装)
  • Red Hat Enterprise Linux 6:

    $ service eap7-domain stop
  • Red Hat Enterprise Linux 7:

    $ systemctl stop eap7-domain.service

有关 RPM 安装的所有可用启动选项的列表,请参阅 RPM 服务配置文件 部分。

2.6. PowerShell 脚本(Windows Server)

重要

这个功能仅作为技术预览提供。在生产环境中不支持使用它,它可能会有显著变化。如需有关技术预览功能支持范围的信息,请参阅红帽客户门户网站上的 技术预览功能支持范围

JBoss EAP 包括适用于大多数 JBoss EAP 管理脚本的 PowerShell 脚本。这包括用于在 Microsoft Windows Server 上启动 JBoss EAP 的 PowerShell 脚本。

JBoss EAP PowerShell 脚本设计为使用在经过测试的 Windows Server 版本上运行的 PowerShell 版本 2 及更新版本。

JBoss EAP PowerShell 脚本位于 EAP_HOME\bin 中,其使用方式与 JBoss EAP 批处理脚本基本相同。

例如,要使用 standalone-full.xml 配置文件启动独立 JBoss EAP 服务器,请使用以下 PowerShell 命令:

.\standalone.ps1 "-c=standalone-full.xml"
注意

JBoss EAP PowerShell 脚本的参数必须在引号内。

第 3 章 JBoss EAP 管理

JBoss EAP 使用简化的配置,每个单机服务器或受管域有一个配置文件。单机服务器的默认配置存储在 EAP_HOME/standalone/configuration/standalone.xml 文件中,受管域的默认配置则存储在 EAP_HOME/domain/configuration/domain.xml 文件中。此外,主机控制器的默认配置存储在 EAP_HOME/domain/configuration/host.xml 文件中。

可以使用命令行管理 CLI、基于 Web 的管理控制台、Java API 或 HTTP API 来配置 JBoss EAP。使用这些管理接口所做的更改会自动保留,并且管理 API 覆盖 XML 配置文件。管理 CLI 和管理控制台是首选的方法,不建议手动编辑 XML 配置文件。

3.1. 关于子系统、扩展和配置文件

JBoss EAP 功能的不同方面在不同的子系统中配置。例如,在 logging 子系统中配置了应用程序和服务器 日志记录

子系统 为特定扩展提供配置选项。扩展是扩展 服务器核心功能的模块。扩展会加载,因为部署需要它们,并在不再需要时卸载扩展。

子系统配置的集合将组成一个 配置文件,它被配置为满足服务器的需求。单机服务器具有单个未命名的配置文件。受管域可以定义许多 域中的服务器组使用的配置文件。

有关可用子系统的更多信息,请参阅 JBoss EAP 子系统概述

使用管理控制台或管理 CLI

管理控制台和管理 CLI 都有效,受到支持的方式更新 JBoss EAP 实例的配置。决定两者之间的决定是首选。那些希望使用基于 Web 的图形化界面的用户应使用管理控制台。首选命令行界面的用户应使用管理 CLI。

3.2. 管理用户

默认 JBoss EAP 配置提供本地身份验证,让用户可以访问本地主机上的管理 CLI,而无需身份验证。

但是,如果您要远程访问管理 CLI,则必须添加管理用户,或使用管理控制台,即使流量来自本地主机上也被视为远程访问。如果在添加管理用户之前尝试访问管理控制台,您会收到错误消息。

如果使用图形安装程序安装 JBoss EAP,则在安装过程中创建管理用户。

本指南介绍了使用 add-user 脚本对 JBoss EAP 进行简单的用户管理,此脚本可用于将新用户添加到用于开箱即用身份验证的属性文件中。有关更高级的身份验证和授权选项,如 LDAP 或基于角色的访问控制(RBAC),请参阅 JBoss EAP 安全架构指南中的核心管理身份验证 部分。

3.2.1. 添加管理用户

  1. 运行 add-user 实用程序脚本并按照提示进行操作。

    $ EAP_HOME/bin/add-user.sh
    注意

    对于 Windows Server,请使用 EAP_HOME\bin\add-user.bat 脚本。

  2. ENTER,选择默认选项 a 以添加管理用户。

    此用户将添加到 ManagementRealm 中,并将获得使用管理控制台或管理控制台执行管理操作的授权。其他选择(b)将用户添加到 ApplicationRealm 中,该应用程序用于应用程序,不提供任何特定权限。

  3. 输入所需的用户名和密码。系统将提示您确认密码。

    默认情况下,JBoss EAP 允许弱密码,但会发出警告。有关更改此默认行为的详情 ,请参阅设置附加用户实用程序密码限制

  4. 输入以逗号分隔的用户所属组的列表。如果您不希望用户属于任何组,请按 ENTER 将它留空。
  5. 检查信息并输入 yes 进行确认。
  6. 确定此用户是否代表远程 JBoss EAP 服务器实例。对于基本管理用户,请输入 no.

    可能需要添加到 ManagementRealm 的一种用户是代表另一个 JBoss EAP 实例的用户,它必须能够进行身份验证以作为群集成员加入。如果出现这种情况,则在此提示中回答 yes,系统会为您提供一个表示用户密码的散列化机密值,该值需要添加到其他配置文件中。

也可以通过向 add-user 脚本传递参数,以非交互方式创建用户。共享系统上不建议使用此方法,因为密码将在日志和历史记录文件中可见。如需更多信息,请参阅使用非交换方式运行 Add-User 实用程序

3.2.2. 使用交换方式运行 Add-User 实用程序

您可以通过在命令行中传递参数,以非交互方式运行 add-user 脚本。必须至少提供用户名和密码。

警告

共享系统上不建议使用此方法,因为密码将在日志和历史记录文件中可见。

创建一个属于多个组的用户

以下命令添加了一个带有 guestmgmtgroup 组的管理用户(mgmtuser1)。

$ EAP_HOME/bin/add-user.sh -u 'mgmtuser1' -p 'password1!' -g 'guest,mgmtgroup'
指定替代属性文件

默认情况下,使用 add-user 脚本创建的用户和组信息存储在服务器配置目录中的属性文件中。

用户信息存储在以下属性文件中:

  • EAP_HOME/standalone/configuration/mgmt-users.properties
  • EAP_HOME/domain/configuration/mgmt-users.properties

组信息存储在以下属性文件中:

  • EAP_HOME/standalone/configuration/mgmt-groups.properties
  • EAP_HOME/domain/configuration/mgmt-groups.properties

这些默认目录和属性文件名可以被覆盖。以下命令添加新用户,为用户属性文件指定不同的名称和位置。

$ EAP_HOME/bin/add-user.sh -u 'mgmtuser2' -p 'password1!' -sc '/path/to/standaloneconfig/' -dc '/path/to/domainconfig/' -up 'newname.properties'

新用户已添加到用户属性文件中,该文件现在位于 /path/to/standaloneconfig/newname.properties/path/to/domainconfig/newname.properties。请注意,这些文件必须已经存在,否则您将看到错误。

有关所有可用 add-user 参数及其目的的完整列表,请使用 --help 参数或参阅 Add-User 实用程序参数部分。

3.2.3. 设置附加用户实用程序密码限制

add-user 实用程序脚本的密码限制可以使用 EAP_HOME/bin/add-user.properties 文件来配置。

默认情况下,JBoss EAP 允许弱密码,但会发出警告。要拒绝不符合指定最低要求的密码,请将 password.restriction 属性设置为 REJECT

可以在 EAP_HOME/bin/add-user.properties 文件中配置的额外密码要求:

  • 最小长度
  • 最低字母字符
  • 最小数字
  • 最小符号
  • 禁止的密码列表(如 admin
  • 是否允许与用户名匹配的密码

3.3. 管理接口

3.3.1. 管理 CLI

管理命令行界面(CLI)是 JBoss EAP 的命令行管理工具。

使用管理 CLI 启动和停止服务器、部署和取消部署应用、配置系统设置,以及执行其他管理任务。操作可以在批处理模式下执行,允许以组形式运行多个任务。

许多常见的终端命令可用,如 lscdpwd。管理 CLI 也支持 tab 自动完成功能。

有关使用管理 CLI 的详细信息,包括命令和操作、语法并在批处理模式下运行,请参阅 JBoss EAP 管理 CLI 指南

启动管理 CLI
$ EAP_HOME/bin/jboss-cli.sh
注意

对于 Windows Server,请使用 EAP_HOME\bin\jboss-cli.bat 脚本。

连接到正在运行的服务器
connect

或者,您可以使用 EAP_HOME/bin/jboss-cli.sh --connect 命令启动管理 CLI 并在一个步骤中进行连接。

显示帮助

使用以下命令获取一般帮助:

help

使用以下命令获取特定命令的帮助信息。

deploy --help
退出管理 CLI
quit
查看系统设置

以下命令使用 read-attribute 操作来显示是否启用了示例数据源:

/subsystem=datasources/data-source=ExampleDS:read-attribute(name=enabled)
{
    "outcome" => "success",
    "result" => true
}

在受管域中运行时,您必须使用 /profile=PROFILE_NAME 命令指定要更新的配置集。

/profile=default/subsystem=datasources/data-source=ExampleDS:read-attribute(name=enabled)
更新系统设置

以下命令使用 write-attribute 操作来禁用示例数据源。

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=enabled,value=false)
启动服务器

管理 CLI 也可用于在受管域中运行时启动和停止服务器。

/host=HOST_NAME/server-config=server-one:start

3.3.2. 管理控制台

管理控制台是用于 JBoss EAP 的基于 Web 的管理工具。

使用管理控制台启动和停止服务器、部署和取消部署应用、调优系统设置,以及对服务器配置进行持续修改。管理控制台还具备执行管理任务的功能,当当前用户执行的任何更改都要求重新启动或重新加载服务器实例时,实时通知功能。

在受管域中,可以从域控制器的管理控制台集中管理同一域中的服务器实例和服务器组。

对于使用默认管理端口在本地主机上运行的 JBoss EAP 实例,可通过位于 http://localhost:9990/console/App.html 的 Web 浏览器访问管理控制台。您将需要使用具有访问管理控制台权限的用户进行身份验证。

管理控制台提供下列选项卡,用于浏览和管理 JBoss EAP 单机服务器或受管域。

Home
了解如何完成几个常见配置和管理任务。参加导览,熟悉 JBoss EAP 管理控制台。
Deployments
添加、移除和启用部署。在受管域中,将部署分配到服务器组。
配置
配置可用的子系统,提供 Web 服务、消息传递或高可用性等功能。在受管域中,管理包含不同子系统配置的配置文件。
Runtime
查看运行时信息,如服务器状态、JVM 使用量和服务器日志。在受管域中,管理您的主机、服务器组和服务器。
Access Control
在使用基于角色的访问控制时,将角色分配给用户和组。
Patching
将补丁应用到您的 JBoss EAP 实例。
注意

要了解更新的管理控制台,请单击管理控制台主页上 的 Take a Tour 链接。

要查看表单字段的详细信息,请点 Need Help? 链接。

要查看您执行的配置操作的消息历史记录,请单击管理控制台右上角的 Messages 链接。

3.3.2.1. 启用/禁用管理控制台

您可以通过设置 /core-service=management/management-interface=http-interface 资源的 console-enabled 布尔值属性来启用或禁用管理控制台。对于域模式中的 master 主机,/host=master/core-service=management/management-interface=http-interface

例如,要启用:

/core-service=management/management-interface=http-interface:write-attribute(name=console-enabled,value=true)

例如,要禁用:

/core-service=management/management-interface=http-interface:write-attribute(name=console-enabled,value=false)

3.3.2.2. 更改管理控制台的语言

默认情况下,管理控制台的语言设置是英语。您可以选择使用以下语言之一:

  • 德语(de)
  • 简体中文(zh-Hans)
  • 巴西葡萄牙语(pt-BR)
  • 法语(fr)
  • 西班牙语(es)
  • 日语(ja)
更改管理控制台的语言
  1. 登录到管理控制台。
  2. 单击管理控制台右下角的 Settings 链接。
  3. Locale 选择框中选择所需语言。
  4. 选择 Save。确认框会通知您需要重新载入应用程序。
  5. 单击 Confirm。系统会自动刷新您的 Web 浏览器以使用所选区域设置。

3.4. 管理 API

3.4.1. HTTP API

HTTP API 端点是管理客户端的入口点,它依赖于 HTTP 协议与 JBoss EAP 管理层集成。

HTTP API 由 JBoss EAP 管理控制台使用,但也为其他客户端提供集成功能。默认情况下,HTTP API 可通过 http://HOST_NAME:9990/management 进行访问。此 URL 将显示公开给 API 的原始属性和值。

读取资源

虽然您可以使用 HTTP POST 方法读取、写入或执行其他操作,但您可以使用 GET 请求执行一些读取操作。HTTP GET 方法使用以下 URL 格式:

http://HOST_NAME:9990/management/PATH_TO_RESOURCE?operation=OPERATION&PARAMETER=VALUE

务必将所有可替换值替换为适合您的请求的值。以下值是 OPERATION 可替换值的可用选项:

描述

attribute

执行 read-attribute 操作。

operation-description

执行 read-operation-description 操作。

operation-names

执行 read-operation-names 操作。

resource

执行 read-resource 操作。

resource-description

执行 read-resource-description 操作。

快照

执行 list-snapshots 操作。

以下示例 URL 演示了如何使用 HTTP API 执行读取操作。

示例:读取资源的所有属性和值

http://HOST_NAME:9990/management/subsystem/undertow/server/default-server/http-listener/default

这将显示 默认 HTTP 侦听器的所有属性及其值。

注意

默认操作为 read-resource

示例:阅读资源的属性值

http://HOST_NAME:9990/management/subsystem/datasources/data-source/ExampleDS?operation=attribute&name=enabled

这会读取 ExampleDS 数据源的 enabled 属性的值。

更新资源

您可以使用 HTTP POST 方法更新配置值或使用 HTTP API 执行其他操作。您必须为这些操作提供身份验证。

以下示例演示了如何使用 HTTP API 更新资源。

示例:更新资源的属性值

$ curl --digest http://HOST_NAME:9990/management --header "Content-Type: application/json" -u USERNAME:PASSWORD -d '{"operation":"write-attribute", "address":["subsystem","datasources","data-source","ExampleDS"], "name":"enabled", "value":"false", "json.pretty":"1"}'

这会将 ExampleDS 数据源的 enabled 属性的值更新为 false

示例:向服务器发出操作

$ curl --digest http://localhost:9990/management --header "Content-Type: application/json" -u USERNAME:PASSWORD -d '{"operation":"reload"}'

这会重新加载服务器。

如需有关如何使用 HTTP API 将应用部署到 JBoss EAP 的信息,请参阅使用 HTTP API 部署应用程序。

3.4.2. 原生 API

原生 API 端点是管理客户端的入口点,它依赖于原生协议与 JBoss EAP 管理层集成。JBoss EAP 管理 CLI 使用原生 API,但也为其他客户端提供集成功能。

以下 Java 代码演示了如何使用原生 API 从 Java 代码执行管理操作示例。

注意

您必须将 EAP_HOME/bin/client/jboss-cli-client.jar 文件中的所需的 JBoss EAP 库添加到您的类路径。

示例: 使用原生 API 读取资源

// Create the management client
ModelControllerClient client = ModelControllerClient.Factory.create("localhost", 9990);

// Create the operation request
ModelNode op = new ModelNode();

// Set the operation
op.get("operation").set("read-resource");

// Set the address
ModelNode address = op.get("address");
address.add("subsystem", "undertow");
address.add("server", "default-server");
address.add("http-listener", "default");

// Execute the operation and manipulate the result
ModelNode returnVal = client.execute(op);
System.out.println("Outcome: " + returnVal.get("outcome").toString());
System.out.println("Result: " + returnVal.get("result").toString());

// Close the client
client.close();

3.5. 配置数据

3.5.1. 独立服务器配置文件

独立配置文件位于 EAP_HOME/standalone/configuration/ 目录中。每个四个预定义配置文件都存在单独的文件(默认为hafull、full)。

表 3.1. 独立配置文件

配置文件用途

standalone.xml

此独立配置文件是启动单机服务器时使用的默认配置。它包含有关服务器的所有信息,包括子系统、网络、部署、套接字绑定和其他可配置的详细信息。它不提供消息传递或高可用性所需的子系统。

standalone-ha.xml

此单机配置文件包含所有默认子系统,并添加 modclusterjgroups 子系统,以实现高可用性。它不提供消息传递所需的子系统。

standalone-full.xml

此单机配置文件包含所有默认子系统,并添加 messaging-activemqiiop-openjdk 子系统。它不提供高可用性所需的子系统。

standalone-full-ha.xml

此独立配置文件包括对每一种可能子系统的支持,包括消息传递和高可用性方面的支持。

默认情况下,将 JBoss EAP 作为单机服务器启动使用 standalone.xml 文件。若要使用其他配置启动 JBoss EAP,可使用 --server-config 参数:例如,

$ EAP_HOME/bin/standalone.sh --server-config=standalone-full.xml

3.5.2. 受管域配置文件

受管域配置文件位于 EAP_HOME/domain/configuration/ 目录中。

表 3.2. 受管域配置文件

配置文件用途

domain.xml

这是受管域的主配置文件。只有域 master 会读取此文件。此文件包含所有配置集的配置(默认为hafullfull-ha)。

host.xml

此文件包含特定于受管域中物理主机的配置详细信息,如网络接口、套接字绑定、主机名称和其他特定于主机的详细信息。host.xml 文件包含 host-master.xmlhost-slave.xml 的所有功能,如下所述。

host-master.xml

此文件仅包含将服务器作为主域控制器运行所需的配置详细信息。

host-slave.xml

此文件仅包含作为受管域主机控制器运行服务器所需的配置详细信息。

默认情况下,在受管域中启动 JBoss EAP 将使用 host.xml 文件。若要使用其他配置启动 JBoss EAP,可使用 --host-config 参数:例如,

$ EAP_HOME/bin/domain.sh --host-config=host-master.xml

3.5.3. 备份配置数据

为了稍后恢复 JBoss EAP 服务器配置,应备份以下位置中的项目:

  • EAP_HOME/standalone/configuration/

    • 备份整个目录,以保存单机服务器的用户数据、服务器配置和日志记录设置。
  • EAP_HOME/domain/configuration/

    • 备份整个目录,以保存用户和配置文件数据、域和主机配置,以及受管域的日志记录设置。
  • EAP_HOME/modules/

    • 备份任何自定义模块。
  • EAP_HOME/welcome-content/

    • 备份任何自定义欢迎内容。
  • EAP_HOME/bin/

    • 备份任何自定义脚本或启动配置文件。

3.5.4. 配置文件快照

为了协助服务器维护和管理,JBoss EAP 在启动时创建原始配置文件的时间戳版本。管理操作的任何其他配置更改将导致自动备份原始文件,保留实例的工作副本供引用和回滚。此外,还可以生成配置快照,它们是当前服务器配置的即时副本。这些快照可由管理员保存和加载。

以下示例使用 standalone.xml 文件,但同一进程适用于 domain.xmlhost.xml 文件。

进行快照

使用管理 CLI 为当前配置生成快照。

:take-snapshot
{
    "outcome" => "success",
    "result" => "EAP_HOME/standalone/configuration/standalone_xml_history/snapshot/20151022-133109702standalone.xml"
}
列出快照

使用管理 CLI 列出已执行的所有快照。

:list-snapshots
{
    "outcome" => "success",
    "result" => {
        "directory" => "EAP_HOME/standalone/configuration/standalone_xml_history/snapshot",
        "names" => [
            "20151022-133109702standalone.xml",
            "20151022-132715958standalone.xml"
        ]
    }
}
删除快照

使用管理 CLI 删除快照。

:delete-snapshot(name=20151022-133109702standalone.xml)
使用快照启动服务器

可以使用快照或自动保存的配置启动服务器。

  1. 导航到 EAP_HOME/standalone/configuration/standalone_xml_history 目录,找到要加载的快照或保存的配置文件。
  2. 启动服务器并指向所选配置文件。传递与配置目录相关的文件路径 EAP_HOME/standalone/configuration/

    $ EAP_HOME/bin/standalone.sh --server-config=standalone_xml_history/snapshot/20151022-133109702standalone.xml
注意

在受管域中运行时,请使用 --host-config 参数来指定配置文件。

3.5.5. 查看配置更改

JBoss EAP 7 提供了跟踪对正在运行的系统所做的配置更改的功能。这样,管理员可以查看其他授权用户所做的配置更改历史记录。

重要

更改存储在内存中,在服务器重新启动之间不会保留。此功能不是 管理审计日志记录 的替代。

要启用 跟踪配置更改,请使用以下管理 CLI 命令。您可以使用 max-history 属性指定要存储的条目数量。

/core-service=management/service=configuration-changes:add(max-history=10)

要查看最新的配置更改列表,请使用以下管理 CLI 命令:

/core-service=management/service=configuration-changes:list-changes

这将列出所做的每个配置更改,包括日期、源、结果和操作详情。例如,以下 list-changes 命令的输出显示了配置更改,最近显示最先显示。

{
    "outcome" => "success",
    "result" => [
        {
            "operation-date" => "2016-02-12T18:37:00.354Z",
            "access-mechanism" => "NATIVE",
            "remote-address" => "127.0.0.1/127.0.0.1",
            "outcome" => "success",
            "operations" => [{
                "address" => [],
                "operation" => "reload",
                "operation-headers" => {
                    "caller-type" => "user",
                    "access-mechanism" => "NATIVE"
                }
            }]
        },
        {
            "operation-date" => "2016-02-12T18:34:16.859Z",
            "access-mechanism" => "NATIVE",
            "remote-address" => "127.0.0.1/127.0.0.1",
            "outcome" => "success",
            "operations" => [{
                "address" => [
                    ("subsystem" => "datasources"),
                    ("data-source" => "ExampleDS")
                ],
                "operation" => "write-attribute",
                "name" => "enabled",
                "value" => false,
                "operation-headers" => {
                    "caller-type" => "user",
                    "access-mechanism" => "NATIVE"
                }
            }]
        },
        {
            "operation-date" => "2016-02-12T18:24:11.670Z",
            "access-mechanism" => "HTTP",
            "remote-address" => "127.0.0.1/127.0.0.1",
            "outcome" => "success",
            "operations" => [{
                "operation" => "remove",
                "address" => [
                    ("subsystem" => "messaging-activemq"),
                    ("server" => "default"),
                    ("jms-queue" => "ExpiryQueue")
                ],
                "operation-headers" => {"access-mechanism" => "HTTP"}
            }]
        }
    ]
}

本例列出了影响配置执行的三个操作的详情:

  • 从管理 CLI 重新加载服务器。
  • 从管理 CLI 禁用 ExampleDS 数据源。
  • 从管理控制台中删除 ExpiryQueue 队列。

3.5.6. 属性替换

JBoss EAP 允许您使用表达式来定义可在配置中替换字面值的可替换属性。表达式使用 ${PARAMETER:DEFAULT_VALUE} 格式。如果设置了指定参数,则将使用参数的值。否则,将使用提供的默认值。

解析表达式支持的源包括系统属性、环境变量和密码库。对于部署,源可以是部署存档中的 META-INF/jboss.properties 文件中的属性。对于支持子部署的部署类型,如果属性文件位于外部部署中,则解析范围仅限于所有子部署,如 EAR。如果属性文件在子部署中,则解析的范围仅限于该子部署。

以下 standalone.xml 配置文件的示例将 public 接口的 inet-address 设为 127.0.0.1,除非设置了 jboss.bind.address 参数。

<interface name="public">
    <inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>

将 EAP 启动为单机服务器时,可以使用以下命令设置 jboss.bind.address 参数:

$ EAP_HOME/bin/standalone.sh -Djboss.bind.address=IP_ADDRESS
嵌套表达式

表达式可以嵌套,允许更高级地使用表达式来代替固定值。嵌套表达式的格式类似于普通表达式的格式,但一个表达式被嵌入在另一个表达式中,例如:

${SYSTEM_VALUE_1${SYSTEM_VALUE_2}}

嵌套表达式是递归评估的,因此首先评估内嵌表达式,然后评估外部表达式。表达式也可能是递归的,其中一个表达式解析为另外一个表达式,然后解析。允许表达式的任何位置都允许嵌套表达式,但管理 CLI 命令除外。

例如,如果数据源定义中使用的密码被屏蔽,则可以使用嵌套表达式。数据源的配置可能包含以下行:

<password>${VAULT::ds_ExampleDS::password::1}</password>

ds_ExampleDS 的值可以替换为使用嵌套表达式的系统属性(datasource_name)。数据源的配置可以改为有以下行:

<password>${VAULT::${datasource_name}::password::1}</password>

JBoss EAP 首先评估表达式 ${datasource_name},然后将其输入到更大的表达式并评估生成的表达式。此配置的优点在于数据源的名称是从固定配置中提取的。

基于描述符的特征替换

应用程序配置(如数据源连接参数)通常会因开发、测试和生产环境而异。构建系统脚本有时可以容纳这种差异,因为 Java EE 规格不包含将这些配置外部化的方法。借助 JBoss EAP,您可以使用基于描述符的属性替换在外部管理配置。

基于描述符的属性替换基于描述符的属性,允许您从应用和构建链中删除对环境相关的假设。特定环境的配置可以在部署描述符中指定,而不是注释或构建系统脚本。您可以在文件中提供配置,或者作为参数在命令行中提供。

ee 子系统中有几个标记控制是否应用属性替换。

JBoss 特定的描述符替换由 jboss-descriptor-property-replacement 标志控制,默认情况下被启用。启用后,可以在以下部署描述符中替换属性:

  • jboss-ejb3.xml
  • jboss-app.xml
  • jboss-web.xml
  • *-jms.xml
  • *-ds.xml

以下管理 CLI 命令可用于启用或禁用特定于 JBoss 的描述符中的属性替换:

/subsystem=ee:write-attribute(name="jboss-descriptor-property-replacement",value=VALUE)

Java EE 描述符替换由 spec-descriptor-property-replacement 标志控制,默认是禁用的。启用后,可以在以下部署描述符中替换属性:

  • ejb-jar.xml
  • persistence.xml
  • application.xml
  • web.xml

以下管理 CLI 命令可用于在 Java EE 描述符中启用或禁用属性替换:

/subsystem=ee:write-attribute(name="spec-descriptor-property-replacement",value=VALUE)

3.6. 文件系统路径

JBoss EAP 对文件系统路径使用逻辑名称。然后,配置的其他区域可以使用其逻辑名称引用路径,避免需要为每个实例使用绝对路径,并允许特定主机配置解析为通用逻辑名称。

例如,默认的 日志记录子系统 配置声明 jboss.server.log.dir 作为服务器日志目录的逻辑名称。

示例:服务器日志目录的相对路径示例

<file relative-to="jboss.server.log.dir" path="server.log"/>

JBoss EAP 自动提供多个标准路径,无需用户在配置文件中配置它们。

表 3.3. 标准路径

属性描述

java.ext.dirs

Java 开发工具包扩展目录路径。

java.home

Java 安装目录

jboss.controller.temp.dir

单机服务器和受管域的通用别名。用于临时文件存储的目录。等同于受管域中的 jboss.domain.temp.dir,以及单机服务器上的 jboss.server.temp.dir

jboss.domain.base.dir

域内容的基础目录。

jboss.domain.config.dir

包含域配置的目录。

jboss.domain.data.dir

域将用于持久数据文件存储的目录。

jboss.domain.log.dir

域将用于持久日志文件存储的目录。

jboss.domain.temp.dir

域将用于临时文件存储的目录。

jboss.domain.deployment.dir

域用于存储部署的内容的目录。

jboss.domain.servers.dir

域用于存储受管域实例输出的目录。

jboss.home.dir

JBoss EAP 分发的根目录。

jboss.server.base.dir

单机服务器内容的基础目录。

jboss.server.config.dir

包含单机服务器配置的目录。

jboss.server.data.dir

单机服务器将用于持久数据文件存储的目录。

jboss.server.log.dir

单机服务器将用于日志文件存储的目录。

jboss.server.temp.dir

单机服务器将用于临时文件存储的目录。

jboss.server.deploy.dir

单机服务器用于存储部署的内容的目录。

user.dir

用户的当前工作目录。

user.home

用户主目录。

您可以覆盖标准路径添加自定义路径

3.6.1. 覆盖标准路径

您可以覆盖以 jboss. server prerequisites 或 jboss. domainadtrust 开头的标准路径的默认位置。这可以通过以下两种方式之一完成:

  • 启动服务器时传递命令行参数。例如:

    $ EAP_HOME/bin/standalone.sh -Djboss.server.log.dir=/var/log
  • 修改服务器配置文件(standalone.confdomain.conf)中的 JAVA_OPTS 变量。例如:

    JAVA_OPTS="$JAVA_OPTS -Djboss.server.log.dir=/var/log"
覆盖受管域的标准路径

在本例中,目标是将域文件存储在 /opt/jboss_eap/domain_data 目录中,并为每个顶级目录分配一个自定义名称。使用默认目录分组( by-server )。

  • 日志文件要存储在 all_logs 子目录中
  • 数据文件要存储在 all_data 子目录中
  • 临时文件存储在 all_temp 子目录中
  • 服务器的文件存储在 all_servers 子目录中

要实现此配置,您可以在启动 JBoss EAP 时覆盖多个系统属性。

$ EAP_HOME/bin/domain.sh -Djboss.domain.temp.dir=/opt/jboss_eap/domain_data/all_temp -Djboss.domain.log.dir=/opt/jboss_eap/domain_data/all_logs -Djboss.domain.data.dir=/opt/jboss_eap/domain_data/all_data -Djboss.domain.servers.dir=/opt/jboss_eap/domain_data/all_servers

生成的路径结构如下:

/opt/jboss_eap/domain_data/
               ├── all_data
               ├── all_logs
               ├── all_servers
               │   ├── server-one
               │   │   ├── data
               │   │   ├── log
               │   │   └── tmp
               │   └── server-two
               │       ├── data
               │       ├── log
               │       └── tmp
               └── all_temp

3.6.2. 添加自定义路径

您可以使用管理 CLI 或管理控制台添加自定义文件系统路径。

  • 通过管理 CLI,您可以使用以下管理 CLI 命令添加新路径。

    /path=my.custom.path:add(path=/my/custom/path)
  • 在管理控制台中,您可以通过导航到 Configuration 选项卡并选择 Paths 来配置文件系统路径。在这里,您可以添加、修改和删除路径。

然后您可以在配置中使用此自定义路径。例如,以下日志处理程序为其相对路径使用自定义路径。

<subsystem xmlns="urn:jboss:domain:logging:3.0">
  ...
  <periodic-rotating-file-handler name="FILE" autoflush="true">
    <formatter>
      <named-formatter name="PATTERN"/>
    </formatter>
    <file relative-to="my.custom.path" path="server.log"/>
    <suffix value=".yyyy-MM-dd"/>
    <append value="true"/>
  </periodic-rotating-file-handler>
  ...
</subsystem>

3.6.3. 目录分组

在受管域中,每台服务器的文件存储在 EAP_HOME/domain 目录中。您可以使用主机控制器的 directory-grouping 属性来指定如何为服务器组织子目录。目录可以按 服务器 分组,或者 按类型 进行分组。默认情况下,目录按 服务器 分组。

按服务器划分的目录

默认情况下,目录按服务器分组。如果您的管理是以 服务器为中心的,则建议使用此配置。例如,它允许为每个服务器实例配置备份和日志文件处理。

如果使用 ZIP 安装方法安装 JBoss EAP,则默认目录结构(按服务器分组)将如下所示:

EAP_HOME/domain
         └─ servers
            ├── server-one
            │   ├── data
            │   ├── tmp
            │   └── log
            └── server-two
                ├── data
                ├── tmp
                └── log

要按服务器对域目录进行分组,请输入以下管理 CLI 命令:

/host=HOST_NAME:write-attribute(name=directory-grouping,value=by-server)

这将更新主机控制器的 host.xml 配置文件:

<servers directory-grouping="by-server">
  <server name="server-one" group="main-server-group"/>
  <server name="server-two" group="main-server-group" auto-start="true">
    <socket-bindings port-offset="150"/>
  </server>
</servers>
按类型划分的目录

您可以使用文件类型对目录进行分组,而不是按服务器对目录进行分组。如果您的管理是以 类型为中心的文件,则建议使用此配置。例如,这可让您只 备份数据 文件。

如果使用 ZIP 安装方法安装 JBoss EAP,并且域的文件按类型分组,则目录结构将如下所示:

EAP_HOME/domain
         ├── data
         │   └── servers
         │       ├── server-one
         │       └── server-two
         ├── log
         │   └── servers
         │       ├── server-one
         │       └── server-two
         └── tmp
             └── servers
                 ├── server-one
                 └── server-two

要根据类型对域目录进行分组,请输入以下管理 CLI 命令:

/host=HOST_NAME:write-attribute(name=directory-grouping,value=by-type)

这将更新主机控制器的 host.xml 配置文件:

<servers directory-grouping="by-type">
  <server name="server-one" group="main-server-group"/>
  <server name="server-two" group="main-server-group" auto-start="true">
    <socket-bindings port-offset="150"/>
  </server>
</servers>

3.7. 系统属性

您可以使用 Java 系统属性配置许多 JBoss EAP 选项,并设置用于在应用服务器中使用的任何名称值对。

系统属性可用于覆盖 JBoss EAP 配置中的默认值。例如,公共接口绑定地址的以下 XML 配置显示可由 jboss.bind.address 系统属性设置,但如果未提供系统属性,它将默认为 127.0.0.1

<inet-address value="${jboss.bind.address:127.0.0.1}"/>

您可以通过几种方法在 JBoss EAP 中设置系统属性,包括:

如果您使用 JBoss EAP 受管域,则系统属性可以应用到整个域、特定的服务器组、特定主机及其所有服务器实例,或者仅应用到一个特定的服务器实例。与大多数其他 JBoss EAP 域设置一样,在更具体的级别上设置的系统属性将覆盖一个抽象的一个抽象。如需更多信息 请参阅域管理一章。

将系统属性传递给启动脚本

您可以使用 -D 参数将系统属性传递给 JBoss EAP 启动脚本。例如:

$ EAP_HOME/bin/standalone.sh -Djboss.bind.address=192.168.1.2

此设置系统属性的方法对于 JBoss EAP 选项在 JBoss EAP 启动前需要设置的 JBoss EAP 选项特别有用。

使用管理 CLI 设置系统属性

使用管理 CLI,您可以使用以下语法设置系统属性:

/system-property=PROPERTY_NAME:add(value=PROPERTY_VALUE)

例如:

/system-property=jboss.bind.address:add(value=192.168.1.2)

使用管理 CLI 设置系统属性时,一些 JBoss EAP 选项(包括上述 jboss.bind.address 示例)仅在下一次服务器重启后生效。

对于受管域,上例为整个域配置系统属性,但您也可以在更具体的域配置级别上设置或覆盖系统属性。

使用管理控制台设置系统属性

  • 对于独立的 JBoss EAP 服务器,您可以在管理控制台的 Configuration 选项卡下配置系统属性。选择 "系统属性",然后单击" 查看 "按钮。
  • 对于受管域:

    • 域级系统属性可以在 Configuration 选项卡中设置。选择 "系统属性",然后单击" 查看 "按钮。
    • 服务器组和服务器级系统属性可以在 Runtime 选项卡中设置。选择您要配置的服务器组或服务器服务器,单击服务器组或服务器名称旁边的 View 按钮,然后选择 系统属性 选项卡。
    • 主机级别的系统属性可以在 Runtime 选项卡中设置。选择您要配置的主机,然后使用主机名旁边的下拉菜单,选择 Properties

使用 JAVA_OPTS 设置系统属性

系统属性也可以使用 JAVA_OPTS 环境变量进行配置。可以通过多种方式修改 JAVA_OPTS,但 JBoss EAP 提供了用于设置 JBoss EAP 进程使用的 JAVA_OPTS 的配置文件。

对于单机服务器,此文件为 EAP_HOME/bin/standalone.conf,对于受管域,它是 EAP_HOME/bin/domain.conf。对于 Microsoft Windows 系统,这些文件具有 .bat 扩展名。

注意

对于 RPM 安装,RPM 服务配置文件 是修改 JAVA_OPTS 来配置系统属性的首选位置。如需更多信息,请参阅配置 RPM 服务属性

将系统属性定义添加到相关配置文件中的 JAVA_OPTS。以下示例演示了在 Red Hat Enterprise Linux 系统上设置绑定地址。

  • 对于 standalone.conf,请在文件的末尾添加 JAVA_OPTS 系统属性定义。例如:

    ...
    # Set the bind address
    JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=192.168.1.2"
  • 对于 domain.conf,必须在进程控制器JAVA_OPTS 设置前设置 JAVA_OPTS。例如:

    ...
    # Set the bind address
    JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=192.168.1.2"
    
    # The ProcessController process uses its own set of java options
    if [ "x$PROCESS_CONTROLLER_JAVA_OPTS" = "x" ]; then
    ...

3.8. 管理审计日志记录

您可以为管理接口启用审计日志记录,这将记录使用管理控制台、管理 CLI 或使用管理 API 的自定义应用执行的所有操作。审计日志条目以 JSON 格式存储。默认情况下禁用审计日志记录。

您可以将审计日志记录配置为输出到 文件或 syslog 服务器

注意

无法登录和注销事件,因为 JBoss EAP 中没有经过身份验证的会话。相反,当从用户收到操作时,会记录审计消息。

独立服务器审计日志记录

虽然默认禁用,但默认的审计日志记录配置写入文件。

<audit-log>
    <formatters>
        <json-formatter name="json-formatter"/>
    </formatters>
    <handlers>
        <file-handler name="file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>
    </handlers>
    <logger log-boot="true" log-read-only="false" enabled="false">
        <handlers>
            <handler name="file"/>
        </handlers>
    </logger>
</audit-log>

可以使用以下管理 CLI 命令读取此配置:

/core-service=management/access=audit:read-resource(recursive=true)

请参阅 启用审计日志记录,以便为独立服务器启用审计日志记录。

受管域审计日志记录

虽然默认禁用,但默认的审计日志记录配置为每个主机和每台服务器写入一个文件。

<audit-log>
    <formatters>
        <json-formatter name="json-formatter"/>
    </formatters>
    <handlers>
        <file-handler name="host-file" formatter="json-formatter" relative-to="jboss.domain.data.dir" path="audit-log.log"/>
        <file-handler name="server-file" formatter="json-formatter" relative-to="jboss.server.data.dir" path="audit-log.log"/>
    </handlers>
    <logger log-boot="true" log-read-only="false" enabled="false">
        <handlers>
            <handler name="host-file"/>
        </handlers>
    </logger>
    <server-logger log-boot="true" log-read-only="false" enabled="false">
        <handlers>
            <handler name="server-file"/>
        </handlers>
    </server-logger>
</audit-log>

可以使用以下管理 CLI 命令读取此配置:

/host=HOST_NAME/core-service=management/access=audit:read-resource(recursive=true)

请参阅 启用审计日志记录,以便为受管域启用审计日志记录。

3.8.1. 启用管理审计日志记录

JBoss EAP 预配置了用于审计日志记录的文件处理程序,但审计日志记录默认为禁用。启用审计日志记录的管理 CLI 命令取决于您是作为独立服务器还是在受管域中运行。请参阅 文件 处理程序属性 的管理审计日志记录属性。

要设置 syslog 审计日志记录,请参阅将 管理审计日志记录设置为 Syslog 服务器

启用独立服务器审计日志记录

可以使用以下命令启用审计日志记录。

/core-service=management/access=audit/logger=audit-log:write-attribute(name=enabled,value=true)

默认情况下,这将将审计日志写入 EAP_HOME/standalone/data/audit-log.log

启用受管域审计日志记录

受管域的默认审计日志记录配置预先配置为为每个主机和每台服务器编写审计日志。

可以通过以下命令启用每个主机的审计日志记录。

/host=HOST_NAME/core-service=management/access=audit/logger=audit-log:write-attribute(name=enabled,value=true)

默认情况下,这将将审计日志写入 EAP_HOME/domain/data/audit-log.log

可以使用以下命令启用每台服务器的审计日志记录。

/host=HOST_NAME/core-service=management/access=audit/server-logger=audit-log:write-attribute(name=enabled,value=true)

默认情况下,这将将审计日志写入 EAP_HOME/domain/servers/SERVER_NAME/data/audit-log.log

3.8.2. 将管理审计日志记录发送到 Syslog 服务器

syslog 处理程序指定审计日志条目发送到 syslog 服务器的参数,特别是 syslog 服务器的主机名以及 syslog 服务器侦听的端口。将审计日志记录发送到 syslog 服务器可提供比登录到本地文件或本地 syslog 服务器更多的安全选项。可以定义多个 syslog 处理程序,并同时处于活动状态。

默认情况下,审计日志记录已预先配置为在启用时输出到文件。使用以下步骤为 syslog 服务器设置并启用审计日志记录。请参阅 syslog handler 属性 的管理审计日志记录属性。

  1. 添加 syslog 处理程序。

    创建 syslog 处理程序,指定 syslog 服务器的主机和端口。在受管域中,您必须在 /host=HOST_NAME 前使用 /core-service 命令。

    batch
    /core-service=management/access=audit/syslog-handler=SYSLOG_HANDLER_NAME:add(formatter=json-formatter)
    /core-service=management/access=audit/syslog-handler=SYSLOG_HANDLER_NAME/protocol=udp:add(host=HOST_NAME,port=PORT)
    run-batch
    注意

    要传递的参数因指定的协议不同。

    要将处理器配置为使用 TLS 与 syslog 服务器安全通信,还必须配置身份验证,例如:

    /core-service=management/access=audit/syslog-handler=SYSLOG_HANDLER_NAME/protocol=tls/authentication=truststore:add(keystore-path=PATH_TO_TRUSTSTORE,keystore-password=TRUSTSTORE_PASSWORD)
  2. 添加对 syslog 处理程序的引用。

    在受管域中,您必须在此命令前使用 /host=HOST_NAME

    /core-service=management/access=audit/logger=audit-log/handler=SYSLOG_HANDLER_NAME:add
  3. 启用审计日志记录。

    请参阅 启用管理 审计日志记录来启用审计日志记录。

重要

除非操作系统中启用了日志记录功能,否则启用审计日志记录到 JBoss EAP 中的 syslog 服务器将无法正常工作。

有关 Red Hat Enterprise Linux 中的 rsyslog 配置的更多信息,请参阅 Red Hat Enterprise Linux 系统管理员指南中的 Rsyslog 基本配置 一节,网址为 https://access.redhat.com/documentation/en/red-hat-enterprise-linux/

3.8.3. 阅读审计日志条目

审计日志条目输出到文件最好使用文本查看器器,而这些输出到 syslog 服务器则最好使用 syslog viewer 应用来查看。

注意

不建议使用 文本编辑器 来查看日志文件,因为有些情况可能会阻止将进一步的日志条目写入到日志文件中。

审计日志条目以 JSON 格式存储。每个日志条目都以可选时间戳开头,后跟下表中的字段。

表 3.4. 管理审计日志字段

字段名称描述

access

这可以具有以下值之一:

  • NATIVE - 操作通过原生管理接口。
  • HTTP - 操作通过域 HTTP 接口。
  • JMX - 操作通过 jmx 子系统进行。

Boot (引导)

如果操作在启动过程中执行,则为 true,如果它在服务器启动和运行后执行,则为 false

domainUUID

一个 ID,用于将所有操作链接在一起,因为它们从域控制器传播到其服务器、从属主机控制器和从属主机控制器服务器。

ops

正在执行的操作。这是序列化为 JSON 的操作列表。在引导时,这是由于解析 XML 产生的操作。引导后,列表通常包含一个条目。

r/o

如果操作不会更改管理模型,则值为 true,如果操作没有修改,则为 false

remote-address

执行此操作的客户端的地址。

success

如果操作成功,则值为 true,如果它被回滚,则为 false

type

这可以具有值 core,即管理操作或 jmx (代表它来自 jmx 子系统)。

user

已验证用户的用户名。如果操作在与正在运行的服务器相同的机器上使用管理 CLI,则使用特殊用户 $local

version

JBoss EAP 实例的版本号。

第 4 章 网络和端口配置

4.1. 接口

JBoss EAP 在整个配置中引用了命名接口。这允许配置引用带有逻辑名称的独立接口声明,而不必要求每次使用的接口的完整详情。

这也便于在受管域中配置,其中网络接口详细信息可能因多台计算机而异。每个服务器实例可以对应一个逻辑名称组。

standalone.xmldomain.xmlhost.xml 文件都包含接口声明。根据使用的默认配置,有几个预配置的接口名称。management 接口可用于需要管理层的所有组件和服务,包括 HTTP 管理端点。public 接口可用于所有应用相关的网络通信。unsecure 接口用于标准配置中的 IIOP 套接字。private 接口用于标准配置中的 JGroups 套接字。

4.1.1. 默认接口配置

<interfaces>
  <interface name="management">
    <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
  </interface>
  <interface name="public">
    <inet-address value="${jboss.bind.address:127.0.0.1}"/>
  </interface>
  <interface name="private">
    <inet-address value="${jboss.bind.address.private:127.0.0.1}"/>
  </interface>
  <interface name="unsecure">
    <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
  </interface>
</interfaces>

默认情况下,JBoss EAP 将这些接口绑定到 127.0.0.1,但可以通过设置适当的属性在运行时覆盖这些值。例如,通过以下命令将 JBoss EAP 启动为单机服务器时可以设置 public 接口的 inet-address

$ EAP_HOME/bin/standalone.sh -Djboss.bind.address=IP_ADDRESS

或者,您也可以在 server start 命令行上使用 -b 参数。有关服务器启动选项的更多信息,请参阅服务器运行时参数

重要

如果您修改了 JBoss EAP 使用的默认网络接口或端口,您还必须记得更改使用修改后的接口或端口的任何脚本。其中包括 JBoss EAP 服务脚本,以及记得在访问管理控制台或管理控制台或 CLI 时指定正确的接口和端口。

4.1.2. 配置接口

通过为物理接口指定逻辑名称和选择条件来声明网络接口。选择条件可以引用通配符地址,或者指定接口或地址必须具有的一个或多个特征集,才能成为有效的匹配项。有关所有可用接口选择条件的列表,请参阅 Interface Attributes 部分。

接口可以使用管理控制台或管理 CLI 进行配置。以下是添加和更新接口的几个示例。首先显示管理 CLI 命令,后跟对应的配置 XML。

使用 NIC 值添加接口

添加一个 NIC 值为 eth0 的新接口。

/interface=external:add(nic=eth0)
<interface name="external">
   <nic name="eth0"/>
</interface>
使用 Several Conditional 值添加接口

添加一个与正确子网上任何接口/地址匹配的新接口(如果已启动,支持多播),且不是点对点的新接口。

/interface=default:add(subnet-match=192.168.0.0/16,up=true,multicast=true,not={point-to-point=true})
<interface name="default">
   <subnet-match value="192.168.0.0/16"/>
   <up/>
   <multicast/>
   <not>
      <point-to-point/>
   </not>
</interface>
更新接口属性

更新 public 接口的默认 inet-address 值,保留 jboss.bind.address 属性,以允许在运行时设置此值。

/interface=public:write-attribute(name=inet-address,value="${jboss.bind.address:192.168.0.0}")
<interface name="public">
    <inet-address value="${jboss.bind.address:192.168.0.0}"/>
</interface>
向受管域中的服务器添加接口
/host=master/server-config=SERVER_NAME/interface=INTERFACE_NAME:add(inet-address=127.0.0.1)
<servers>
   <server name="SERVER_NAME" group="main-server-group">
      <interfaces>
         <interface name="INTERFACE_NAME">
            <inet-address value="127.0.0.1"/>
         </interface>
      </interfaces>
   </server>
</servers>

4.2. 套接字绑定

通过套接字绑定和套接字绑定组,您可以定义网络端口及其与 JBoss EAP 配置所需的网络接口的关系。套接字绑定是套接字的命名配置。套接字绑定组是套接字绑定声明的集合,这些声明按照逻辑名称分组。

这允许配置的其他部分根据其逻辑名称引用套接字绑定,而不必在每次使用套接字配置的完整详情。

这些指定配置的声明可以在 standalone.xmldomain.xml 配置文件中找到。单机服务器仅包含一个套接字绑定组,而受管域则可包含多个组。您可以为受管域中的每个服务器组创建一个套接字绑定组,或者在多个服务器组之间共享套接字绑定组。

JBoss EAP 默认使用的端口取决于使用哪些套接字绑定组以及您各个部署的要求。

4.2.1. 管理端口

JBoss EAP 7 中整合了管理端口。默认情况下,JBoss EAP 7 将端口 9990 用于本地管理(由管理 CLI 使用)和 HTTP 管理(由基于 Web 的管理控制台使用)。用作 JBoss EAP 6 中的原生管理端口的端口 9999 不再被使用,但在需要时仍可启用。

如果为管理控制台启用了 HTTPS,则默认使用端口 9993

4.2.2. 默认套接字绑定

JBoss EAP 附带了四个预定义配置文件(默认为、ha、fullfull-ha )的套接字绑定组。

有关默认套接字绑定的详细信息,如默认端口和描述,请参阅 Default Socket Bindings 部分。

重要

如果您修改了 JBoss EAP 使用的默认网络接口或端口,您还必须记得更改使用修改后的接口或端口的任何脚本。其中包括 JBoss EAP 服务脚本,以及记得在访问管理控制台或管理控制台或 CLI 时指定正确的接口和端口。

独立服务器

作为单机服务器运行时,每个配置文件仅定义一个套接字绑定组。每个独立配置文件(standalone.xml,standalone-ha.xml,standalone-full.xml,standalone-full-ha.xml)定义其对应配置集所使用的技术的套接字绑定。

例如,默认的单机配置文件(standalone.xml)指定以下套接字绑定:

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
    <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
    <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
    <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
    <socket-binding name="http" port="${jboss.http.port:8080}"/>
    <socket-binding name="https" port="${jboss.https.port:8443}"/>
    <socket-binding name="txn-recovery-environment" port="4712"/>
    <socket-binding name="txn-status-manager" port="4713"/>
    <outbound-socket-binding name="mail-smtp">
        <remote-destination host="localhost" port="25"/>
    </outbound-socket-binding>
</socket-binding-group>
受管域

在受管域中运行时,所有套接字绑定组都在 domain.xml 文件中定义。有四个预定义的套接字绑定组:

  • standard-sockets
  • ha-sockets
  • full-sockets
  • full-ha-sockets

每个套接字绑定组都指定其对应配置集所使用的技术套接字绑定。例如,full-ha-sockets 套接字绑定组定义几个 jgroups 套接字绑定,供 full-ha 配置文件用于高可用性。

<socket-binding-groups>
    <socket-binding-group name="standard-sockets" default-interface="public">
        <!-- Needed for server groups using the 'default' profile  -->
        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
        <socket-binding name="http" port="${jboss.http.port:8080}"/>
        <socket-binding name="https" port="${jboss.https.port:8443}"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
        <outbound-socket-binding name="mail-smtp">
            <remote-destination host="localhost" port="25"/>
        </outbound-socket-binding>
    </socket-binding-group>
    <socket-binding-group name="ha-sockets" default-interface="public">
        <!-- Needed for server groups using the 'ha' profile  -->
    ...
    </socket-binding-group>
    <socket-binding-group name="full-sockets" default-interface="public">
        <!-- Needed for server groups using the 'full' profile  -->
    ...
    </socket-binding-group>
    <socket-binding-group name="full-ha-sockets" default-interface="public">
        <!-- Needed for server groups using the 'full-ha' profile  -->
        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
        <socket-binding name="http" port="${jboss.http.port:8080}"/>
        <socket-binding name="https" port="${jboss.https.port:8443}"/>
        <socket-binding name="iiop" interface="unsecure" port="3528"/>
        <socket-binding name="iiop-ssl" interface="unsecure" port="3529"/>
        <socket-binding name="jgroups-mping" interface="private" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
        <socket-binding name="jgroups-tcp" interface="private" port="7600"/>
        <socket-binding name="jgroups-tcp-fd" interface="private" port="57600"/>
        <socket-binding name="jgroups-udp" interface="private" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
        <socket-binding name="jgroups-udp-fd" interface="private" port="54200"/>
        <socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
        <outbound-socket-binding name="mail-smtp">
            <remote-destination host="localhost" port="25"/>
        </outbound-socket-binding>
    </socket-binding-group>
</socket-binding-groups>
注意

管理接口的套接字配置在域控制器的 host.xml 文件中定义。

4.2.3. 配置套接字绑定

在定义套接字绑定时,您可以配置 portinterface 属性,以及多播设置,如 multicast-addressmulticast-port。有关所有可用套接字绑定属性的详情,请查看 Socket Binding Attributes 部分。

可以使用管理控制台或管理 CLI 配置套接字绑定。下列步骤介绍了添加套接字绑定组、添加套接字绑定和使用管理 CLI 配置套接字绑定设置。

  1. 添加新套接字绑定组。请注意,作为单机服务器运行时,无法执行此步骤。

    /socket-binding-group=new-sockets:add(default-interface=public)
  2. 添加套接字绑定。

    /socket-binding-group=new-sockets/socket-binding=new-socket-binding:add(port=1234)
  3. 将套接字绑定更改为使用默认接口,由套接字绑定组设置。

    /socket-binding-group=new-sockets/socket-binding=new-socket-binding:write-attribute(name=interface,value=unsecure)

以下示例显示了在上述步骤完成后 XML 配置可以如何进行。

<socket-binding-groups>
    ...
    <socket-binding-group name="new-sockets" default-interface="public">
        <socket-binding name="new-socket-binding" interface="unsecure" port="1234"/>
    </socket-binding-group>
</socket-binding-groups>

4.2.4. 端口偏移

端口偏移是一个数字偏移值,添加到该服务器的套接字绑定组中指定的所有端口值中。这使得服务器能够继承其套接字绑定组中定义的端口值,并提供偏移以确保它不与同一主机上的任何其他服务器冲突。例如,如果套接字绑定组的 HTTP 端口为 8080,并且服务器使用端口偏移 100,则其 HTTP 端口为 8180

以下是使用管理 CLI 为受管域中的服务器设置端口偏移 250 的示例。

/host=master/server-config=server-two/:write-attribute(name=socket-binding-port-offset,value=250)

端口偏移可用于受管域中的服务器和在同一主机上运行多个单机服务器。

使用 jboss.socket.binding.port-offset 属性启动单机服务器时,您可以传递端口偏移。

$ EAP_HOME/bin/standalone.sh -Djboss.socket.binding.port-offset=100

4.3. IPv6 地址

默认情况下,JBoss EAP 配置为使用 IPv4 地址运行。以下步骤演示了如何配置 JBoss EAP 以使用 IPv6 地址运行。

为 IPv6 地址配置 JVM 堆栈

更新启动配置,以首选 IPv6 地址。

  1. 打开启动配置文件。

    • 在作为单机服务器运行时,编辑 EAP_HOME/bin/standalone.conf 文件(或 standalone.conf.bat 用于 Windows Server)。
    • 在受管域中运行时,编辑 EAP_HOME/bin/domain.conf 文件(或对于 Windows Server 的 domain.conf.bat )。
  2. java.net.preferIPv4Stack 属性设置为 false

    -Djava.net.preferIPv4Stack=false
  3. 附加 java.net.preferIPv6Addresses 属性,并将它设为 true

    -Djava.net.preferIPv6Addresses=true

下例演示了在进行上述更改后,启动配置文件中的 JVM 选项如何显示。

# Specify options to pass to the Java VM.
#
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms1303m -Xmx1303m -Djava.net.preferIPv4Stack=false"
   JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
   JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv6Addresses=true"
else

更新 IPv6 地址的接口声明

配置中的默认接口值可以更改为 IPv6 地址。例如,以下管理 CLI 命令将 management 接口设置为 IPv6 环回地址(::1)。

/interface=management:write-attribute(name=inet-address,value="${jboss.bind.address.management:[::1]}")

以下示例演示了在运行上述命令后 XML 配置可以如何进行。

<interfaces>
    <interface name="management">
        <inet-address value="${jboss.bind.address.management:[::1]}"/>
    </interface>
    ....
</interfaces>

第 5 章 JBoss EAP 安全性

JBoss EAP 提供了为其自己接口和服务配置安全性的能力,并为其上运行的应用程序提供安全性。

第 6 章 JBoss EAP 类加载

JBoss EAP 使用模块化类加载系统来控制部署的应用程序的类路径。这个系统提供了比分层类加载程序的传统系统的灵活性和控制力。开发人员对应用程序可用的类进行精细控制,并可配置部署来忽略应用服务器提供的类,而代之之。

模块类加载程序将所有 Java 类分成名为模块的逻辑组。每个模块都可以定义其他模块的依赖项,以便将该模块中的类添加到自己的类路径中。由于每个部署的 JAR 和 WAR 文件都被视为模块,因此开发人员可以通过向其应用添加模块配置来控制其应用类路径的内容。

6.1. 模块

模块是用于类加载和依赖项管理的逻辑类分组。JBoss EAP 识别两种不同类型的模块: 静态模块和 动态。两者之间的主要区别在于它们的打包方式。

静态模块

静态模块在应用服务器的 EAP_HOME/modules/ 目录中定义。每个模块都作为子目录存在,如 EAP_HOME/modules/com/mysql/。然后,每个模块目录都包含一个插槽子目录,默认为 main,其中包含 module.xml 配置文件和任何所需的 JAR 文件。所有应用服务器提供的 API 都作为静态模块提供,包括 Java EE API 和其他 API。

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>

模块名称(com.mysql)必须与模块的目录结构匹配,不包括插槽名称()。

如果很多应用程序都使用相同的第三方库的同一服务器上,创建自定义静态模块会很有用。管理员可以由管理员创建并安装这些库,而不是将这些库与每个应用绑定。然后,应用程序可以声明对自定义静态模块的明确依赖。

JBoss EAP 分发中提供的模块位于 EAP_HOME/modules 目录中的 系统 目录中。这样会使它们与第三方提供的任何模块分开。任何在 JBoss EAP 之上提供的产品也将其模块安装到 系统 目录中。

用户必须确保将自定义模块安装到 EAP_HOME/modules 目录中,每个模块使用一个目录。这样可确保 系统 目录中已存在的自定义模块版本已加载,而不是提供的版本。这样,用户提供的模块将优先于系统模块。

如果您使用 JBOSS_MODULEPATH 环境变量更改 JBoss EAP 搜索模块的位置,则该产品将在指定的位置之一中查找 系统 子目录结构。系统 结构必须在使用 JBOSS_MODULEPATH 指定的位置存在。

动态模块

动态模块由应用服务器为每个 JAR 或 WAR 部署(或 EAR 中的子部署)创建和加载。动态模块的名称派生自部署的存档的名称。由于部署作为模块加载,因此它们可以配置依赖项,并被其他部署用作依赖项。

仅在需要时加载模块。这通常仅在部署应用程序具有显式或隐式依赖项时才发生。

6.2. 模块依赖项

模块依赖项是声明,一个模块需要一个或多个其他模块的类才能正常工作。当 JBoss EAP 加载模块时,模块类加载程序会解析该模块的依赖项,并将每个依赖项中的类添加到其类路径中。如果无法找到指定的依赖项,则模块将无法加载。

注意

有关 模块和模块 类加载系统的完整详情,请参阅 模块部分。

部署的应用程序(例如 JAR 或 WAR)被加载为动态模块,并使用依赖项来访问 JBoss EAP 提供的 API。

有两种类型的依赖项: 显式隐式

显式依赖项
开发人员在配置文件中声明了显式依赖项。静态模块可以在其 module.xml 文件中声明依赖项。动态模块可以在部署的 MANIFEST.MFjboss-deployment-structure.xml 部署描述符中声明依赖项。
隐式依赖项

当部署中存在特定条件或 meta-data 时,JBoss EAP 会自动添加隐式依赖项。JBoss EAP 提供的 Java EE 7 API 是通过检测部署中隐式依赖项来添加的模块示例。

也可以将部署配置为使用 jboss-deployment-structure.xml 部署描述符文件来排除特定的隐式依赖项。当应用程序捆绑一个特定版本的 JBoss EAP 将尝试作为隐式依赖项添加的库时,这很有用。

可选依赖项

显式依赖项可以指定为可选。加载可选依赖项失败将导致模块无法加载。但是,如果依赖项在以后可用,它不会 添加到模块的类路径中。加载模块时,依赖项必须可用。

导出依赖

模块的类路径仅包含自己的类,以及其即时依赖项。模块无法访问其其中一个依赖项的依赖关系类。但是,模块可以指定要导出显式依赖项。导出的依赖项提供给依赖于导出它的模块的任何模块。

例如,模块 A 依赖于模块 B,模块 B 依赖于模块 C。模块 A 可以访问模块 B 的类,模块 B 可以访问模块 C 类。模块 A 无法访问模块 C 类,除非:

  • 模块 A 声明对模块 C 的明确依赖,或者
  • 模块 B 导出其对模块 C 的依赖项。

全局模块

全局模块是 JBoss EAP 作为各个应用的依赖项的模块。通过将任何模块添加到 JBoss EAP 的全球模块列表,即可成为全局模块。它不需要对模块进行更改。

详情请参阅 定义全局模块 部分。

6.3. 创建自定义模块

可以添加自定义静态模块,使资源可供在 JBoss EAP 上运行的部署使用。您可以手动创建 模块,也可以使用 管理 CLI 创建模块。

创建模块后,如果应用程序需要提供其资源 ,您必须将模块添加为依赖项

手动创建自定义模块

您可以按照以下步骤手动创建自定义模块。

  1. EAP_HOME/modules/ 目录中创建适当的目录结构。

    示例:创建 MySQL JDBC 驱动程序目录结构

    $ cd EAP_HOME/modules/
    $ mkdir -p com/mysql/main

  2. 将 JAR 文件或其他必要的资源复制到 main/ 子目录。

    示例:复制 MySQL JDBC 驱动程序 JAR

    $ cp /path/to/mysql-connector-java-5.1.36-bin.jar EAP_HOME/modules/com/mysql/main/

  3. main/ 子目录中创建 module.xml 文件,在 文件中指定适当的资源和依赖项。

    示例:MySQL JDBC 驱动程序 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 创建自定义模块

您可以使用 module add management CLI 命令来创建自定义模块。

重要

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

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

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

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

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

将模块添加为依赖模块

要让您的应用能够访问此模块的资源,您需要将该模块添加为依赖项。

例如,以下步骤添加一个 JAR 文件,其中包含多个属性文件作为模块,并定义一个全局模块,以便应用随后加载这些属性。

  1. 将 JAR 文件添加为核心模块。

    module add --name=myprops --resources=/path/to/properties.jar
  2. 将此模块定义为全局模块,以便所有部署都可用。

    /subsystem=ee:list-add(name=global-modules,value={name=myprops})
  3. 然后,应用可以从 JAR 中包含的其中一个属性文件中检索属性。

    Thread.currentThread().getContextClassLoader().getResource("my.properties");

6.4. 删除自定义模块

可以 手动删除 自定义静态模块,也可以使用 管理 CLI 删除。

手动删除自定义模块

在手动删除模块之前,请确保已部署的应用或服务器配置中的其他应用不需要它,如数据源。

要删除自定义模块,请删除 EAP_HOME/modules/ 下的模块目录,其中包含其 module.xml 文件及其关联的 JAR 文件或其他资源。例如,删除 EAP_HOME/modules/com/mysql/main/ 目录,以删除 插槽中的自定义 MySQL JDBC 驱动程序模块。

使用管理 CLI 删除自定义模块

您可以使用 module remove management CLI 命令删除自定义模块。

重要

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

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

    $ EAP_HOME/bin/jboss-cli.sh
  3. 使用 module remove 管理 CLI 命令删除自定义模块。

    module remove --name=MODULE_NAME
    • 如果要删除的模块位于 以外的插槽中,请使用 --slot 参数。

    示例:删除 MySQL 模块

    module remove --name=com.mysql

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

6.5. 定义全局模块

可以为 JBoss EAP 定义全局模块列表,这将将模块作为依赖项添加到所有部署中。

注意

您必须知道要配置为全局模块的模块名称。有关包含的模块的完整列表以及是否被支持,请参阅红帽客户门户网站中的 Red Hat JBoss Enterprise Application Platform 7 包含的模块。有关部署中模块的命名约定,请参阅 Dynamic Module Naming 部分。

使用以下管理 CLI 命令定义全局模块的列表:

/subsystem=ee:write-attribute(name=global-modules,value=[{name=MODULE_NAME_1},{name=MODULE_NAME_2}]

使用以下管理 CLI 命令,为现有全局模块列表添加单个模块。

/subsystem=ee:list-add(name=global-modules,value={name=MODULE_NAME})

也可以通过管理控制台,从 Configuration 选项卡中导航到 EE 子系统并选择 Global Modules 部分来添加和删除全局模块。

6.6. 配置子部署隔离

企业存档(EAR)中的每个子部署都是一个动态模块,它都有自己的类加载程序。子部署始终对父模块具有隐式依赖,这使得它们能够访问 EAR/lib 中的类。默认情况下,子部署可以访问该 EAR 内其他子部署的资源。

如果您不希望子部署访问属于其他子部署的类,则 JBoss EAP 中可以启用严格的子部署隔离。此设置将影响所有部署。

为所有部署启用子部署模块隔离

可以使用管理控制台或来自 ee 子系统的管理 CLI 来启用或禁用子部署隔离。默认情况下,子部署隔离设置为 false,它允许子部署访问 EAR 部署中其他子部署的资源。

使用以下管理 CLI 启用 EAR 子部署隔离:

/subsystem=ee:write-attribute(name=ear-subdeployments-isolated,value=true)

EAR 中的子部署将不再能够访问其他子部署中的资源。

6.7. 定义外部 JBoss EAP 模块目录

JBoss EAP 模块的默认目录是 EAP_HOME/modules。您可以使用 JBOSS_MODULEPATH 变量为 JBoss EAP 模块指定不同的目录。按照以下步骤在 JBoss EAP 启动配置文件中设置此变量。

注意

您还可以将 JBOSS_MODULEPATH 设置为环境变量,而不是在 JBoss EAP 启动配置文件中设置此设置。

  1. 编辑启动配置文件。

    • 在作为单机服务器运行时,编辑 EAP_HOME/bin/standalone.conf 文件(或 standalone.conf.bat 用于 Windows Server)。
    • 在受管域中运行时,编辑 EAP_HOME/bin/domain.conf 文件(或对于 Windows Server 的 domain.conf.bat )。
  2. 设置 JBOSS_MODULEPATH 变量,例如:

    JBOSS_MODULEPATH="/path/to/modules/directory/"

    要指定目录列表,请使用冒号(:)来限定目录列表。

    注意

    对于 Windows Server,使用以下语法设置 JBOSS_MODULEPATH 变量:

    set "JBOSS_MODULEPATH /path/to/modules/directory/"

    要指定目录列表,请使用 分号()来限制目录列表。

6.8. 动态模块命名约定

JBoss EAP 将所有部署加载为模块,它们根据以下约定命名:

  • 使用以下格式命名 WAR 和 JAR 文件的部署:

    deployment.DEPLOYMENT_NAME

    例如,inventory.warstore.jar 将分别包含 deployment.inventory.wardeployment.store.jar 的模块名称。

  • Enterprise 归档(EAR)中的子部署使用以下格式命名:

    deployment.EAR_NAME.SUBDEPLOYMENT_NAME

    例如,企业存档 accounts.ear 中的 report.war 的子部署将具有 deployment.accounts.ear. reports.war 的模块名称。

第 7 章 部署应用程序

JBoss EAP 具有一系列应用程序部署和配置选项,供管理员和开发人员使用。对于管理员,管理控制台 和管理 CLI 提供理想的图形和命令行界面来管理生产环境中的应用程序部署。对于开发人员,应用部署测试选项的范围包括可配置的文件系统 部署扫描程序HTTP API、红帽 JBoss Developer Studio 和 Maven 等 IDE。

在部署应用程序时,您可能希望通过将 org.jboss.metadata.parser.validate 系统属性设为 true 来为部署描述符启用验证。这可以通过以下方法之一完成:

  • 在启动服务器时。

    $ EAP_HOME/bin/standalone.sh -Dorg.jboss.metadata.parser.validate=true
  • 通过以下管理 CLI 命令将其添加到服务器配置:

    /system-property=org.jboss.metadata.parser.validate:add(value=true)

7.1. 使用管理 CLI 部署应用程序

使用管理 CLI 部署应用可让您从单一命令行界面中获益,并且能够创建和运行部署脚本。您可以使用此脚本编写功能来配置特定的应用程序部署和管理场景。当作为独立服务器运行时,您可以管理单个服务器的部署,或者在受管域中运行时整个服务器网络。

7.1.1. 使用管理 CLI 将应用程序部署到单机服务器

部署应用程序

在管理 CLI 中,使用 deploy 命令并指定应用部署的路径。

deploy /path/to/test-application.war

成功的部署不会生成管理 CLI 的任何输出,但服务器日志会显示部署消息。

WFLYSRV0027: Starting deployment of "test-application.war" (runtime-name: "test-application.war")
WFLYUT0021: Registered web context: /test-application
WFLYSRV0010: Deployed "test-application.war" (runtime-name : "test-application.war")

该应用已被成功部署。

取消部署应用

从管理 CLI,使用 undeploy 命令并指定部署名称。

  • 取消部署应用,再删除部署内容。

    undeploy test-application.war
  • 取消部署应用,而不从存储库中删除部署内容。

    undeploy test-application.war --keep-content

    这与从管理控制台禁用部署相同。

成功取消部署不会向管理 CLI 生成任何输出,但服务器日志会显示未部署的消息。

WFLYUT0022: Unregistered web context: /test-application
WFLYSRV0028: Stopped deployment test-application.war (runtime-name: test-application.war) in 62ms
WFLYSRV0009: Undeployed "test-application.war" (runtime-name: "test-application.war")

该应用已成功取消部署。

列出部署

从管理 CLI,使用 deployment-info 命令列出部署信息。

deployment-info

输出中将显示有关每个部署的详细信息,如运行时名称、状态以及是否启用。

NAME                 RUNTIME-NAME         PERSISTENT ENABLED STATUS
jboss-helloworld.war jboss-helloworld.war true       true    OK
test-application.war test-application.war true       true    OK

您还可以使用 --name 参数根据名称过滤显示的部署。

7.1.2. 使用管理 CLI 在受管域中部署应用

部署应用程序

在管理 CLI 中,使用 deploy 命令并指定应用部署的路径。您还必须指定应部署到的服务器组。

  • 将应用部署到所有服务器组。

    deploy /path/to/test-application.war --all-server-groups
  • 将应用部署到特定的服务器组。

    deploy /path/to/test-application.war --server-groups=main-server-group,other-server-group

成功的部署不会向管理 CLI 生成任何输出,但服务器日志会显示每个受影响服务器的部署消息。

[Server:server-one] WFLYSRV0027: Starting deployment of "test-application.war" (runtime-name: "test-application.war")
[Server:server-one] WFLYUT0021: Registered web context: /test-application
[Server:server-one] WFLYSRV0010: Deployed "test-application.war" (runtime-name : "test-application.war")

该应用已成功部署到受管域中的相应服务器组。

取消部署应用

从管理 CLI,使用 undeploy 命令并指定部署名称。您还必须指定应取消部署应用的服务器组。

  • 使用该部署,从所有服务器组取消部署应用。

    undeploy test-application.war --all-relevant-server-groups
  • 从特定的服务器组取消部署应用。请注意,需要 --keep-content 参数,因为内容必须保留在具有该部署的其他服务器组的存储库中。

    undeploy test-application.war --server-groups=other-server-group --keep-content

    这与从管理控制台禁用部署相同。

成功取消部署不会向管理 CLI 生成任何输出,但服务器日志会为每个受影响的服务器显示未部署消息。

[Server:server-one] WFLYUT0022: Unregistered web context: /test-application
[Server:server-one] WFLYSRV0028: Stopped deployment test-application.war (runtime-name: test-application.war) in 74ms
[Server:server-one] WFLYSRV0009: Undeployed "test-application.war" (runtime-name: "test-application.war")

该应用已成功取消部署。

列出部署

从管理 CLI,使用 deployment-info 命令列出部署信息。您可以根据部署名称或服务器组列出部署信息。

按名称显示部署信息:

deployment-info --name=jboss-helloworld.war

输出将列出每个服务器组中的部署及其状态。

NAME                 RUNTIME-NAME
jboss-helloworld.war jboss-helloworld.war

SERVER-GROUP       STATE
main-server-group  enabled
other-server-group added

按服务器组显示部署信息:

deployment-info --server-group=other-server-group

输出将列出指定服务器组的部署及其状态。

NAME                 RUNTIME-NAME         STATE
jboss-helloworld.war jboss-helloworld.war added
test-application.war test-application.war enabled

您还可以使用 deploy -l 命令列出域中的所有部署。

7.2. 使用管理控制台部署应用程序

使用管理控制台部署应用程序可让您受益于易于使用的图形界面。您可以看到哪些应用程序部署到您的服务器或服务器组,您可以根据需要启用、禁用或移除内容存储库中的应用程序。

7.2.1. 使用管理控制台将应用程序部署到单机服务器

可以从 JBoss EAP 管理控制台的 Deployments 选项卡查看和管理部署。

部署应用程序

Add 按钮,并使用 New Deployment 向导来部署应用程序。您可以选择通过 上传部署或创建 非受管部署 来部署应用程序。部署默认是启用的。

  • 上传部署

    上传要复制到服务器的内容存储库并由 JBoss EAP 管理的应用。

  • 创建非受管部署

    指定部署的位置。此部署不会复制到服务器的内容存储库,也不会由 JBoss EAP 管理。请注意,扩展部署只支持非受管部署。

取消部署应用

选择部署,再选择 Remove 选项以取消部署应用。这会取消部署,并将它从内容存储库移除。

禁用应用程序

选择部署,再选择 Disable 选项来禁用应用。这会取消部署部署,但不会将其从内容存储库中删除。

替换应用程序

选择部署并选择 替换 选项。选择部署的新版本,其名称必须与原始名称相同,然后单击 Finish。这会取消部署并删除原始部署版本,然后部署新版本。

7.2.2. 使用管理控制台在受管域中部署应用程序

在 JBoss EAP 管理控制台的 Deployments 选项卡中,可以使用以下方法查看和管理部署:

  • 内容存储库

    所有受管和非受管部署都列在 Content Repository 部分中。部署可以在此处添加并分配给服务器组。

  • 未分配的内容

    未分配给任何服务器组的部署列在 Unassigned Content 部分。可将部署分配到服务器组或此处删除。

  • 服务器组

    分配给一个或多个服务器组的部署列在 Server Groups 部分。可以在此处直接启用部署并添加到服务器组中。

部署应用程序
  1. 内容存储库单击添加按钮
  2. 选择通过 上传部署 或创建 非受管部署来部署应用
  3. 按照提示部署应用。

    请注意,必须先将部署分配给服务器组,然后才能启用。

也可以将部署添加到服务器组,并在一个步骤中通过添加 Server Groups 的部署来启用。

将应用程序分配给服务器组
  1. Unassigned Content,选择一个部署并单击 Assign 按钮。
  2. 选择应为其分配此部署的一个或多个服务器组。
  3. (可选)选择在所选服务器组上启用部署的选项。
从服务器组取消分配应用程序
  1. Server Groups,选择适当的服务器组。
  2. 选择所需的部署,再单击 Unassign 按钮。

通过选择 Content Repository 中的部署的 Unassign 按钮,也可以一次从多个服务器组取消分配部署。

取消部署应用
  1. 如果部署仍被分配到任何服务器组,请务必取消分配部署。
  2. Content Repository,选择部署并 单击删除按钮

这会取消部署,并将它从内容存储库移除。

禁用应用程序
  1. Server Groups,选择适当的服务器组。
  2. 选择所需的部署,再单击 Disable 按钮。

这会取消部署部署,但不会将其从内容存储库中删除。

替换应用程序
  1. Content Repository,选择部署并单击 replace 按钮。
  2. 选择部署的新版本,其名称必须与原始名称相同,然后单击 Finish

这会取消部署并删除原始部署版本,然后部署新版本。

7.3. 使用部署扫描器部署应用程序

部署扫描程序监控要部署的应用程序的部署目录。默认情况下,部署扫描程序每 5 秒扫描 EAP_HOME/standalone/deployments/ 目录以进行更改。标记文件用于指示部署的状态,以及针对部署触发操作,如取消部署或重新部署。

虽然建议在生产环境中使用管理控制台或管理 CLI 进行应用部署,但为方便开发人员使用部署扫描程序进行部署。这使得用户可以以适合快速开发周期的方式构建和测试应用程序。此外,部署扫描程序不应与其他部署方法一起使用。

部署扫描程序仅在将 JBoss EAP 作为单机服务器运行时可用。

7.3.1. 使用部署扫描器将应用程序部署到单机服务器

部署扫描程序可以配置为允许或禁止自动部署 XML、ziped 和 exploded 内容。如果禁用了自动部署,您必须手动创建标记文件来触发部署操作。有关可用标记文件类型及其目的的更多信息,请参阅 Deployment Scanner Marker Files 部分。

默认情况下,启用了 XML 和 zipped 内容的自动部署。有关为每个内容类型配置自动部署的详情,请参阅配置 部署扫描器

警告

为方便开发人员使用部署扫描程序提供部署扫描程序,不建议在生产环境中使用。它还不应与其他部署方法一起使用。

部署应用程序

将内容复制到部署文件夹。

$ cp /path/to/test-application.war EAP_HOME/standalone/deployments/

如果启用了自动部署,则该文件将自动获取、部署和 .deployed 标记文件。如果没有启用自动部署,则需要手动添加 .dodeploy 标记文件来触发部署。

$ touch EAP_HOME/standalone/deployments/test-application.war.dodeploy
取消部署应用

通过删除 .deployed 标记文件来触发未部署。

$ rm EAP_HOME/standalone/deployments/test-application.war.deployed

如果启用了自动部署,您也可以删除 test-application.war 文件,该文件会触发 undeployment。请注意,这不适用于展开的部署。

重新部署应用程序

创建 .dodeploy 标记文件以启动重新部署。

$ touch EAP_HOME/standalone/deployments/test-application.war.dodeploy

7.3.2. 配置部署扫描器

部署扫描程序可以使用管理控制台或管理 CLI 进行配置。您可以配置部署扫描程序的行为,如扫描间隔、部署文件夹位置和自动部署某些应用程序文件类型。您还可以完全禁用部署扫描程序。

有关所有可用部署扫描程序属性的详情,请参阅 Deployment Scanner Attributes 部分。

使用以下管理 CLI 命令配置默认的部署扫描程序。

禁用 Deployment Scanner
/subsystem=deployment-scanner/scanner=default:write-attribute(name=scan-enabled,value=false)

这将 禁用默认的部署 扫描程序。

更改 Scan Interval
/subsystem=deployment-scanner/scanner=default:write-attribute(name=scan-interval,value=10000)

这会将扫描间隔时间从 5000 毫秒(以秒为单位)更新为 10000 毫秒(秒)。

更改部署文件夹
/subsystem=deployment-scanner/scanner=default:write-attribute(name=path,value=/path/to/deployments)

这会将 deployment 文件夹的位置从 EAP_HOME/standalone/deployments 的默认位置更改为 /path/to/deployments

path 值将被视为绝对路径,除非指定了 relative-to 属性,在这种情况下,它将相对于该路径。

启用 Exploded 内容的自动部署
/subsystem=deployment-scanner/scanner=default:write-attribute(name=auto-deploy-exploded,value=true)

这可启用自动部署 exploded 内容,这默认是禁用的。

禁用 Zipped 内容自动部署
/subsystem=deployment-scanner/scanner=default:write-attribute(name=auto-deploy-zipped,value=false)

这禁用部署 zipped 内容的自动部署,这默认是启用的。

禁用 XML 内容自动部署
/subsystem=deployment-scanner/scanner=default:write-attribute(name=auto-deploy-xml,value=false)

这禁用自动部署 XML 内容,该内容默认是启用的。

7.3.3. 定义自定义部署扫描器

可以使用管理 CLI 或从管理控制台中的 Configuration 选项卡导航到 Deployment Scanners 子系统来添加新的部署扫描程序。这将定义一个新目录来扫描用于部署。默认部署扫描程序监控 EAP_HOME/standalone/deployments。有关配置 现有部署扫描程序的详情,请参阅配置 Deployment Scanner

以下管理 CLI 命令添加了一个新的部署扫描程序,它将每 5 秒检查 EAP_HOME/standalone/new_deployment_dir

/subsystem=deployment-scanner/scanner=new-scanner:add(path=new_deployment_dir,relative-to=jboss.server.base.dir,scan-interval=5000)
注意

指定的目录必须已经存在,否则此命令将失败,并显示错误。

定义了新的部署扫描程序,并将监控指定的目录以进行部署。

7.4. 使用 Maven 部署应用程序

使用 Apache Maven 部署应用程序可让您将部署到 JBoss EAP 轻松合并到现有的开发工作流中。

您可以使用 Maven 使用 WildFly Maven 插件 将应用部署到 JBoss EAP,它提供了简单的操作,以部署和取消部署应用到应用服务器。

7.4.1. 使用 Maven 将应用程序部署到单机服务器

以下说明演示了如何使用 Maven 将 JBoss EAP helloworld 快速启动部署和取消部署到单机服务器:

有关 JBoss EAP 快速入门的更多信息,请参阅 JBoss EAP 入门指南中的使用 Quickstart 示例

部署应用程序

在 Maven pom.xml 文件中初始化 WildFly Maven 插件。这应该已在 JBoss EAP quickstart pom.xml 文件中配置。

<plugin>
  <groupId>org.wildfly.plugins</groupId>
  <artifactId>wildfly-maven-plugin</artifactId>
  <version>${version.wildfly.maven.plugin}</version>
</plugin>

helloworld quickstart 目录中执行以下 Maven 命令。

$ mvn clean install wildfly:deploy

在为部署发出 Maven 命令后,终端窗口会显示指示成功部署的以下输出:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.981 s
[INFO] Finished at: 2015-12-23T15:06:13-05:00
[INFO] Final Memory: 21M/231M
[INFO] ------------------------------------------------------------------------

部署也可以通过查看活动服务器实例的服务器日志来确认。

WFLYSRV0027: Starting deployment of "jboss-helloworld.war" (runtime-name: "jboss-helloworld.war")
WFLYUT0021: Registered web context: /jboss-helloworld
WFLYSRV0010: Deployed "jboss-helloworld.war" (runtime-name : "jboss-helloworld.war")
取消部署应用

helloworld quickstart 目录中执行以下 Maven 命令。

$ mvn wildfly:undeploy

在发出 Maven 命令取消部署后,终端窗口将显示以下指示未部署成功的输出:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.237 s
[INFO] Finished at: 2015-12-23T15:09:10-05:00
[INFO] Final Memory: 10M/183M
[INFO] ------------------------------------------------------------------------

也可以通过查看活动服务器实例的服务器日志来确认未部署。

WFLYUT0022: Unregistered web context: /jboss-helloworld
WFLYSRV0028: Stopped deployment jboss-helloworld.war (runtime-name: jboss-helloworld.war) in 27ms
WFLYSRV0009: Undeployed "jboss-helloworld.war" (runtime-name: "jboss-helloworld.war")

7.4.2. 使用 Maven 在受管域中部署应用

以下说明演示了如何使用 Maven 在受管域中部署和取消部署 JBoss EAP helloworld 快速启动:

有关 JBoss EAP 快速入门的更多信息,请参阅 JBoss EAP 入门指南中的使用 Quickstart 示例

部署应用程序

在受管域中部署应用程序时,您必须指定应部署到的服务器组。这在 Maven pom.xml 文件中配置。

pom.xml 中的以下配置初始化 WildFly Maven 插件,并将 main-server-group 指定为应部署到的服务器组。

<plugin>
  <groupId>org.wildfly.plugins</groupId>
  <artifactId>wildfly-maven-plugin</artifactId>
  <version>${version.wildfly.maven.plugin}</version>
  <configuration>
    <domain>
      <server-groups>
        <server-group>main-server-group</server-group>
      </server-groups>
    </domain>
  </configuration>
</plugin>

helloworld quickstart 目录中执行以下 Maven 命令。

$ mvn clean install wildfly:deploy

在为部署发出 Maven 命令后,终端窗口会显示指示成功部署的以下输出:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.005 s
[INFO] Finished at: 2016-09-02T14:36:17-04:00
[INFO] Final Memory: 21M/226M
[INFO] ------------------------------------------------------------------------

部署也可以通过查看活动服务器实例的服务器日志来确认。

WFLYSRV0027: Starting deployment of "jboss-helloworld.war" (runtime-name: "jboss-helloworld.war")
WFLYUT0021: Registered web context: /jboss-helloworld
WFLYSRV0010: Deployed "jboss-helloworld.war" (runtime-name : "jboss-helloworld.war")
取消部署应用

helloworld quickstart 目录中执行以下 Maven 命令。

$ mvn wildfly:undeploy

在发出 Maven 命令取消部署后,终端窗口将显示以下指示未部署成功的输出:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.750 s
[INFO] Finished at: 2016-09-02T14:45:10-04:00
[INFO] Final Memory: 10M/184M
[INFO] ------------------------------------------------------------------------

也可以通过查看活动服务器实例的服务器日志来确认未部署。

WFLYUT0022: Unregistered web context: /jboss-helloworld
WFLYSRV0028: Stopped deployment jboss-helloworld.war (runtime-name: jboss-helloworld.war) in 106ms
WFLYSRV0009: Undeployed "jboss-helloworld.war" (runtime-name: "jboss-helloworld.war")

7.5. 使用 HTTP API 部署应用程序

通过 curl 命令,可以使用 HTTP API 将应用部署到 JBoss EAP。有关使用 HTTP API 的更多信息,请参阅 HTTP API 部分。

7.5.1. 使用 HTTP API 将应用部署到单机服务器

默认情况下,HTTP API 可通过 http://HOST:PORT/management 访问,例如 http://localhost:9990/management

部署应用程序
$ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "composite", "address" : [], "steps" : [{"operation" : "add", "address" : {"deployment" : "test-application.war"}, "content" : [{"url" : "file:/path/to/test-application.war"}]},{"operation" : "deploy", "address" : {"deployment" : "test-application.war"}}],"json.pretty":1}'
取消部署应用
$ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "composite", "address" : [], "steps" : [{"operation" : "undeploy", "address" : {"deployment" : "test-application.war"}},{"operation" : "remove", "address" : {"deployment" : "test-application.war"}}],"json.pretty":1}'

有关以编程方式生成 JSON 请求的更多信息,请参阅红帽知识库文章

7.5.2. 使用 HTTP API 在受管域中部署应用程序

默认情况下,HTTP API 可通过 http://HOST:PORT/management 访问,例如 http://localhost:9990/management

部署应用程序
  1. 将部署添加到内容存储库。

    $ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "add", "address" : {"deployment" : "test-application.war"}, "content" : [{"url" : "file:/path/to/test-application.war"}],"json.pretty":1}'
  2. 将部署添加到所需的服务器组。

    $ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "add", "address" : {"server-group" : "main-server-group","deployment":"test-application.war"},"json.pretty":1}'
  3. 将应用部署到服务器组。

    $ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "deploy", "address" : {"server-group" : "main-server-group","deployment":"test-application.war"},"json.pretty":1}'
取消部署应用
  1. 从分配给它的所有服务器组中删除部署。

    $ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "remove", "address" : {"server-group" : "main-server-group","deployment":"test-application.war"},"json.pretty":1}'
  2. 从内容存储库移除部署。

    $ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "remove", "address" : {"deployment" : "test-application.war"}, "json.pretty":1}'

7.6. 自定义部署行为

7.6.1. 为部署内容定义自定义目录

您可以为 JBoss EAP 定义自定义位置来存储部署的内容。

为单机服务器定义自定义目录

默认情况下,单机服务器部署的内容存储在 EAP_HOME/standalone/data/content 目录中。可以在启动服务器时传递 -Djboss.server.deploy.dir 参数来更改此位置。

$ EAP_HOME/bin/standalone.sh -Djboss.server.deploy.dir=/path/to/new_deployed_content

在 JBoss EAP 实例中,所选位置应是唯一的。

注意

jboss.server.deploy.dir 属性指定用于存储使用管理控制台或管理 CLI 部署的内容的目录。要定义由部署扫描程序监控的自定义部署目录,请参阅配置 部署扫描器

为受管域定义自定义目录

默认情况下,受管域的部署内容存储在 EAP_HOME/domain/data/content 目录中。可以在启动域时传递 -Djboss.domain.deployment.dir 参数来更改此位置。

$ EAP_HOME/bin/domain.sh -Djboss.domain.deployment.dir=/path/to/new_deployed_content

在 JBoss EAP 实例中,所选位置应是唯一的。

7.6.2. 控制部署的顺序

JBoss EAP 提供对服务器启动时部署顺序的精细控制。可以指定多个 EAR 文件中存在的应用程序的严格顺序,以及重启后顺序的持久性。

您可以使用 jboss-all.xml 部署描述符声明顶层部署之间的依赖项。

例如,如果您有一个 app.ear,它依赖于首先部署的 framework.ear,您可以创建 app.ear/META-INF/jboss-all.xml 文件,如下所示。

<jboss umlns="urn:jboss:1.0">
  <jboss-deployment-dependencies xmlns="urn:jboss:deployment-dependencies:1.0">
    <dependency name="framework.ear" />
  </jboss-deployment-dependencies>
</jboss>
注意

您可以使用部署的运行时名称作为 jboss-all.xml 文件中的依赖项名称。

这样可确保在 app.ear 之前部署 framework.ear

重要

虽然 jboss-all.xml 文件和其他部署描述符允许您声明服务器没有其他检测的依赖项,但它不是严格的排序功能。JBoss EAP 假设部署描述符中指定的所有依赖项都已部署或可用。如果缺少依赖项,JBoss EAP 不会自动部署它们,部署会失败。

7.6.3. 覆盖部署内容

部署覆盖 可用于将内容覆盖到现有的部署中,而无需物理修改部署存档的内容。它允许您在运行时覆盖部署描述符、JAR 文件、类、JSP 页面和其他文件,而无需重新构建存档。

如果您需要针对需要不同配置或设置的不同环境调整部署,这非常有用。例如,当通过应用程序生命周期将部署从开发、测试到阶段,最后进入生产环境时,您可能需要交换部署描述符,修改静态 Web 资源以更改应用程序的品牌,甚至将 JAR 库替换为不同的版本,具体取决于目标环境。对于需要更改配置但由于策略或安全限制而无法修改或破解存档的安装,它也非常有用。

在定义部署覆盖时,您可以在要替换部署存档中的 文件的文件系统中指定该文件。您还必须指定哪些部署应受到部署覆盖的影响。必须重新部署所有受影响的部署,才能使更改生效。

使用 deployment-overlay add management CLI 命令添加部署覆盖。

deployment-overlay add --name=new-deployment-overlay --content=WEB-INF/web.xml=/path/to/other/web.xml --deployments=test-application.war --redeploy-affected
注意

在受管域中,使用 --server-groups 指定适用的服务器组,或使用 --all-server-groups 指定所有服务器组。

创建后,您可以将内容添加到现有的 overlay 中,将覆盖链接到部署或移除覆盖。如需完整的使用详情,请执行 deployment-overlay --help

参数

name
部署覆盖的名称。
content
将文件系统上的文件映射到要替换的存档中的文件的逗号分隔列表。每个条目的格式是 ARCHIVE_PATH=FILESYSTEM_PATH
部署
此覆盖将链接到的以逗号分隔的部署列表。
redeploy-affected
重新部署所有受影响的部署。

7.6.4. 使用 Rollout 计划

关于 Rollout 计划

在受管域中,针对域或主机级别资源的操作可能会影响多个服务器。此类操作可以包括一个汇总计划,详细说明操作要应用到服务器的顺序,以及用于详细说明在某些服务器上成功执行该操作时是否可以恢复操作的策略。如果没有指定 rollout 计划,则使用默认的 rollout 计划

以下是涉及五个服务器组的 rollout 计划示例。操作可以按顺序应用到服务器组(以类为 )或并发(并发组)。语法在 Rollout Plan Syntax 中详细介绍。

{"my-rollout-plan" => {"rollout-plan" => {
    "in-series" => [
        {"concurrent-groups" => {
            "group-A" => {
                "max-failure-percentage" => "20",
                "rolling-to-servers" => "true"
            },
            "group-B" => undefined
        }},
        {"server-group" => {"group-C" => {
            "rolling-to-servers" => "false",
            "max-failed-servers" => "1"
        }}},
        {"concurrent-groups" => {
            "group-D" => {
                "max-failure-percentage" => "20",
                "rolling-to-servers" => "true"
            },
            "group-E" => undefined
        }}
    ],
    "rollback-across-groups" => "true"
}}}

查看上例,将操作应用到域中的服务器在三个阶段完成。如果任何服务器组的策略触发跨服务器组回滚操作,则所有其他服务器组也会回滚。

  1. 服务器组 group-Agroup-B 将同时应用操作。该操作将应用于 group-A 系列中的服务器,而 group-B 中的所有服务器将同时处理该操作。如果 group-A 中超过 20% 的服务器无法应用该操作,它将在该组之间回滚。如果 group-B 中的任何服务器都无法应用操作,它将在该组中回滚。
  2. group-Agroup-B 中的所有服务器完成后,操作将应用到 group-C 中的服务器。这些服务器将同时处理操作。如果 group-C 中的多个服务器无法应用操作,它将在该组中回滚。
  3. group-C 中的所有服务器完成后,服务器组 group-Dgroup-E 将同时应用操作。该操作将应用于 group-D 中的服务器,而 group-E 中的所有服务器将同时处理该操作。如果 group-D 中超过 20% 的服务器无法应用该操作,它将在该组之间回滚。如果 group-E 中的任何服务器都无法应用操作,它将在该组中回滚。
rollout Plan Syntax

您可以通过以下任一方式指定推出部署计划。

  • 通过在 deploy 命令操作标头中定义 rollout 计划。详情请参阅使用 Rollout 计划 进行部署。
  • 通过使用 rollout-plan 命令存储推出部署计划,然后在 deploy 命令操作标头中引用计划名称。详情请参阅 使用 Stored Rollout 计划 进行部署。

虽然每种方法都有不同的初始命令,但这两种方法都使用 rollout 操作标头来定义 rollout 计划。这使用以下语法:

rollout (id=PLAN_NAME | SERVER_GROUP_LIST) [rollback-across-groups]
  • PLAN_NAME 是使用 rollout-plan 命令存储的 rollout 计划的名称。
  • SERVER_GROUP_LIST 是服务器组的列表。使用逗号()分隔多个服务器组,以指示应按顺序在每个服务器组上执行操作。使用 caret (^)分隔符表示应同时在每个服务器组上执行操作。

    • 对于每个服务器组,在括号中设置以下任何策略:以逗号分隔的多个策略。

      • rolling-to-servers :布尔值如果设为 true,则操作将应用于系列的组中的每个服务器。如果值为 false 或未指定,则操作将同时应用到组中的服务器。
      • max-failed-servers: 一个整数,它取组中的最大服务器数,在应恢复组的所有服务器上前无法应用该操作。如果没有指定默认值,则默认值为 0, 这意味着任何服务器上的失败都会在组间触发回滚。
      • max-failure-percentage: 0100 之间的整数,代表组中服务器总数的最大百分比,在应该在组的所有服务器上恢复它前无法应用该操作。如果没有指定默认值,则默认值为 0, 这意味着任何服务器上的失败都会在组间触发回滚。

        注意

        如果 max-failed-serversmax-failure-percentage 都被设置为非零值,则 max-failure-percentage 将具有优先权。

  • 跨组回滚 :一个布尔值,指示是否需要在一个服务器组中的所有服务器上回滚操作会在所有服务器组中触发回滚。默认值为 false
使用 Rollout 计划进行部署

您可以通过将 rollout 设置传递给 headers 参数,将 rollout 计划直接提供给 deploy 命令。有关格式的更多信息,请参阅 Rollout Plan Syntax

以下管理 CLI 命令利用部署计划将应用程序部署到 main-server-group 服务器组,该计划为串行部署指定 rolling-to-servers=true

deploy /path/to/test-application.war --server-groups=main-server-group --headers={rollout main-server-group(rolling-to-servers=true)}
使用存储的 Rollout 计划进行部署

由于推出部署计划可能比较复杂,您可以选择存储推出部署计划的详细信息。这可让您在使用 rollout 计划名称时引用 rollout 计划名称,而不必每次都需要 rollout 计划的完整详情。

  1. 使用 rollout-plan 管理 CLI 命令存储推出部署计划。有关格式的更多信息,请参阅 Rollout Plan Syntax

    rollout-plan add --name=my-rollout-plan --content={rollout main-server-group(rolling-to-servers=false,max-failed-servers=1),other-server-group(rolling-to-servers=true,max-failure-percentage=20) rollback-across-groups=true}

    这会创建以下部署计划。

    "rollout-plan" => {
        "in-series" => [
            {"server-group" => {"main-server-group" => {
                "rolling-to-servers" => false,
                "max-failed-servers" => 1
            }}},
            {"server-group" => {"other-server-group" => {
                "rolling-to-servers" => true,
                "max-failure-percentage" => 20
            }}}
        ],
        "rollback-across-groups" => true
    }
  2. 在部署应用程序时指定存储的 rollout 计划名称。

    以下管理 CLI 命令使用 my-rollout-plan 存储的 rollout 计划将应用程序部署到所有服务器组。

    deploy /path/to/test-application.war --all-server-groups --headers={rollout id=my-rollout-plan}
删除 Stored Rollout 计划

您可以通过指定要删除的 rollout 计划的名称,使用 rollout-plan 管理 CLI 命令删除存储的 rollout 计划。

rollout-plan remove --name=my-rollout-plan
默认 Rollout 计划

所有影响多个服务器的操作都将通过推出部署计划来执行。如果在操作请求中没有指定 rollout 计划,则会生成默认的 rollout 计划。计划具有以下特征:

  • 将只有一个高级别阶段。受操作影响的所有服务器组都将同时应用操作。
  • 在每个服务器组中,操作将同时应用到所有服务器。
  • 在服务器组中的任何服务器上失败将导致跨组进行回滚。
  • 任何服务器组失败将导致回滚所有其他服务器组。

第 8 章 域管理

本节讨论特定于受管域工作模式的概念和配置。

有关保护受管域的详情,请参考 JBoss EAP 如何配置服务器安全 指南中的 保护 受管域部分。

8.1. 关于受管域

受管域工作模式允许从单一控制点管理多个 JBoss EAP 实例。

集中管理的 JBoss EAP 服务器集合称为域的成员。域中的所有 JBoss EAP 实例共享一个通用管理策略。

域由一个域控制器、一个或多个主机控制器组成,以及每个主机零个或多个服务器组。

受管域。

域控制器 是控制域的核心点。它确保每个服务器都根据域的管理策略进行配置。域控制器也是主机控制器。

主机控制器 是与域控制器交互的物理或虚拟主机,用于控制其主机上运行的应用程序服务器实例的生命周期,并协助域控制器管理它们。每个主机可以包含多个服务器组。

服务器组 是一组 服务器实例,其上安装了 JBoss EAP,并作为一个进行管理和配置。域控制器管理部署到服务器组中的 和 应用的配置。因此,服务器组中的每个服务器共享相同的配置和部署。

主机控制器绑定到特定的物理(或虚拟)主机。如果您使用不同的配置,您可以在同一硬件上运行多个主机控制器,确保它们的端口和其他资源不会冲突。域控制器、单一主机控制器和多个服务器可能在同一物理系统上在同一 JBoss EAP 实例内运行。

8.1.1. 关于域控制器

域控制器是充当域的中央管理点的 JBoss EAP 服务器实例。一个主机控制器实例配置为充当域控制器。

域控制器的主要职责是:

  • 维护域的中央管理策略。
  • 确保所有主机控制器都知道其当前内容。
  • 帮助主机控制器确保根据此策略配置所有正在运行的 JBoss EAP 服务器实例。

默认情况下,中央管理策略存储在 EAP_HOME/domain/configuration/domain.xml 文件中。此文件在设为作为域控制器运行的主机控制器的此目录中是必需的。

domain.xml 文件包含可供域中的服务器使用的配置集配置。配置文件包含 该配置集 中提供的各种子系统的详细设置。域配置还包括套接字组和服务器组定义的定义。

注意

只要主机和服务器正在运行 JBoss EAP 6.2 或更高版本,JBoss EAP 7 域控制器就可以管理 JBoss EAP 6 主机和服务器。如需更多信息,请参阅配置 JBoss EAP 7 域控制器以管理 JBoss EAP 6 实例

如需更多信息,请参阅 启动受管域 和配置域控制器 部分

8.1.2. 关于主机控制器

主机控制器的主要职责是服务器管理。它委派域管理任务,并负责启动和停止其主机上运行的独立应用服务器进程。

它与域控制器交互,以帮助管理服务器和域控制器之间的通信。域的多个主机控制器只能与单个域控制器交互。因此,在单个域模式上运行的所有主机控制器和服务器实例都具有单一域控制器,并且必须属于同一域。

默认情况下,每个主机控制器从位于主机文件系统上解压缩 JBoss EAP 安装文件中的 EAP_HOME/domain/configuration/host.xml 文件中读取其配置。host.xml 文件包含特定于特定主机的以下配置信息:

  • 服务器实例的名称旨在从此安装运行。
  • 特定于本地物理安装的配置。例如,domain.xml 中声明的命名接口定义可以映射到 host.xml 中的实际机器特定 IP 地址。以及 domain.xml 中的抽象路径名称可以映射到 host.xml 中的实际文件系统路径。
  • 以下任何配置:

    • 主机控制器如何联系域控制器以注册自身并访问域配置。
    • 如何查找和联系远程域控制器。
    • 主机控制器是充当域控制器

如需更多信息,请参阅 启动受管域 和 配置主机控制器 部分

8.1.3. 关于进程控制器

进程控制器是一个小的轻量级进程,负责生成主机控制器进程和监控其生命周期。如果主机控制器崩溃,进程控制器将重启它。它还会根据主机控制器的指示启动服务器进程,但它不会自动重新启动崩溃的服务器进程。

进程控制器日志记录到 EAP_HOME/domain/log/process-controller.log 文件。您可以使用 PROCESS_CONTROLLER_JAVA_OPTS 变量在 EAP_HOME/bin/domain.conf 文件中为进程控制器设置 JVM 选项。

8.1.4. 关于服务器组

服务器组是管理并配置为一个服务器实例的集合。在受管域中,每个应用服务器实例都属于一个服务器组,即使它是唯一成员。组中的服务器实例共享同一配置集配置和部署的内容。

域控制器和主机控制器在其域中每个服务器组的所有服务器实例上执行标准配置。

域可由多个服务器组组成。不同的服务器组可以使用不同的配置文件和部署进行配置。域可以配置不同的服务器层,例如提供不同服务。

不同的服务器组也可以具有相同的配置文件和部署。例如,这可以允许在一个服务器组上升级应用程序的滚动应用程序升级,然后在第二个服务器组中更新,从而避免了完整的服务中断。

如需更多信息,请参阅配置服务器组部分

8.1.5. 关于服务器

服务器代表应用服务器实例。在受管域中,所有服务器实例都是服务器组的成员。主机控制器在自己的 JVM 进程中启动每一服务器实例。

如需更多信息,请参阅配置服务器 部分。

8.3. 启动受管域

8.3.1. 启动受管域

可使用 JBoss EAP 提供的 domain.shdomain.bat 脚本启动域控制器和主机控制器。有关所有可用启动脚本参数及其目的的完整列表,请使用 --help 参数或查看 服务器运行时参数 部分。

域控制器必须在域中任何服务器组中的任何从属服务器之前启动。首先启动域控制器,然后启动域中的任何其他关联的主机控制器。

启动域控制器

使用 host-master.xml 配置文件启动域控制器,该文件预配置了专用的域控制器。

$ EAP_HOME/bin/domain.sh --host-config=host-master.xml

根据您的域设置,您需要进行额外的配置来允许主机控制器连接。另请参阅以下示例域设置:

启动主机控制器

使用 host-slave.xml 配置文件启动主机控制器,该文件预配置了从属主机控制器。

$ EAP_HOME/bin/domain.sh  --host-config=host-slave.xml

根据您的域设置,您需要进行额外的配置连接,而不与域控制器冲突。另请参阅以下示例域设置:

8.3.2. 配置域控制器

重要

在使用 RPM 安装方法安装 JBoss EAP 时,不支持在同一计算机上配置多个域或主机控制器。

将主机配置为作为域控制器的 Act

如果在 <domain -controller> 声明中包含 <local /> 元素,则主机被指定为域控制器

<domain-controller>
  <local/>
</domain-controller>

用作域控制器的主机必须公开可由域中的其他主机访问的管理接口。不需要公开 HTTP (S)管理界面,但建议使用,因为它允许访问管理控制台。

<management-interfaces>
  <native-interface security-realm="ManagementRealm">
    <socket interface="management" port="${jboss.management.native.port:9999}"/>
  </native-interface>
  <http-interface security-realm="ManagementRealm" http-upgrade-enabled="true">
    <socket interface="management" port="${jboss.management.http.port:9990}"/>
  </http-interface>
</management-interfaces>

EAP_HOME/domain/configuration/host-master.xml 文件已预先配置了这些设置,以充当域控制器。

8.3.3. 配置主机控制器

重要

在使用 RPM 安装方法安装 JBoss EAP 时,不支持在同一计算机上配置多个域或主机控制器。

连接到域控制器

必须为主机控制器提供连接域控制器的方法,以便它可以将自身注册到域。这在配置的 < domain-controller& gt; 项中进行配置。

<domain-controller>
  <remote security-realm="ManagementRealm">
    <discovery-options>
      <static-discovery name="primary" protocol="${jboss.domain.master.protocol:remote}" host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9999}"/>
    </discovery-options>
  </remote>
</domain-controller>

EAP_HOME/domain/configuration/host-slave.xml 文件已预先配置了这些设置,以连接到域控制器。启动主机控制器时,您将需要提供 jboss.domain.master.address 属性。

$ EAP_HOME/bin/domain.sh --host-config=host-slave.xml -Djboss.domain.master.address=IP_ADDRESS

有关域控制器发现的更多信息,请参阅 域控制器发现和故障切换 部分。

根据您的域设置,您可能还需要为主机控制器提供身份验证,供域控制器进行身份验证。如需了解生成具有 secret 值的 管理用户以及使用该值更新主机控制器配置的详细信息,请参阅在两个机器上设置受管域。

8.3.3.1. 配置主机的名称

在受管域中运行的每个主机必须具有唯一的主机名。为了简化管理并允许在多个主机上使用相同的主机配置文件,服务器使用以下优先级来确定主机名:

  1. 如果设置,host.xml 配置文件中的 host 元素 name 属性。
  2. jboss.host.name 系统属性的值。
  3. 遵循 jboss.qualified.host.name 系统属性中最终句点(.)字符的值,如果没有最终句点(.)字符,则取整值。
  4. 遵循基于 POSIX 的操作系统的 HOSTNAME 环境变量中的句点(.)字符、Microsoft Windows 的 COMPUTERNAME 环境变量或整个值(如果没有最终句点(.)字符)。

主机控制器的名称在相关 host.xml 配置文件的 host 元素中配置,例如:

<host xmlns="urn:jboss:domain:4.0" name="host1">

使用以下步骤使用管理 CLI 更新主机名。

  1. 启动 JBoss EAP 主机控制器。

    $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml
  2. 启动管理 CLI,连接到域控制器。

    $ EAP_HOME/bin/jboss-cli.sh --connect --controller=DOMAIN_CONTROLLER_IP_ADDRESS
  3. 使用以下命令设置新的主机名:

    /host=EXISTING_HOST_NAME:write-attribute(name=name,value=NEW_HOST_NAME)

    这会修改 host-slave.xml 文件中的主机名属性,如下所示:

    <host name="NEW_HOST_NAME" xmlns="urn:jboss:domain:4.0">
  4. 重新加载主机控制器,以使更改生效。

    reload --host=EXISTING_HOST_NAME

如果主机控制器未在配置文件中设置名称,您也可以在运行时传递主机名。

$ EAP_HOME/bin/domain.sh --host-config=host-slave.xml  -Djboss.host.name=HOST_NAME

8.3.4. 域控制器发现和故障切换

在设置受管域时,必须为每个主机控制器配置与域控制器联系所需的信息。在 JBoss EAP 中,每个主机控制器都可配置多个选项来查找域控制器。主机控制器迭代选项列表,直到成功为止。

这允许主机控制器预先配置了备份域控制器的联系信息。如果主域控制器存在问题,则备份主机控制器可以提升到 master,允许主机控制器在提升新 master 后自动失败。

以下是如何使用多个选项配置主机控制器,以查找域控制器:

示例:具有多个域控制器选项的主机控制器

<domain-controller>
  <remote security-realm="ManagementRealm">
    <discovery-options>
      <static-discovery name="primary" protocol="${jboss.domain.master.protocol:remote}" host="172.16.81.100" port="${jboss.domain.master.port:9999}"/>
      <static-discovery name="backup" protocol="${jboss.domain.master.protocol:remote}" host="172.16.81.101" port="${jboss.domain.master.port:9999}"/>
    </discovery-options>
  </remote>
</domain-controller>

静态发现选项包括以下所需属性:

name
此域控制器发现选项的名称。
主机
远程域控制器的主机名。
port
远程域控制器的端口。

在上例中,第一个发现选项是成功的一个发现选项。第二个可用于故障转移。

如果主域控制器出现问题,可以通过 --backup 选项启动的主机控制器提升为充当域控制器。

注意

使用 --backup 选项启动主机控制器将导致控制器维护域配置的本地副本。如果主机控制器重新配置为充当域控制器,则将使用此配置。

将主机控制器提升为域控制器
  1. 确保原始域控制器已停止。
  2. 使用管理 CLI 连接到属于新域控制器的主机控制器。
  3. 执行以下命令,将主机控制器配置为充当新的域控制器。

    /host=HOST_NAME:write-local-domain-controller
  4. 执行以下命令,以重新加载主机控制器:

    reload --host=HOST_NAME

此主机控制器现在将充当域控制器。

8.4. 管理服务器

8.4.1. 配置服务器组

以下是服务器组定义的示例:

<server-group name="main-server-group" profile="full">
  <jvm name="default">
    <heap size="64m" max-size="512m"/>
  </jvm>
  <socket-binding-group ref="full-sockets"/>
  <deployments>
    <deployment name="test-application.war" runtime-name="test-application.war"/>
    <deployment name="jboss-helloworld.war" runtime-name="jboss-helloworld.war" enabled="false"/>
  </deployments>
</server-group>

可以使用管理 CLI 或管理控制台 运行时 选项卡配置服务器组。

添加服务器组

以下管理 CLI 命令可用于添加服务器组。

/server-group=SERVER_GROUP_NAME:add(profile=PROFILE_NAME,socket-binding-group=SOCKET_BINDING_GROUP_NAME)
更新服务器组

以下管理 CLI 命令可用于更新服务器组属性:

/server-group=SERVER_GROUP_NAME:write-attribute(name=ATTRIBUTE_NAME,value=VALUE)
删除服务器组

以下管理 CLI 命令可用于删除服务器组:

/server-group=SERVER_GROUP_NAME:remove
服务器组属性

服务器组需要以下属性:

  • 名称 :服务器组名称。
  • 配置集 :服务器组配置集名称。
  • socket-binding-group :用于组中服务器的默认套接字绑定组。这可以基于每台服务器覆盖。

服务器组包括以下可选属性:

  • management-subsystem-endpoint: 设置为 true,使属于服务器组的服务器使用来自其 remoting 子系统的端点连接到主机控制器(必须显示 remoting 子系统才能正常工作)。
  • socket-binding-default-interface :此服务器的套接字绑定组默认接口。
  • socket-binding-port-offset :添加到套接字绑定组给定的端口值的默认偏移。
  • Deployments :要部署到组中的服务器上的部署内容。
  • JVM :组中所有服务器的默认 JVM 设置。主机控制器将这些设置与 host.xml 中提供的任何其他配置合并,以派生用于启动服务器的 JVM 设置。
  • Deployment-overlays :此服务器组中定义部署覆盖和部署之间的链接。
  • system-properties :要在组中的服务器上设置的系统属性。

8.4.2. 配置服务器

默认 host.xml 配置文件定义三台服务器:

<servers>
  <server name="server-one" group="main-server-group">
  </server>
  <server name="server-two" group="main-server-group" auto-start="true">
    <socket-bindings port-offset="150"/>
  </server>
  <server name="server-three" group="other-server-group" auto-start="false">
    <socket-bindings port-offset="250"/>
  </server>
</servers>

名为 server-one 的服务器实例与 main-server-group 关联,并继承该服务器组指定的子系统配置和套接字绑定。名为 server-two 的服务器实例也与 main-server-group 关联,但也定义了套接字绑定 port-offset 值,因此不会与 server-one 使用的端口值冲突。名为 server-three 的服务器实例与 other-server-group 关联,并使用该组的配置。它还定义 port-offset 值,并将 auto-start 设置为 false,以便此服务器在主机控制器启动时不会启动。

可使用管理 CLI 或管理控制台 Runtime 选项卡配置服务器。

添加服务器

以下管理 CLI 命令可用于添加服务器。

/host=HOST_NAME/server-config=SERVER_NAME:add(group=SERVER_GROUP_NAME)
更新服务器

以下管理 CLI 命令可用于更新服务器属性:

/host=HOST_NAME/server-config=SERVER_NAME:write-attribute(name=ATTRIBUTE_NAME,value=VALUE)
删除服务器

以下管理 CLI 命令可用于移除服务器。

/host=HOST_NAME/server-config=SERVER_NAME:remove
服务器属性

服务器需要以下属性:

  • 名称 :服务器的名称。
  • :域模型中的服务器组的名称。

服务器包括以下可选属性:

  • Auto-start: 主机控制器启动时是否应启动此服务器。
  • socket-binding-group :此服务器所属的套接字绑定组。
  • socket-binding-port-offset :添加到此服务器的套接字绑定组给出的端口值中的偏移值。
  • update-auto-start-with-server-status: 使用服务器状态更新 auto-start 属性。
  • 接口 :可用于服务器使用的、完全指定的命名网络接口的列表。
  • JVM :此服务器的 JVM 设置。如果没有声明,则从父服务器组或主机继承设置。
  • 路径 :指定文件系统路径的列表。
  • system-property: 此服务器上要设置的系统属性列表。

8.4.3. 启动和停止服务器

您可以通过导航到 Runtime 选项卡并选择适当的主机或服务器组,从管理控制台中对服务器执行操作,如启动、停止和重新加载。

请参阅以下 命令,以使用管理 CLI 执行这些操作。

启动服务器

您可以在特定主机上启动单个服务器。

/host=HOST_NAME/server-config=SERVER_NAME:start

您可以启动指定服务器组中的所有服务器。

/server-group=SERVER_GROUP_NAME:start-servers
停止服务器

您可以在特定主机上停止单个服务器。

/host=HOST_NAME/server-config=SERVER_NAME:stop

您可以停止指定服务器组中的所有服务器。

/server-group=SERVER_GROUP_NAME:stop-servers
重新加载服务器

您可以在特定主机上重新加载单个服务器。

/host=HOST_NAME/server-config=SERVER_NAME:reload

您可以重新加载指定服务器组中的所有服务器。

/server-group=SERVER_GROUP_NAME:reload-servers

8.5. 受管域设置

8.5.1. 在单一机器上设置受管域

您可以使用 jboss.domain.base.dir 属性在一台机器上运行多个主机控制器。

重要

不支持将多个 JBoss EAP 主机控制器配置为单一计算机上的系统服务。

  1. 复制域控制器的 EAP_HOME/domain 目录。

    $ cp -r EAP_HOME/domain /path/to/domain1
  2. 复制主机控制器的 EAP_HOME/domain 目录。

    $ cp -r EAP_HOME/domain /path/to/host1
  3. 使用 /path/to/domain1 启动域控制器。

    $ EAP_HOME/bin/domain.sh --host-config=host-master.xml -Djboss.domain.base.dir=/path/to/domain1
  4. 使用 /path/to/host1 启动主机控制器。

    $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml -Djboss.domain.base.dir=/path/to/host1 -Djboss.domain.master.address=IP_ADDRESS -Djboss.management.native.port=PORT
    注意

    启动主机控制器时,您必须使用 jboss.domain.master.address 属性指定域控制器的地址。

    此外,由于此主机控制器在与域控制器相同的计算机上运行,您必须更改管理接口,使其不与域控制器的管理界面冲突。此命令设置 jboss.management.native.port 属性。

以这种方式启动的每个实例都将共享基本安装目录中资源的其余部分(如 EAP_HOME/modules/),但使用 jboss.domain.base.dir 指定的目录中的域配置。

8.5.2. 在两台机器上设置受管域

注意

您可能需要配置防火墙以运行本例。

您可以在两台机器上创建受管域,其中一台机器是域控制器,另一台机器是一个主机。如需更多信息 ,请参阅关于域控制器

  • ip1 = 域控制器的 IP 地址(Machine 1)
  • ip2 = 主机的 IP 地址(Machine 2)
在两台机器上创建受管域
  1. 在 Machine 1 中

    1. 添加管理用户,使主机可由域控制器进行身份验证。

      使用 add-user.sh 脚本为主机控制器添加管理用户(HOST_NAME)。确保在最后一个提示中回答 yes 并记录所提供的 secret 值(<secret value="SECRET_VALUE"/>)。此 secret 值将在主机控制器配置中使用。

    2. 启动域控制器。

      指定 host-master.xml 配置文件,该文件预配置了专用的域控制器。另外,设置 jboss.bind.address.management 属性,使域控制器对其他计算机可见。

      $ EAP_HOME/bin/domain.sh --host-config=host-master.xml -Djboss.bind.address.management=IP1
  2. 在 Machine 2 中

    1. 使用用户凭据更新主机配置。

      编辑 EAP_HOME/domain/configuration/host-slave.xml,并设置主机名(HOST_NAME)和 secret 值(SECRET_VALUE)。

      <host xmlns="urn:jboss:domain:1.6" name="HOST_NAME">
        <management>
          <security-realms>
            <security-realm name="ManagementRealm">
              <server-identities>
                <secret value="SECRET_VALUE" />
              </server-identities>
              ...
    2. 启动主机控制器。

      指定 host-slave.xml 配置文件,该文件预配置了 slave 主机控制器。另外,设置 jboss.domain.master.address 属性以连接到域控制器,使用 jboss.bind.address 属性来设置主机控制器绑定地址。

      $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml  -Djboss.domain.master.address=IP1  -Djboss.bind.address=IP2

现在,您可以在启动时使用 --controller 参数指定域控制器地址,通过管理 CLI 管理域。

$ EAP_HOME/bin/jboss-cli.sh --connect --controller=IP1

或者,您可以从管理控制台 http://IP1:9990 管理域。

8.5.3. 配置 JBoss EAP 7 域控制器以管理 JBoss EAP 6 实例

JBoss EAP 7 域控制器可以管理运行较旧版本的 JBoss EAP 的主机和服务器,只要满足以下条件:

  • JBoss EAP 实例必须是 JBoss EAP 6.2 或更高版本。
  • 域控制器的 JBoss EAP 版本必须大于或等于它管理的主机控制器上的版本。

完成以下任务,以成功管理 JBoss EAP 7 受管域中的 JBoss EAP 6 实例。

完成这些任务后,您可以使用管理 CLI 从 JBoss EAP 7 域控制器管理 JBoss EAP 6 服务器和配置。请注意,JBoss EAP 6 主机将无法利用新的 JBoss EAP 7 功能,如批处理。

警告

由于管理控制台针对最新版本的 JBoss EAP 进行了优化,因此不应使用它来更新您的 JBoss EAP 6 主机、服务器和配置文件。从 JBoss EAP 7 受管域管理 JBoss EAP 6 配置时,请使用管理 CLI。

8.5.3.1. 将 JBoss EAP 6 配置添加到 JBoss EAP 7 域控制器

要允许域控制器管理您的 JBoss EAP 6 服务器,您必须在 JBoss EAP 7 域配置中提供 JBoss EAP 6 配置详情。您可以将 JBoss EAP 6 配置文件、套接字绑定组和服务器组复制到 JBoss EAP 7 domain.xml 配置文件来实现此目的。

如果 JBoss EAP 7 配置中现有名称有冲突,则需要重命名资源。另外还有一些额外的 调整,可以确保正确的行为。

以下流程使用 JBoss EAP 6 默认配置文件standard-sockets 套接字绑定组和 main-server-group 服务器组。

  1. 编辑 JBoss EAP 7 domain.xml 配置文件。
  2. 将适用的 JBoss EAP 6 配置文件复制到 JBoss EAP 7 domain.xml 文件中。

    此流程假设 JBoss EAP 6 默认配置文件已复制并重命名为 eap6- default

    JBoss EAP 7 domain.xml

    <profiles>
      ...
      <profile name="eap6-default">
        ...
      </profile>
    </profiles>

  3. 添加此配置集使用的必要扩展。

    如果您的 JBoss EAP 6 配置文件使用 JBoss EAP 7 中不再存在的子系统,您必须将适当的扩展添加到 JBoss EAP 域配置中。

    JBoss EAP 7 domain.xml

    <extensions>
      ...
      <extension module="org.jboss.as.configadmin"/>
      <extension module="org.jboss.as.threads"/>
      <extension module="org.jboss.as.web"/>
    <extensions>

  4. 将适用的 JBoss EAP 6 套接字绑定组复制到 JBoss EAP 7 domain.xml 文件。

    此流程假设 JBoss EAP 6 standard-sockets 套接字绑定组已复制并重命名为 eap6-standard-sockets

    JBoss EAP 7 domain.xml

    <socket-binding-groups>
      ...
      <socket-binding-group name="eap6-standard-sockets" default-interface="public">
        ...
      </socket-binding-group>
    </socket-binding-groups>

  5. 将适用的 JBoss EAP 6 服务器组复制到 JBoss EAP 7 domain.xml 文件。

    此流程假设 JBoss EAP 6 main-server-group 服务器组已复制并重命名为 eap6-main-server-group。您还必须更新此服务器组,以使用 JBoss EAP 6 配置文件 eap6-default,以及 JBoss EAP 6 套接字绑定组 eap6-standard-sockets

    JBoss EAP 7 domain.xml

    <server-groups>
      ...
      <server-group name="eap6-main-server-group" profile="eap6-default">
        ...
        <socket-binding-group ref="eap6-standard-sockets"/>
      </server-group>
    </server-groups>

8.5.3.2. 更新 JBoss EAP 6 配置文件的行为

您的 JBoss EAP 6 实例使用的配置文件的其他更新取决于 JBoss EAP 版本和所需行为。根据现有 JBoss EAP 6 实例使用的子系统和配置,您可能需要进行其他更改。

启动 JBoss EAP 7 域控制器并启动其管理 CLI,以执行以下更新:这些示例假定 JBoss EAP 6 配置文件为 eap6-default

  • 删除 bean-validation 子系统。

    JBoss EAP 7 将 bean 验证功能从 ee 子系统移到自己的子系统 bean-validation。如果 JBoss EAP 7 域控制器看到传统的 ee 子系统,它会添加新的 bean-validation 子系统。但是,JBoss EAP 6 主机无法识别此子系统,因此必须删除它。

    JBoss EAP 7 域控制器 CLI

    /profile=eap6-default/subsystem=bean-validation:remove

  • 设置 CDI 1.0 行为。

    只有在 JBoss EAP 6 服务器需要 CDI 1.0 行为,而不是在 JBoss EAP 7 中使用后续 CDI 版本的行为时,才需要这样做。如果您希望 CDI 1.0 行为,请对 weld 子系统进行以下更新。

    JBoss EAP 7 域控制器 CLI

    /profile=eap6-default/subsystem=weld:write-attribute(name=require-bean-descriptor,value=true)
    
    /profile=eap6-default/subsystem=weld:write-attribute(name=non-portable-mode,value=true)

  • 为 JBoss EAP 6.2 启用数据源统计信息。

    只有在您的配置文件被 JBoss EAP 6.2 服务器使用时才需要。JBoss EAP 6.3 引入了 启用统计 的属性,默认为 false 以不收集统计信息;但是,JBoss EAP 6.2 行为是收集统计信息。如果 JBoss EAP 6.2 主机和运行较新的 JBoss EAP 版本的主机使用此配置文件,则行为在主机之间会不一致,而这在没有被允许的。因此,供 JBoss EAP 6.2 主机使用的配置集应该为其数据源进行以下更改。

    JBoss EAP 7 域控制器 CLI

    /profile=eap6-default/subsystem=datasources/data-source=ExampleDS:write-attribute(name=statistics-enabled,value=true)

8.5.3.3. 为 JBoss EAP 6 服务器设置服务器组

如果您重命名了服务器组,您需要更新 JBoss EAP 6 主机配置,以使用 JBoss EAP 7 配置中指定的新服务器组。本例使用 JBoss EAP 7 domain.xml 中指定的 eap6-main-server-group 服务器组。

JBoss EAP 6 host-slave.xml

<servers>
    <server name="server-one" group="eap6-main-server-group"/>
    <server name="server-two" group="eap6-main-server-group">
        <socket-bindings port-offset="150"/>
    </server>
</servers>

注意

主机无法使用比主机运行的较新版本的 JBoss EAP 中引入的功能或配置设置。

8.5.3.4. 防止 JBoss EAP 6 实例接收 JBoss EAP 7 更新

受管域中的域控制器将配置更新转发到其主机控制器。您必须使用 host-exclude 配置来指定应从特定版本隐藏的资源。为您的 JBoss EAP 6 版本选择适当的预配置的 host-exclude 选项: EAP62EAP63EAP64EAP64z

host-exclude 配置的 active-server-groups 属性指定特定版本使用的服务器组列表。这些服务器组及其关联的配置文件、套接字绑定组和部署资源可供此版本的主机使用,但所有其他服务器组在这些主机上都隐藏。

本例假定版本是 JBoss EAP 6.4.z,并添加 JBoss EAP 6 服务器组 eap6-main-server-group 作为活动服务器组。

JBoss EAP 7 域控制器 CLI

/host-exclude=EAP64z:write-attribute(name=active-server-groups,value=[eap6-main-server-group])

如果需要,您可以使用 active-socket-binding-groups 属性指定服务器使用的额外套接字绑定组。这只适用于与 active-server-groups 中指定的服务器组关联的套接字绑定组。

8.6. 管理 JBoss EAP 配置文件

8.6.1. 关于配置集

JBoss EAP 使用 配置文件 来组织哪些子系统可供服务器使用。配置文件由一组可用子系统以及各个子系统的特定配置组成。具有大量子系统的配置集会导致服务器具有大量功能。包含小、集中一组子系统的配置集将具有较少的功能,但占用的空间较小。

JBoss EAP 附带四个预定义的配置文件,它们应该满足大多数用例:

default
包括常用的子系统,如日志记录安全数据源infinispanWebserviceseeejb 3、事务 等。
ha
包括默认配置文件中提供的子系统,其添加了 jgroupsmodcluster 子系统以实现高可用性
full
包括默认配置集中提供的子系统,并添加了 messaging-activemqiiop-openjdk 子系统
full-ha
包括 full 配置文件中提供的子系统,其添加了 jgroupsmodcluster 子系统以实现高可用性
注意

JBoss EAP 通过从现有配置文件中删除子系统,从而手动禁用扩展或卸载驱动程序和其他服务。然而,在大多数情况下,这都是不必要的。由于 JBoss EAP 根据需要动态加载子系统,如果服务器或应用程序永远不会使用子系统,则不会加载它。

如果现有配置集不提供必要的功能,JBoss EAP 还提供定义自定义配置集的功能。

8.6.2. 克隆配置集

JBoss EAP 允许您通过克隆现有的配置文件来在受管域中创建新配置文件。这将创建原始配置集的配置和子系统的副本。

通过使用所需配置集的 clone 操作,可以使用管理 CLI 克隆配置集。

/profile=full-ha:clone(to-profile=cloned-profile)

您还可以通过选择要克隆的配置集并单击 Clone,从管理控制台克隆。

8.6.3. 创建层次结构配置集

在受管域中,您可以创建配置文件层次结构。这可让您创建带有其他配置集可继承的通用扩展的基本配置集。

受管域在 domain.xml 中定义多个配置集。如果多个配置集为特定子系统使用相同的配置,您可以只在一个位置而不是不同的配置集进行配置。父配置集中的值无法覆盖。

配置文件可以使用管理 CLI 将其他配置集包含在层次结构中,方法是使用 list-add 操作并提供要包含的配置集。

/profile=new-profile:list-add(name=includes, value=PROFILE_NAME)

第 9 章 配置 JVM 设置

Java 虚拟机(JVM)设置的配置与独立 JBoss EAP 服务器或受管域中的 JBoss EAP 服务器不同。

对于独立的 JBoss EAP 服务器实例,服务器启动进程在启动时将 JVM 设置传递给 JBoss EAP 服务器。它们可以在启动 JBoss EAP 之前从命令行声明,也可以使用 管理控制台中的系统属性 屏幕。

在受管域中,JVM 设置在 host.xmldomain.xml 配置文件中声明,可以在主机、服务器组或服务器级别进行配置。

注意

系统属性必须在 JAVA_OPTS 中配置,才能在启动过程中在 JBoss EAP 模块(如日志记录管理器)中使用。

9.1. 为单机服务器配置 JVM 设置

在启动服务器之前,可以在运行时声明独立 JBoss EAP 服务器实例的 JVM 设置。

在 Linux 上设置 JAVA_OPTS 环境变量的示例如下所示:

$ export JAVA_OPTS="-Xmx1024M"

在 Microsoft Windows 环境中可以使用相同的设置:

set JAVA_OPTS="Xmx1024M"

或者,可以将 JVM 设置添加到 EAP_HOME/bin 文件夹的 standalone.conf 文件中,其中包含要传递给 JVM 的选项示例。

警告

设置 JAVA_OPTS 环境变量将覆盖 standalone.conf 的默认值,这可能会导致 JBoss EAP 启动问题。

9.2. 为受管域配置 JVM 设置

在 JBoss EAP 受管域中,您可以在多个级别上定义 JVM 设置。您可以在特定主机上定义自定义 JVM 设置,然后将这些设置应用到服务器组或单个服务器实例。

默认情况下,服务器组和各个服务器将继承其父级的 JVM 设置,但您可以选择覆盖每个级别的 JVM 设置。

注意

domain.conf 中的 JVM 设置应用到 JBoss EAP 主机控制器的 Java 进程,而不是由该主机控制器控制的独立 JBoss EAP 服务器实例。

9.2.1. 在主机控制器上定义 JVM 设置

您可以在主机控制器上定义 JVM 设置,并将这些设置应用到服务器组或个别服务器。JBoss EAP 附带 默认的 JVM 设置,但以下管理 CLI 命令演示了使用一些自定义 JVM 设置和选项创建名为 production_jvm 的新 JVM 设置:

/host=HOST_NAME/jvm=production_jvm:add(
    heap-size=2048m,
    max-heap-size=2048m,
    max-permgen-size=512m,
    stack-size=1024k,
    jvm-options=["-XX:-UseParallelGC"]
)

您还可以通过选择 Runtime 选项卡,选择 Hosts,然后单击您要编辑的主机上的 JVM,在 JBoss EAP 管理控制台中创建和编辑 JVM。

这些设置存储在 host.xml 中的 &lt ;jvm > 标签内。

9.2.2. 将 JVM 设置应用到服务器组

在创建服务器组时,您可以指定组中所有服务器将使用的 JVM 配置。以下管理 CLI 命令演示创建使用 上例 中显示的 production_jvm JVM 设置的服务器组名称 groupA

/server-group=groupA:add(profile=default, socket-binding-group=standard-sockets)
/server-group=groupA/jvm=production_jvm:add()

服务器组中的所有服务器都将继承 production_jvm 的 JVM 设置。

您还可以在服务器组级别上覆盖特定的 JVM 设置。例如,要设置不同的堆大小,您可以使用以下命令:

/server-group=groupA/jvm=production_jvm:write-attribute(name=heap-size,value="1024m")

应用上述命令后,服务器组 groupA 将继承 production_jvm 的 JVM 设置,但堆大小除外,其覆盖值为 1024m

您还可以通过选择 Runtime 选项卡,选择 Server Groups,再单击您要编辑的服务器组的 View,以编辑 JBoss EAP 管理控制台中的服务器组 JVM 设置。

服务器组的这些设置存储在 domain.xml 中。

9.2.3. 将 JVM 设置应用到单个服务器

默认情况下,单个 JBoss EAP 服务器实例将继承其所属的服务器组的 JVM 设置。但是,您可以选择使用来自主机控制器的另一个完整 JVM 设置定义覆盖继承的设置,或者选择覆盖特定的 JVM 设置。

例如,以下命令覆盖 上例中服务器组的 JVM 定义,并将 server -one 的 JVM 设置设置为 默认的 JVM 定义:

/host=HOST_NAME/server-config=server-one/jvm=default:add()

另外,与服务器组类似,您可以在服务器级别上覆盖特定的 JVM 设置。例如,要设置不同的堆大小,您可以使用以下命令:

/host=HOST_NAME/server-config=server-one/jvm=default:write-attribute(name=heap-size,value="1024m")

您还可以通过选择 Runtime 选项卡,选择 Hosts,选择相关主机来编辑 JBoss EAP 管理控制台中的服务器 JVM 设置。然后选择相关的服务器,然后点您要编辑的服务器的 View

单个服务器的这些设置存储在 host.xml 中。

9.3. 显示 JVM 状态

您可以从管理控制台查看 JVM 资源的状态,如堆和线程使用量,适用于单机或受管域服务器。虽然统计数据没有实时显示,但您可以单击 Refresh Results 以提供 JVM 资源的最新概述。

显示独立 JBoss EAP 服务器的 JVM 状态:

  • 选择 Runtime 选项卡,然后选择 Standalone Server。在 monitor 列中,选择 JVM,再单击 View

在受管域中显示 JBoss EAP 服务器的 JVM 状态:

  • 选择 Runtime 选项卡,然后选择您要查看的服务器组和服务器。在 monitor 列中,选择 JVM,再单击 View

这显示了以下堆用法信息:

Max
可用于内存管理的最大内存量。
Used
已用内存量。
已提交
提交用于 Java 虚拟机使用的内存量。

还提供了 JVM 运行时间和线程使用情况等其他信息。

9.4. 指定 32 或 64 位 JVM 架构

在某些环境中,如 Hewlett-Packard HP-UX 和 Solaris,使用 -d32-d64 开关来指定是否在 32 位或 64 位 JVM 中运行。如果未指定选项,则默认为 32 位。

为单机服务器指定 64 位架构

  1. 打开 EAP_HOME/bin/standalone.conf
  2. 添加以下行,将 -d64 选项附加到 JAVA_OPTS
JAVA_OPTS="$JAVA_OPTS -d64"

为受管域指定 64 位架构

在运行受管域时,除了服务器实例外,您还可以为主机和进程控制器指定 64 位环境。

  1. 将主机和进程控制器设置为在 64 位 JVM 中运行。

    1. 打开 EAP_HOME/bin/domain.conf
    2. 添加以下行,将 -d64 选项附加到 JAVA_OPTS。确保在设置了 PROCESS_CONTROLLER_JAVA_OPTSHOST_CONTROLLER_JAVA_OPTS 之前插入。

      JAVA_OPTS="$JAVA_OPTS -d64"

      domain.conf中的 JVM 选项示例

      #
      # Specify options to pass to the Java VM.
      #
      if [ "x$JAVA_OPTS" = "x" ]; then
        JAVA_OPTS="-Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true"
        JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
        JAVA_OPTS="$JAVA_OPTS -Djboss.modules.policy-permissions=true"
        JAVA_OPTS="$JAVA_OPTS -d64"
      else
        echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
      fi

  2. 将服务器实例设置为在 64 位 JVM 中运行。

    在适当的 JVM 配置中添加 -d64 作为 JVM 选项。以下命令显示它被 添加到默认 JVM 配置中。

    /host=HOST_NAME/jvm=default:add-jvm-option(jvm-option="-d64")

第 10 章 mail 子系统

10.1. 配置 Mail 子系统

邮件 子系统允许您在 JBoss EAP 中配置邮件会话,然后使用 JNDI 将这些会话注入到应用中。它还支持使用 Java EE 7 @MailSessionDefinition@MailSessionDefinitions 注释的配置。

配置 SMTP 服务器以便在应用程序中使用

  1. 使用以下 CLI 命令配置 SMTP 服务器和出站套接字绑定,例如:

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-smtp:add(host=localhost, port=25)
    /subsystem=mail/mail-session=mySession:add(jndi-name=java:jboss/mail/MySession)
    /subsystem=mail/mail-session=mySession/server=smtp:add(outbound-socket-binding-ref=my-smtp, username=user, password=pass, tls=true)
  2. 在应用程序内调用配置的邮件会话

    @Resource(lookup="java:jboss/mail/MySession")
    private Session session;

有关配置邮件会话和服务器的属性的完整列表,请参阅 Mail 子系统属性

10.2. 配置自定义传输

使用标准邮件服务器(如 POP3 或 IMAP)时,邮件服务器具有一组可以定义的属性。其中一些属性是必需的。最重要的是 outbound-socket-binding-ref,它是出站邮件套接字绑定的引用,并使用主机地址和端口号定义。

定义 outbound-socket-binding-ref 可能是对于拥有其主机配置的用户(使用多个主机进行负载平衡的用户)最有效的解决方案。标准 JavaMail 不支持使用多个主机进行负载平衡的主机配置。因此,需要使用多个主机进行此配置的用户来实现自定义邮件传输。这些自定义邮件传输不需要 outbound-socket-binding-ref 并允许自定义主机属性格式。

您可以从管理 CLI 配置自定义邮件传输。

  1. 添加新的邮件会话并指定 JNDI 名称。

    /subsystem=mail/mail-session=mySession:add(jndi-name=java:jboss/mail/MySession)
  2. 添加出站套接字绑定并指定主机和端口。

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-smtp-binding:add(host=localhost, port=25)
  3. 添加 SMTP 服务器并指定出站套接字绑定、用户名和密码。

    /subsystem=mail/mail-session=mySession/server=smtp:add(outbound-socket-binding-ref=my-smtp-binding, username=user, password=pass, tls=true)
注意

您可以使用类似步骤配置 POP3 或 IMAP 服务器。

POP3 服务器

/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-pop3-binding:add(host=localhost, port=110)
/subsystem=mail/mail-session=mySession/server=pop3:add(outbound-socket-binding-ref=my-pop3-binding, username=user, password=pass)

IMAP 服务器

/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-imap-binding:add(host=localhost, port=143)
/subsystem=mail/mail-session=mySession/server=imap:add(outbound-socket-binding-ref=my-imap-binding, username=user, password=pass)

要使用自定义服务器,创建一个没有出站套接字绑定的自定义邮件服务器。您可以在自定义邮件服务器的属性定义中指定主机信息。例如:

/subsystem=mail/mail-session=mySession/custom=myCustomServer:add(username=user,password=pass, properties={"host" => "myhost", "my-property" =>"value"})

如果您定义了自定义协议,则包含句点(.)的任何属性名称都被视为完全限定名称,并直接传递。任何其它格式(如 my-property )都会以以下格式进行转换: mail.server-name.my-property

以下 XML 是包含自定义服务器的示例邮件配置。

<subsystem xmlns="urn:jboss:domain:mail:2.0">
   <mail-session name="default" jndi-name="java:jboss/mail/Default">
        <smtp-server outbound-socket-binding-ref="mail-smtp"/>
   </mail-session>
    <mail-session name="myMail" from="user.name@domain.org" jndi-name="java:/Mail">
        <smtp-server password="password" username="user" tls="true" outbound-socket-binding-ref="mail-smtp"/>
        <pop3-server outbound-socket-binding-ref="mail-pop3"/>
        <imap-server password="password" username="nobody" outbound-socket-binding-ref="mail-imap"/>
    </mail-session>
    <mail-session name="custom" jndi-name="java:jboss/mail/Custom" debug="true">
        <custom-server name="smtp" password="password" username="username">
            <property name="host" value="mail.example.com"/>
        </custom-server>
    </mail-session>
    <mail-session name="custom2" jndi-name="java:jboss/mail/Custom2" debug="true">
        <custom-server name="pop3" outbound-socket-binding-ref="mail-pop3">
            <property name="custom-prop" value="some-custom-prop-value"/>
        </custom-server>
    </mail-session>
</subsystem>

第 11 章 配置 Web 服务

JBoss EAP 提供了使用管理控制台或管理 CLI 通过 Webservices 子系统配置部署 Web 服务 的行为的功能。您可以配置公布的端点地址和处理程序链。您还可以为 web 服务启用运行时统计信息集合。

如需更多信息,请参阅为 JBoss EAP 开发 Web 服务应用中的配置 Web 服务 子系统

第 12 章 使用 JBoss EAP 进行日志记录

JBoss EAP 提供高度可配置的日志功能,供其内部使用,供已部署的应用程序使用。logging 子系统基于 JBoss LogManager,除了 JBoss Logging 之外,还支持几个第三方应用程序日志记录框架。

12.1. 关于服务器日志记录

12.1.1. 服务器日志

默认情况下,所有 JBoss EAP 日志条目都写入到 server.log 文件中。此文件的位置取决于您的操作模式。

  • 独立服务器: EAP_HOME/standalone/log/server.log
  • 受管域: EAP_HOME/domain/servers/SERVER_NAME/log/server.log

此文件通常被称为服务器日志。如需更多信息,请参阅 Root Logger 部分。

12.1.2. 引导日志记录

在启动过程中,JBoss EAP 会记录有关 Java 环境以及各个服务的启动信息。此日志在故障排除时很有用。默认情况下,所有日志条目都写入 服务器日志

bootup 日志记录配置在 logging.properties 配置文件中指定,该文件处于活动状态,直到 JBoss EAP logging 子系统启动并接管。此文件的位置取决于您的操作模式。

  • 独立服务器: EAP_HOME/standalone/configuration/logging.properties
  • 受管域:

    域控制器和每台服务器都有一个 logging.properties 文件。

    • 域控制器: EAP_HOME/domain/configuration/logging.properties
    • server: EAP_HOME/domain/servers/SERVER_NAME/data/logging.properties
警告

建议您不要直接编辑 logging.properties 文件,除非您知道需要它的特定用例。在这样做前,建议您 从红帽客户门户网站创建一个支持问题单

手动对 logging.properties 文件所做的更改会被在启动时覆盖。

12.1.2.1. 查看启动错误

在对 JBoss EAP 进行故障排除时,检查启动期间发生的错误应该是执行的第一个步骤之一。然后,您可以使用提供的信息来诊断和解决其原因。创建一个支持问题单,以获得对引导错误进行故障排除的帮助。

有两种方法可以查看引导错误,每种错误都有其优点。您可以使用read- boot-errors 管理 CLI 命令来检查 server.log 文件或 读取 引导错误。

检查服务器日志文件

您可以打开 server.log 文件,以查看启动过程中发生的任何错误。

这个方法允许您查看每个错误消息以及可能相关的消息,允许您获取有关错误 可能发生的原因 的更多信息。它还允许您以纯文本格式查看错误消息。

  1. 在文件查看器中打开文件 server.log
  2. 导航到文件的末尾。
  3. 向后搜索 WFLYSRV0049 消息标识符,标记最新引导序列的开头。
  4. 从 中搜索指向 ERROR 的实例的日志。每个实例都包括错误的描述并列出涉及的模块。

以下是 server.log 日志文件的错误描述示例。

2016-03-16 14:32:01,627 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.undertow.listener.default: org.jboss.msc.service.StartException in service jboss.undertow.listener.default: Could not start http listener
        at org.wildfly.extension.undertow.ListenerService.start(ListenerService.java:142)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.BindException: Address already in use
        ...
从管理 CLI 读取引导错误

您可以使用 read-boot-errors 管理 CLI 命令查看服务器启动但在启动过程中报告的错误。

此方法不需要访问服务器的文件系统,这对于负责监控无文件系统访问权限的错误的用户很有用。由于它是一个管理 CLI 命令,因此可以在脚本中使用。例如,您可以编写一个启动多个 JBoss EAP 实例的脚本,然后检查引导时发生的错误。

运行以下管理 CLI 命令。

/core-service=management:read-boot-errors

将列出启动期间发生的任何错误。

{
    "outcome" => "success",
    "result" => [
        {
            "failed-operation" => {
                "operation" => "add",
                "address" => [
                    ("subsystem" => "undertow"),
                    ("server" => "default-server"),
                    ("http-listener" => "default")
                ]
            },
            "failure-description" => "{\"WFLYCTL0080: Failed services\" => {\"jboss.undertow.listener.default\" => \"org.jboss.msc.service.StartException in service jboss.undertow.listener.default: Could not start http listener
    Caused by: java.net.BindException: Address already in use\"}}",
            "failed-services" => {"jboss.undertow.listener.default" => "org.jboss.msc.service.StartException in service jboss.undertow.listener.default: Could not start http listener
    Caused by: java.net.BindException: Address already in use"}
        }
        ...
    ]
}

12.1.3. 垃圾回收日志

垃圾回收日志将所有垃圾回收活动记录到纯文本日志文件。这些日志文件可用于诊断目的。 IBM Java 开发工具包外,在所有支持的配置中,都默认为 JBoss EAP 单机服务器启用垃圾回收日志记录。

垃圾回收日志的位置是 EAP_HOME/standalone/log/gc.log.DIGIT.current。垃圾回收日志分别限制为 3 MB,最多会轮转五个文件。

12.1.4. 默认日志文件位置

为默认日志记录配置创建以下日志文件。默认配置使用定期日志处理程序写入服务器日志文件。

表 12.1. 单机服务器的默认日志文件

日志文件描述

EAP_HOME/standalone/log/server.log

包含服务器日志消息,包括服务器启动消息。

EAP_HOME/standalone/log/gc.log.DIGIT.current

包含垃圾回收详情。

表 12.2. 受管域的默认日志文件

日志文件描述

EAP_HOME/domain/log/host-controller.log

包含与主机控制器启动相关的日志消息。

EAP_HOME/domain/log/process-controller.log

包含与进程控制器启动相关的日志消息。

EAP_HOME/domain/servers/SERVER_NAME/log/server.log

包含指定服务器的日志消息,包括服务器启动消息。

12.1.5. 设置服务器的默认区域

您可以通过在适当的启动配置文件中设置 JVM 属性,为 JBoss EAP 配置默认区域设置。启动配置文件是 EAP_HOME/bin/standalone.conf,用于单机服务器,或 EAP_HOME/bin/domain.conf 用于受管域。

注意

对于 Windows Server,JBoss EAP 启动配置文件为 standalone.conf.batdomain.conf.bat

已国际化和本地化的日志消息将使用此默认区域设置。有关创建国际化 日志消息 的信息,请参阅 JBoss EAP 开发指南。

设置语言

使用 JAVA_OPTS 变量设置 user.language 属性来指定语言。例如,将以下行添加到启动配置文件中,以设置法语区域设置。

JAVA_OPTS="$JAVA_OPTS -Duser.language=fr"

现在,已国际化和本地化的日志消息将在法语中输出。

设置语言和国家

除了语言外,可能需要通过设置 user.country 属性来指定国家/地区。例如,将以下行添加到启动配置文件中,为巴西设置葡萄牙区域设置。

JAVA_OPTS="$JAVA_OPTS -Duser.language=pt -Duser.country=BR"

已国际化和本地化的日志消息现在在巴西葡萄牙语中输出。

使用 org.jboss.logging.locale Property 设置 Server Locale

您可以配置 org.jboss.logging.locale 属性,以覆盖使用 JBoss Logging 记录的消息的区域,包括 JBoss EAP 及其拥有的依赖项。JSF 等其他依赖项无法获取覆盖的区域。

要使用与系统默认不同的区域设置启动 JBoss EAP 服务器,您可以编辑 EAP_HOME/bin/standalone.confEAP_HOME/bin/domain.conf 文件,具体取决于您的操作模式,并附加以下命令来为所需的区域设置 JVM 参数。属性值必须以 BCP 47 格式指定。例如,若要设置巴西葡萄牙语,请使用 pt-BR。

JAVA_OPTS="$JAVA_OPTS -Dorg.jboss.logging.locale=pt-BR"

12.2. 查看日志文件

查看服务器和应用日志非常重要,以帮助诊断错误、性能问题和其他问题。有些用户可能更喜欢直接在服务器文件系统中查看日志。对于没有直接访问文件系统或首选图形界面的用户,JBoss EAP 允许您从管理控制台查看日志。您还可以使用管理 CLI 查看日志。

若要从其中一个管理接口访问日志,它必须位于由服务器的 jboss.server.log.dir 属性指定的目录中,并定义为文件、定期轮转、大小轮转或定期轮转日志处理程序。也遵循 RBAC 角色分配,因此登录管理控制台或 CLI 的用户只能查看他们有权访问的日志。

从管理控制台查看日志

您可以直接从管理控制台查看日志。

  • 选择 Runtime 选项卡。
  • 选择 Standalone Server。如果您在受管域中运行,请选择相应的服务器。
  • 选择 Log Files 并点 View

从列表中选择日志文件后,您可以在管理控制台中直接查看和搜索日志内容。您还可以将日志文件下载到本地文件系统。

警告

管理控制台日志视图不应是查看非常大的日志文件(例如大于 100MB)的文本编辑器替换。如果您试图打开大于 15MB 的日志文件,系统会提示您确认。在管理控制台中打开非常大的文件可能会导致浏览器崩溃,因此您应该始终在本地下载大型日志文件,并在文本编辑器中打开这些文件。

从管理 CLI 查看日志

您可以使用 read-log-file 命令从管理 CLI 读取日志文件的内容。默认情况下,这显示指定日志文件的最后 10 行。

/subsystem=logging/log-file=LOG_FILE_NAME:read-log-file
注意

在受管域中,在此命令前面带有 /host=HOST_NAME/server=SERVER_NAME

您可以使用以下参数来自定义日志输出:

编码
用于读取文件的字符编码。
要从文件中读取的行数。值 -1 将读取所有日志行。默认值为 10
skip
在读取前要跳过的行数。默认值为 0
tail
是否从文件的末尾读取。默认值为 true

例如,以下管理 CLI 命令从 server.log 日志文件的顶部读取前 5 行:

/subsystem=logging/log-file=server.log:read-log-file(lines=5,tail=false)

这会生成以下输出:

{
    "outcome" => "success",
    "result" => [
        "2016-03-24 08:49:26,612 INFO  [org.jboss.modules] (main) JBoss Modules version 1.5.1.Final-redhat-1",
        "2016-03-24 08:49:26,788 INFO  [org.jboss.msc] (main) JBoss MSC version 1.2.6.Final-redhat-1",
        "2016-03-24 08:49:26,863 INFO  [org.jboss.as] (MSC service thread 1-7) WFLYSRV0049: JBoss EAP 7.0.0.GA (WildFly Core 2.0.13.Final-redhat-1) starting",
        "2016-03-24 08:49:27,973 INFO  [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0039: Creating http management service using socket-binding (management-http)",
        "2016-03-24 08:49:27,994 INFO  [org.xnio] (MSC service thread 1-1) XNIO version 3.3.4.Final-redhat-1"
    ]
}

12.3. 关于 Logging 子系统

JBoss EAP logging 子系统使用 日志类别和 日志处理程序 的系统进行配置。日志类别定义要捕获的消息。日志处理程序定义如何处理这些消息,例如写入磁盘或发送到控制台。

日志记录配置集 允许创建唯一命名的日志配置集,并分配给独立于任何其他日志记录配置的应用程序。日志记录配置集的配置与主日志记录子系统几乎相同。

12.3.1. 根日志记录器

JBoss EAP 根日志记录器捕获指定日志级别或更高日志级别的所有日志消息,发送到不是由日志类别捕获的服务器。

默认情况下,根日志记录器配置为使用控制台和一个定期日志处理程序。定期日志处理程序配置为写入 server.log 文件。此文件通常被称为服务器日志。

如需更多信息 ,请参阅配置根 日志。

12.3.2. Log Categories

日志类别定义要捕获的一组日志消息,以及处理消息的一个或多个日志处理程序。

要捕获的日志消息由原始和日志级别的指定 Java 软件包定义。来自该软件包和该日志级别或更高日志级别中的类的消息由日志类别捕获,并发送到指定的日志处理程序。

注意

虽然日志类别通常是 Java 软件包和类名称,但可以是 Logger.getLogger (LOGGER_NAME) 方法指定的任何名称。

日志类别可以选择使用根日志记录器的日志处理程序,而不是其自身的处理程序。

如需更多信息 ,请参阅配置 日志条目。

12.3.3. 日志处理程序

日志处理程序定义如何记录捕获的日志消息。可用的日志处理程序类型是 控制台文件定期大小定期大小syslog自定义async

注意

日志处理程序必须添加至至少一个日志记录器才能激活。

日志处理程序类型
控制台(Console)
控制台日志处理程序将日志消息写入主机操作系统的标准输出(stdout)或标准错误(stderr)流。当 JBoss EAP 从命令行提示符运行时,将显示这些消息。来自控制台日志处理程序的消息不会被保存,除非操作系统被配置为捕获标准输出或标准错误流。
File
文件日志处理程序将日志消息写入指定文件。
periodic
定期日志处理程序将日志消息写入命名文件,直到指定的时间段已过。传递了时间段后,该文件将通过附加指定的时间戳来重命名,处理程序将继续写入具有原始名称的新创建的日志文件。
Size
大小日志处理程序将日志消息写入命名文件,直到文件达到指定大小。当文件达到指定大小时,使用数字后缀重命名,处理程序将继续写入具有原始名称的新创建的日志文件。每个大小日志处理程序必须以这种方式指定要保留的最大文件数。
定期大小

定期大小日志处理程序将日志消息写入命名文件,直到文件达到指定大小或指定时间段已过。然后,该文件被重命名,处理程序将继续写入具有原始名称的新创建的日志文件。

这是定期和大小日志处理程序的组合,并支持它们的组合属性。

Syslog
syslog 处理程序可用于发送消息到远程日志记录服务器。这允许多个应用将其日志消息发送到同一服务器,其中所有应用程序都可以被解析。
Custom
自定义日志处理程序允许您配置已实施的新日志处理程序。自定义处理程序必须实施为扩展 java.util.logging.Handler 的 Java 类,并包含在模块中。您还可以使用 Log4J appender 作为自定义日志处理程序。
Async
async 日志处理程序是一个 wrapper 日志处理程序,它为一个或多个其他日志处理程序提供异步行为。这对可能具有高延迟或其他性能问题的日志处理程序很有用,如将日志文件写入网络文件系统等。

有关配置这些日志处理程序的详情,请参考 配置日志处理程序部分

12.3.4. 日志级别

日志级别是一个枚举的值,表示日志消息的性质和严重性。作为开发者,您可以使用您选择的日志记录框架的适当方法指定给定日志消息的级别来发送消息。

JBoss EAP 支持由支持的应用程序日志记录框架使用的所有日志级别。从最低到最高最常用的日志级别为 TRACEDEBUGINFOWARNERRORFATAL

日志类别和处理程序使用日志级别来限制它们所负责的消息。每个日志级别都有一个数字值,它指示其相对于其他日志级别的顺序。日志类别和处理程序被分配一个日志级别,它们仅处理该级别或更高级别的日志消息。例如,带有 WARN 级别 WARN 的日志处理程序将仅记录级别 WARNERRORFATAL 的信息。

支持的日志级别
日志级别描述

ALL

Integer.MIN_VALUE

提供所有日志消息。

FINEST

300

-

FINER

400

-

TRACE

400

TRACE 级别日志消息提供有关应用运行状态的详细信息,通常仅在调试期间捕获。

DEBUG

500

DEBUG 级别日志消息表示单个请求或应用活动的进度,通常仅在调试过程中捕获。

FINE

500

-

CONFIG

700

-

INFO

800

INFO 级别日志消息表示应用程序的整体进度。通常用于应用程序启动、关闭和其他主要生命周期事件。

WARN

900

WARN 级别日志消息表示不是出错的情况,但不被视为理想情况。WARN 日志消息可以指示将来可能导致错误的情况。

WARNING

900

-

ERROR

1000

ERROR 级别日志消息表示发生了错误,可能会妨碍当前活动或请求完成,但不会阻止应用运行。

严重

1000

-

FATAL

1100

FATAL 级别日志消息表示可能导致关键服务失败和应用程序关闭的事件,并可能导致 JBoss EAP 关闭。

OFF

Integer.MAX_VALUE

不显示任何日志消息。

注意

ALL 是最低的日志级别,包含所有日志级别的信息。这提供了大多数日志记录。

FATAL 是最高日志级别,仅包含该级别的信息。这提供了最少的日志记录量。

12.3.5. 日志格式

日志格式器定义来自该处理程序的日志消息的外观。它是使用基于 java.util.logging.Formatter 类的语法的字符串。

例如,默认配置使用以下日志格式字符串将消息记录到服务器日志: %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n。这将创建类似以下的日志消息。

2016-03-18 15:49:32,075 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990

有关配置日志格式器的更多信息,请参阅配置指定模式 格式或 配置自定义日志格式 器。

下表列出了日志格式字符串中使用的语法。

日志格式语法
符号描述

%c

日志记录事件的类别。

%p

日志条目的级别(INFO、DEBUG 等)。

%P

日志条目的本地化级别。

%d

当前日期/时间(yyyy-MM-dd HH:mm:ss,SSS 格式)。

%r

相对时间(日志初始化后的毫秒)。

%z

时区,必须在日期前指定(%d)。例如,%z{GMT}%d{HH:mm:ss,SSS}

%k

日志资源密钥(用于本地化日志消息)。

%m

日志消息(包括异常追踪)。

%s

简单的日志消息(没有异常追踪)。

%e

异常堆栈追踪(没有扩展模块信息)。

%E

异常堆栈追踪(带有扩展模块信息)。

%t

当前线程的名称。

%n

换行符。

%C

调用日志方法(slow)的代码类。

%F

类的文件名调用日志方法(slow)。

%l

调用日志方法(slow)的代码的源位置。

%L

调用日志方法(slow)的代码行号。

%M

调用日志方法(slow)的代码方法。

%x

嵌套的诊断上下文.

%X

消息诊断上下文.

%%

字面百分比(%)字符(escaping)。

12.3.6. 过滤表达式

使用 filter-spec 属性配置的过滤器表达式用于根据各种条件记录日志消息。过滤器检查总是在原始未格式化的消息上完成。您可以包含日志记录器或处理程序的过滤器,但 logger 过滤器优先于处理程序上的过滤器。

注意

为根日志记录器指定的 filter-spec 不会由其他日志记录器继承。相反,每个处理程序必须指定 filter-spec

表 12.3. 日志过滤表达式

过滤表达式描述

accept

接受所有日志消息。

deny

拒绝所有日志消息。

not[filter expression]

返回单个过滤器表达式的数值。例如:

not(match("WFLY"))

all[filter expression]

从以逗号分隔的过滤器表达式列表中返回串联值。例如:

all (match ("WFLY"),match ("WELD"))

any[filter expression]

从以逗号分隔的过滤器表达式列表中返回一个值。例如:

any(match("WFLY"),match("WELD"))

levelChange[level]

使用指定级别更新日志记录。例如:

levelChange(WARN)

levels[levels]

使用以逗号分隔的级别列表中列出的级别过滤日志消息。例如:

levels (DEBUG,INFO,WARN,ERROR)

levelRange[minLevel,maxLevel]

过滤指定级别范围内的日志消息。[] 字符用于指定包含级别。() 字符用于指示专用级别。例如:

  • levelRange[INFO,ERROR]

    • 最小级别必须大于或等于 INFO,最大级别必须小于或等于 ERROR
  • levelRange[DEBUG,ERROR)

    • 最小级别必须大于或等于 DEBUG,最大级别必须小于 ERROR

match["pattern"]

使用提供的正则表达式过滤日志消息。例如:

match("WFLY\d+")

substitute["pattern","replacement value"]

使用替换文本(秒参数)替换第一个匹配项的过滤器(第一个参数)。例如:

substitute("WFLY","EAP")

substituteAll["pattern","replacement value"]

将模式(第一个参数)的所有匹配项替换为替换文本(秒参数)的过滤器。例如:

substituteAll("WFLY","EAP")

注意

在使用管理 CLI 配置过滤器表达式时,请务必在过滤文本中转义逗号和引号,以便该值作为字符串正确处理。您必须以逗号和引号前加上反斜杠(\),并将整个表达式嵌套在引号中。以下是一个示例,它正确转义 替换了All ("WFLY","YLFW")

/subsystem=logging/console-handler=CONSOLE:write-attribute(name=filter-spec, value="substituteAll(\"WFLY\"\,\"YLFW\")")

12.3.7. 隐式日志记录依赖项

默认情况下,JBoss EAP logging 子系统为部署添加隐式日志记录 API 依赖项。您可以使用 add-logging-api-dependencies 属性来控制这些隐式依赖项是否添加到部署中,默认为 true

使用管理 CLI,您可以将 add-logging-api-dependencies 属性设置为 false,以便将隐式日志记录 API 依赖项添加到部署中。

/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)

有关 logging 子系统的隐式依赖项的信息,请参阅 JBoss EAP 开发指南中的 Implicit Module Dependencies 部分。

12.4. 配置日志条目

本节介绍如何使用管理 CLI 配置日志类别。您还可以通过从 Configuration 选项卡导航到 Logging 子系统并选择 Log Categories 选项卡,来使用管理控制台配置日志类别。

配置日志类别需要执行的主要任务有:

重要

如果您要为日志记录配置集配置此日志类别,命令的启动将是 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/

另外,如果您在受管域中运行,请在命令前使用 /profile=PROFILE_NAME

添加日志类别

日志类别名称由 origin 的 Java 软件包定义。来自该软件包中的类的消息将被捕获,只要它们遵循其他设置,例如日志级别。

/subsystem=logging/logger=LOG_CATEGORY:add

配置日志类别设置

根据您的需要,您可能需要设置以下一个或多个日志类别属性。有关可用日志类别属性及其描述的完整列表,请参阅 日志类别属性

  • 设置日志级别。

    为日志类别设置适当的日志级别。默认值为 ALL。有关所有可用选项 的日志级别,请参阅日志级别。

    /subsystem=logging/logger=LOG_CATEGORY:write-attribute(name=level,value=LEVEL)
  • 设置此类别是否应该使用根日志记录器的日志处理程序。

    默认情况下,日志类别除了自己的外,还将使用根日志记录器的处理程序。如果日志类别应使用其分配的处理程序,则将 use-parent-handlers 属性设置为 false

    /subsystem=logging/logger=LOG_CATEGORY:write-attribute(name=use-parent-handlers,value=USE_PARENT_HANDLERS)
  • 设置过滤器表达式。

    设置过滤日志类别的日志消息的表达式。务必转义任何逗号和引号,并用引号括起来。例如,以下 FILTER_EXPRESSION 可替换变量需要替换为 "not (match (\"WFLY\")) ", 用于 不匹配("WFLY"))的过滤器表达式

    /subsystem=logging/logger=LOG_CATEGORY:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    有关可用过滤器表达式的更多信息,请参阅 Filter Expressions 部分。

分配处理程序

为日志类别分配日志处理程序。

/subsystem=logging/logger=LOG_CATEGORY:add-handler(name=LOG_HANDLER_NAME)

删除日志类别

可以通过 remove 操作删除日志类别。

/subsystem=logging/logger=LOG_CATEGORY:remove

12.5. 配置日志处理程序

日志处理程序定义如何记录捕获的日志消息。有关配置您需要的日志处理程序类型,请参阅相应的部分。

12.5.1. 配置控制台日志处理程序

本节介绍如何使用管理 CLI 配置控制台日志处理程序。您还可以通过从 Configuration 选项卡中导航到 Logging 子系统,选择 Handler 选项卡并从左侧菜单中选择 Console,来使用管理控制台配置控制台日志处理程序。

配置控制台日志处理程序要执行的主要任务有:

重要

如果您要为日志记录配置集配置此日志处理程序,命令的启动将是 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/

另外,如果您在受管域中运行,请在命令前使用 /profile=PROFILE_NAME

添加控制台日志处理程序
/subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:add
配置控制台日志处理程序设置

根据您的需要,您可能需要设置以下一个或多个控制台日志处理程序属性。有关可用控制台日志处理程序属性及其描述的完整列表,请参阅 控制台日志处理程序属性

  • 设置日志级别。

    为处理程序设置适当的日志级别。默认值为 ALL。有关所有可用选项 的日志级别,请参阅日志级别。

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置目标。

    为处理程序设置目标,可以是 System.outSystem.errconsole 之一。默认值为 System.out

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=target,value=TARGET)
  • 设置编码。

    设置处理程序的编码,例如 utf-8

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • 设置日志格式器。

    设置处理程序的 formatter 字符串。例如,默认格式字符串为 %d{HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n。务必将 FORMAT 值包括在引号中。

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注意
  • 设置自动清除。

    设置是否在每次写入后自动刷新。默认值为 true

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • 设置过滤器表达式。

    设置过滤处理程序的日志消息的表达式。务必转义任何逗号和引号,并用引号括起来。例如,以下 FILTER_EXPRESSION 可替换变量需要替换为 "not (match (\"WFLY\")) ", 用于 不匹配("WFLY"))的过滤器表达式

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    有关可用过滤器表达式的更多信息,请参阅 Filter Expressions 部分。

将 Console Log Handler 分配给 Logger

要让日志处理程序处于活动状态,您必须将它分配给日志记录器。

以下管理 CLI 命令将控制台日志处理程序分配给根日志记录器:

/subsystem=logging/root-logger=ROOT:add-handler(name=CONSOLE_HANDLER_NAME)

以下管理 CLI 命令将控制台日志处理程序分配给由 CATEGORY 指定名称的日志记录器。

/subsystem=logging/logger=CATEGORY:add-handler(name=CONSOLE_HANDLER_NAME)
删除控制台日志处理程序

可以通过 remove 操作来删除日志处理程序。当前分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

/subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:remove

12.5.2. 配置文件日志处理程序

本节介绍如何使用管理 CLI 配置文件日志处理程序。您还可以通过从 Configuration 选项卡导航到 Logging 子系统,选择 Handler 选项卡并从左侧菜单中选择 File,来使用管理控制台配置文件日志处理程序。

配置文件日志处理器时要执行的主要任务有:

重要

如果您要为日志记录配置集配置此日志处理程序,命令的启动将是 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/

另外,如果您在受管域中运行,请在命令前使用 /profile=PROFILE_NAME

添加文件日志处理程序

在添加文件日志处理程序时,您必须使用 file 属性指定文件路径,该属性由 pathrelative-to 属性组成。使用 path 属性设置日志的文件路径,包括名称,如 my-log.log。(可选)使用 relative-to 属性来设置路径相对于 指定路径,如 jboss.server.log.dir

/subsystem=logging/file-handler=FILE_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH})
配置文件日志处理程序设置

根据您的需要,您可能需要设置以下一个或多个文件日志处理程序属性。有关可用文件日志处理程序属性及其描述的完整列表,请参阅 文件日志处理程序属性

  • 设置日志级别。

    为处理程序设置适当的日志级别。默认值为 ALL。有关所有可用选项 的日志级别,请参阅日志级别。

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置附加行为。

    默认情况下,JBoss EAP 会在服务器重启时将日志消息附加到同一文件中。您可以将 append 属性设置为 false,使文件在服务器重启后被覆盖。

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=append,value=APPEND)
  • 设置编码。

    设置处理程序的编码,例如 utf-8

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • 设置日志格式器。

    设置处理程序的 formatter 字符串。例如,默认格式字符串为 %d{HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n。务必将 FORMAT 值包括在引号中。

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注意
  • 设置自动清除。

    设置是否在每次写入后自动刷新。默认值为 true

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • 设置过滤器表达式。

    设置过滤处理程序的日志消息的表达式。务必转义任何逗号和引号,并用引号括起来。例如,以下 FILTER_EXPRESSION 可替换变量需要替换为 "not (match (\"WFLY\")) ", 用于 不匹配("WFLY"))的过滤器表达式

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    有关可用过滤器表达式的更多信息,请参阅 Filter Expressions 部分。

将 File Log Handler 分配给 Logger

要让日志处理程序处于活动状态,您必须将它分配给日志记录器。

以下管理 CLI 命令将文件日志处理程序分配给根日志记录器:

/subsystem=logging/root-logger=ROOT:add-handler(name=FILE_HANDLER_NAME)

以下管理 CLI 命令将文件日志处理程序分配给由 CATEGORY 指定名称的日志记录器。

/subsystem=logging/logger=CATEGORY:add-handler(name=FILE_HANDLER_NAME)
删除文件日志处理程序

可以通过 remove 操作来删除日志处理程序。当前分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

/subsystem=logging/file-handler=FILE_HANDLER_NAME:remove

12.5.3. 配置定期轮转日志处理程序

本节介绍如何使用管理 CLI 配置定期轮转日志处理程序。您还可以通过从 Configuration 选项卡导航到 Logging 子系统,选择 Handler 选项卡,然后从左侧菜单中选择 Periodic 来配置定期日志处理程序。

配置定期日志处理器您要执行的主要任务有:

重要

如果您要为日志记录配置集配置此日志处理程序,命令的启动将是 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/

另外,如果您在受管域中运行,请在命令前使用 /profile=PROFILE_NAME

添加定期日志处理程序

添加定期日志处理程序时,您必须使用 file 属性指定文件路径,该属性由 pathrelative-to 属性组成。使用 path 属性设置日志的文件路径,包括名称,如 my-log.log。(可选)使用 relative-to 属性来设置路径相对于 指定路径,如 jboss.server.log.dir

您还必须使用 suffix 属性为轮转日志设置 后缀。这必须采用可由 java.text.SimpleDateFormat 理解的格式,如 .yyyy-MM-dd-HH。轮转的期间会根据这个后缀自动计算。

/subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH},suffix=SUFFIX)
配置定期日志处理程序设置

根据您的需要,您可能需要设置以下一个或多个定期日志处理程序属性。有关可用定期日志处理程序属性及其描述的完整列表,请参阅 Periodic Log Handler 属性

  • 设置日志级别。

    为处理程序设置适当的日志级别。默认值为 ALL。有关所有可用选项 的日志级别,请参阅日志级别。

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置附加行为。

    默认情况下,JBoss EAP 会在服务器重启时将日志消息附加到同一文件中。您可以将 append 属性设置为 false,使文件在服务器重启后被覆盖。

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=append,value=APPEND)
  • 设置编码。

    设置处理程序的编码,例如 utf-8

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • 设置日志格式器。

    设置处理程序的 formatter 字符串。例如,默认格式字符串为 %d{HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n。务必将 FORMAT 值包括在引号中。

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注意
  • 设置自动清除。

    设置是否在每次写入后自动刷新。默认值为 true

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • 设置过滤器表达式。

    设置过滤处理程序的日志消息的表达式。务必转义任何逗号和引号,并用引号括起来。例如,以下 FILTER_EXPRESSION 可替换变量需要替换为 "not (match (\"WFLY\")) ", 用于 不匹配("WFLY"))的过滤器表达式

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    有关可用过滤器表达式的更多信息,请参阅 Filter Expressions 部分。

将 Periodic Log Handler 分配给 Logger

要让日志处理程序处于活动状态,您必须将它分配给日志记录器。

以下管理 CLI 命令将定期日志处理程序分配给根日志记录器:

/subsystem=logging/root-logger=ROOT:add-handler(name=PERIODIC_HANDLER_NAME)

以下管理 CLI 命令将定期日志处理程序分配给由 CATEGORY 指定名称的日志记录器。

/subsystem=logging/logger=CATEGORY:add-handler(name=PERIODIC_HANDLER_NAME)
删除定期日志处理程序

可以通过 remove 操作来删除日志处理程序。当前分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

/subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:remove

12.5.4. 配置大小轮转日志处理程序

本节介绍如何使用管理 CLI 配置大小轮转日志处理程序。您还可以通过从 Configuration 选项卡中导航到 Logging 子系统,选择 Handler 选项卡并从左侧菜单中选择 Size,来使用管理控制台配置大小日志处理程序。

配置大小日志处理程序要执行的主要任务有:

重要

如果您要为日志记录配置集配置此日志处理程序,命令的启动将是 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/

另外,如果您在受管域中运行,请在命令前使用 /profile=PROFILE_NAME

添加大小日志处理程序

在添加大小日志处理程序时,您必须使用 file 属性指定文件路径,该属性由 pathrelative-to 属性组成。使用 path 属性设置日志的文件路径,包括名称,如 my-log.log。(可选)使用 relative-to 属性来设置路径相对于 指定路径,如 jboss.server.log.dir

/subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH})
配置大小日志处理程序设置

根据您的需要,您可能需要设置以下一个或多个大小日志处理程序属性。有关可用大小日志处理程序属性及其描述的完整列表,请参阅 大小日志处理程序属性

  • 设置日志级别。

    为处理程序设置适当的日志级别。默认值为 ALL。有关所有可用选项 的日志级别,请参阅日志级别。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 为轮转日志设置后缀。

    设置后缀字符串,其格式为 java.text.SimpleDateFormat,如 .yyyy-MM-dd-HH。轮转的期间会根据这个后缀自动计算。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=suffix, value=SUFFIX)
  • 设置轮转大小。

    设置文件在轮转前可以达到的最大大小。默认值为 2m,2m 表示 2MB。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=rotate-size, value=ROTATE_SIZE)
  • 设置要保留的最大备份日志数。

    设置要保留的备份数量。默认值为 1

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=max-backup-index, value=MAX_BACKUPS)
  • 设置是否在引导时轮转日志。

    默认情况下,在服务器重启时不会创建新的日志文件。您可以将其设置为 true,以在服务器重启时轮转日志。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=rotate-on-boot, value=ROTATE_ON_BOOT)
  • 设置附加行为。

    默认情况下,JBoss EAP 会在服务器重启时将日志消息附加到同一文件中。您可以将 append 属性设置为 false,使文件在服务器重启后被覆盖。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=append,value=APPEND)
  • 设置编码。

    设置处理程序的编码,例如 utf-8

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • 设置日志格式器。

    设置处理程序的 formatter 字符串。例如,默认格式字符串为 %d{HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n。务必将 FORMAT 值包括在引号中。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注意
  • 设置自动清除。

    设置是否在每次写入后自动刷新。默认值为 true

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • 设置过滤器表达式。

    设置过滤处理程序的日志消息的表达式。务必转义任何逗号和引号,并用引号括起来。例如,以下 FILTER_EXPRESSION 可替换变量需要替换为 "not (match (\"WFLY\")) ", 用于 不匹配("WFLY"))的过滤器表达式

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    有关可用过滤器表达式的更多信息,请参阅 Filter Expressions 部分。

将 Size Log Handler 分配给 Logger

要让日志处理程序处于活动状态,您必须将它分配给日志记录器。

以下管理 CLI 命令将大小日志处理程序分配给根日志记录器:

/subsystem=logging/root-logger=ROOT:add-handler(name=SIZE_HANDLER_NAME)

以下管理 CLI 命令将大小日志处理程序分配给由 CATEGORY 指定名称的日志记录器。

/subsystem=logging/logger=CATEGORY:add-handler(name=SIZE_HANDLER_NAME)
删除大小日志处理程序

可以通过 remove 操作来删除日志处理程序。当前分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

/subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:remove

12.5.5. 配置定期大小轮转日志处理程序

本节介绍如何使用管理 CLI 配置定期大小轮转日志处理程序。您还可以通过导航到 Logging 子系统,选择 Handler 选项卡,然后从左侧菜单中选择 Periodic Size,来使用管理控制台配置定期大小日志处理程序。

配置定期日志处理器时要执行的主要任务有:

重要

如果您要为日志记录配置集配置此日志处理程序,命令的启动将是 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/

另外,如果您在受管域中运行,请在命令前使用 /profile=PROFILE_NAME

添加定期大小日志处理程序

添加定期大小日志处理程序时,您必须使用 file 属性指定文件路径,该属性由 pathrelative-to 属性组成。使用 path 属性设置日志的文件路径,包括名称,如 my-log.log。(可选)使用 relative-to 属性来设置路径相对于 指定路径,如 jboss.server.log.dir

您还必须使用 suffix 属性为轮转日志设置 后缀。这必须采用可由 java.text.SimpleDateFormat 理解的格式,如 .yyyy-MM-dd-HH。轮转的期间会根据这个后缀自动计算。

/subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH},suffix=SUFFIX)
配置定期大小日志处理程序设置

根据您的需要,您可能需要设置以下定期大小日志处理程序属性的一个或多个。有关可用定期大小日志处理程序属性及其描述的完整列表,请参阅 Periodic Size Log Handler 属性

  • 设置日志级别。

    为处理程序设置适当的日志级别。默认值为 ALL。有关所有可用选项 的日志级别,请参阅日志级别。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置轮转大小。

    设置文件在轮转前可以达到的最大大小。默认值为 2m,2m 表示 2MB。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=rotate-size, value=ROTATE_SIZE)
  • 设置要保留的最大备份日志数。

    设置要保留的备份数量。默认值为 1

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=max-backup-index, value=MAX_BACKUPS)
  • 设置是否在引导时轮转日志。

    默认情况下,在服务器重启时不会创建新的日志文件。您可以将其设置为 true,以在服务器重启时轮转日志。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=rotate-on-boot, value=ROTATE_ON_BOOT)
  • 设置附加行为。

    默认情况下,JBoss EAP 会在服务器重启时将日志消息附加到同一文件中。您可以将 append 属性设置为 false,使文件在服务器重启后被覆盖。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=append,value=APPEND)
  • 设置编码。

    设置处理程序的编码,例如 utf-8

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • 设置日志格式器。

    设置处理程序的 formatter 字符串。例如,默认格式字符串为 %d{HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n。务必将 FORMAT 值包括在引号中。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注意
  • 设置自动清除。

    设置是否在每次写入后自动刷新。默认值为 true

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • 设置过滤器表达式。

    设置过滤处理程序的日志消息的表达式。务必转义任何逗号和引号,并用引号括起来。例如,以下 FILTER_EXPRESSION 可替换变量需要替换为 "not (match (\"WFLY\")) ", 用于 不匹配("WFLY"))的过滤器表达式

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    有关可用过滤器表达式的更多信息,请参阅 Filter Expressions 部分。

将 Periodic Size Log Handler 分配给 Logger

要让日志处理程序处于活动状态,您必须将它分配给日志记录器。

以下管理 CLI 命令将定期大小日志处理程序分配给根日志记录器:

/subsystem=logging/root-logger=ROOT:add-handler(name=PERIODIC_SIZE_HANDLER_NAME)

以下管理 CLI 命令将定期大小日志处理程序分配给由 CATEGORY 指定名称的日志记录器。

/subsystem=logging/logger=CATEGORY:add-handler(name=PERIODIC_SIZE_HANDLER_NAME)
删除定期大小日志处理程序

可以通过 remove 操作来删除日志处理程序。当前分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

/subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:remove

12.5.6. 配置 Syslog 处理程序

本节介绍如何使用管理 CLI 配置 syslog 处理程序,该处理程序可用于发送消息到支持 Syslog 协议(RFC-3164 或 RFC-5424)的远程日志记录服务器。您还可以通过从 Configuration 选项卡导航到 Logging 子系统,选择 Handler 选项卡并从左侧菜单中选择 Syslog 来配置 syslog 处理程序。

配置 syslog 处理程序要执行的主要任务有:

重要

如果您要为日志记录配置集配置此日志处理程序,命令的启动将是 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/

另外,如果您在受管域中运行,请在命令前使用 /profile=PROFILE_NAME

添加 Syslog 处理程序
/subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:add
配置 Syslog 处理程序设置

根据您的需要,您可能需要设置以下一个或多个 syslog 处理程序属性。有关可用 syslog 处理程序属性及其描述的完整列表,请参阅 Syslog 处理程序属性

  • 设置处理程序的日志级别。默认级别为 ALL。有关所有可用选项 的日志级别,请参阅日志级别。

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置日志记录的应用程序的名称。默认名称为 java

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=app-name,value=APP_NAME)
  • 设置 syslog 服务器的地址。默认地址为 localhost

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=server-address,value=SERVER_ADDRESS)
  • 设置 syslog 服务器的端口。默认端口为 514

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=port,value=PORT)
  • 设置 syslog 格式,如 RFC 规范所定义。默认格式为 RFC5424

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=syslog-format,value=SYSLOG_FORMAT)
将 Syslog Handler 分配给 Logger

要让日志处理程序处于活动状态,您必须将它分配给日志记录器。

以下管理 CLI 命令将 syslog 处理程序分配给根日志记录器:

/subsystem=logging/root-logger=ROOT:add-handler(name=SYSLOG_HANDLER_NAME)

以下管理 CLI 命令将 syslog 处理程序分配给由 CATEGORY 指定名称的日志记录器。

/subsystem=logging/logger=CATEGORY:add-handler(name=SYSLOG_HANDLER_NAME)
删除 Syslog 处理程序

可以通过 remove 操作来删除日志处理程序。当前分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

/subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:remove

12.5.7. 配置自定义日志处理程序

本节介绍如何使用管理 CLI 配置自定义日志处理程序。您还可以通过从 Configuration 选项卡导航到 Logging 子系统,选择 Handler 选项卡并从左侧菜单中选择 Custom,来使用管理控制台配置自定义日志处理程序。

配置自定义日志处理器您要执行的主要任务有:

重要

如果您要为日志记录配置集配置此日志处理程序,命令的启动将是 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/

另外,如果您在受管域中运行,请在命令前使用 /profile=PROFILE_NAME

添加自定义日志处理程序

添加自定义日志处理程序时,您必须指定处理程序的 Java 类以及其中包含的 JBoss EAP 模块。类必须扩展 java.util.logging.Handler

/subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:add(class=CLASS_NAME,module=MODULE_NAME)
配置自定义日志处理程序设置

根据您的需要,您可能需要设置以下一个或多个自定义日志处理程序属性。有关可用自定义日志处理程序属性及其描述的完整列表,请参阅 自定义日志处理程序属性

  • 设置日志级别。

    为处理程序设置适当的日志级别。默认值为 ALL。有关所有可用选项 的日志级别,请参阅日志级别。

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置属性。

    设置日志处理程序的必要属性。属性必须能够通过 setter 方法访问。

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=properties.PROPERTY_NAME,value=PROPERTY_VALUE)
  • 设置编码。

    设置处理程序的编码,例如 utf-8

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • 设置日志格式器。

    设置处理程序的 formatter 字符串。例如,默认格式字符串为 %d{HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n。务必将 FORMAT 值包括在引号中。

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注意
  • 设置过滤器表达式。

    设置过滤处理程序的日志消息的表达式。务必转义任何逗号和引号,并用引号括起来。例如,以下 FILTER_EXPRESSION 可替换变量需要替换为 "not (match (\"WFLY\")) ", 用于 不匹配("WFLY"))的过滤器表达式

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    有关可用过滤器表达式的更多信息,请参阅 Filter Expressions 部分。

将自定义日志处理程序分配给 Logger

要让日志处理程序处于活动状态,您必须将它分配给日志记录器。

以下管理 CLI 命令将自定义日志处理程序分配给根日志记录器:

/subsystem=logging/root-logger=ROOT:add-handler(name=CUSTOM_HANDLER_NAME)

以下管理 CLI 命令将自定义日志处理程序分配给由 CATEGORY 指定名称的日志记录器。

/subsystem=logging/logger=CATEGORY:add-handler(name=CUSTOM_HANDLER_NAME)
删除自定义日志处理程序

可以通过 remove 操作来删除日志处理程序。当前分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

/subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:remove

12.5.8. 配置 Async 日志处理程序

本节介绍如何使用管理 CLI 配置 async 日志处理程序。您还可以通过从 Configuration 选项卡导航到 Logging 子系统,选择 Handler 选项卡并从左侧菜单中选择 Async,来使用管理控制台配置 async 日志处理程序。

配置 async 日志处理器时要执行的主要任务有:

重要

如果您要为日志记录配置集配置此日志处理程序,命令的启动将是 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/

另外,如果您在受管域中运行,请在命令前使用 /profile=PROFILE_NAME

添加异步日志处理程序

添加 async 日志处理程序时,您必须指定队列长度。这是队列中可以保存的日志请求的最大数量。

/subsystem=logging/async-handler=ASYNC_HANDLER_NAME:add(queue-length=QUEUE_LENGTH)
添加 Sub-handler

您可以将一个或多个处理程序添加为此 async 日志处理程序的子处理程序。请注意,处理程序必须已存在于配置中,否则此命令将失败。

/subsystem=logging/async-handler=ASYNC_HANDLER_NAME:add-handler(name=HANDLER_NAME)
配置同步日志处理程序设置

根据您的需要,您可能需要设置以下一个或多个 async 日志处理程序属性。有关可用 async 日志处理程序属性及其描述的完整列表,请参阅 Async Log Handler 属性

  • 设置日志级别。

    为处理程序设置适当的日志级别。默认值为 ALL。有关所有可用选项 的日志级别,请参阅日志级别。

    /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置溢出操作。

    将操作设置为溢出时要执行的操作。默认值为 BLOCK,这意味着线程将在完整队列时阻止。您可以将此值更改为 DISCARD,这意味着当完整队列出现日志消息时,将丢弃日志消息。

    /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:write-attribute(name=overflow-action,value=OVERFLOW_ACTION)
  • 设置过滤器表达式。

    设置过滤处理程序的日志消息的表达式。务必转义任何逗号和引号,并用引号括起来。例如,以下 FILTER_EXPRESSION 可替换变量需要替换为 "not (match (\"WFLY\")) ", 用于 不匹配("WFLY"))的过滤器表达式

    /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    有关可用过滤器表达式的更多信息,请参阅 Filter Expressions 部分。

将 Async Log Handler 分配给 Logger

要让日志处理程序处于活动状态,您必须将它分配给日志记录器。

以下管理 CLI 命令将 async 日志处理程序分配给根日志记录器:

/subsystem=logging/root-logger=ROOT:add-handler(name=ASYNC_HANDLER_NAME)

以下管理 CLI 命令将 async 日志处理程序分配给由 CATEGORY 指定名称的日志记录器。

/subsystem=logging/logger=CATEGORY:add-handler(name=ASYNC_HANDLER_NAME)
删除异步日志处理程序

可以通过 remove 操作来删除日志处理程序。当前分配给日志记录器,则无法删除日志处理程序。

/subsystem=logging/async-handler=ASYNC_HANDLER_NAME:remove

12.6. 配置根日志记录器

根日志记录器捕获指定日志级别或更高日志级别的所有日志消息,发送到不是由日志类别捕获的服务器。

本节介绍如何使用管理 CLI 配置根日志记录器。您还可以通过从 Configuration 选项卡导航到 Logging 子系统并选择 Root Logger 选项卡,来使用管理控制台配置根日志记录器。

配置 Root Logger

重要

如果您要为日志记录配置集配置此日志处理程序,命令的启动将是 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/

另外,如果您在受管域中运行,请在命令前使用 /profile=PROFILE_NAME

  1. 将日志处理程序分配到根日志记录器。

    添加日志处理程序。

    /subsystem=logging/root-logger=ROOT:add-handler(name=LOG_HANDLER_NAME)

    删除日志处理程序。

    /subsystem=logging/root-logger=ROOT:remove-handler(name=LOG_HANDLER_NAME)
  2. 设置日志级别。

    /subsystem=logging/root-logger=ROOT:write-attribute(name=level,value=LEVEL)

有关可用根日志记录器属性及其描述的完整列表,请参阅 Root Logger 属性

12.7. 配置日志格式

日志格式器定义来自该处理程序的日志消息的外观。您可以配置 命名模式 formatter自定义日志格式ter

12.7.1. 配置指定模式格式

您可以创建一个命名模式格式器,可在日志处理程序之间用于格式化日志消息。

本节介绍如何使用管理 CLI 配置日志格式。您还可以通过从 Configuration 选项卡中导航到 Logging 子系统,选择 Formatter 选项卡并从左侧菜单中选择 Pattern,来使用管理控制台配置日志格式。

重要

如果您要为日志记录配置集配置此日志格式,命令的开头为 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/

另外,如果您在受管域中运行,请在命令前使用 /profile=PROFILE_NAME

创建指定格式

在定义 formatter 时,您可以提供一个用于格式化日志消息的模式字符串。有关 模式语法的更多信息,请参阅日志格式ter。

/subsystem=logging/pattern-formatter=PATTERN_FORMATTER_NAME:add(pattern=PATTERN_STRING)

您还可以定义一个颜色映射,将颜色分配给不同的日志级别。格式是 LEVEL:COLOR 的逗号分隔列表。

  • 有效级别:e fine , fine, fine,config,trace,debug,info,warning,warn, error ,error,fatal,severe
  • 有效颜色: 黑色绿色红色黄色蓝色magentacyan、wightblack、brightblackbrightgreen , brightgreen,bright yellow,brightmagenta, brightcyan,brightwhite
/subsystem=logging/pattern-formatter=PATTERN_FORMATTER_NAME:write-attribute(name=color-map,value="LEVEL:COLOR,LEVEL:COLOR")
将指定格式器分配给日志处理程序

以下管理 CLI 命令分配供定期轮转文件处理程序使用的模式格式器。

/subsystem=logging/periodic-rotating-file-handler=FILE_HANDLER_NAME:write-attribute(name=named-formatter,value=PATTERN_FORMATTER_NAME)

12.7.2. 配置自定义日志格式

您可以创建自定义日志格式器,该格式可在日志处理程序之间用于格式化日志消息。

本节介绍如何使用管理 CLI 配置自定义日志格式。您还可以通过从 Configuration 选项卡中导航到 Logging 子系统,选择 Formatter 选项卡并从左侧菜单中选择 Custom,来使用管理控制台配置日志格式。

配置自定义日志格式
重要

如果您要为日志记录配置集配置此日志格式,命令的开头为 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/

另外,如果您在受管域中运行,请在命令前使用 /profile=PROFILE_NAME

  1. 添加自定义日志格式器。

    添加自定义日志格式器时,您必须指定 formatter 的 Java 类以及其中包含它的 JBoss EAP 模块。类必须扩展 java.util.logging.Formatter

    注意

    您必须已创建了包含自定义格式的模块,否则这个命令将失败。

    /subsystem=logging/custom-formatter=CUSTOM_FORMATTER_NAME:add(class=CLASS_NAME, module=MODULE_NAME)
  2. 设置日志格式器的必要属性。

    属性必须能够通过 setter 方法访问。

    /subsystem=logging/custom-formatter=CUSTOM_FORMATTER_NAME:write-attribute(name=properties.PROPERTY_NAME,value=PROPERTY_VALUE)
  3. 将自定义格式器分配给日志处理程序。

    以下管理 CLI 命令分配由定期轮转文件处理程序使用的自定义格式器。

    /subsystem=logging/periodic-rotating-file-handler=FILE_HANDLER_NAME:write-attribute(name=named-formatter, value=CUSTOM_FORMATTER_NAME)
自定义 XML 格式器示例

以下示例配置了一个自定义 XML 格式。它使用 org.jboss.logmanager 模块中提供的 java.util.logging.XMLFormatter 类,并将其分配给控制台日志处理程序。

/subsystem=logging/custom-formatter=custom-xml-formatter:add(class=java.util.logging.XMLFormatter, module=org.jboss.logmanager)
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=named-formatter, value=custom-xml-formatter)

使用这个格式器的日志消息的格式如下。

<record>
  <date>2016-03-23T12:58:13</date>
  <millis>1458752293091</millis>
  <sequence>93963</sequence>
  <logger>org.jboss.as</logger>
  <level>INFO</level>
  <class>org.jboss.as.server.BootstrapListener</class>
  <method>logAdminConsole</method>
  <thread>22</thread>
  <message>WFLYSRV0051: Admin console listening on http://%s:%d</message>
  <param>127.0.0.1</param>
  <param>9990</param>
</record>

12.8. 关于应用程序日志记录

可以使用 JBoss EAP 日志记录子系统或每个部署配置应用程序的 日志记录

请参阅关于日志记录子系统, 以使用 JBoss EAP 日志类别和处理程序来捕获日志消息。

有关应用程序日志记录的更多信息,如支持的应用程序日志记录框架和配置每个部署日志,请参阅 JBoss EAP 开发指南中的日志记录章节https://access.redhat.com/documentation/zh-cn/red_hat_jboss_enterprise_application_platform/7.0/html-single/development_guide/#logging_for_developers

12.8.1. 每部署日志

通过每个部署日志,开发人员可以提前为其应用程序配置日志配置。部署应用程序时,日志记录会根据定义的配置开始。通过此配置创建的日志文件仅包含与应用行为相关的信息。

注意

如果没有完成每个部署的日志配置,则 logging 子系统的配置将用于所有应用和服务器。

与使用系统范围的日志记录相比,这种方法具有优缺点。优点是 JBoss EAP 实例的管理员不需要配置除服务器日志记录以外的任何其他日志记录。缺点是,每个部署的日志配置仅在服务器启动时读取,因此在运行时无法更改。

有关在应用程序中使用每个部署日志的说明,请参阅 JBoss EAP 开发指南中的 添加 Per-deployment Logging 到应用程序

12.8.1.1. 禁用 Per-deployment Logging

您可以使用以下方法之一禁用每个部署日志:

  • use-deployment-logging-config 属性设置为 false

    use-deployment-logging-config 属性控制是否为每个部署日志记录扫描您的部署。默认为 true。您可以将此属性设置为 false,以禁用每个部署日志。

    /subsystem=logging:write-attribute(name=use-deployment-logging-config,value=false)
  • 使用 jboss-deployment-structure.xml 文件排除 logging 子系统。

    具体步骤,请参阅 JBoss EAP 开发指南中的 部署排除子系统

12.8.2. 日志记录配置集

日志记录配置集是可分配给部署的应用程序的独立日志记录配置集合。与常规日志记录子系统一样,日志记录配置文件可以定义处理程序、类别和根日志记录器,但它无法引用其他配置集或主日志记录子系统中的配置。 日志记录配置集的设计模拟 logging 子系统,以简化配置。

通过日志记录配置集,管理员可以创建特定于一个或多个应用程序的日志记录配置,而不影响任何其他日志记录配置。由于在服务器配置中定义了每个配置集,因此可以更改日志配置,而无需重新部署受影响的应用程序。但是,无法使用管理控制台配置日志配置集。

每个日志记录配置集都可以:

  • 唯一名称(必需)
  • 任意数量的日志处理程序
  • 任意数量的日志类别
  • 最多一个根日志记录器

应用程序可以使用 Logging-Profile 属性指定在 MANIFEST.MF 文件中要使用的日志配置集。

12.8.2.1. 配置日志记录配置集

日志记录配置集可以配置日志处理程序、类别和根日志记录器。配置日志记录配置集使用与配置日志记录子系统相同的语法,但以下区别除外:

  • 根配置路径为 /subsystem=logging/logging-profile=NAME
  • 日志记录配置集无法包含其他日志记录配置集。
  • logging 子系统具有以下可用于日志记录配置集的属性:

    • add-logging-api-dependencies
    • use-deployment-logging-config
创建并配置日志记录配置集

以下流程使用管理 CLI 创建日志记录配置文件并设置文件处理程序和日志记录器类别。

  1. 创建日志记录配置集。

    /subsystem=logging/logging-profile=PROFILE_NAME:add
  2. 创建文件处理程序。

    /subsystem=logging/logging-profile=PROFILE_NAME/file-handler=FILE_HANDLER_NAME:add(file={path=>"LOG_NAME.log", "relative-to"=>"jboss.server.log.dir"})
    /subsystem=logging/logging-profile=PROFILE_NAME/file-handler=FILE_HANDLER_NAME:write-attribute(name="level", value="DEBUG")

    如需 文件处理程序属性列表,请参阅文件日志处理程序属性。

  3. 创建日志记录器类别。

    /subsystem=logging/logging-profile=PROFILE_NAME/logger=CATEGORY_NAME:add(level=TRACE)

    如需 日志类别属性列表,请参阅日志类别属性。

  4. 将文件处理程序分配到该类别。

    /subsystem=logging/logging-profile=PROFILE_NAME/logger=CATEGORY_NAME:add-handler(name="FILE_HANDLER_NAME")

然后,您可以在其 MANIFEST.MF 文件中将日志配置集设置为供应用程序使用。如需更多信息,请参阅 JBoss EAP 开发指南中的 在应用程序中指定日志记录 配置文件。

12.8.2.2. Logging Profile 配置示例

本例演示了日志记录配置集的配置以及使用它的应用程序。它显示管理 CLI 命令、生成的 XML 以及应用程序的 MANIFEST.MF 文件。

日志记录配置集示例有以下特征:

  • 名称是 accounts-app-profile
  • 日志类别为 com.company.accounts.ejbs
  • 日志级别 TRACE
  • 日志处理程序是一个文件处理程序,它使用了文件 ejb-trace.log

管理 CLI 会话

/subsystem=logging/logging-profile=accounts-app-profile:add

/subsystem=logging/logging-profile=accounts-app-profile/file-handler=ejb-trace-file:add(file={path=>"ejb-trace.log", "relative-to"=>"jboss.server.log.dir"})

/subsystem=logging/logging-profile=accounts-app-profile/file-handler=ejb-trace-file:write-attribute(name="level", value="DEBUG")

/subsystem=logging/logging-profile=accounts-app-profile/logger=com.company.accounts.ejbs:add(level=TRACE)

/subsystem=logging/logging-profile=accounts-app-profile/logger=com.company.accounts.ejbs:add-handler(name="ejb-trace-file")

XML 配置

<logging-profiles>
   <logging-profile name="accounts-app-profile">
      <file-handler name="ejb-trace-file">
         <level name="DEBUG"/>
         <file relative-to="jboss.server.log.dir" path="ejb-trace.log"/>
      </file-handler>
      <logger category="com.company.accounts.ejbs">
         <level name="TRACE"/>
         <handlers>
            <handler name="ejb-trace-file"/>
         </handlers>
      </logger>
   </logging-profile>
</logging-profiles>

应用程序 MANIFEST.MF 文件

Manifest-Version: 1.0
Logging-Profile: accounts-app-profile

12.8.3. 查看部署日志记录配置

您可以使用以下管理 CLI 命令获取有关特定部署的日志记录配置的信息。

/deployment=DEPLOYMENT_NAME/subsystem=logging/configuration=CONFIG:read-resource

部署的日志记录配置值(CONFIG)可以是以下三个值之一:

例如,以下管理 CLI 命令显示 MYPROFILE 日志记录配置集的配置,供指定部署使用。

/deployment=mydeployment.war/subsystem=logging/configuration=profile-MYPROFILE:read-resource(recursive=true,include-runtime=true)

这将输出以下信息:

{
    "outcome" => "success",
    "result" => {
        "error-manager" => undefined,
        "filter" => undefined,
        "formatter" => {
            "MYFORMATTER" => {
                "class-name" => "org.jboss.logmanager.formatters.PatternFormatter",
                "module" => undefined,
                "properties" => {"pattern" => "%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"}
            }
        },
        "handler" => {
            "MYPERIODIC" => {
                "class-name" => "org.jboss.logmanager.handlers.PeriodicRotatingFileHandler",
                "encoding" => undefined,
                "error-manager" => undefined,
                "filter" => undefined,
                "formatter" => "MYFORMATTER",
                "handlers" => [],
                "level" => "ALL",
                "module" => undefined,
                "properties" => {
                    "append" => "true",
                    "autoFlush" => "true",
                    "enabled" => "true",
                    "suffix" => ".yyyy-MM-dd",
                    "fileName" => "EAP_HOME/standalone/log/deployment.log"
                }
            }
        },
        "logger" => {"MYCATEGORY" => {
            "filter" => undefined,
            "handlers" => [],
            "level" => "DEBUG",
            "use-parent-handlers" => true
        }},
        "pojo" => undefined
    }
}

您还可以使用递归 read-resource 操作来读取日志记录配置以及有关部署的其他信息。

/deployment=DEPLOYMENT_NAME/subsystem=logging:read-resource(include-runtime=true, recursive=true)

第 13 章 数据源管理

13.1. 关于 JBoss EAP 数据源

关于 JDBC

JDBC API 是定义 Java 应用如何访问数据库的标准。应用配置引用 JDBC 驱动程序的数据源。然后,可以根据驱动程序而不是数据库编写应用程序代码。驱动程序将代码转换为数据库语言。这意味着,如果安装了正确的驱动程序,应用程序就可以与任何支持的数据库一起使用。

如需更多信息,请参阅 JDBC 4.0 规范

支持的数据库

如需 JBoss EAP 7 支持的 JDBC 兼容数据库列表,请参阅 JBoss EAP 支持的配置。

数据源类型

两种常规资源类型称为 数据源和 XA 数据源

非 XA 数据源
用于不使用事务的应用程序,或使用单个数据库进行事务的应用程序。
XA datasources
使用多个数据库或其他 XA 资源的应用程序用作 XA 事务的一部分。XA datasources 引入了额外的开销。

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

13.3. 创建数据源

datasources 可使用管理控制台或管理 CLI 创建。

JBoss EAP 7 允许您在数据源属性值中使用表达式,如 enabled 属性。有关在配置中使用表达式的详情,请参阅 Property Replacement 部分。

13.3.1. 创建非 XA 数据源

非 XA 数据源可以使用 数据源添加 管理 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 参数。

    有关这些参数值的提示,请参见以下的 Datasource Parameters 部分。

有关详细 示例,请参阅支持的数据库 示例数据源配置。

数据源参数
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 格式的详情,请查看 Datasource Connection URL 列表。

有关所有可用数据源参数的完整列表,请参阅 Datasource Parameters 部分。

13.3.2. 创建一个 XA 数据源

XA datasources 可使用 xa-data-source add 管理 CLI 命令来定义。您还可以使用管理控制台定义 XA datasources,方法是导航到 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"}

    有关这些参数值的提示,请参见以下的 Datasource Parameters 部分。

  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
指定 JDBC 驱动程序实现的 XA 数据源类,即 javax.sql.XADataSource 类。
xa-datasource-properties
在定义 XA 数据源时,至少需要一个 XA 数据源属性,或者在尝试添加它时收到错误。还可在定义后将其他属性添加到 XA 数据源。

有关所有可用数据源参数的完整列表,请参阅 Datasource Parameters 部分。

13.4. 修改数据源

datasources 设置可以使用管理控制台或管理 CLI 进行配置。

JBoss EAP 7 允许您在数据源属性值中使用表达式,如 enabled 属性。有关在配置中使用表达式的详情,请参阅 Property Replacement 部分。

13.4.1. 修改非 XA 数据源

非 XA 数据源设置可以使用 数据源 管理 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-data-source 管理 CLI 命令更新 XA 数据源设置。您也可以从管理控制台中的 datasources 子系统更新数据源属性。

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

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

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

  • 可以使用以下管理 CLI 命令添加 XA 数据源属性

    /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 management CLI 命令删除非 XA 数据源。您也可以从管理控制台中的 datasources 子系统删除数据源。

data-source remove --name=DATASOURCE_NAME
注意

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

在数据源被删除后,服务器将需要重新加载。

13.5.2. 删除 XA 数据源

XA datasources 可使用 xa-data-source remove 管理 CLI 命令移除。您也可以从管理控制台中的 datasources 子系统移除 XA datasources。

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

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

在删除 XA 数据源后,服务器将需要重新加载。

13.6. 测试数据源连接

向 JBoss EAP 中添加数据源后,您可以测试连接以验证设置是否正确。数据源连接可以使用管理 CLI 命令,也可从管理控制台并使用数据源子系统中的 Test Connection 按钮进行测试。

以下管理 CLI 命令可用于测试数据源的连接:

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

在受管域中,您必须在此命令前使用 /host=HOSTNAME/server=SERVER_NAME

13.7. XA 数据源恢复

XA 数据源可以参与 XA 全局事务,它由事务管理器协调,并可跨越单个事务中的多个资源。如果某一参与者未能提交其更改,其他参与者将中止事务并恢复其在交易发生前的状态。这是为了保持一致性,避免潜在的数据丢失或损坏。

XA 恢复是确保受事务影响的所有资源都已更新或回滚,即使任何资源或交易参与者崩溃或不可用。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 高级服务器
要使 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 Server
如需更多信息,请参阅 Microsoft SQL Server 文档,包括 http://msdn.microsoft.com/en-us/library/aa342335.aspx
IBM DB2
不需要特殊配置。如需更多信息,请参阅 IBM DB2 文档。
Sybase

Sybase 要求在数据库中启用 XA 事务。如果没有正确的数据库配置,XA 事务将无法工作。enable xact coordination 参数启用或禁用适应服务器事务协调服务。启用此参数后,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 高级服务器

当 2PC 的提交阶段发生网络故障时,JDBC 驱动程序会返回 XAER_RMERR XAException 错误代码。此错误向事务管理器发送不可恢复的灾难性事件,但事务在数据库端处于 in-doubt 状态,并可以在再次建立网络连接后轻松更正。正确的返回代码应为 XAER_RMFAILXAER_RETRY。错误代码会导致事务保留在 JBoss EAP 端的 Heuristic 状态,并在数据库中保存锁定,这需要人工干预。如需更多信息,请参阅此 PostgreSQL 错误

如果使用一次性提交优化时连接失败,JDBC 驱动程序会返回 XAER_RMERR,但应该返回 XAER_RMFAIL 错误代码。如果在一次性提交期间数据库提交数据并且连接在该时间停机时,这可能会导致数据不一致,然后通知客户端已回滚事务。

Postgres Plus JDBC 驱动程序返回 Postgres Plus Server 中存在的所有准备事务的 XID,因此无法确定 XID 所属的数据库。如果您在 JBoss EAP 中为同一数据库定义多个数据源,则可能会在错误的帐户下运行不良的恢复尝试,从而导致恢复失败。

Oracle

当使用配置了某些用户凭证的数据源,JDBC 驱动程序会返回属于数据库实例上的所有用户的 XID。JDBC 驱动程序抛出异常 ORA-24774: 无法切换到指定的事务,因为它会尝试恢复属于其他用户的 XID。

这个问题的解决方法是为在其凭证用于恢复数据源配置的用户授予 FORCE ANY TRANSACTION 特权。有关配置权限的更多信息,请参阅 :http://docs.oracle.com/database/121/ADMIN/ds_txnman.htm#ADMIN12259

Microsoft SQL Server

当 2PC 的提交阶段发生网络故障时,JDBC 驱动程序会返回 XAER_RMERR XAException 错误代码。此错误向事务管理器发送不可恢复的灾难性事件,但事务在数据库端处于 in-doubt 状态,并可以在再次建立网络连接后轻松更正。正确的返回代码应为 XAER_RMFAILXAER_RETRY。错误代码会导致事务保留在 JBoss EAP 端的 Heuristic 状态,并在数据库中保存锁定,这需要人工干预。如需更多信息,请参阅 Microsoft SQL Server 问题报告

如果使用一次性提交优化时连接失败,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
MariaDB 无法完全能够处理 XA 事务。如果客户端与 MariaDB 断开连接,则有关此类事务的所有信息都将丢失。

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 是首选的验证机制。这将指定一个连接检查器类,用于验证正在使用的特定数据库的连接。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 语句。

    以下是一个示例 SQL 语句,可用于验证 Oracle 连接。

    select 1 from dual

    以下是一个示例 SQL 语句,可用于验证 MySQL 或 PostgreSQL 连接。

    select 1
  3. 设置异常分类类名称。

    当异常被标记为 fatal 时,连接会立即关闭,即使连接参与一个事务中。使用 exception sorter 类选项在致命连接异常后正确检测和清理。为您的数据源类型选择适当的 JBoss EAP 异常排序。

    • 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 或删除属性 altoget 来实现。但是,如果需要缓存,则应为每个数据源使用单独的安全域。

然后,数据源配置引用 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>

有关使用安全域的更多信息,请参阅 如何配置身份管理 指南。

使用密码 Vault 保护数据源

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

有关使用密码 Vault 的更多信息,请参阅如何配置服务器安全指南

13.10. 数据源统计

您可以查看定义的数据源的核心 池和 JDBC 运行时统计信息。如需了解所有可用 统计数据的详细列表,请参阅 Datasource 统计。

启用数据源统计

默认情况下,不启用 数据源统计信息。以下管理 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 部署定义容量策略,包括数据源。容量策略定义了如何为池创建物理连接(容量递增)和销毁(容量减少)。将默认策略设置为为每个请求创建一次容量递增的连接,并在调度闲置超时时销毁所有连接。

要配置容量策略,您需要指定一个容量递增和/或减少类:

示例命令

/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")

您还可以在指定容量递增或减少类中配置属性:

命令示例

/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 Policy

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

MaxPoolSize incrementer 策略将填充池到每个请求的最大大小。当您想保持所有时间可用的连接的最大数量时,此策略很有用。

Size Incrementer 策略

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

Size incrementer 策略将按每个请求的指定连接数填充池。当您想在分析下一请求需要连接时,每个请求的附加连接数增加时,此策略很有用。

表 13.3. 大小策略属性

Name描述

Size

应该创建的连接数

注意

这是默认的增量策略,大小为 1。

watermark Incrementer 策略

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

Watermark 递增器策略将池填满为每个请求的指定连接数。当您想始终在池中保留指定数量的连接时,此策略很有用。

表 13.4. 水位策略属性

Name描述

watermark

连接数的水位线级别

MinPoolSize Decrementer 策略

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

MinPoolSize decrementer 策略将为每个请求将池减少到其最小大小。当您要在每个闲置超时请求后限制连接数量时,此策略很有用。该池将以第一个 In First Out (FIFO)的方式运行。

大小声明器策略

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

Size decrementer 策略将按每个空闲超时请求的指定连接数减少池。

表 13.5. 大小策略属性

Name描述

Size

应该销毁的连接数

当您想减少每个空闲超时请求的额外连接数量时,这个策略很有用,因为池使用量会随时间降低。

该池将以第一个 In First Out (FIFO)的方式运行。

timedout Decrementer 策略

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

TimedOut decrementer 策略将删除每个空闲超时请求从池中超时的所有连接。该池将以 First In Last Out (FILO)的方式运行。

注意

此策略是默认的减少策略。

timedout/FIFO Decrementer 策略

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

TimedOutFIFO decrementer 策略将删除每个闲置超时请求从池中超时的所有连接。该池将以第一个 In First Out (FIFO)的方式运行。

水位线声明器策略

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

Watermark decrementer 策略将把池减少到每个空闲超时请求的指定连接数。当您想始终在池中保留指定数量的连接时,此策略很有用。该池将以第一个 In First Out (FIFO)的方式运行。

表 13.6. 水位策略属性

Name描述

watermark

连接数的水位线级别

13.12. 实践列表

记录了 trace,以帮助查找在 XAResource 实例授权过程中出现的错误情况。这有一个性能开销,因此在某些情况下您可能需要禁用这些 trace。

您可以通过将 enlistment-trace 属性设置为 false,使用管理 CLI 禁用数据源的编码跟踪记录。

为非 XA 数据源禁用 enlistment trace。

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

为 XA 数据源禁用 enlistment trace。

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

禁用 enlistment 跟踪会在事务发生过程中跟踪错误会更困难。

13.13. Datasource 配置示例

13.13.1. MySQL Datasource 示例

这是包含连接信息、基本安全性和验证选项的 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
    重要

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

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

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

  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 Datasource 示例

这是包含连接信息、基本安全性和验证选项的 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 Driver 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
    重要

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

  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 Driver 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
    重要

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

  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 Datasource 示例

这是包含连接信息、基本安全性和验证选项的 Oracle 数据源配置示例。

Oracle Datasource 配置示例
<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 Driver 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
    重要

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

  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 恢复正确运行。value 用户定义 从 JBoss EAP 连接到 Oracle 的用户:

  • GRANT SELECT ON sys.dba_pending_transactions TO 用户;
  • GRANT SELECT ON sys.pending_trans$ TO 用户;
  • GRANT SELECT ON sys.dba_2pc_pending TO 用户;
  • 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 Driver 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
    重要

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

  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 Server 数据源配置示例。

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

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

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

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

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

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

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

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

  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 Datasource 示例

这是包含连接信息、基本安全性和验证选项的 Sybase 数据源配置示例。

Sybase Datasource 配置示例
<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 Driver 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
    重要

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

  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 Datasource 示例

这是使用 XA 数据源属性、基本安全性和验证选项的 Sybase XA 数据源配置示例。

Sybase XA Datasource 配置示例
<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 Driver 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
    重要

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

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

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

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

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

  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"}

第 14 章 配置事务

14.1. 事务子系统配置

14.1.1. 配置 Transaction Manager

您可以使用基于 Web 的管理控制台或命令行管理 CLI 配置事务管理器。

使用管理控制台配置事务管理器

以下步骤解释了如何使用基于 Web 的管理控制台配置事务管理器:

  1. 从屏幕的顶部选择 Configuration 选项卡。
  2. 如果您将 JBoss EAP 作为受管域运行,请选择要修改的配置文件。
  3. Subsystem 列表中,选择 Transactions,再单击 View
  4. 对于您要编辑的设置,在适当的标签页上点 Edit,如 恢复 恢复选项。
  5. 进行必要的更改,然后单击 Save 以保存更改。
  6. 单击 Need Help? 以显示帮助文本。
使用管理 CLI 配置事务管理器

使用管理 CLI,您可以使用一系列命令配置事务管理器。对于单机服务器,所有命令都以 /subsystem=transactions 开头,对于受管域中默认配置集,都以 /profile= default /subsystem=transactions/ 开头。

有关所有事务管理器配置选项的详细列表,请参阅 JBoss EAP 的 Transaction Manager 配置选项。

14.1.2. 将您的数据源配置为使用 JTA

此任务演示了如何在数据源上启用 Java Transaction API (JTA)。

先决条件
将数据源配置为使用 Java Transaction API
  1. 使用以下管理 CLI 命令将 jta 属性设置为 true

    /subsystem=datasources/data-source=DATASOURCE_NAME:write-attribute(name=jta,value=true)
    注意

    在受管域中,在此命令前带有 /profile=PROFILE_NAME

  2. 重新加载服务器以使更改生效。

    reload

您的数据源现在配置为使用 JTA。

14.1.3. 关于事务日志消息

您可以跟踪事务状态,同时将 DEBUG 日志级别用于事务日志记录器来保持日志文件可读。若要进行详细的调试,请使用 TRACE 日志级别。有关配置事务日志记录器的信息 ,请参阅为 Transactions subsystem 配置 日志记录。

当配置为登录 TRACE 日志级别时,事务管理器(TM)可以生成大量日志信息。以下是一些最常见的消息。此列表不全面,因此您可能看到它们以外的消息。

表 14.1. 事务状态更改

transaction Begin

当事务开始时,执行类 com.arjuna.ats.arjuna.coordinator.BasicAction 的方法,并在日志中显示消息 BasicAction:: Begin ()for action-id <transaction uid>

事务提交

当事务提交时,执行类 com.arjuna.ats.arjuna.coordinator.BasicAction 的方法 Commit,并在日志中显示消息 BasicAction::Commit ()for action-id <transaction uid>

事务回滚

当事务回滚时,类 com.arjuna.ats.arjuna.coordinator.BasicAction 的方法回滚。执行 BasicAction:: Rollback ()并在日志中显示 action-id <transaction uid>

事务超时

当事务超时时,将执行一个 com.arjuna.at s.arjuna.coordinator.TransactionReaper 的方法,并作为 Reaper Worker <thread id> 尝试取消 <transaction uid>。然后,您将看到相同的线程回滚事务,如上所示。

14.1.4. 为 Transactions 子系统配置日志记录

您可以控制记录事务的信息量,独立于 JBoss EAP 中的其他日志记录设置。您可以使用管理控制台或管理 CLI 配置日志设置。

使用管理控制台配置事务日志
  1. 导航到 Logging 子系统配置。

    1. 在管理控制台中,单击 Configuration 选项卡。如果使用受管域,您必须首先选择适当的服务器配置文件。
    2. 选择 Logging 子系统,再点 View
  2. 编辑 com.arjuna 属性。

    选择 Log Categories 选项卡。com.arjuna 条目已存在。选择 com.arjuna,再单击 Attributes 部分中的 Edit。您可以更改日志级别,并选择是否使用父处理程序。

    • 日志级别:

      因为事务可能会生成大量日志输出,默认的日志记录级别被设置为 WARN,因此服务器日志不会被事务输出造成大量。如果您需要检查事务处理详细信息,请使用 TRACE 日志级别,以便显示事务 ID。

    • 使用 Parent Handlers:

      父处理程序指示日志记录器是否应该将其输出发送到其父日志记录器。默认行为是 true

  3. Save 保存更改。
使用管理 CLI 配置事务日志

使用以下命令,从管理 CLI 设置日志级别。对于单机服务器,请从命令中删除 /profile=default

/profile=default/subsystem=logging/logger=com.arjuna:write-attribute(name=level,value=VALUE)

14.2. 事务管理

14.2.1. 浏览和管理事务

管理 CLI 支持浏览和操作事务记录的功能。此功能由 JBoss EAP 的 TM 和管理 API 之间的交互提供。

TM 将每个待处理的事务和参与者有关的信息存储在名为对象存储的持久性存储中。管理 API 将对象存储作为名为 log-store 的资源公开。探测 操作读取事务日志,并为每个记录创建一个节点路径。每当您需要刷新 日志存储 时,您可以手动调用 探测 操作。正常情况下,事务日志会显示并快速消失。

刷新日志存储

以下命令刷新服务器组的日志存储,该存储在受管域中使用配置集 默认。对于单机服务器,请从命令中删除 profile=default

/profile=default/subsystem=transactions/log-store=log-store:probe
查看所有准备的交易

要查看所有准备的事务,首先刷新日志存储(请参阅 刷新日志存储),然后运行以下命令,该命令类似于文件系统 ls 命令。

ls /profile=default/subsystem=transactions/log-store=log-store/transactions

或者

/host=master/server=server-one/subsystem=transactions/log-store=log-store:read-children-names(child-type=transactions)

显示每个事务及其唯一标识符。单个操作可以针对单个事务运行(请参阅 管理事务)。

14.2.1.1. 管理交易

查看事务的属性

要查看有关事务的信息,如 JNDI 名称、EIS 产品名称和版本或其状态,请使用 read-resource 操作。

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:read-resource
查看 Transaction Participant 的详情

每个事务日志包含一个子元素,称为 参与者。使用此元素的 read-resource 操作来查看参与事务的详细信息。参与者通过其 JNDI 名称来标识。

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=java\:\/JmsXA:read-resource

结果可能类似如下:

{
   "outcome" => "success",
   "result" => {
       "eis-product-name" => "ActiveMQ",
       "eis-product-version" => "2.0",
       "jndi-name" => "java:/JmsXA",
       "status" => "HEURISTIC",
       "type" => "/StateManager/AbstractRecord/XAResourceRecord"
   }
}

此处显示的结果状态为 HEURISTIC 状态,并有资格恢复。如需了解更多详细信息,请参阅恢复 Transaction Participant。

在特殊情况下,可以在对象存储中创建孤立记录,即 XAResourceRecords,其日志中没有任何对应的事务记录。例如,XA 资源准备,但在 TM 记录前崩溃,对域管理 API 无法访问。要访问此类记录,您需要将管理选项 expose-all-logs 设置为 true。这个选项没有保存在管理模型中,并在服务器重启时恢复到 false

/profile=default/subsystem=transactions/log-store=log-store:write-attribute(name=expose-all-logs, value=true)

您可以使用这个备用命令,以聚合的形式显示事务的参与 ID。

/host=master/server=server-one/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:read-children-names(child-type=participants)
删除事务

每个事务日志 都支持 删除操作,以删除代表事务的事务日志。

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:delete

这也会删除所有交易中的参与者。

恢复 Transaction Participant

每个事务参与者均支持使用恢复操作 进行恢复

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=2:recover

如果事务参与者的状态为 HEURISTIC,则恢复操作会将状态 切换为 PREPARE,并要求定期恢复过程重新提交。

如果提交成功,则会从事务日志中删除参与者。您可以通过在 log-store 上运行 探测 操作并检查是否不再列出参与者来验证这一点。如果这是最后一个参与者,该事务也会被删除。

刷新 Transaction Participant 的状态

如果事务需要恢复,您可以在尝试恢复前使用 refresh 操作来确保它仍然需要恢复。

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=2:refresh

14.2.2. 查看事务统计

如果启用了事务管理器统计信息,您可以查看事务管理器所处理事务的统计信息。有关如何启用事务管理器统计信息的详情,请参阅配置 Transaction Manager

您可以使用管理控制台或管理 CLI 查看统计信息。在管理控制台中,可以通过从 Runtime 选项卡导航到 Transactions 子系统来事务统计信息。在管理 CLI 中,您可以使用 include-runtime=trueread-resource 操作来查看统计信息。例如:

/subsystem=transactions:read-resource(include-runtime=true)

下表显示了每个可用的统计数据及其描述。

表 14.2. Transactions 子系统统计

统计描述

number-of-transactions

此服务器上事务管理器处理的事务总数。

number-of-committed-transactions

此服务器上事务管理器处理的已提交事务数量。

number-of-aborted-transactions

此服务器上事务管理器处理的中止事务数量。

number-of-timed-out-transactions

此服务器上事务管理器处理的超时事务数量。超时的事务数量也计算为中止的事务数。

number-of-heuristics

处于 heuristic 状态的事务数量。

number-of-inflight-transactions

已开始但还没有终止的事务数。

Number-of-application-rollbacks

其故障来源是一个应用程序的失败事务数量。

number-of-resource-rollbacks

其故障来源是一个资源的失败事务数量。

14.2.3. 事务对象存储

事务需要位置来存储对象。对象存储的一个选项是 JDBC 数据源。如果性能是特定问题,则 JDBC 对象存储可能比文件系统或 ActiveMQ 日志对象存储慢。

重要

如果 transaction 子系统配置为使用 Apache ActiveMQ Artemis 日志作为 事务 日志的存储类型,则不允许使用同一目录来存储日志。应用服务器实例无法共享同一位置,每个位置都必须为其配置唯一的位置。

注意

丢失事务对象存储可能会导致数据一致性。因此,对象存储需要放在 安全 驱动器上。

使用 JDBC 数据源作为事务对象存储

按照以下步骤,使用 JDBC 数据源作为事务对象存储。

  1. 创建数据源,如 TransDS。具体步骤请参阅创建 非 XA 数据源。请注意,数据源的 JDBC 驱动程序必须作为 核心模块安装,而不是作为 JAR 部署,才能使对象存储正常工作。
  2. 将数据源的 jta 属性设置为 false

    /subsystem=datasources/data-source=TransDS:write-attribute(name=jta, value=false)
  3. jdbc-store-datasource 属性设置为要使用的数据源的 JNDI 名称,如 java:jboss/datasources/TransDS

    /subsystem=transactions:write-attribute(name=jdbc-store-datasource, value=java:jboss/datasources/TransDS)
  4. use-jdbc-store 属性设置为 true

    /subsystem=transactions:write-attribute(name=use-jdbc-store, value=true)
  5. 重启 JBoss EAP 服务器以使更改生效。
事务 JDBC 存储属性

下表标识了与 JDBC 对象存储相关的所有可用属性:

表 14.3. 事务 JDBC 存储属性

属性描述

use-jdbc-store

把它设置为 true,为事务启用 JDBC 存储。

jdbc-store-datasource

用于存储的 JDBC 数据源的 JNDI 名称。

jdbc-action-store-drop-table

是否在启动时丢弃和重新创建操作存储表。默认值为 false

jdbc-action-store-table-prefix

操作存储表名称的前缀。

jdbc-communication-store-drop-table

是否在启动时丢弃和重新创建通信存储表。默认值为 false

jdbc-communication-store-table-prefix

通信存储表名称的前缀。

jdbc-state-store-drop-table

是否在启动时丢弃和重新创建状态存储表。默认值为 false

jdbc-state-store-table-prefix

状态存储表名称的前缀。

使用 ActiveMQ Journal 对象存储

按照以下步骤,使用 ActiveMQ 日志对象存储。

  1. use-journal-store 属性设置为 true

    /subsystem=transactions:write-attribute(name=use-journal-store,value=true)
  2. 重启 JBoss EAP 服务器以使更改生效。

第 15 章 ORB 配置

15.1. 关于通用对象请求代理架构(CORBA)

通用对象请求代理架构(CORBA)是一种标准,使应用程序和服务能够一起工作,即使它们以多个兼容、语言或托管在单独的平台上进行编写。CORBA 请求由名为 Object Request Broker (ORB)的服务器端组件代理。JBoss EAP 通过 Open JDK ORB 组件提供 ORB 实例。

ORB 在内部用于 Java 事务服务(JTS)事务,也可由您自己的应用程序使用。

15.2. 为 JTS 事务配置 ORB

在 JBoss EAP 的默认安装中,对事务的 ORB 支持被禁用。您可以使用管理 CLI 或管理控制台在 iiop-openjdk 子系统中配置 ORB 设置。

注意

在受管域中使用 fullfull-ha 配置文件时,可以使用 iiop-openjdk 子系统,或 standalone-full.xmlstandalone-full-ha.xml 配置文件作为单机服务器。

如需 iiop-openjdk 子系统的可用配置选项列表,请参阅 IIOP 子系统属性

使用管理 CLI 配置 ORB

您可以使用管理 CLI 配置 ORB 的每个方面。这是用于 JTS 的 ORB 的最低配置。

以下管理 CLI 命令使用 full 配置文件为受管域配置。如有必要,将配置集更改为适合您需要配置的配置集。如果您使用独立服务器,请省略命令的 /profile=full 部分。

启用安全拦截器

通过将值设为 identity 来启用 security 属性。

/profile=full/subsystem=iiop-openjdk:write-attribute(name=security,value=identity)
在 IIOP 子系统中启用事务

要为 JTS 启用 ORB,请将 transaction 属性的值设置为 full,而不是默认的 spec

/profile=full/subsystem=iiop-openjdk:write-attribute(name=transactions, value=full)
在 Transactions 子系统中启用 JTS
/profile=full/subsystem=transactions:write-attribute(name=jts,value=true)
注意

对于 JTS 激活,服务器必须重新启动,因为重新加载还不够。

使用管理控制台配置 ORB

  1. 从管理控制台的顶部选择 Configuration 选项卡。
  2. 选择 Subsystems。在受管域中,您需要首先选择适当的配置文件。
  3. 选择 IIOP 子系统,再单击 查看
  4. 单击 Edit 按钮,并根据需要修改属性。单击 Need Help? 链接,以了解每个字段的详细说明。
  5. Save 保存更改。

第 16 章 Java Connector 架构(JCA)管理

16.1. 关于 Java 连接器架构(JCA)

Java EE 连接器架构(JCA)为 Java EE 系统定义外部异构企业信息系统(EIS)的标准架构。EIS 示例包括企业资源规划(ERP)系统、大型机交易处理(TP)、数据库和消息传递系统。资源适配器是实现 Java EE Connector API 架构的组件。

JCA 1.7 提供用于管理的功能:

  • 连接
  • Transactions
  • 安全
  • life-cycle
  • 工作实例
  • flow 中的事务
  • 消息 inflow

JCA 1.7 作为 JSR-322 在 Java 社区进程下开发。

16.2. 关于资源适配器

资源适配器是一个可部署的 Java EE 组件,它使用 Java Connector 架构(JCA)规范在 Java EE 应用程序和企业信息系统(EIS)之间提供通信。EIS 供应商通常提供资源适配器,允许轻松将其产品与 Java EE 应用程序集成。

企业信息系统可以是组织内的任何其他软件系统。示例包括企业资源规划(ERP)系统、数据库系统、电子邮件服务器和专有消息传递系统。

资源适配器被打包在资源适配器存档(RAR)文件中,可部署到 JBoss EAP。RAR 文件还可以包含在企业存档(EAR)部署中。

16.3. 配置 JCA 子系统

jca 子系统控制 JCA 容器和资源适配器部署的一般设置。您可以使用管理控制台或管理 CLI 配置 jca 子系统。

要配置的主要 JCA 元素有:

从管理控制台配置 JCA 设置

jca 子系统可以通过管理控制台配置,方法是导航到 ConfigurationSubsystemsJCA。然后,选择适当的标签页:

  • Common Config - 包含缓存的连接管理器、归档验证和 bean 验证的设置。它们也包含在自己的标签页中。打开相应的选项卡并单击 Edit 按钮来修改这些设置。
  • Bootstrap Contexts - 包含配置的 bootstrap 上下文列表。可以添加、删除和配置新的 bootstrap 上下文对象。每个 bootstrap 上下文都必须分配一个工作管理器。
  • 工作管理器 - 包含已配置的工作管理器的列表。可以添加、移除新的工作管理器,以及在此处配置的线程池。每个工作管理器都可以有一个短运行的线程池和一个可选的长时间运行的线程池。

    线程池属性可通过单击所选工作管理器上的 View 来配置。

从管理 CLI 配置 JCA 设置
jca 子系统可以从管理 CLI 从 /subsystem=jca 地址进行配置。在受管域中,您必须在命令前使用 /profile=PROFILE_NAME

归档验证

这决定是否要在部署单元上执行存档验证。下表描述了您可以为归档验证设置的属性。

表 16.1. 归档验证属性

属性默认值描述

enabled

true

指定是否启用了归档验证。

fail-on-error

true

指定存档验证错误报告是否失败。

fail-on-warn

false

指定归档验证警告报告是否失败。

如果存档没有正确实现 JCA 规格并启用了归档验证,则部署过程中会显示一个错误消息。例如:

Severity: ERROR
Section: 19.4.2
Description: A ResourceAdapter must implement a "public int hashCode()" method.
Code: com.mycompany.myproject.ResourceAdapterImpl

Severity: ERROR
Section: 19.4.2
Description: A ResourceAdapter must implement a "public boolean equals(Object)" method.
Code: com.mycompany.myproject.ResourceAdapterImpl

如果没有指定存档验证,则会被视为存在,并且 enabled 属性默认为 true

Bean Validation

此设置决定是否在部署单元上执行 bean 验证(JSR-303)。下表描述了您可以为 bean 验证设置的属性。

表 16.2. Bean 验证属性

属性默认值描述

enabled

true

指定是否启用了 bean 验证。

如果没有指定 bean 验证,它被视为存在,并且 enabled 属性默认为 true

工作管理器

工作管理器有两种类型:

默认工作管理器
默认工作管理器及其线程池。
自定义工作管理器
自定义工作管理器定义及其线程池。

下表描述了您可以为工作管理器设置的属性。

表 16.3. 工作管理器属性

属性描述

name

指定工作管理器的名称。

short-running-threads

标准工作实例的线程池。每个工作管理器都有一个短运行的线程池。

long-running-threads

设置 LONG_RUNNING 提示的 JCA 1.7 工作实例的线程池。每个工作管理器都可以有一个可选的长时间运行的线程池。

下表描述了您可以为工作管理器线程池设置的属性。

表 16.4. 线程池属性

属性默认值描述

name

default

指定线程池的名称。

keepalive-time

10 秒

指定在操作后池线程应保留的时间。

allow-core-timeout

false

确定内核线程是否可能会超时的布尔值设置。默认值为 false。

thread-factory

 

对线程工厂的引用。

max-thread

50

最大线程池大小。

core-threads

50

核心线程池大小。这必须等于或小于最大线程池大小。

queue-length

50

最大队列长度。

Bootstrap 上下文

这用于定义自定义 bootstrap 上下文。下表描述了您可以为 bootstrap 上下文设置的属性。

表 16.5. Bootstrap 上下文属性

属性描述

name

指定 bootstrap 上下文的名称。

WorkManager

指定用于此上下文的工作管理器的名称。

缓存的连接管理器

这用于调试连接,并支持事务中的连接的延迟,跟踪应用程序是否正确使用并释放它们。下表描述了您可以为缓存的连接管理器设置的属性。

表 16.6. 缓存的连接管理器属性

属性默认值描述

debug

false

在失败时输出警告以显式关闭连接。

错误

false

在未能显式关闭连接时抛出异常。

ignore-unknown-connections

false

指定不缓存未知连接。

16.4. 配置资源适配器

16.4.1. 部署资源适配器

资源适配器可以像使用管理 CLI 或管理控制台一样部署。在运行独立服务器时,您还可以将存档复制到部署目录中,供部署扫描程序获取。

使用管理 CLI 部署资源适配器

要将资源适配器部署到独立服务器,请输入以下管理 CLI 命令。

deploy /path/to/resource-adapter.rar

要将资源适配器部署到受管域中的所有服务器组,请输入以下管理 CLI 命令。

deploy /path/to/resource-adapter.rar --all-server-groups
使用管理控制台部署资源适配器
  1. 登录管理控制台,再单击 Deployments 选项卡。
  2. 点击 Add。在受管域中,您首先需要选择 Content Repository
  3. 选择 Upload a new deployment 选项,再单击 Next
  4. 浏览资源适配器存档并点 Next
  5. 验证上传,然后单击 Finish
  6. 在受管域中,将部署分配到适当的服务器组并启用部署。
使用 Deployment Scanner 部署资源适配器

要手动将资源适配器部署到单机服务器,请将资源适配器存档复制到服务器部署目录中,例如 EAP_HOME/standalone/deployments/。这将由部署扫描程序获取和部署。

注意

此选项不适用于受管域。您必须使用管理控制台或管理 CLI 将资源适配器部署到服务器组。

16.4.2. 配置资源适配器

您可以使用管理界面配置资源适配器。以下示例演示了如何使用管理 CLI 配置资源适配器。有关支持的属性和其他重要信息,请参阅资源适配器厂商的文档。

添加资源适配器配置

添加资源适配器配置。

/subsystem=resource-adapters/resource-adapter=eis.rar:add(archive=eis.rar, transaction-support=XATransaction)
配置资源适配器设置

根据需要配置以下任何设置。

  • 配置 config-properties

    添加 服务器配置 属性。

    /subsystem=resource-adapters/resource-adapter=eis.rar/config-properties=server:add(value=localhost)

    添加 port 配置属性。

    /subsystem=resource-adapters/resource-adapter=eis.rar/config-properties=port:add(value=9000)
  • 配置 admin-objects

    添加 admin 对象。

    /subsystem=resource-adapters/resource-adapter=eis.rar/admin-objects=aoName:add(class-name=com.acme.eis.ra.EISAdminObjectImpl, jndi-name=java:/eis/AcmeAdminObject)

    配置 admin 对象配置属性。

    /subsystem=resource-adapters/resource-adapter=eis.rar/admin-objects=aoName/config-properties=threshold:add(value=10)
  • 配置 连接定义

    为受管连接工厂添加连接定义。

    /subsystem=resource-adapters/resource-adapter=eis.rar/connection-definitions=cfName:add(class-name=com.acme.eis.ra.EISManagedConnectionFactory, jndi-name=java:/eis/AcmeConnectionFactory)

    配置受管连接工厂配置属性。

    /subsystem=resource-adapters/resource-adapter=eis.rar/connection-definitions=cfName/config-properties=name:add(value=Acme Inc)

    配置是否记录 enlistment trace。您可以通过将 enlistment-trace 属性设置为 false 来禁用 enlistmentment 跟踪的记录。

    /subsystem=resource-adapters/resource-adapter=eis.rar/connection-definitions=cfName:write-attribute(name=enlistment-trace,value=false)
    警告

    禁用 enlistment 跟踪会在事务发生过程中跟踪错误会更困难。

有关 资源适配器的所有可用配置选项,请参阅资源适配器的资源适配器属性

激活资源适配器

激活资源适配器。

/subsystem=resource-adapters/resource-adapter=eis.rar:activate
注意

您还可以为资源适配器定义容量策略。如需了解更多详细信息,请参阅 Capacity Policies 部分。

16.4.3. 部署和配置 Websphere MQ 资源适配器

您可以在为 JBoss EAP 配置消息传递中找到部署 Websphere MQ 资源适配器 的说明。

16.4.4. 部署和配置通用 JMS 资源适配器

您可以在为 JBoss EAP 配置消息传递 的过程中,找到 配置 通用 JMS 资源适配器 的说明。

16.5. 配置受管连接池

JBoss EAP 提供了 ManagedConnectionPool 接口的三种实现。

org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedQueueManagedConnectionPool
这是 JBoss EAP 7 中的默认连接池,提供最佳性能。
org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool
这是之前 JBoss EAP 版本中的默认连接池。
org.jboss.jca.core.connectionmanager.pool.mcp.LeakDumperManagedConnectionPool
此连接池仅用于调试目的,并在关闭或池清空时报告任何泄漏。

您可以使用以下管理 CLI 命令为数据源设置受管连接池实施。

/subsystem=datasources/data-source=DATA_SOURCE:write-attribute(name=mcp,value=MCP_CLASS)

您可以使用以下管理 CLI 命令为资源适配器设置受管连接池实现。

/subsystem=resource-adapters/resource-adapter=RESOURCE_ADAPTER/connection-definitions=CONNECTION_DEFINITION:write-attribute(name=mcp,value=MCP_CLASS)

您可以使用以下管理 CLI 命令为消息传递服务器设置受管连接池实施。

/subsystem=messaging-activemq/server=SERVER/pooled-connection-factory=CONNECTION_FACTORY:write-attribute(name=managed-connection-pool,value=MCP_CLASS)

16.6. 查看连接统计信息

您可以从 /deployment=NAME.rar 子树中读取定义的连接的统计信息。这样,您可以访问任何 RAR 的统计数据,即使它没有在 standalone.xmldomain.xml 配置中定义。

/deployment=NAME.rar/subsystem=resource-adapters/statistics=statistics/connection-definitions=java\:\/testMe:read-resource(include-runtime=true)
注意

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

有关可用 统计的信息,请参阅资源适配器统计。

第 17 章 配置 Web 服务器(Undertow)

17.1. Undertow 子系统概述

重要

在 JBoss EAP 7 中,undertow 子系统从以前的 JBoss EAP 版本获取 web 子系统的位置。

undertow 子系统允许您配置 Web 服务器和 servlet 容器设置。它实现了 Java Servlet 3.1 规范 以及 websocket,并支持 HTTP 升级,并在 servlet 部署中使用高性能非阻塞处理程序。undertow 子系统还能够充当支持 mod_cluster 的高性能反向代理。

undertow 子系统中,配置五个主要组件:

注意

虽然 JBoss EAP 提供了为这些组件更新配置的功能,但默认配置适合大多数用例,并提供合理的性能设置。

默认 Undertow 子系统配置

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  <buffer-cache name="default"/>
  <server name="default-server">
      <http-listener name="default" socket-binding="http" redirect-socket="https"/>
      <host name="default-host" alias="localhost">
          <location name="/" handler="welcome-content"/>
          <filter-ref name="server-header"/>
          <filter-ref name="x-powered-by-header"/>
      </host>
  </server>
  <servlet-container name="default">
      <jsp-config/>
      <websockets/>
  </servlet-container>
  <handlers>
      <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
  </handlers>
  <filters>
      <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/>
      <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
  </filters>
</subsystem>
重要

undertow 子系统还依赖于 io 子系统来提供 XNIO 工作程序和缓冲区池。io 子系统是单独配置的,并提供默认配置,该配置在大多数情况下应提供最佳性能。

注意

与之前的 JBoss EAP 版本中的 Web 子系统相比,JBoss EAP 7 中的 undertow 子系统具有不同的 HTTP 方法默认行为

17.2. 配置缓冲缓存

缓冲区缓存用于缓存静态资源。JBoss EAP 支持由部署配置和引用多个缓存,允许不同的部署使用不同的缓存大小。缓冲区在区域内分配,并且是固定的大小。已用空间总量乘以每个区域的缓冲区数量乘以最大区域数来计算。缓冲区缓存的默认大小为 10MB。

JBoss EAP 默认提供单个缓存:

默认 Undertow 子系统配置

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  <buffer-cache name="default"/>
  ....
</subsystem>

更新现有缓冲缓存

更新现有的缓冲区缓存:

/subsystem=undertow/buffer-cache=default/:write-attribute(name=buffer-size,value=2048)
reload

创建新的缓冲缓存

要创建新缓冲缓存,请执行以下操作:

/subsystem=undertow/buffer-cache=new-buffer:add

删除缓冲缓存

删除缓冲缓存:

/subsystem=undertow/buffer-cache=new-buffer:remove
reload

有关可用于配置缓冲区缓存的属性的完整列表,请参阅 Undertow 子系统属性 部分。

17.3. 配置服务器

服务器代表 Undertow 的实例,它由以下几个元素组成:

  • 主机
  • http-listener
  • https-listener
  • ajp-listener

host 元素提供虚拟主机配置,而三个侦听器则提供该类型的连接到 Undertow 实例。

注意

可以配置多个服务器,允许完全隔离部署和服务器。在某些情况下,这在多租户环境(如多租户环境)中非常有用

JBoss EAP 默认提供服务器:

默认 Undertow 子系统配置

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  <buffer-cache name="default"/>
  <server name="default-server">
      <http-listener name="default" socket-binding="http" redirect-socket="https"/>
      <host name="default-host" alias="localhost">
          <location name="/" handler="welcome-content"/>
          <filter-ref name="server-header"/>
          <filter-ref name="x-powered-by-header"/>
      </host>
  </server>
  ...
</subsystem>

更新现有服务器

更新现有服务器:

/subsystem=undertow/server=default-server:write-attribute(name=default-host,value=default-host)
reload

创建新服务器

要创建新服务器,请执行以下操作:

/subsystem=undertow/server=new-server:add
reload

删除服务器

删除服务器:

/subsystem=undertow/server=new-server:remove
reload

如需可用于配置服务器的属性的完整列表,请参见 Undertow 子系统属性 部分。

17.4. 配置 Servlet 容器

servlet 容器提供所有 servlet、JSP 和 websocket 相关的配置,包括与会话相关的配置。虽然大多数服务器仅需要一个 servlet 容器,但可以通过添加额外的 servlet-container 元素来配置多个 servlet 容器。具有多个 servlet 容器可让多个部署部署到不同虚拟主机上的同一上下文路径。

注意

Servlet 容器中提供的大部分配置可以被部署的应用通过其 web.xml 文件单独覆盖。

JBoss EAP 默认提供 servlet 容器:

默认 Undertow 子系统配置

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  <buffer-cache name="default"/>
  <server name="default-server">
    ...
  </server>
  <servlet-container name="default">
      <jsp-config/>
      <websockets/>
  </servlet-container>
...
</subsystem>

更新现有 Servlet 容器

更新现有的 servlet 容器:

/subsystem=undertow/servlet-container=default:write-attribute(name=ignore-flush,value=true)
reload

创建新的 Servlet 容器

要创建新的 servlet 容器,请执行以下操作:

/subsystem=undertow/servlet-container=new-servlet-container:add
reload

删除 Servlet 容器

删除 servlet 容器:

/subsystem=undertow/servlet-container=new-servlet-container:remove
reload

如需可用于配置 servlet 容器的属性的完整列表,请参见 Undertow 子系统属性 部分。

17.5. 配置处理程序

JBoss EAP 允许配置两种类型的处理程序:

  • 文件处理程序
  • reverse-proxy 处理程序

文件处理程序提供静态文件。每个文件处理程序必须附加到虚拟主机中的位置。reverse-proxy 处理程序允许 JBoss EAP 作为高性能反向proxy。

JBoss EAP 默认提供文件处理程序:

默认 Undertow 子系统配置

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  <buffer-cache name="default"/>
  <server name="default-server">
      ...
  </server>
  <servlet-container name="default">
      ...
  </servlet-container>
  <handlers>
      <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
  </handlers>
  ...
</subsystem>

将 WebDAV 用于静态资源

以前的 JBoss EAP 版本允许使用带有 Web 子系统的 WebDAV,方法 WebdavServlet 托管静态资源,并启用额外的 HTTP 方法来访问和操作这些文件。在 JBoss EAP 7 中,undertow 子系统提供了使用文件处理程序提供静态文件的机制,但 undertow 子系统不支持 WebDAV。如果要将 WebDAV 与 JBoss EAP 7 搭配使用,您可以编写自定义 WebDAV servlet。

更新现有文件处理程序

更新现有文件处理程序:

/subsystem=undertow/configuration=handler/file=welcome-content:write-attribute(name=case-sensitive,value=true)
reload

创建新文件处理程序

要创建新文件处理程序,请执行以下操作:

/subsystem=undertow/configuration=handler/file=new-file-handler:add(path="${jboss.home.dir}/welcome-content")

删除文件处理程序

删除文件处理程序

/subsystem=undertow/configuration=handler/file=new-file-handler:remove
reload

如需可用于配置处理程序的属性的完整列表,请参见 Undertow 子系统属性 部分。

17.6. 配置过滤器

过滤器允许修改请求的一些方面,并可使用 predicates 控制过滤器执行的时间。过滤器的一些常见用例包括设置标头或执行 GZIP 压缩。

注意

过滤器的功能等同于旧版 JBoss EAP 中使用的全局 valve。

可以定义以下类型的过滤器:

  • custom-filter
  • error-page
  • expression-filter
  • gzip
  • mod-cluster
  • request-limit
  • response-header
  • rewrite

JBoss EAP 默认提供两个过滤器:

默认 Undertow 子系统配置

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  <buffer-cache name="default"/>
  <server name="default-server">
    ...
  </server>
  <servlet-container name="default">
    ...
  </servlet-container>
  <handlers>
      ...
  </handlers>
  <filters>
      <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/>
      <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
  </filters>
</subsystem>

更新现有过滤器

更新现有过滤器:

/subsystem=undertow/configuration=filter/response-header=server-header:write-attribute(name=header-value,value="JBoss-EAP")
reload

创建新过滤器

要创建新过滤器,请执行以下操作:

/subsystem=undertow/configuration=filter/response-header=new-response-header:add(header-name=new-response-header,header-value="My Value")

删除过滤器

删除过滤器:

/subsystem=undertow/configuration=filter/response-header=new-response-header:remove
reload

如需可用于配置过滤器的属性的完整列表,请参见 Undertow 子系统属性 部分。

17.7. 配置默认欢迎 Web 应用

JBoss EAP 包括一个默认的 Welcome 应用,它默认显示在端口 8080 上的根上下文中。

Undertow 中预先配置了默认的服务器,提供欢迎内容。

默认 Undertow 子系统配置

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  ...
  <server name="default-server">
      <http-listener name="default" socket-binding="http" redirect-socket="https"/>
      <host name="default-host" alias="localhost">
          <location name="/" handler="welcome-content"/>
          <filter-ref name="server-header"/>
          <filter-ref name="x-powered-by-header"/>
      </host>
  </server>
  ...
  <handlers>
      <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
  </handlers>
  ...
</subsystem>

默认服务器(default-server)配置了默认主机(默认主机)。默认主机被配置为通过 welcome-content 文件处理程序处理对服务器 root 的请求,使用 <location > 元素。welcome-content 处理程序在 path 属性中指定的位置提供内容。

此默认 Welcome 应用可以替换为您自己的 Web 应用。这可以通过以下两种方式之一进行配置:

您还可以 禁用欢迎内容

更改 welcome-content 文件处理程序

修改现有的 welcome-content 文件处理程序的路径以指向新部署。

/subsystem=undertow/configuration=handler/file=welcome-content:write-attribute(name=path,value="/path/to/content")
注意

或者,您可以创建不同的文件处理程序,供服务器的 root 使用。

/subsystem=undertow/configuration=handler/file=NEW_FILE_HANDLER:add(path="/path/to/content")
/subsystem=undertow/server=default-server/host=default-host/location=\/:write-attribute(name=handler,value=NEW_FILE_HANDLER)

重新加载服务器以使更改生效。

reload

更改 default-web-module

将部署的 Web 应用映射到服务器的根目录。

/subsystem=undertow/server=default-server/host=default-host:write-attribute(name=default-web-module,value=hello.war)

重新加载服务器以使更改生效。

reload

禁用默认欢迎 Web 应用程序

删除 default-host 的位置 条目/,以禁用 welcome 应用。

/subsystem=undertow/server=default-server/host=default-host/location=\/:remove

重新加载服务器以使更改生效。

reload

17.8. 配置 HTTPS

有关配置 HTTPS 以与 Web 应用和管理界面搭配使用的详情,请参阅如何配置服务器安全指南

17.9. 配置 HTTP 会话超时

HTTP 会话超时定义了声明 HTTP 会话无效所需的非活动时间。例如,用户访问部署到 JBoss EAP 的应用,这将创建 HTTP 会话。如果该用户随后在 HTTP 会话超时后再次尝试访问该应用程序,则原始 HTTP 会话将无效,并且用户将被强制创建新的 HTTP 会话。这可能会导致丢失未持久性的数据,或者需要重新验证的用户。

HTTP 会话超时在应用的 web.xml 文件中配置,但可以在 JBoss EAP 中指定默认的 HTTP 会话超时。服务器的超时值将应用到所有已部署的应用,但应用程序的 web.xml 将覆盖服务器的值。

server 值在 default-session-timeout 属性中指定,该属性可在 undertow 子系统的 servlet-container 部分中找到。default-session-timeout 的值以分钟为单位指定,默认值为 30。

配置默认会话超时

配置 default-session-timeout

/subsystem=undertow/servlet-container=default:write-attribute(name=default-session-timeout, value=60)
reload
重要

更改 HTTP 会话超时要求重启所有受影响的 JBoss EAP 实例。在完成此操作前,会应用原始 HTTP 会话超时值。

17.10. 配置 HTTP-Only Session Management Cookie

HTTP API 和非 HTTP API (如 JavaScript)都可以访问会话管理 Cookie。JBoss EAP 提供了将 HttpOnly 标头作为 Set-Cookie 响应标头的一部分发送到客户端的功能,通常是浏览器。在支持的浏览器中,启用此标头告诉浏览器应该阻止通过非 HTTP API 访问会话管理 Cookie。将会话管理 Cookie 限制为仅 HTTP API 可以帮助缓解会话 Cookie 的威胁,从而通过跨站点脚本攻击来缓解会话 Cookie 的威胁。要启用此行为,http-only 属性应设为 true

重要

使用 HttpOnly 标头实际上不会阻止跨站点脚本自行攻击,而是通知浏览器。浏览器还必须支持 HttpOnly 才能使此行为生效。

重要

使用 http-only 属性仅将限制应用到会话管理 Cookie,而不是其他浏览器 Cookie。

http-only 属性在 undertow 子系统中的两个位置设置:

  • 在 servlet 容器中,作为会话 Cookie 设置
  • 在服务器的 host 部分中,作为单点登录属性

为 servlet 容器会话 Cookie 配置 host-only 属性:

/subsystem=undertow/servlet-container=default/setting=session-cookie:add
/subsystem=undertow/servlet-container=default/setting=session-cookie:write-attribute(name=http-only,value=true)
reload

为 Host Single Sign-On 配置 host-only

为主机单点登录配置 host-only 属性:

/subsystem=undertow/server=default-server/host=default-host/setting=single-sign-on:add
/subsystem=undertow/server=default-server/host=default-host/setting=single-sign-on:write-attribute(name=http-only,value=true)
reload

17.11. 配置 HTTP/2

Undertow 允许使用 HTTP/2 标准,这可以通过压缩标头和通过同一 TCP 连接的多个流来缩短延迟。它还提供在请求资源前将资源推送到客户端的功能,从而加快页面负载。Undertow 也与 SPDY (即到 HTTP/2 的前身)兼容,以支持尚未更新到新规范的客户端。

重要

HTTP/2 只支持 JBoss EAP 7.0 的技术预览,并且仅可用于同时支持 HTTP/2 标准的浏览器。

重要

使用 HTTP/2 要求使用 Java 8,并在类路径上设置 ALPN。这是因为 HTTP/2 需要支持 ALPN 的 TLS 堆栈,该堆栈不由 Java 8 的默认安装提供。

17.11.1. 将 Undertow 配置为使用 HTTP/2

要将 Undertow 配置为使用 HTTP/2,必须执行以下操作:

将 Undertow 配置为使用 HTTPS

请参阅 如何配置服务器安全指南,以便将 Undertow 配置为使用 HTTPS 进行 Web 应用。

注意

可以在不使用 HTTPS 的情况下使用 HTTP/2,换句话说,只有使用 HTTP 升级的普通 HTTP。在这种情况下,您不需要安装 ALPN,且可以在 Undertow 中简单地启用 HTTP/2:

/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=enable-http2,value=true)
下载 ALPN JAR

首先确定您拥有的 Java 的特定版本。在终端中运行以下命令,以输出已安装的 Java 版本:

java -version

根据您的版本,参考 此页面 以确定从 此页面 下载的 ALPN JAR 的正确版本。例如,如果您正在运行 Java 版本 1.8.0_51,您可以使用 ALPN 版本 8.1.4.v20150727 并下载 alpn-boot-8.1.4.v20150727.jar

将 ALPN JAR 添加到 Boot Classpath

下载 ALPN JAR 的正确版本后,将它复制到 EAP_HOME/bin。您还必须将以下内容添加到 bin/standalone.conf (如果在受管域中运行,则为 bin/domain.conf )将 $JBOSS_HOME$ALPN_VERSION 替换为适当的值。

JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:$JBOSS_HOME/bin/alpn-boot-$ALPN_VERSION.jar"
重要

您必须重启 JBoss EAP 才能使类路径更改生效。

在 HTTPS Listener 中启用 HTTP/2

要在 Undertow 中启用 HTTPS 侦听器以使用 HTTP/2,您必须将 enable-http2 属性设置为 true

/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=enable-http2,value=true)
验证 HTTP/2 是否正在使用

要验证 Undertow 是否使用 HTTP/2,您需要检查来自 Undertow 的标头。使用 https 导航到您的 JBoss EAP 实例,如 https://localhost:8443,并使用浏览器的开发人员工具检查标头。例如 Google Chrome 的一些浏览器会在使用 HTTP/2 时显示 HTTP/2 伪标头(:path:authority:method:scheme),而其他浏览器(如 Firefox 和 Safari)会将标头的状态或版本报告为 HTTP/2.0

17.12. 配置请求转储处理程序

RequestDumping handler (io.undertow.server.handlers.RequestDumpingHandler)记录请求的详细信息,以及 JBoss EAP 中 Undertow 处理的对应响应对象。

重要

虽然此处理程序可用于调试,但也可能会记录敏感信息。在启用此处理程序时请注意这一点。

注意

RequestDumping 处理程序取代了之前版本的 JBoss EAP 中的 RequestDumperValve

您可以在 JBoss EAP 或单独的应用中直接在服务器级别配置 RequestDumping 处理程序。

17.12.1. 在服务器上配置请求转储处理程序

RequestDumping 处理程序应配置为表达式过滤器。要将 RequestDumping handler 配置为表达式过滤器,您需要执行以下操作:

使用 RequestDumping Handler 创建新的 Expression Filter
/subsystem=undertow/configuration=filter/expression-filter=requestDumperExpression:add(expression="dump-request")
在 Undertow Web 服务器中启用 Expression Filter
/subsystem=undertow/server=default-server/host=default-host/filter-ref=requestDumperExpression:add
重要

当以这种方式启用 RequestDumping 处理程序时,将记录 Undertow Web 服务器处理的所有请求和对应的响应。

为特定 URL 配置请求转储处理程序

除了记录所有请求外,您还可以使用表达式过滤器来记录特定 URL 的请求和对应的响应。这可以通过在您的表达式中使用 predicate,如路径、 path -prefixpath-suffix 来完成。例如,如果要记录对 /myApplication/test 的所有请求和对应的响应,您可以在创建表达式过滤器时使用表达式 "path (/myApplication/test)-> dump-request" 而不是表达式 " dump-request"。这只会将带有路径的 /myApplication/test 直接请求发送到 RequestDumping 处理程序。

17.12.2. 在应用程序中配置请求转储处理程序

除了在服务器上配置 RequestDumping 处理程序外,您还可以在单个应用程序中进行配置。这会将处理程序的范围限制为仅限该特定应用。请求转储 处理程序应在 WEB-INF/undertow-handlers.conf 中配置。

要在 WEB-INF/undertow-handlers.conf 中配置 RequestDumping 处理程序,以记录此应用的所有请求和对应响应,请将以下表达式添加到 WEB-INF/undertow-handlers.conf

WEB-INF/undertow-handlers.conf示例

dump-request

要将 WEB-INF/undertow-handlers.conf 中的 RequestDumping 处理程序配置为仅记录对此应用内特定 URL 的请求和对应的响应,您可以在表达式中使用路径、 path -prefixpath-suffix 等 predicates。例如,要记录要在应用程序中 测试 的所有请求和对应的响应,可以使用以下带有 path predicate 的表达式:

WEB-INF/undertow-handlers.conf示例

path(/test) -> dump-request

注意

当在应用的 WEB-INF/undertow-handlers.conf 中定义的表达式中使用路径、path -prefixpath-suffix 等 predicates 时,使用的值将相对于应用程序的上下文根。例如,如果应用程序的上下文 root 是 myApplication,且带有表达式 路径(/test)->在 WEB-INF/undertow-handlers.conf 中配置的 dump-request,它将仅记录请求并对应响应 /myApplication/test

第 18 章 配置删除

18.1. 关于删除子系统

remoting 子系统允许您为本地和远程服务配置入站和出站连接,以及这些连接的设置。

JBoss Remoting 包括以下可配置的元素:端点、连接器以及一系列本地和远程连接 URI。大多数人都不需要配置 remoting 子系统,除非他们为自己的应用使用自定义连接器。作为远程客户端(如 EJB)的应用程序需要单独的配置来连接到特定的连接器。

默认删除子系统配置

<subsystem xmlns="urn:jboss:domain:remoting:3.0">
    <endpoint/>
    <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/>
</subsystem>

如需可用于重新 移动子系统的属性的完整列表,请参阅删除子 系统属性

移动端点

remoting 端点使用由 io 子系统声明和配置的 XNIO worker。

有关如何配置 remoting 端点 的详情,请参阅配置端点。

连接器

连接器是 remoting configuration 元素。允许多个连接器。每个连接器都由一个带有多个子元素的 <connector > 元素以及几个其他属性组成。多个 JBoss EAP 子系统使用默认连接器。自定义连接器的元素和属性的具体设置取决于您的应用程序。如需更多信息,请联系红帽全球支持服务。

有关如何配置 连接器 的详情,请参阅配置连接器。

出站连接

您可以指定三种类型的出站连接:

其他配置

远程连接取决于除 remoting 子系统外配置的多个元素,如网络接口和 IO worker。

如需更多信息,请参阅 其他删除配置

18.2. 配置端点

重要

在 JBoss EAP 6 中,worker 线程池直接在 remoting 子系统中配置。在 JBoss EAP 7 中,remoting endpoint 配置引用 io 子系统的 worker。

JBoss EAP 默认提供以下 端点配置

<subsystem xmlns="urn:jboss:domain:remoting:3.0">
  <endpoint/>
  ...
</subsystem>

更新现有端点配置

/subsystem=remoting/configuration=endpoint:write-attribute(name=authentication-retries,value=2)
reload

创建新端点配置

/subsystem=remoting/configuration=endpoint:add

删除端点配置

/subsystem=remoting/configuration=endpoint:remove
reload

如需可用于端点配置的属性的完整列表,请参阅 Endpoint 属性

18.3. 配置连接器

连接器是与 remotings 相关的主要配置元素,其中包含一些用于其他配置的子元素。

更新现有连接器配置

/subsystem=remoting/connector=new-connector:write-attribute(name=socket-binding,value=my-socket-binding)
reload

创建新连接器

/subsystem=remoting/connector=new-connector:add(socket-binding=my-socket-binding)

删除连接器

/subsystem=remoting/connector=new-connector:remove
reload

有关配置连接器的属性的完整列表,请参阅 Remoting Subsystem Attributes 部分。

18.4. 配置 HTTP Connector

HTTP 连接器为基于 HTTP 升级的补救连接器提供配置。JBoss EAP 默认提供以下 http-connector 配置。

<subsystem xmlns="urn:jboss:domain:remoting:3.0">
    ...
    <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/>
</subsystem>

默认情况下,此 HTTP 连接器连接到名为 default 的 HTTP 侦听器,该监听程序在 undertow 子系统中配置。如需更多信息,请参阅配置 Web 服务器(Undertow)

更新现有 HTTP Connector 配置

/subsystem=remoting/http-connector=new-connector:write-attribute(name=connector-ref,value=new-connector-ref)
reload

创建新的 HTTP Connector

/subsystem=remoting/http-connector=new-connector:add(connector-ref=default)

删除 HTTP Connector

/subsystem=remoting/http-connector=new-connector:remove

有关配置 HTTP 连接器的属性的完整列表,请参阅 Connector 属性

18.5. 配置出站连接

出站连接是由 URI 完全指定的通用远程出站连接。

更新现有出站连接

/subsystem=remoting/outbound-connection=new-outbound-connection:write-attribute(name=uri,value=http://example.com)

创建新的出站连接

/subsystem=remoting/outbound-connection=new-outbound-connection:add(uri=http://example.com)

删除出站连接

/subsystem=remoting/outbound-connection=new-outbound-connection:remove

有关配置 出站连接 的属性的完整列表,请参阅出站连接。

18.6. 配置远程出站连接

远程出站连接由协议、出站套接字绑定、用户名和安全域指定。该协议可以是 remotehttp-remotinghttps-remoting

更新现有远程出站连接

/subsystem=remoting/remote-outbound-connection=new-remote-outbound-connection:write-attribute(name=outbound-socket-binding-ref,value=outbound-socket-binding)

创建新的远程出站连接

/subsystem=remoting/remote-outbound-connection=new-remote-outbound-connection:add(outbound-socket-binding-ref=outbound-socket-binding)

删除远程出站连接

/subsystem=remoting/remote-outbound-connection=new-remote-outbound-connection:remove

有关配置远程出站连接的属性的完整列表,请参阅 Remote Outbound Connection Attributes

18.7. 配置本地出站连接

本地出站连接是远程出站连接,与本地 的协议进行远程连接,仅由出站套接字绑定指定。

更新现有本地出站连接

/subsystem=remoting/local-outbound-connection=new-local-outbound-connection:write-attribute(name=outbound-socket-binding-ref,value=outbound-socket-binding)

创建新的本地出站连接

/subsystem=remoting/local-outbound-connection=new-local-outbound-connection:add(outbound-socket-binding-ref=outbound-socket-binding)

删除本地出站连接

/subsystem=remoting/local-outbound-connection=new-local-outbound-connection:remove

有关配置本地出站连接的属性的完整列表,请参阅 Local Outbound Connection 属性

18.8. 其他删除配置

remoting 子系统外配置了多个远程元素。

IO worker

使用以下命令为补救设置 IO worker:

/subsystem=remoting/configuration=endpoint:write-attribute(name=worker, value=WORKER_NAME)

有关如何配置 IO worker 的详情,请参阅配置 Worker

网络接口

远程 子系统使用的网络接口是 公共接口。此界面也供其他一些子系统使用,因此在修改它时请谨慎操作。

<interfaces>
   <interface name="management">
      <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
   </interface>
   <interface name="public">
      <inet-address value="${jboss.bind.address:127.0.0.1}"/>
   </interface>
   <interface name="unsecure">
      <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
   </interface>
</interfaces>

在受管域中,公共接口 在其 host.xml 文件中定义。

套接字绑定

remoting 子系统使用的默认套接字绑定绑定到端口 8080。

有关套接字绑定和套接字绑定组的更多信息,请参阅 套接字绑定

EJB 的补救连接器参考

ejb3 子系统包含对远程方法调用的 remoting 连接器的引用。以下是默认配置:

<remote connector-ref="remoting-connector" thread-pool-name="default"/>
安全传输配置

远程传输使用 STARTTLS 来使用安全连接,如 HTTPS、Secure Servlet (如果客户端请求)。相同的套接字绑定(网络端口)用于安全且不受保护的连接,因此不需要额外的服务器端配置。根据需求规定,客户端请求安全或不受保护的传输。使用补救(如 EJB、ORB 和 JMS 提供程序)的 JBoss EAP 组件默认请求安全接口。

警告

如果客户端请求了安全连接,STARTTLS 可以正常工作,否则默认为不安全的连接。它本质上容易受到中间人攻击,攻击者可以截获客户端的请求并进行修改以请求不安全的连接。如果没有收到安全连接,客户端必须正确写入失败,除非未安全的连接是适当的回退。

第 19 章 配置 IO 子系统

19.1. IO 子系统概述

io 子系统定义供其他子系统使用的 XNIO 工作程序缓冲区池,如 Undertow 和 Remoting。这些 worker 和缓冲池在 io 子系统中的以下组件中定义:

默认的 IO 子系统配置

<subsystem xmlns="urn:jboss:domain:io:1.1">
    <worker name="default"/>
    <buffer-pool name="default"/>
</subsystem>

19.2. 配置一个 Worker

worker 是 XNIO worker 实例。XNIO worker 实例是 Java NIO API 的抽象层,它提供管理 IO 和 worker 线程等功能,以及 SSL 支持。默认情况下,JBoss EAP 提供一个名为 default 的单个 worker,但可以定义更多工作程序。

更新现有工作节点

更新现有的 worker:

/subsystem=io/worker=default:write-attribute(name=io-threads,value=10)
reload

创建新 worker

要创建新 worker,请执行以下操作:

/subsystem=io/worker=newWorker:add

删除一个 Worker

删除 worker:

/subsystem=io/worker=newWorker:remove
reload

有关配置 worker 的属性的完整列表,请参阅 IO 子系统属性 部分。

19.3. 配置缓冲池

缓冲区池是池的 NIO 缓冲实例。

重要

更改缓冲区大小对应用程序性能有严重影响。对于大多数服务器,理想的大小为 16k。

更新现有缓冲池

更新现有的缓冲池:

/subsystem=io/buffer-pool=default:write-attribute(name=direct-buffers,value=true)
reload

创建缓冲池

要创建新缓冲池,请执行以下操作:

/subsystem=io/buffer-pool=newBuffer:add

删除缓冲区池

删除缓冲池:

/subsystem=io/buffer-pool=newBuffer:remove
reload

有关配置缓冲区池的属性的完整列表,请参阅 IO 子系统属性 部分。

第 20 章 配置批处理应用程序

JBoss EAP 7 引入了对 JSR-352 定义的 Java 批处理应用程序的支持。您可以配置环境以运行批处理应用,并使用 batch-jberet 子系统管理批处理作业。

有关开发批处理应用程序的信息,请参阅 JBoss EAP 开发指南中的 Java 批处理应用程序开发

20.1. 配置批处理作业

您可以使用 batch-jberet 子系统配置批处理作业的设置,该子系统基于 JBeret 实施。

默认的 batch-jberet 子系统配置定义一个内存中作业存储库和默认线程池设置。

<subsystem xmlns="urn:jboss:domain:batch-jberet:1.0">
    <default-job-repository name="in-memory"/>
    <default-thread-pool name="batch"/>
    <job-repository name="in-memory">
        <in-memory/>
    </job-repository>
    <thread-pool name="batch">
        <max-threads count="10"/>
        <keepalive-time time="30" unit="seconds"/>
    </thread-pool>
</subsystem>

默认情况下,服务器挂起期间停止的任何批处理作业都将在服务器恢复时重新启动。您可以将 restart-jobs-on-resume 属性设置为 false,使作业保留在 STOPPED 状态。

/subsystem=batch-jberet:write-attribute(name=restart-jobs-on-resume,value=false)

您还可以配置批处理 作业存储库和线程池 的设置。

20.1.1. 配置批处理作业存储库

本节介绍如何使用管理 CLI 配置内存中和 JDBC 作业存储库,以存储批处理作业信息。您也可以通过从 Configuration 选项卡导航到 Batch 子系统,并从左侧菜单中选择 In MemoryJDBC,来使用管理控制台配置作业存储库。

添加内存中作业存储库

您可以添加作业存储库,以在内存中存储批处理作业信息。

/subsystem=batch-jberet/in-memory-job-repository=REPOSITORY_NAME:add
添加 JDBC 作业存储库

您可以添加将批处理作业信息存储在数据库中的作业存储库。您必须指定用于连接数据库的数据源名称。

/subsystem=batch-jberet/jdbc-job-repository=REPOSITORY_NAME:add(data-source=DATASOURCE)
设置默认作业存储库

您可以将内存中或 JDBC 作业存储库设置为批处理应用的默认作业存储库。

/subsystem=batch-jberet:write-attribute(name=default-job-repository,value=REPOSITORY_NAME)

这将需要重新加载服务器。

reload

20.1.2. 配置批处理线程池

本节介绍如何使用管理 CLI 配置用于批处理作业的线程池和线程工厂。您还可以通过从 Configuration 选项卡导航到 Batch 子系统,并从左侧菜单中选择 Thread PoolsThread Factories,来使用管理控制台配置线程池和线程工厂。

配置线程池

在添加线程池时,您必须指定 max-threads,它应始终大于 3,因为保留两个线程,以确保分区作业可以按预期执行。

  1. 添加线程池。

    /subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:add(max-threads=10)
  2. 如果需要,设置 keepalive-time 值。

    /subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:write-attribute(name=keepalive-time,value={time=60,unit=SECONDS})
使用线程工厂
  1. 添加线程工厂。

    /subsystem=batch-jberet/thread-factory=THREAD_FACTORY_NAME:add
  2. 为线程工厂配置所需的属性。

    • group-name - 为此线程工厂创建的线程组的名称。
    • priority - 创建的线程线程优先级。
    • thread-name-pattern - 用于为线程创建名称的模板。可以使用以下模式:

      • %% - 百分比符号
      • %T - per-factory 线程序列号
      • %g - 全局线程序列号
      • %f - 工厂序列号
      • %I - 线程 ID
  3. 将线程工厂分配给线程池。

    /subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:write-attribute(name=thread-factory,value=THREAD_FACTORY_NAME)

    这将需要重新加载服务器。

    reload
设置默认线程池

您可以将不同的线程池设置为默认线程池。

/subsystem=batch-jberet:write-attribute(name=default-thread-pool,value=THREAD_POOL_NAME)

这将需要重新加载服务器。

reload
查看线程池统计

您可以使用 read-resource 管理 CLI 操作查看批处理线程池的运行时信息。您必须使用 include-runtime=true 参数来查看此运行时信息。

/subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "active-count" => 0,
        "completed-task-count" => 0L,
        "current-thread-count" => 0,
        "keepalive-time" => undefined,
        "largest-thread-count" => 0,
        "max-threads" => 15,
        "name" => "THREAD_POOL_NAME",
        "queue-size" => 0,
        "rejected-count" => 0,
        "task-count" => 0L,
        "thread-factory" => "THREAD_FACTORY_NAME"
    }
}

您还可以通过从 Runtime 选项卡导航到 Batch 子系统,来使用管理控制台查看批处理线程池的运行时信息。

20.2. 管理批处理作业

部署的 batch-jberet 子系统资源允许您启动、停止和重新启动批处理作业。您还可以查看作业执行的详情。

重启 Batch 作业

您可以通过提供执行 ID,以及重启批处理作业时要使用的任何属性,来重新启动处于 STOPPEDFAILED 状态的作业。

/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:restart-job(execution-id=EXECUTION_ID,properties={PROPERTY=VALUE})

执行 ID 必须是作业实例的最新执行。

启动批处理作业

您可以通过提供作业 XML 文件以及启动批处理作业时要使用的任何属性(可选)来启动批处理作业。

/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:start-job(job-xml-name=JOB_XML_NAME,properties={PROPERTY=VALUE})

停止 Batch 作业

您可以通过提供其执行 ID 来停止正在运行的批处理作业。

/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:stop-job(execution-id=EXECUTION_ID)

查看批处理作业执行详情

您可以查看批处理作业执行的详细信息。您必须使用 include-runtime=true 参数来查看此运行时信息。

/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:read-resource(recursive=true,include-runtime=true)
{
    "outcome" => "success",
    "result" => {"job" => {"import-file" => {
        "instance-count" => 2,
        "running-executions" => 0,
        "execution" => {
            "2" => {
                "batch-status" => "COMPLETED",
                "create-time" => "2016-04-11T22:03:12.708-0400",
                "end-time" => "2016-04-11T22:03:12.718-0400",
                "exit-status" => "COMPLETED",
                "instance-id" => 58L,
                "last-updated-time" => "2016-04-11T22:03:12.719-0400",
                "start-time" => "2016-04-11T22:03:12.708-0400"
            },
            "1" => {
                "batch-status" => "FAILED",
                "create-time" => "2016-04-11T21:57:17.567-0400",
                "end-time" => "2016-04-11T21:57:17.596-0400",
                "exit-status" => "Error : org.hibernate.exception.ConstraintViolationException: could not execute statement",
                "instance-id" => 15L,
                "last-updated-time" => "2016-04-11T21:57:17.597-0400",
                "start-time" => "2016-04-11T21:57:17.567-0400"
            }
        }
    }}}
}

第 21 章 配置 Naming 子系统

21.1. 关于 Naming 子系统

naming 子系统为 JBoss EAP 提供 JNDI 实施。您可以将此子系统配置为绑定 全局 JNDI 命名空间中的条目。您还可以将其配置为 激活或停用远程 JNDI 接口

以下是带有指定的所有元素和属性的 naming 子系统 XML 配置示例。

<subsystem xmlns="urn:jboss:domain:naming:2.0">
    <bindings>
        <simple name="java:global/simple-integer-binding" value="100" type="int" />
        <simple name="java:global/jboss.org/docs/url" value="https://docs.jboss.org" type="java.net.URL" />
        <object-factory name="java:global/foo/bar/factory" module="org.foo.bar" class="org.foo.bar.ObjectFactory" />
        <external-context name="java:global/federation/ldap/example" class="javax.naming.directory.InitialDirContext" cache="true">
            <environment>
                <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
                <property name="java.naming.provider.url" value="ldap://ldap.example.com:389" />
                <property name="java.naming.security.authentication" value="simple" />
                <property name="java.naming.security.principal" value="uid=admin,ou=system" />
                <property name="java.naming.security.credentials" value="secret" />
            </environment>
        </external-context>
        <lookup name="java:global/new-alias-name" lookup="java:global/original-name" />
    </bindings>
    <remote-naming/>
</subsystem>

21.2. 配置全局绑定

通过 naming 子系统,您可以将条目绑定到 java:globaljava:jbossjava 全局 JNDI 命名空间;但是,建议您使用标准的可移植 java:global 命名空间。

全局绑定在 naming 子系统的 & lt;bindings > 元素中配置。支持四种绑定:

配置简单绑定

简单的 XML 配置元素绑定原语或 java.net.URL 条目。

  • name 属性是必需的,用于指定条目的目标 JNDI 名称。
  • value 属性是必需的,定义条目的值。
  • 可选的 type 属性(默认为 java.lang.String )指定条目值的类型。除了 java.lang.String 外,您还可以指定原语类型及其相应的对象打包程序类,如 intjava.lang.Integer,以及 java.net.URL

以下是创建简单绑定的管理 CLI 命令的示例。

/subsystem=naming/binding=java\:global\/simple-integer-binding:add(binding-type=simple, type=int, value=100)

生成的 XML 配置

<subsystem xmlns="urn:jboss:domain:naming:2.0">
    <bindings>
        <simple name="java:global/simple-integer-binding" value="100" type="int"/>
    </bindings>
    <remote-naming/>
</subsystem>

使用以下命令来删除绑定。

/subsystem=naming/binding=java\:global\/simple-integer-binding:remove

绑定对象因素

object-factory XML 配置元素绑定 javax.naming.spi.ObjectFactory 条目。

  • name 属性是必需的,用于指定条目的目标 JNDI 名称。
  • class 属性是必需的,定义对象工厂的 Java 类型。
  • module 属性是必需的,指定对象工厂 Java 类从中加载的 JBoss 模块 ID。
  • 可选的 environment 子元素可用于为对象工厂提供自定义环境。

以下是创建对象工厂绑定的管理 CLI 命令示例。

/subsystem=naming/binding=java\:global\/foo\/bar\/factory:add(binding-type=object-factory, module=org.foo.bar, class=org.foo.bar.ObjectFactory, environment=[p1=v1, p2=v2])

生成的 XML 配置

<subsystem xmlns="urn:jboss:domain:naming:2.0">
    <bindings>
        <object-factory name="java:global/foo/bar/factory" module="org.foo.bar" class="org.foo.bar.ObjectFactory">
            <environment>
                <property name="p1" value="v1" />
                <property name="p2" value="v2" />
            </environment>
        </object-factory>
    </bindings>
  </subsystem>

使用以下命令来删除绑定。

/subsystem=naming/binding=java\:global\/foo\/bar\/factory:remove

绑定外部上下文

外部 JNDI 上下文(如 LDAP 上下文)的联邦是使用 external-context XML 配置元素来实现的。

  • name 属性是必需的,用于指定条目的目标 JNDI 名称。
  • class 属性是必需的,表示用于创建联邦上下文的 Java 初始命名上下文类型。请注意,此类类型必须具有带有单个环境映射参数的构造器。
  • 可选的 module 属性指定可以从其中加载外部 JNDI 上下文所需的任何类的 JBoss 模块 ID。
  • 可选的 cache 属性(默认为 false )指示是否应缓存外部上下文实例。
  • 可选的 environment 子元素可用于提供查找外部上下文所需的自定义环境。

以下是创建外部上下文绑定的管理 CLI 命令示例。

/subsystem=naming/binding=java\:global\/federation\/ldap\/example:add(binding-type=external-context, cache=true, class=javax.naming.directory.InitialDirContext, module=org.jboss.as.naming, environment=[java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.provider.url="ldap://ldap.example.com:389", java.naming.security.authentication=simple, java.naming.security.principal="uid=admin,ou=system", java.naming.security.credentials=secret]

生成的 XML 配置

<subsystem xmlns="urn:jboss:domain:naming:2.0">
  <bindings>
    <external-context name="java:global/federation/ldap/example" module="org.jboss.as.naming" class="javax.naming.directory.InitialDirContext" cache="true">
      <environment>
        <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
        <property name="java.naming.provider.url" value="ldap://ldap.example.com:389"/>
        <property name="java.naming.security.authentication" value="simple"/>
        <property name="java.naming.security.principal" value="uid=admin,ou=system"/>
        <property name="java.naming.security.credentials" value="secret"/>
      </environment>
    </external-context>
  </bindings>
</subsystem>

使用以下命令来删除绑定。

/subsystem=naming/binding=java\:global\/federation\/ldap\/example:remove
注意

资源查找未正确实现 lookup (Name) 方法的 JNDI 提供程序可能会导致 "javax.naming.InvalidNameException: Only support CompoundName name" 错误。

您可以通过指定外部上下文环境使用 lookup (String) 方法来解决此问题,方法是添加以下属性;但是,这可能会导致性能下降。

<property name="org.jboss.as.naming.lookup.by.string" value="true"/>

绑定查找别名

lookup 元素允许您将现有条目绑定到其他名称或别名。

  • name 属性是必需的,用于指定条目的目标 JNDI 名称。
  • lookup 属性是必需的,表示源 JNDI 名称。

以下是将现有条目绑定到别名的管理 CLI 命令示例。

/subsystem=naming/binding=java\:global\/new-alias-name:add(binding-type=lookup, lookup=java\:global\/original-name)

生成的 XML 配置

<lookup name="java:global/new-alias-name" lookup="java:global/original-name" />

使用以下命令来删除绑定。

/subsystem=naming/binding=java\:global\/c:remove

21.3. 配置远程 JNDI 接口

远程 JNDI 接口允许客户端在远程 JBoss EAP 实例中查找条目。命名 子系统可以配置为停用或激活此接口,该接口默认是激活的。远程 JNDI 接口使用 < remote-naming > 元素进行配置。

使用以下管理 CLI 命令激活或重新激活远程 JNDI 接口。

/subsystem=naming/service=remote-naming:add

使用以下管理 CLI 命令,停用远程 JNDI 接口。

/subsystem=naming/service=remote-naming:remove
注意

只有 java:jboss/exported 上下文中的条目可以通过远程 JNDI 访问。

第 22 章 配置高可用性

22.1. 高可用性简介

JBoss EAP 提供以下 高可用性服务,以保证部署的 Java EE 应用程序的可用性。

负载平衡
这允许服务通过将工作负载分散到多个服务器中来处理大量请求。即使出现大量请求,客户端也可以及时地响应服务。
故障切换
这允许客户端对服务进行不间断访问,即使出现硬件或网络故障。如果服务失败,另一个群集成员会接管客户端的请求,以便它可以继续处理。

集群是一个 包括所有这些功能的术语。集群的成员可以配置为共享工作负载(负载平衡),并在另一个群集成员失败时获取客户端处理(故障切换)。

注意

请记住,选择 JBoss EAP 工作模式( 单机服务器或受管域 )与您要管理服务器的方式相关。无论其操作模式如何,都可在 JBoss EAP 中配置高可用性服务。

JBoss EAP 使用各种组件在多个不同级别上支持高可用性。其中一些运行时组件和您的应用程序可能具有高可用性:

  • 应用程序服务器的实例
  • Web 应用程序,与内部 JBoss Web Server、Apache HTTP Server、Microsoftrew 或 Oracle iPlanet Web Server 一起使用时
  • 有状态和无状态会话 Enterprise 3.0.0 (EJB)
  • 单点登录(SSO)机制
  • HTTP 会话
  • JMS 服务和消息驱动的 Bean (MDB)
  • 单例 MSC 服务
  • 单例部署

集群通过 jgroupsinfinispanmodcluster 子系统提供给 JBoss EAP。hafull-ha 配置文件启用了这些系统。在 JBoss EAP 中,这些服务按需启动和关闭,但它们仅在配置为 distributable 的应用部署到服务器上启动。

有关如何将 应用标记为分布式,请参阅 JBoss EAP 开发指南

22.2. 使用 JGroups 进行集群通信

22.2.1. 关于 JGroups

JGroups 是可靠消息传递的工具包,可用于创建节点可以互相发送消息的集群。

jgroups 子系统为 JBoss EAP 中的高可用性服务提供组通信支持。它允许您配置命名频道和协议堆栈,以及查看频道的运行时统计信息。当使用提供高可用性功能的配置(如受管域中的 hafull-ha 配置文件)或 standalone-ha.xmlstandalone-full-ha.xml 配置文件时,可以使用 jgroups 子系统。

JBoss EAP 预配置有两个 JGroups 堆栈:

udp
集群中的节点使用用户数据报协议(UDP)多播相互通信。这是默认的堆栈。
tcp
集群中的节点使用传输控制协议(TCP)相互通信。

您可以使用预配置的堆栈,或者自行定义以满足您的系统特定要求。

注意

TCP 的开销更大,通常被视为比 UDP 慢,因为它处理错误检查、数据包排序和拥塞控制本身。JGroups 处理 UDP 的这些功能,而 TCP 则保证它们本身。在将 JGroups 用于不可靠或高拥塞网络或多播不可用时,TCP 是一个不错的选择。

22.2.2. 将 Default JGroups Channel 切换到 Use TCP

默认情况下,集群节点使用 UDP 协议进行通信。默认的 ee JGroups 通道使用预定义的 udp 协议堆栈。

<channels default="ee">
  <channel name="ee" stack="udp"/>
</channels>
<stacks>
  <stack name="udp">
    <transport type="UDP" socket-binding="jgroups-udp"/>
    <protocol type="PING"/>
    ...
  </stack>
  <stack name="tcp">
    <transport type="TCP" socket-binding="jgroups-tcp"/>
    <protocol type="MPING" socket-binding="jgroups-mping"/>
    ...
  </stack>
</stacks>

某些网络只允许使用 TCP。使用以下管理 CLI 命令,将 ee 频道切换为使用预配置的 tcp 堆栈。

/subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcp)

此默认 tcp 堆栈使用 MPING 协议,该协议使用 IP 多播来发现初始集群成员资格。有关为替代成员资格发现协议配置堆栈,请参阅以下部分:

  • 使用 TCPPING 协议定义静态集群成员资格列表。
  • 使用 TCPGOSSIP 协议使用外部 gossip 路由器来发现集群的成员。

22.2.3. 配置 TCPPING

此流程创建新的 JGroups 堆栈,它使用 TCPPING 协议来定义静态集群成员资格列表。提供了一个基础脚本,它会创建一个 tcpping 堆栈,并将默认 ee 频道设置为使用此新堆栈。此脚本中的管理 CLI 命令必须针对您的环境自定义,并将作为批处理进行处理。

  1. 将以下脚本复制到文本编辑器中,并将它保存到本地文件系统。

    batch
    # Add the tcpping stack
    /subsystem=jgroups/stack=tcpping:add
    /subsystem=jgroups/stack=tcpping/transport=TCP:add(socket-binding=jgroups-tcp)
    /subsystem=jgroups/stack=tcpping/protocol=TCPPING:add
    # Set the properties for the TCPPING protocol
    /subsystem=jgroups/stack=tcpping/protocol=TCPPING:write-attribute(name=properties,value={initial_hosts="HOST_A[7600],HOST_B[7600]",port_range=0,timeout=3000})
    /subsystem=jgroups/stack=tcpping/protocol=MERGE3:add
    /subsystem=jgroups/stack=tcpping/protocol=FD_SOCK:add(socket-binding=jgroups-tcp-fd)
    /subsystem=jgroups/stack=tcpping/protocol=FD:add
    /subsystem=jgroups/stack=tcpping/protocol=VERIFY_SUSPECT:add
    /subsystem=jgroups/stack=tcpping/protocol=pbcast.NAKACK2:add
    /subsystem=jgroups/stack=tcpping/protocol=UNICAST3:add
    /subsystem=jgroups/stack=tcpping/protocol=pbcast.STABLE:add
    /subsystem=jgroups/stack=tcpping/protocol=pbcast.GMS:add
    /subsystem=jgroups/stack=tcpping/protocol=MFC:add
    /subsystem=jgroups/stack=tcpping/protocol=FRAG2:add
    # Set tcpping as the stack for the ee channel
    /subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcpping)
    run-batch
    reload

    请注意,定义的协议顺序非常重要。

  2. 修改您的环境的脚本。

    • 如果您在受管域中运行,则必须在带有 /profile=PROFILE_NAME/subsystem=jgroups 命令前指定要更新的配置集。
    • 根据您的环境调整 TCPPING 属性(可选):

      • initial_hosts :使用语法 HOST[PORT] 的逗号分隔列表,这些主机被视为已知,并可用于查找初始成员资格。
      • port_range :如果需要,您可以分配一个端口范围。如果您分配了端口范围 2,并且主机的初始端口为 7600,则 TCPPING 将尝试联系端口 7600-7602 上的主机。端口范围适用于 initial_hosts 中指定的每个地址。
      • Timeout :集群成员的超时值(以毫秒为单位)。
  3. 通过将脚本文件传递到管理 CLI,运行脚本。

    $ EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAME

TCPPING 堆栈现在可用,TCP 用于网络通信。

22.2.4. 配置 TCPGOSSIP

此流程创建一个新的 JGroups 堆栈,它使用 TCPGOSSIP 协议来使用外部 gossip 路由器发现集群的成员。提供了一个基础脚本,它会创建一个 tcpgossip 堆栈,并将默认 ee 频道设置为使用此新堆栈。此脚本中的管理 CLI 命令必须针对您的环境自定义,并将作为批处理进行处理。

  1. 将以下脚本复制到文本编辑器中,并将它保存到本地文件系统。

    batch
    # Add the tcpgossip stack
    /subsystem=jgroups/stack=tcpgossip:add
    /subsystem=jgroups/stack=tcpgossip/transport=TCP:add(socket-binding=jgroups-tcp)
    /subsystem=jgroups/stack=tcpgossip/protocol=TCPGOSSIP:add
    # Set the properties for the TCPGOSSIP protocol
    /subsystem=jgroups/stack=tcpgossip/protocol=TCPGOSSIP:write-attribute(name=properties,value={initial_hosts="HOST_A[13001]"})
    /subsystem=jgroups/stack=tcpgossip/protocol=MERGE3:add
    /subsystem=jgroups/stack=tcpgossip/protocol=FD_SOCK:add(socket-binding=jgroups-tcp-fd)
    /subsystem=jgroups/stack=tcpgossip/protocol=FD:add
    /subsystem=jgroups/stack=tcpgossip/protocol=VERIFY_SUSPECT:add
    /subsystem=jgroups/stack=tcpgossip/protocol=pbcast.NAKACK2:add
    /subsystem=jgroups/stack=tcpgossip/protocol=UNICAST3:add
    /subsystem=jgroups/stack=tcpgossip/protocol=pbcast.STABLE:add
    /subsystem=jgroups/stack=tcpgossip/protocol=pbcast.GMS:add
    /subsystem=jgroups/stack=tcpgossip/protocol=MFC:add
    /subsystem=jgroups/stack=tcpgossip/protocol=FRAG2:add
    # Set tcpgossip as the stack for the ee channel
    /subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcpgossip)
    run-batch
    reload

    请注意,定义的协议顺序非常重要。

  2. 修改您的环境的脚本。

    • 如果您在受管域中运行,则必须在带有 /profile=PROFILE_NAME/subsystem=jgroups 命令前指定要更新的配置集。
    • 为您的环境调整 TCPGOSSIP 属性(可选):

      • initial_hosts :使用语法 HOST[PORT] 的逗号分隔列表,这些主机被视为已知,并可用于查找初始成员资格。
      • reconnect_interval :断开连接的存根尝试重新连接到 gossip 路由器的时间间隔(以毫秒为单位)。
      • sock_conn_timeout :套接字创建的最长时间。默认值为 1000 毫秒。
      • sock_read_timeout :在读取时阻止的最大时间(以毫秒为单位)。值 0 将无限期阻止。
  3. 通过将脚本文件传递到管理 CLI,运行脚本。

    $ EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAME

TCPGOSSIP 堆栈现在可用,TCP 用于网络通信。此堆栈配置为与 gossip 路由器一起使用,以便 JGroups 群集成员可以找到其他群集成员。

22.2.5. 将 JGroups 绑定到网络接口

默认情况下,JGroups 仅绑定到 专用 网络接口,该接口指向默认配置中的 localhost。为安全起见,JGroups 不会绑定到 JBoss EAP 启动期间指定的 -b 参数定义的网络接口,因为集群流量不应在公共网络接口上公开。

有关如何配置网络接口的详情,请查看本指南中的 网络和端口配置 章节。

重要

为安全起见,JGroups 应该仅绑定到非公共网络接口。出于性能的原因,我们还建议 JGroups 流量的网络接口应该是专用虚拟局域网(VLAN)的一部分。

22.2.6. 保护集群

为了安全地运行集群,需要解决几个问题:

  • 防止未经授权的节点加入集群。这可以通过 需要身份验证 来解决。
  • 防止非成员与群集成员通信。这可以通过加密消息 来解决
配置身份验证

JGroups 身份验证由 AUTH 协议执行。目的是确保只有经过身份验证的用户才能加入集群。

在适用的服务器配置文件中,使用适当的属性设置添加 AUTH 协议。AUTH 协议应在 pbcast.GMS 协议之前立即配置。

<subsystem xmlns="urn:jboss:domain:jgroups:4.0">
  <stacks>
    <stack name="udp">
      <transport type="UDP" socket-binding="jgroups-udp"/>
      <protocol type="PING"/>
      <protocol type="MERGE3"/>
      <protocol type="FD_SOCK" socket-binding="jgroups-udp-fd"/>
      <protocol type="FD_ALL"/>
      <protocol type="VERIFY_SUSPECT"/>
      <protocol type="pbcast.NAKACK2"/>
      <protocol type="UNICAST3"/>
      <protocol type="pbcast.STABLE"/>
      <protocol type="AUTH">
        <property name="auth_class">org.jgroups.auth.MD5Token</property>
        <property name="auth_value">mytoken</property> <!-- Change this password -->
        <property name="token_hash">MD5</property>
      </protocol>
      <protocol type="pbcast.GMS"/>
      <protocol type="UFC"/>
      <protocol type="MFC"/>
      <protocol type="FRAG2"/>
    </stack>
  </stacks>
</subsystem>
配置加密

要加密消息,JGroups 使用由群集成员共享的 secret 密钥。发件人使用共享 secret 密钥加密消息,接收方使用相同的 secret 密钥解密消息。使用对称加密 (使用 SYM_ENCRYPT 协议进行配置),节点使用共享密钥存储来检索机密密钥。使用 非对称加密 (使用 ASYM_ENCRYPT 协议进行配置),节点在使用 AUTH 进行身份验证后从集群的协调器中检索 secret 密钥。

重要

您必须对 JBoss EAP 安装应用 Red Hat JBoss Enterprise Application Platform 7.0 更新 01 或较新的累积补丁,才能访问 SYM_ENCRYPTASYM_ENCRYPT 协议。

有关应用累积补丁的信息,请参阅 JBoss EAP 补丁和升级指南

使用 Symmetric Encryption

要使用 SYM_ENCRYPT,您必须设置一个密钥存储,该密钥存储将在每个节点的 JGroups 配置中引用。

  1. 创建密钥存储。

    在以下命令中,将 VERSION 替换为适当的 JGroups JAR 版本,将 PASSWORD 替换为密钥存储密码。

    $ java -cp EAP_HOME/modules/system/layers/base/org/jgroups/main/jgroups-VERSION.jar org.jgroups.demos.KeyStoreGenerator --alg AES --size 128 --storeName defaultStore.keystore --storepass PASSWORD --alias mykey

    这将生成一个 defaultStore.keystore 文件,该文件将在 JGroups 配置中引用。

  2. jgroups 子系统中配置 SYM_ENCRYPT 协议。

    在适用的服务器配置文件中,使用适当的属性设置添加 SYM_ENCRYPT 协议。SYM_ENCRYPT 协议应在 pbcast.NAKACK2 协议前立即配置。

    <subsystem xmlns="urn:jboss:domain:jgroups:4.0">
      <stacks>
        <stack name="udp">
          <transport type="UDP" socket-binding="jgroups-udp"/>
          <protocol type="PING"/>
          <protocol type="MERGE3"/>
          <protocol type="FD_SOCK" socket-binding="jgroups-udp-fd"/>
          <protocol type="FD_ALL"/>
          <protocol type="VERIFY_SUSPECT"/>
          <protocol type="SYM_ENCRYPT">
            <property name="provider">SunJCE</property>
            <property name="sym_algorithm">AES</property>
            <property name="encrypt_entire_message">true</property>
            <property name="keystore_name">/path/to/defaultStore.keystore</property>
            <property name="store_password">PASSWORD</property>
            <property name="alias">mykey</property>
          </protocol>
          <protocol type="pbcast.NAKACK2"/>
          <protocol type="UNICAST3"/>
          <protocol type="pbcast.STABLE"/>
          <protocol type="pbcast.GMS"/>
          <protocol type="UFC"/>
          <protocol type="MFC"/>
          <protocol type="FRAG2"/>
        </stack>
      </stacks>
    </subsystem>
注意

使用 SYM_ENCRYPT 时配置 AUTH 是可选的。

使用 Asymmetric Encryption
  1. jgroups 子系统中配置 ASYM_ENCRYPT 协议。

    在适用的服务器配置文件中,使用适当的属性设置添加 ASYM_ENCRYPT 协议。ASYM_ENCRYPT 协议应在 pbcast.NAKACK2 协议之前立即配置。

    <subsystem xmlns="urn:jboss:domain:jgroups:4.0">
      <stacks>
        <stack name="udp">
          <transport type="UDP" socket-binding="jgroups-udp"/>
          <protocol type="PING"/>
          <protocol type="MERGE3"/>
          <protocol type="FD_SOCK" socket-binding="jgroups-udp-fd"/>
          <protocol type="FD_ALL"/>
          <protocol type="VERIFY_SUSPECT"/>
          <protocol type="ASYM_ENCRYPT">
            <property name="encrypt_entire_message">true</property>
            <property name="sym_keylength">128</property>
            <property name="sym_algorithm">AES/ECB/PKCS5Padding</property>
            <property name="asym_keylength">512</property>
            <property name="asym_algorithm">RSA</property>
          </protocol>
          <protocol type="pbcast.NAKACK2"/>
          <protocol type="UNICAST3"/>
          <protocol type="pbcast.STABLE"/>
          <!-- Configure AUTH protocol here -->
          <protocol type="pbcast.GMS"/>
          <protocol type="UFC"/>
          <protocol type="MFC"/>
          <protocol type="FRAG2"/>
        </stack>
      </stacks>
    </subsystem>
  2. jgroups 子系统中配置 AUTH 协议。

    ASYM_ENCRYPT 需要 AUTH。具体步骤请参阅 配置身份验证 部分。

22.2.7. 配置 JGroups 线程池

jgroups 子系统包含 默认的内部oobtimer 线程池。可以为任何 JGroups 堆栈配置这些池。

下表列出了您可以为每个线程池配置的属性,以及每个线程池的默认值。

线程池名称keepalive-timemax-threadsmin-threadsqueue-length

default

60000L

300

20

100

internal

60000L

4

2

100

oob

60000L

300

20

0

timer

5000L

4

2

500

使用下列语法,通过管理 CLI 配置 JGroups 线程池:

/subsystem=jgroups/stack=STACK_TYPE/transport=TRANSPORT_TYPE/thread-pool=THREAD_POOL_NAME:write-attribute(name=ATTRIBUTE_NAME, value=ATTRIBUTE_VALUE)

以下是管理 CLI 命令的示例,在 udp 堆栈 的默认 线程池中将 max-threads 值设置为 500

/subsystem=jgroups/stack=udp/transport=UDP/thread-pool=default:write-attribute(name="max-threads", value="500")

22.2.8. 配置 JGroups Send 和 Receive Buffers

解决缓冲大小警告

默认情况下,JGroups 配置了特定的发送和接收缓冲区值。但是,您的操作系统可能会限制可用的缓冲区大小,JBoss EAP 可能无法使用其配置的缓冲区值。在这种情况下,您将在 JBoss EAP 日志中看到类似如下的警告:

WARNING [org.jgroups.protocols.UDP] (ServerService Thread Pool -- 68)
JGRP000015: the send buffer of socket DatagramSocket was set to 640KB, but the OS only allocated 212.99KB.
This might lead to performance problems. Please set your max send buffer in the OS correctly (e.g. net.core.wmem_max on Linux)
WARNING [org.jgroups.protocols.UDP] (ServerService Thread Pool -- 68)
JGRP000015: the receive buffer of socket DatagramSocket was set to 20MB, but the OS only allocated 212.99KB.
This might lead to performance problems. Please set your max receive buffer in the OS correctly (e.g. net.core.rmem_max on Linux)

要解决这个问题,请参考您的操作系统文档来了解如何增加缓冲区大小的说明。对于 Red Hat Enterprise Linux 系统,以 root 用户身份编辑 /etc/sysctl.conf,以便为系统重启后的缓冲大小配置最大值。例如:

# Allow a 25MB UDP receive buffer for JGroups
net.core.rmem_max = 26214400
# Allow a 1MB UDP send buffer for JGroups
net.core.wmem_max = 1048576

修改 /etc/sysctl.conf 后,运行 sysctl -p 以使更改生效。

配置 JGroups 缓冲的大小

您可以通过在 UDP 和 TCP JGroups 堆栈上设置以下传输属性来配置 JBoss EAP 使用的 JGroups 缓冲区大小。

UDP Stack
  • ucast_recv_buf_size
  • ucast_send_buf_size
  • mcast_recv_buf_size
  • mcast_send_buf_size
TCP Stack
  • recv_buf_size
  • send_buf_size

可使用管理控制台或管理 CLI 配置 JGroups 缓冲区大小。

使用下列语法,通过管理 CLI 设置 JGroups 缓冲区大小属性:

/subsystem=jgroups/stack=STACK_NAME/transport=TRANSPORT/property=PROPERTY_NAME:add(value=BUFFER_SIZE)

以下是在 tcp 堆栈上将 recv_buf_size 属性设置为 20000000 的示例管理 CLI 命令。

/subsystem=jgroups/stack=tcp/transport=TRANSPORT/property=recv_buf_size:add(value=20000000)

也可以使用管理控制台配置 JGroups 子系统来配置 JGroups 缓冲区大小,具体操作为:从 Configuration 选项卡中导航到 JGroups 子系统,查看相关的堆栈,选择 Transport,然后选择 transport Properties 选项卡。

22.2.9. JGroups 故障排除

22.2.9.1. 节点不会形成集群

确保为 IP 多播正确设置机器。JBoss EAP 附带两个测试程序可用于测试 IP 多播: McastReceiverTestMcastSenderTest

在终端中,启动 McastReceiverTest

$ java -cp EAP_HOME/bin/client/jboss-client.jar org.jgroups.tests.McastReceiverTest -mcast_addr 230.11.11.11 -port 5555

然后,在另一个终端窗口中,启动 McastSenderTest

$ java -cp EAP_HOME/bin/client/jboss-client.jar org.jgroups.tests.McastSenderTest -mcast_addr 230.11.11.11 -port 5555

如果要绑定到特定的网络接口卡(NIC),请使用 -bind_addr YOUR_BIND_ADDRESS,其中 YOUR_BIND_ADDRESS 是您要绑定到的 NIC 的 IP 地址。在发送方和接收器中使用此参数。

当您在 McastSenderTest 终端窗口中键入时,您应该在 McastReceiverTest 窗口中看到输出。如果没有,请尝试以下步骤。

  • 通过在 sender 命令中添加 -ttl VALUE 来提高多播数据包的时间。此测试程序使用的默认值是 32VALUE 不得大于 255
  • 如果机器有多个接口,请验证您是否使用正确的接口。
  • 请联系您的系统管理员,以确保多播适用于您选择的接口。

当您知道集群中每台机器上正常工作的多播后,您可以重复上述测试来测试网络,将发件人放在一台机器上,并将接收方放在另一台机器上。

22.2.9.2. 在失败检测失败时导致 Missing Heartbeats

有时,故障检测(FD)可以怀疑群集成员,因为某些时间 T 尚未收到心跳确认,这由 timeoutmax_tries 定义。

对于节点 A、B、C 和 D 的一个集群示例,其中 A ping B, B ping C, C pings D, 和 D pings A, C 可满足以下任何原因:

  • B 或 C 在 100% CPU 上运行,超过 T 秒。因此,即使 C 会向 B 发送心跳确认,B 可能无法处理它,因为它是 100% 的 CPU 使用率。
  • B 或 C 是垃圾回收,这会导致与上述情况相同。
  • 上述两个情况的组合。
  • 网络丢失了数据包。当网络上有大量流量时,通常会发生这种情况,交换机会开始丢弃数据包,通常是首先广播数据包,然后是 IP 多播,最后是 TCP 数据包。
  • B 或 C 正在处理回调。例如,如果 C 在其频道中收到一个远程方法调用,该频道需要 T + 1 秒进行处理,则 C 不会处理任何其他消息,包括 heartbeats。因此,B 将不会收到心跳确认,并会怀疑 C。

22.3. Infinispan

22.3.1. 关于 Infinispan

Infinispan 是一个 Java 网格平台,提供 JSR-107- 兼容缓存接口来管理缓存数据。有关 Infinispan 功能和配置选项的更多信息,请参阅 Infinispan 文档

infinispan 子系统为 JBoss EAP 提供缓存支持。它允许您配置和查看命名缓存容器和缓存的运行时指标。

当使用提供高可用性功能的配置(如受管域中的 hafull-ha 配置文件)或 standalone-ha.xmlstandalone-full-ha.xml 配置文件,infinispan 子系统提供缓存、状态复制和状态分布支持。在非高可用性配置中,infinispan 子系统提供本地缓存支持。

重要

Infinispan 作为 JBoss EAP 中的私有模块提供,提供 JBoss EAP 的缓存功能。Infinispan 不支持直接供应用程序使用。

22.3.2. 缓存容器

缓存容器是子系统使用的缓存的存储库。每个缓存容器都定义了要使用的默认缓存。

JBoss EAP 7 定义以下默认 Infinispan 缓存容器:

  • 服务器 用于单例缓存
  • Web 会话集群
  • 用于 有状态会话 Bean 集群的 EJB
  • Hibernate 用于实体缓存

示例:默认的 Infinispan 配置

<subsystem xmlns="urn:jboss:domain:infinispan:4.0">
  <cache-container name="server" aliases="singleton cluster" default-cache="default" module="org.wildfly.clustering.server">
    <transport lock-timeout="60000"/>
    <replicated-cache name="default" mode="SYNC">
      <transaction mode="BATCH"/>
    </replicated-cache>
  </cache-container>
  <cache-container name="web" default-cache="dist" module="org.wildfly.clustering.web.infinispan">
    <transport lock-timeout="60000"/>
    <distributed-cache name="dist" mode="ASYNC" l1-lifespan="0" owners="2">
      <locking isolation="REPEATABLE_READ"/>
      <transaction mode="BATCH"/>
      <file-store/>
    </distributed-cache>
  </cache-container>
  <cache-container name="ejb" aliases="sfsb" default-cache="dist" module="org.wildfly.clustering.ejb.infinispan">
    <transport lock-timeout="60000"/>
    <distributed-cache name="dist" mode="ASYNC" l1-lifespan="0" owners="2">
      <locking isolation="REPEATABLE_READ"/>
      <transaction mode="BATCH"/>
      <file-store/>
    </distributed-cache>
  </cache-container>
  <cache-container name="hibernate" default-cache="local-query" module="org.hibernate.infinispan">
    <transport lock-timeout="60000"/>
    <local-cache name="local-query">
      <eviction strategy="LRU" max-entries="10000"/>
      <expiration max-idle="100000"/>
    </local-cache>
    <invalidation-cache name="entity" mode="SYNC">
      <transaction mode="NON_XA"/>
      <eviction strategy="LRU" max-entries="10000"/>
      <expiration max-idle="100000"/>
    </invalidation-cache>
    <replicated-cache name="timestamps" mode="ASYNC"/>
  </cache-container>
</subsystem>

注意每个缓存容器中定义的默认缓存。例如,web 缓存容器 分布式缓存定义为默认值。因此,集群 Web 会话将使用 dist 缓存。

重要

您可以添加额外的缓存和缓存容器,例如,用于 HTTP 会话、有状态会话 Bean 或单例服务或部署。不支持直接由用户应用程序使用这些缓存。

22.3.2.1. 配置缓存容器

可以使用管理控制台或管理 CLI 配置缓存容器和缓存属性。

警告

您应该避免更改缓存或缓存容器名称,因为配置中的其他组件可能会引用它们。

使用管理控制台配置缓存

从管理控制台的 Configuration 选项卡导航到 Infinispan 子系统后,您可以配置缓存和缓存容器。在受管域中,确保选择要配置的适当配置文件。

  • 添加缓存容器。

    单击 Cache Container 标题旁边的 Add 按钮,再输入新缓存容器的设置。

  • 更新缓存容器设置。

    选择适当的缓存容器,然后从下拉菜单中选择 Container Settings。根据需要配置缓存容器设置。

  • 更新缓存容器传输设置。

    选择适当的缓存容器,然后从下拉菜单中选择 Transport Settings。根据需要配置缓存容器传输设置。

  • 配置缓存。

    选择适当的缓存容器并选择 View。从适当的缓存选项卡中(例如,复制缓存),您可以添加、更新和删除缓存。

使用管理 CLI 配置缓存

您可以使用管理 CLI 配置缓存和缓存容器。在受管域中,您必须使用 /profile=PROFILE_NAME 指定要在这些命令之前更新的配置集。

  • 添加缓存容器。

    /subsystem=infinispan/cache-container=CACHE_CONTAINER:add
  • 添加复制缓存。

    /subsystem=infinispan/cache-container=CACHE_CONTAINER/replicated-cache=CACHE:add(mode=MODE)
  • 为缓存容器设置默认缓存。

    /subsystem=infinispan/cache-container=CACHE_CONTAINER:write-attribute(name=default-cache,value=CACHE)
  • 为复制缓存配置批处理。

    /subsystem=infinispan/cache-container=CACHE_CONTAINER/replicated-cache=CACHE/component=transaction:write-attribute(name=mode,value=BATCH)
更改默认 EJB 缓存容器

您可以使用 ejb3 子系统中的缓存容器,如下所述:

  • 要支持传递 EJB 会话 Bean,您可以使用 infinispan 子系统中定义的 ejb 缓存容器来存储会话。
  • 对于连接到服务器上的集群部署的远程 EJB 客户端,您必须为这些客户端提供集群拓扑信息,以便在它们与之交互的节点失败时能够切换到集群中的其他节点。

如果要更改或重命名默认缓存容器,名为 ejb,它支持传递和置备拓扑信息,您必须将 cache-container 属性添加到 passivation-stores 元素,并将集群属性添加到 remote 元素,如下例所示。如果您只是为自己的用途添加新缓存,则不需要进行这些更改。

<subsystem xmlns="urn:jboss:domain:ejb3:4.0">
    <passivation-stores>
        <passivation-store name="infinispan" cache-container="ejb-cltest" max-size="10000"/>
    </passivation-stores>

    <remote cluster="ejb-cltest" connector-ref="http-remoting-connector" thread-pool-name="default"/>
</subsystem>

<subsystem xmlns="urn:jboss:domain:infinispan:4.0">
    ...
    <cache-container name="ejb-cltest" aliases="sfsb" default-cache="dist" module="org.wildfly.clustering.ejb.infinispan">
</subsystem>

22.3.3. 集群模式

可使用 Infinispan 在 JBoss EAP 中以两种不同的方式配置集群。应用程序的最佳方法将取决于您的要求。每种模式在可用性、一致性、可靠性和可扩展性之间有一个利弊。在选择集群模式前,您必须确定网络最重要的功能,并平衡这些要求。

缓存模式
复制
复制模式会自动检测到并在集群中添加新实例。对这些实例所做的更改将复制到集群中的所有节点。复制模式通常可在小集群中正常工作,因为必须通过网络复制的信息量。Infinispan 可以配置为使用 UDP 多播,从而将网络流量拥塞到某种程度上。
分布式

分布式模式允许 Infinispan 线性扩展集群。分布式模式使用一致的哈希算法来确定应该放置新节点的位置。要保留的信息副本数可以配置。在副本数量之间有一个权衡,保持数据持久性和性能。保留的副本越多,对性能的影响越高,但不太可能在服务器故障中丢失数据。哈希算法还可在没有多播或存储元数据的情况下查找条目来减少网络流量。

当集群大小超过 6-8 节点时,您应该考虑使用分布式模式作为缓存策略。使用分布式模式时,数据只会分发到集群中的一个节点子集,而不是所有节点。

同步和同步复制

复制可以在同步或异步模式下执行,所选的模式取决于您的要求和您的应用程序。

同步复制
使用同步复制时,处理用户请求的线程会被阻断,直到复制成功为止。当复制成功时,响应会发回到客户端,然后才会释放线程。同步复制对网络流量有影响,因为它需要来自集群中每个节点的响应。但是,它的优点在于确保对集群中的所有节点进行了所有修改。
异步复制
通过异步复制,Infinispan 使用线程池在后台执行复制。发件人不会等待来自集群中其他节点的回复。但是,在上一个复制完成前,对同一会话的缓存读取将阻止,以便不读取过时的数据。复制是根据时间或队列大小触发的。复制尝试失败的写入日志,而不是实时通知。

22.3.3.1. 配置缓存模式

您可以使用管理 CLI 更改默认缓存。

注意

本节介绍配置 Web 会话缓存(默认为分布式模式)的说明。可轻松调整步骤和管理 CLI 命令,以应用到其他缓存容器。

进入 Replicated Cache Mode

Web 会话缓存的默认 JBoss EAP 7 配置不包括重新复制缓存。必须先添加此缓存。

注意

以下管理 CLI 命令适用于单机服务器。在受管域中运行时,您必须使用 /profile=PROFILE_NAME/subsystem=infinispan 命令前指定要更新的配置集。

  1. 添加 重新 复制缓存。

    /subsystem=infinispan/cache-container=web/replicated-cache=repl:add(mode=ASYNC)
    /subsystem=infinispan/cache-container=web/replicated-cache=repl/component=transaction:write-attribute(name=mode,value=BATCH)
    /subsystem=infinispan/cache-container=web/replicated-cache=repl/component=locking:write-attribute(name=isolation, value=REPEATABLE_READ)
    /subsystem=infinispan/cache-container=web/replicated-cache=repl/store=file:add
  2. 将默认缓存更改为重新 复制 缓存。

    /subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=repl)
  3. 重新加载服务器。

    reload
进入分布式缓存模式

Web 会话缓存的默认 JBoss EAP 7 配置 已包含 分布式缓存。

注意

以下管理 CLI 命令适用于单机服务器。在受管域中运行时,您必须使用 /profile=PROFILE_NAME/subsystem=infinispan 命令前指定要更新的配置集。

  1. 将默认缓存 更改为 分布式缓存。

    /subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=dist)
  2. 设置分布式缓存的所有者数量。以下命令将设置 5 个所有者。默认值为 2

    /subsystem=infinispan/cache-container=web/distributed-cache=dist/:write-attribute(name=owners,value=5)
  3. 重新加载服务器。

    reload

22.3.3.2. 缓存策略性能

使用 SYNC 缓存策略时,复制成本很容易地测量,并在响应时间中直接看到,因为请求在复制完成前不会完成。

虽然 ASYNC 缓存策略应该比 SYNC 缓存策略降低响应时间,但这只在正确的条件下也是如此。ASYNC 缓存策略难以测量,但当请求之间的持续时间足够长时,可以比 SYNC 策略提供更好的性能,以便完成缓存操作。这是因为在响应时间中不会立即看到复制成本。

如果同一会话的请求速度太快,则上一个请求的复制成本将转移到后续请求的前方,因为它必须等待上一个请求中的复制完成。对于在收到响应后立即发送后续请求的快速触发请求,ASYNC 缓存策略将比 SYNC 缓存策略更糟。因此,同一会话的请求之间有阈值,其中 SYNC 缓存策略实际上的性能优于 ASYNC 缓存策略。在现实世界中,对同一会话的请求通常不会被快速成功。相反,请求之间通常按几秒或更长的时间。在这种情况下,ASYNC 缓存策略是一个可辨识的默认策略,提供最快的响应时间。

22.3.4. 配置 Infinispan Thread 池

infinispan 子系统包含 async-operationsexpiration侦听器持久性remote-commandstate-transfertransport 线程池。可以为任何 Infinispan 缓存容器配置这些池。

下表列出了您可以为 infinispan 子系统中的每个线程池配置的属性,以及每个池的默认值。

线程池名称keepalive-timemax-threadsmin-threadsqueue-length

async-operations

60000L

25

25

1000

过期

60000L

1

N/A

N/A

listener

60000L

1

1

100000

Persistence

60000L

4

1

0

remote-command

60000L

200

1

0

state-transfer

60000L

60

1

0

传输

60000L

25

25

100000

使用下列语法,通过管理 CLI 配置 Infinispan 线程池:

/subsystem=infinispan/cache-container=CACHE_CONTAINER_NAME/thread-pool=THREAD_POOL_NAME:write-attribute(name=ATTRIBUTE_NAME, value=ATTRIBUTE_VALUE)

以下是管理 CLI 命令的示例,在服务器缓存容器 的持久性 线程池中将 max-threads 值设置为 10

/subsystem=infinispan/cache-container=server/thread-pool=persistence:write-attribute(name="max-threads", value="10")

22.3.5. Infinispan Statistics

可以为监控启用关于 Infinispan 缓存和缓存容器的运行时统计信息。出于性能原因,默认情况下不启用统计集合。

可以为每个缓存容器、缓存或两者启用统计集合。每个缓存的统计信息选项会覆盖缓存容器的选项。为缓存容器启用或禁用统计集合将导致该容器中的所有缓存继承设置,除非它们明确指定自己的设置。

22.3.5.1. 启用 Infinispan Statistics

警告

启用 Infinispan 统计数据可能会对 infinispan 子系统的性能造成负面影响。只有在需要时才应启用统计数据。

您可以使用管理控制台或管理 CLI 启用或禁用 Infinispan 统计的集合。从管理控制台中,从 Configuration 选项卡导航到 Infinispan 子系统,选择适当的缓存或缓存容器,然后编辑 启用统计信息的属性。使用以下命令,通过管理 CLI 启用统计信息。

为缓存容器启用统计集合。需要重新加载服务器。

/subsystem=infinispan/cache-container=CACHE_CONTAINER:write-attribute(name=statistics-enabled,value=true)

为缓存启用统计集合。需要重新加载服务器。

/subsystem=infinispan/cache-container=CACHE_CONTAINER/CACHE_TYPE=CACHE:write-attribute(name=statistics-enabled,value=true)
注意

您可以使用以下命令来取消定义缓存启用的 statistics-enabled 属性,以便它将继承其缓存容器启用 统计属性的设置

/subsystem=infinispan/cache-container=CACHE_CONTAINER/CACHE_TYPE=CACHE:undefine-attribute(name=statistics-enabled)

22.3.6. Infinispan 分区处理

Infinispan 集群 基于存储数据的多个节点而构建。为了防止多个节点出现故障,Infinispan 会在多个节点中复制相同的数据。这种数据冗余级别使用 owners 属性进行配置。只要同时超过配置的节点数量崩溃,Infinispan 将具有可用数据的副本。

但是,当集群中消失太多节点时可能会出现潜在的灾难性情况:

脑裂

这会以两个或多个分区或子集群独立分割集群。在这些情况下,多个客户端从不同分区读取和写入,可以看到同一缓存条目的不同版本,对于许多应用程序来说,这个版本有问题。

注意

有方法可以缓解发生脑裂的可能性,如冗余网络或 IP 绑定。但是,它们只减少问题发生的时间窗口。

多个节点按顺序崩溃
如果多个节点(特别是所有者数量)和 Infinispan (快速序列)崩溃,且 Infinispan 没有时间来在崩溃之间正确重新平衡其状态,则结果会部分数据丢失。

目标是避免因为脑裂或多个节点快速崩溃而向用户返回不正确的数据的情况。

22.3.6.1. split Brain

在脑裂情形中,每个网络分区将安装自己的 JGroups 视图,从其他分区中删除节点。我们没有一种直接的方法来确定集群是否已分成两个或者多个分区,因为分区不能相互识别。相反,我们假设,当一个或多个节点从 JGroups 集群消失时,我们假设集群被分割,而无需发送显式保留消息。

禁用分区处理后,每个此类分区都会继续作为独立集群运行。每个分区只能看到数据的一部分,每个分区都可以在缓存中写入冲突的更新。

启用分区处理后,如果检测到分割,每个分区都不会立即开始重新平衡,而是首先检查它是否应该进入 degraded 模式:

  • 如果至少有一个片段丢失其所有所有者,这意味着指定的最少所有者数量自上次重新平衡结束后保留,则分区进入 degraded 模式。
  • 如果分区没有在 最新的稳定拓扑中 包含简单的大多数节点(floor (numNodes/2)+ 1),分区也会进入 degraded 模式。
  • 否则,分区会保持正常运行,并开始重新平衡。

每次重新平衡操作时都会更新 stable 拓扑,协调器决定另一个重新平衡不需要。这些规则确保最多有一个分区处于可用模式,另一个分区进入 degraded 模式。

当分区处于 degraded 模式时,它只允许访问所有的密钥:

  • 对于在这个分区内节点上所有副本的条目,请求(读取和写入)会被遵守。
  • 对部分或完全归已消失的节点所有的条目的请求将被拒绝,并显示 AvailabilityException

这样可保证分区不能为同一键(缓存是一致的)写入不同的值,并且一个分区无法读取在其他分区中更新的密钥(没有过时的数据)。

注意

两个分区可以启动隔离,只要它们没有合并,就可以读取和写入不一致的数据。未来,我们可能允许自定义可用性策略(例如,检查某个节点是否是集群的一部分),或者检查是否可以访问外部计算机,从而可以处理该情况。

22.3.6.2. 配置分区处理

目前默认禁用分区处理。使用以下管理 CLI 命令启用分区处理:

/subsystem=infinispan/cache-container=web/distributed-cache=dist/component=partition-handling:write-attribute(name=enabled, value=true)

22.3.7. 向 JBoss Data Grid 外部化 HTTP 会话

注意

您需要一个 Red Hat JBoss Data Grid 订阅才能使用此功能。

Red Hat JBoss Data Grid 可用作 JBoss EAP 中特定应用程序的数据的外部缓存容器,如 HTTP 会话。这允许扩展独立于应用程序的数据层,并启用不同的 JBoss EAP 集群(它们可能驻留在多个域中),以便从同一 JBoss Data Grid 集群访问数据。此外,其他应用程序可与 Red Hat JBoss Data Grid 提供的缓存进行接口。

以下示例演示了如何外部使用 HTTP 会话。它适用于 JBoss EAP 的独立实例和受管域。但是,在受管域中,每个服务器组都需要配置唯一的远程缓存。虽然多个服务器组可以使用相同的红帽 JBoss Data Grid 集群,但对应的远程缓存对 JBoss EAP 服务器组是唯一的。

注意

对于每个可分布式应用程序,必须创建一个全新的缓存。它可以在现有的缓存容器中创建,如 web。

外部化 HTTP 会话:

  1. 通过在 socket-binding-group 中添加网络信息,定义远程红帽 JBoss Data Grid 服务器的位置。

    添加远程套接字绑定示例

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-jdg-server1:add(host=JDGHostName1, port=11222)
    
    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-jdg-server2:add(host=JDGHostName2, port=11222)

    生成的 XML

    <socket-binding-group name="standard-sockets" ... >
      ...
      <outbound-socket-binding name="remote-jdg-server1">
        <remote-destination host="JDGHostName1" port="11222"/>
      </outbound-socket-binding>
      <outbound-socket-binding name="remote-jdg-server2">
        <remote-destination host="JDGHostName2" port="11222"/>
      </outbound-socket-binding>
    </socket-binding-group>

    注意

    您需要为每个 Red Hat JBoss Data Grid 服务器配置远程套接字绑定。

  2. 确保远程缓存容器在 JBoss EAP 的 infinispan 子系统中定义;在以下示例中,remote-store 元素中的 cache 属性定义远程 JBoss Data Grid 服务器上的缓存名称。

    如果您在受管域中运行,请在这些命令前使用 /profile=PROFILE_NAME

    添加远程缓存容器示例

    /subsystem=infinispan/cache-container=web/invalidation-cache=jdg:add(mode=SYNC)
    
    /subsystem=infinispan/cache-container=web/invalidation-cache=jdg/component=locking:write-attribute(name=isolation,value=REPEATABLE_READ)
    
    /subsystem=infinispan/cache-container=web/invalidation-cache=jdg/component=transaction:write-attribute(name=mode,value=BATCH)
    
    /subsystem=infinispan/cache-container=web/invalidation-cache=jdg/store=remote:add(remote-servers=["remote-jdg-server1","remote-jdg-server2"], cache=default, socket-timeout=60000, passivation=false, purge=false, shared=true)

    生成的 XML

    <subsystem xmlns="urn:jboss:domain:infinispan:4.0">
      ...
      <cache-container name="web" default-cache="dist" module="org.wildfly.clustering.web.infinispan" statistics-enabled="true">
        <transport lock-timeout="60000"/>
        <invalidation-cache name="jdg" mode="SYNC">
          <locking isolation="REPEATABLE_READ"/>
          <transaction mode="BATCH"/>
          <remote-store cache="default" socket-timeout="60000" remote-servers="remote-jdg-server1 remote-jdg-server2" passivation="false" purge="false" shared="true"/>
        </invalidation-cache>
        ...
      </cache-container>
    </subsystem>

  3. 将缓存信息添加到应用程序的 jboss-web.xml 中。在以下示例中,web 是缓存容器的名称,jdg 是此容器中的相应缓存的名称。

    jboss-web.xml 文件示例

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_10_0.xsd"
               version="10.0">
        <replication-config>
            <replication-granularity>SESSION</replication-granularity>
            <cache-name>web.jdg</cache-name>
        </replication-config>
    </jboss-web>

22.4. 将 JBoss EAP 配置为 Front-end Load Balancer

您可以配置 JBoss EAP 和 undertow 子系统,以充当前端负载平衡器,以代理对后端 JBoss EAP 服务器的请求。由于 Undertow 使用异步 IO,因此负责连接的 IO 线程是参与请求的唯一线程。相同的线程也用于与后端服务器发出的连接。

您可以使用以下协议:

您可以定义 静态负载均衡器 并在配置中指定后端主机,或使用 mod_cluster 前端 动态更新主机。

22.4.1. 使用 mod_cluster 将 Undertow 配置为负载平衡器

您可以使用内置的 mod_cluster 前端负载平衡器来负载平衡其他 JBoss EAP 实例。

此流程假设您在受管域中运行,并已配置了以下配置:

  • 将充当负载平衡器的 JBoss EAP 服务器。

    • 此服务器使用 default 配置文件,它绑定到 standard-sockets 套接字绑定组。
  • 两个 JBoss EAP 服务器,它们将充当后端服务器。

    • 这些服务器在集群中运行,并使用 ha 配置文件,它绑定到 ha-sockets 套接字绑定组。
  • distributable 应用,以负载平衡部署到后端服务器。
配置 mod_cluster Front-end Load Balancer

以下步骤对受管域中的服务器进行负载平衡,但可以调整它们以应用到一组单机服务器。务必更新管理 CLI 命令值以适合您的环境。

  1. 设置 mod_cluster 公告安全密钥。

    添加广播安全密钥可让负载均衡器和服务器在发现过程中进行身份验证。

    使用以下管理 CLI 命令,设置 mod_cluster 公告安全密钥。

    /profile=ha/subsystem=modcluster/mod-cluster-config=configuration:write-attribute(name=advertise-security-key, value=mypassword)
  2. 使用 mod_cluster 的多播地址和端口创建套接字绑定。

    您需要为 mod_cluster 创建套接字配置,用于发现并与要负载平衡的服务器进行通信。

    使用以下管理 CLI 命令,添加 modcluster 套接字绑定,并配置了适当的多播地址和端口。

    /socket-binding-group=standard-sockets/socket-binding=modcluster:add(multicast-port=23364, multicast-address=224.0.1.105)
  3. 包含 mod_cluster 负载平衡器。

    设置广播安全密钥和套接字绑定后,您需要将 mod_cluster 过滤器添加到 JBoss EAP 的负载均衡器实例的 Undertow。

    使用以下管理 CLI 命令,添加 mod_cluster 过滤器。

    /profile=default/subsystem=undertow/configuration=filter/mod-cluster=modcluster:add(management-socket-binding=http, advertise-socket-binding=modcluster, security-key=mypassword)

    使用以下管理 CLI 命令,将 mod_cluster 过滤器绑定到默认主机。

    /profile=default/subsystem=undertow/server=default-server/host=default-host/filter-ref=modcluster:add
重要

建议由 mod_cluster 使用的管理和公告套接字绑定仅公开给内部网络,而不是公共 IP 地址。

负载平衡器 JBoss EAP 服务器现在可以对两个后端 JBoss EAP 服务器进行负载平衡。

22.4.2. 将 Undertow 配置为静态负载平衡器

若要使用 Undertow 配置静态负载平衡器,您需要在 undertow 子系统中配置代理处理程序。要在 Undertow 中配置代理处理器,您需要在将充当静态负载平衡器的 JBoss EAP 实例上执行以下操作:

  1. 添加反向代理处理器
  2. 为每个远程主机定义出站套接字绑定
  3. 将每个远程主机添加到反向代理处理程序
  4. 添加反向代理位置

以下示例演示了如何将 JBoss EAP 实例配置为静态负载平衡器。JBoss EAP 实例位于 lb.example.com,它将在两个额外服务器之间进行负载平衡: server1.example.comserver2.example.com。负载平衡器将反向代理到位置 /app,并将是 AJP 协议。

  1. 添加反向代理处理器:

    /subsystem=undertow/configuration=handler/reverse-proxy=my-handler:add
  2. 为每个远程主机定义出站套接字绑定:

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-host1/:add(host=server1.example.com, port=8009)
    
    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-host2/:add(host=server2.example.com, port=8009)
  3. 将每个远程主机添加到反向代理处理器中:

    /subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host1:add(outbound-socket-binding=remote-host1, scheme=ajp, instance-id=myroute, path=/test)
    
    /subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host2:add(outbound-socket-binding=remote-host2, scheme=ajp, instance-id=myroute, path=/test)
  4. 添加反向代理位置:

    /subsystem=undertow/server=default-server/host=default-host/location=\/app:add(handler=my-handler)

在访问 lb.example.com:8080/app 时,您现在会看到从 server1.example.comserver2.example.com 代理的内容。

22.5. 使用外部 Web 服务器作为代理服务器

JBoss EAP 可以使用支持的 HTTP、HTTPS 或 AJP 协议来接受来自外部 Web 服务器的请求,具体取决于外部 Web 服务器配置。

如需了解每个 web 服务器支持的 HTTP 连接器的详情,请参阅 HTTP Connectors 概述。确定要使用的 Web 服务器和 HTTP 连接器后,请参阅适当的部分,以了解有关配置连接器的信息:

有关 HTTP 连接器支持的配置的最新信息,请参阅 JBoss EAP 支持的配置

您还需要确保 JBoss EAP 配置为接受来自外部 Web 服务器的请求

22.5.1. HTTP Connectors 概述

JBoss EAP 能够使用内置于外部 Web 服务器中的负载平衡和集群机制,如 Apache HTTP 服务器、MicrosoftSign 和 Oracle iPlanet 以及 Undertow。JBoss EAP 使用连接器与 Web 服务器通信。这些连接器在 JBoss EAP 的 undertow 子系统中配置。

Web 服务器包括控制 HTTP 请求路由到 JBoss EAP 节点的软件模块。每个模块都因其工作方式和配置方式而异。模块配置为在多个 JBoss EAP 节点之间平衡工作负载,以便在出现故障时将工作负载移到备用服务器。

JBoss EAP 支持多种不同的连接器。您选择的服务器取决于使用的 Web 服务器以及您需要的功能。下表包括了与 JBoss EAP 兼容的各种 HTTP 连接器支持的配置和功能的比较。

有关 HTTP 连接器支持的配置的最新信息,请参阅 JBoss EAP 支持的配置

表 22.1. HTTP Connector 支持的配置

连接器Web 服务器支持的操作系统支持的协议

mod_cluster

Red Hat JBoss Core Services Apache HTTP Server, Red Hat JBoss Web Server Apache HTTP Server, JBoss EAP (Undertow)

Red Hat Enterprise Linux, Microsoft Windows Server, Oracle Solaris

HTTP, HTTPS, AJP, WebSocket

mod_jk

Red Hat JBoss Core Services Apache HTTP Server, Red Hat JBoss Web Server Apache HTTP Server

Red Hat Enterprise Linux, Microsoft Windows Server, Oracle Solaris

AJP

mod_proxy

Red Hat JBoss Core Services Apache HTTP Server, Red Hat JBoss Web Server Apache HTTP Server

Red Hat Enterprise Linux, Microsoft Windows Server, Oracle Solaris

HTTP, HTTPS, AJP

ISAPI 连接器

Microsoft IIS

Microsoft Windows Server

AJP

NSAPI 连接器

Oracle iPlanet Web Server

Oracle Solaris

AJP

表 22.2. HTTP Connector 功能

连接器支持粘性会话适应部署状态

mod_cluster

是。检测应用程序的部署和取消部署,并动态决定根据应用程序是否部署到该服务器上,将客户端请求定向到服务器。

mod_jk

否。只要容器可用,将客户端请求定向到容器,而不考虑应用状态。

mod_proxy

否。只要容器可用,将客户端请求定向到容器,而不考虑应用状态。

ISAPI 连接器

否。只要容器可用,将客户端请求定向到容器,而不考虑应用状态。

NSAPI 连接器

否。只要容器可用,将客户端请求定向到容器,而不考虑应用状态。

22.5.2. Apache HTTP 服务器

现在,一个独立的 Apache HTTP 服务器捆绑包作为 Red Hat JBoss Core Services 的单独下载。这简化了安装和配置,并允许获得更加一致的更新体验。

22.5.2.1. 安装 Apache HTTP 服务器

有关安装 Apache HTTP 服务器的详情,请参考 JBoss Core Services Apache HTTP Server 安装指南

22.5.3. 接受来自外部 Web 服务器的请求

JBoss EAP 不需要任何特殊配置,即可开始接受代理服务器的请求,只要配置了 correct protocol 处理程序,如 AJP、HTTP 或 HTTPS。

如果代理服务器使用 mod_jk、mod_proxy、ISAPI 或 NSAPI,它将请求发送到 JBoss EAP,JBoss EAP 仅提供响应。使用 mod_cluster 时,您还必须配置网络,以允许 JBoss EAP 将信息(如其当前负载、应用程序生命周期事件和健康状态)发送到代理服务器,以帮助它确定路由请求的位置。有关配置 mod_cluster 代理服务器的更多信息,请参阅 mod_cluster HTTP Connector

更新 JBoss EAP 配置

在以下步骤中,将示例中的协议和端口替换为您需要配置的。

  1. 配置 Undertow 的 instance-id 属性。

    外部 Web 服务器使用 instance-id 在连接器配置中标识 JBoss EAP 实例。使用以下管理 CLI 命令,在 Undertow 中设置 instance-id 属性。

    /subsystem=undertow:write-attribute(name=instance-id,value=node1)

    在上例中,外部 Web 服务器将当前的 JBoss EAP 实例标识为 node1

  2. 将所需的监听程序添加到 Undertow。

    若要让外部 Web 服务器能够连接 JBoss EAP,Undertow 需要侦听器。每个协议需要自己的监听程序,该监听程序与套接字绑定相关联。

    注意

    根据您的所需协议和端口配置,可能不需要这一步。HTTP 侦听器在所有默认 JBoss EAP 配置中配置,如果您使用 hafull-ha 配置文件,则配置了 AJP 侦听器。

    您可以通过读取默认服务器配置来检查所需的监听程序是否已配置:

    /subsystem=undertow/server=default-server:read-resource

    若要向 Undertow 添加侦听器,它必须具有套接字绑定。套接字绑定添加到服务器或服务器组使用的套接字绑定组中。以下管理 CLI 命令将绑定到端口 8009ajp 套接字绑定添加到 standard-sockets 套接字绑定组中

    /socket-binding-group=standard-sockets/socket-binding=ajp:add(port=8009)

    以下管理 CLI 命令利用 ajp 套接字绑定向 Undertow 添加 ajp 侦听器:

    /subsystem=undertow/server=default-server/ajp-listener=ajp:add(socket-binding=ajp)

22.6. mod_cluster HTTP Connector

mod_cluster 连接器是基于 Apache HTTP 服务器的负载均衡器。它使用通信通道将请求从 Apache HTTP 服务器转发到一组应用服务器节点。

与其他连接器相比,mod_cluster 连接器具有多个优点。

  • mod_cluster 管理协议(MCMP)是 JBoss EAP 服务器和启用了 mod_cluster 模块的 Apache HTTP 服务器之间的额外连接。JBoss EAP 服务器使用它来通过自定义 HTTP 方法将因素和生命周期事件传输至 Apache HTTP 服务器。
  • 使用 mod_cluster 的 Apache HTTP 服务器的动态配置允许 JBoss EAP 服务器在不手动配置的情况下加入负载平衡安排。
  • JBoss EAP 执行负载平衡因素计算,而不依赖于带有 mod_cluster 的 Apache HTTP 服务器。这使得负载平衡指标比其他连接器更准确。
  • mod_cluster 连接器提供精细的应用程序生命周期控制。每个 JBoss EAP 服务器都将 Web 应用程序上下文生命周期事件转发到 Apache HTTP 服务器,通知它启动或停止给定上下文的路由请求。这可防止最终用户因为资源不可用而看到 HTTP 错误。
  • 可以使用 AJP、HTTP 或 HTTPS 传输。

有关 modcluster 子系统的特定配置选项的详情,请查看 ModCluster subsystem 属性

22.6.1. 在 Apache HTTP 服务器中配置 mod_cluster

安装 JBoss Core Services Apache HTTP 服务器或使用 JBoss Web 服务器时,mod_cluster 模块已经包含在内,默认情况下会加载。

注意

自版本 3.1.0 起,Apache HTTP 服务器不再与 JBoss Web Server 一起分发。

请参阅以下步骤来配置 mod_cluster 模块以适合您的环境。

注意

红帽客户还可以使用红帽客户门户上的 Load Balancer 配置工具,快速为 mod_cluster 和其他连接器生成最佳配置模板。请注意,您必须登录才能访问此工具。

配置 mod_cluster

Apache HTTP 服务器已经包含 mod_cluster 配置文件 mod_cluster.conf,它会加载 mod_cluster 模块并提供基本配置。此文件中的 IP 地址、端口和其他设置(如下所示)可以配置为适合您的需求。

# mod_proxy_balancer should be disabled when mod_cluster is used
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule cluster_slotmem_module modules/mod_cluster_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule advertise_module modules/mod_advertise.so

MemManagerFile cache/mod_cluster

<IfModule manager_module>
  Listen 6666
  <VirtualHost *:6666>
    <Directory />
      Require ip 127.0.0.1
    </Directory>
    ServerAdvertise on
    EnableMCPMReceive
    <Location /mod_cluster_manager>
      SetHandler mod_cluster-manager
      Require ip 127.0.0.1
   </Location>
  </VirtualHost>
</IfModule>

Apache HTTP 服务器服务器配置为负载平衡器,并可搭配 JBoss EAP 上运行的 modcluster 子系统。您必须配置 mod_cluster worker 节点,使 JBoss EAP 知道 mod_cluster。

如果要为 mod_cluster 禁用广告并配置静态代理列表,请参阅 mod_cluster 的禁用公告。有关 Apache HTTP 服务器中的可用 mod_cluster 配置选项的更多信息,请参阅 Apache HTTP Server mod_cluster Directives

有关配置 mod_cluster 的详情,请参阅 JBoss Web Server HTTP Connectors 和 Load Balancing Guide 中的 Configure Load Balancing using Apache HTTP Server and mod_cluster 部分。

22.6.2. 为 mod_cluster 禁用广告

默认情况下,modcluster 子系统的负载平衡器使用多播 UDP 向后台工作程序公告其可用性。您可以按照以下步骤禁用广告并使用代理列表。

注意

以下流程中的管理 CLI 命令假设您使用受管域中的 full-ha 配置文件。如果您使用 full-ha 以外的配置集,请在命令中使用适当的配置集名称。如果您正在运行独立服务器,请完全删除 /profile=full-ha

  1. 修改 Apache HTTP 服务器配置。

    编辑 httpd.conf Apache HTTP 服务器配置文件。使用 EnableMCPMReceive 指令,对侦听 MCPM 请求的虚拟主机进行以下更新。

    1. 添加 指令以禁用服务器公告。

      ServerAdvertise 指令设置为 Off 以禁用服务器广告。

      ServerAdvertise Off
    2. 禁用公告频率。

      如果您的配置指定了 AdvertiseFrequency 参数,请使用 # 字符注释掉它。

      # AdvertiseFrequency 5
    3. 启用接收 MCPM 消息的功能。

      确保存在 EnableMCPMReceive 指令,以允许 Web 服务器从 worker 节点接收 MCPM 消息。

      EnableMCPMReceive
  2. 在 JBoss EAP modcluster 子系统中禁用广播。

    使用以下管理 CLI 命令禁用广告。

    /profile=full-ha/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=advertise,value=false)
    重要

    确保继续下一步以提供代理列表。如果代理列表为空,则不会禁用广告。

  3. 在 JBoss EAP modcluster 子系统中提供代理列表。

    需要提供代理列表,因为 modcluster 子系统将无法自动发现代理(如果广播被禁用)。

    首先,在适当的套接字绑定组中定义出站套接字绑定。

    /socket-binding-group=full-ha-sockets/remote-destination-outbound-socket-binding=proxy1:add(host=10.33.144.3,port=6666)
    /socket-binding-group=full-ha-sockets/remote-destination-outbound-socket-binding=proxy2:add(host=10.33.144.1,port=6666)

    接下来,将代理添加到 mod_cluster 配置中。

    /profile=full-ha/subsystem=modcluster/mod-cluster-config=configuration:list-add(name=proxies,value=proxy1)
    /profile=full-ha/subsystem=modcluster/mod-cluster-config=configuration:list-add(name=proxies,value=proxy2)

Apache HTTP 服务器负载均衡器不再公告其对 worker 节点的存在,不再使用 UDP 多播。

22.6.3. 配置 mod_cluster Worker 节点

mod_cluster 工作节点由 JBoss EAP 服务器组成。此服务器可以是单机服务器,也可以是受管域中的服务器组的一部分。在 JBoss EAP 中运行一个单独的进程,它管理集群的所有 worker 节点。这称为 master。

受管域中的 worker 节点在服务器组之间共享相同的配置。作为独立服务器的 worker 节点会单独配置。否则,配置步骤是相同的。

  • 单机服务器必须使用 standalone-hastandalone-full-ha 配置文件启动。
  • 受管域中的服务器组必须使用 hafull-ha 配置文件,以及 ha-socketsfull-ha-sockets 套接字绑定组。JBoss EAP 附带了一个名为 other-server-group 的群集式服务器组,可满足这些要求。
配置 Worker 节点

此流程中的管理 CLI 命令假定您使用具有 full-ha 配置集的受管域。如果您正在运行独立服务器,请删除命令的 /profile=full-ha 部分。

  1. 配置网络接口。

    默认情况下,网络接口默认为 127.0.0.1。托管单机服务器或服务器组中的一个服务器的每个物理主机都需要将其接口配置为使用其公共 IP 地址,而其他服务器可以查看它们。

    根据您的环境,使用以下管理 CLI 命令修改 管理公共不安全 接口的外部 IP 地址。务必将 命令中的 EXTERNAL_IP_ADDRESS 替换为主机的实际外部 IP 地址。

    /interface=management:write-attribute(name=inet-address,value="${jboss.bind.address.management:EXTERNAL_IP_ADDRESS}")
    /interface=public:write-attribute(name=inet-address,value="${jboss.bind.address.public:EXTERNAL_IP_ADDRESS}")
    /interface=unsecure:write-attribute(name=inet-address,value="${jboss.bind.address.unsecure:EXTERNAL_IP_ADDRESS}")

    重新加载服务器。

    reload
  2. 配置主机名。

    为参与受管域的每个主机设置唯一的主机名。此名称必须在从间是唯一的,并将用于识别集群的从设备,因此记录您使用的名称。

    1. 使用适当的 host.xml 配置文件启动 JBoss EAP 从主机。

      $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml
    2. 使用以下管理 CLI 命令设置唯一的主机名。本例使用 slave1 作为新的主机名。

      /host=EXISTING_HOST_NAME:write-attribute(name=name,value=slave1)

      有关配置主机名的更多信息 ,请参阅配置主机名

  3. 配置每个主机以连接到域控制器。

    注意

    此步骤不适用于独立服务器。

    对于需要加入受管域的新配置主机,您必须删除 local 元素,并添加指向域控制器的远程元素 host 属性。

    1. 使用适当的 host.xml 配置文件启动 JBoss EAP 从主机。

      $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml
    2. 使用以下管理 CLI 命令配置域控制器设置:

      /host=SLAVE_HOST_NAME:write-remote-domain-controller(host=DOMAIN_CONTROLLER_IP_ADDRESS,port=${jboss.domain.master.port:9999},security-realm="ManagementRealm")

      这会修改 host-slave.xml 文件中的 XML,如下所示:

      <domain-controller>
          <remote host="DOMAIN_CONTROLLER_IP_ADDRESS" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
      </domain-controller>

      如需更多信息 ,请参阅连接到域控制器。

  4. 为每个从主机配置身份验证。

    每个从服务器都需要在域控制器或独立主服务器 ManagementRealm 中创建的用户名和密码。在域控制器或独立 master 上,为每个主机运行 EAP_HOME/bin/add-user.sh 命令。使用与从主机名匹配的用户名为每个主机添加管理用户。

    请务必对最后一个问题回答 yes,要求"此新用户是否要用于一个 AS 进程以连接到另一个 AS 进程?",以便您以机密值的形式提供。

    add-user 脚本输出示例 (修剪)

    $ EAP_HOME/bin/add-user.sh
    
    What type of user do you wish to add?
     a) Management User (mgmt-users.properties)
     b) Application User (application-users.properties)
    (a): a
    
    Username : slave1
    Password : changeme
    Re-enter Password : changeme
    What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[  ]:
    About to add user 'slave1' for realm 'ManagementRealm'
    Is this correct yes/no? yes
    Is this new user going to be used for one AS process to connect to another AS process?
    e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
    yes/no? yes
    To represent the user add the following to the server-identities definition <secret value="SECRET_VALUE" />

    复制从此输出提供的 Base64 编码的 secret 值(SECRET_VALUE),它可以在下一步中使用。

    如需更多信息,请参阅 JBoss EAP 如何配置服务器安全 指南中的 将用户添加到主域控制器 部分。

  5. 修改从属主机的安全域,以使用新的身份验证。

    您可以通过在服务器配置中设置 secret 值、从密码库获取密码或将密码用作系统属性来指定密码。

    • 使用管理 CLI 在服务器配置文件中指定 Base64 编码的密码值。

      使用以下管理 CLI 命令来指定 secret 值。务必将 SECRET_VALUE 替换为从上一步中返回的 add-user 输出的 secret 值。

      /host=SLAVE_HOST_NAME/core-service=management/security-realm=ManagementRealm/server-identity=secret:add(value="SECRET_VALUE")

      您需要重新加载服务器。--host 参数不适用于单机服务器。

      reload --host=HOST_NAME

      如需更多信息,请参阅配置 Slave Controller 以使用 JBoss EAP 如何配置服务器安全 指南中的凭据 部分。

    • 配置主机以从密码库获取密码。

      1. 使用 EAP_HOME/bin/vault.sh 脚本生成屏蔽的密码。它将生成格式为 VAULT::secret::password::VAULT_SECRET_VALUE 的字符串,例如:

        VAULT::secret::password::ODVmYmJjNGMtZDU2ZC00YmNlLWE4ODMtZjQ1NWNmNDU4ZDc1TElORV9CUkVBS3ZhdWx0.
        注意

        在密码库中创建密码时,必须以纯文本而不是 Base64 编码的指定。

      2. 使用以下管理 CLI 命令来指定 secret 值。务必将 VAULT_SECRET_VALUE 替换为上一步中生成的已屏蔽密码。

        /host=master/core-service=management/security-realm=ManagementRealm/server-identity=secret:add(value="${VAULT::secret::password::VAULT_SECRET_VALUE}")

        您需要重新加载服务器。--host 参数不适用于单机服务器。

        reload --host=HOST_NAME

        如需更多信息,请参阅 JBoss EAP 如何配置服务器安全指南 中的密码 Vault 部分。

    • 将密码指定为系统属性。

      以下示例使用 server.identity.password 作为密码的系统属性名称。

      1. 在服务器配置文件中指定密码的系统属性。

        使用以下管理e CLI 命令,将机密身份配置为使用系统属性:

        /host=SLAVE_HOST_NAME/core-service=management/security-realm=ManagementRealm/server-identity=secret:add(value="${server.identity.password}")

        您需要重新加载服务器。--host 参数不适用于单机服务器。

        reload --host=master
      2. 在启动服务器时设置系统属性的密码。

        您可以通过将 server.identity.password 系统属性作为命令行参数或在属性文件中传递来设置。

        1. 以纯文本命令行参数形式传递。

          启动服务器并传递 server.identity.password 属性。

          $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml -Dserver.identity.password=changeme
          警告

          密码必须以纯文本形式输入,并将对发出 ps -ef 命令的任何人可见。

        2. 在属性文件中设置 属性。

          创建一个属性文件,并将键/值对添加到属性文件中,例如:

          server.identity.password=changeme
          警告

          密码以纯文本形式,对有权访问此属性文件的任何人都可见。

          使用命令行参数启动服务器。

          $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml --properties=PATH_TO_PROPERTIES_FILE
  6. 重新启动服务器。

    现在,从设备将使用其主机名作为用户名以及加密字符串作为其密码验证到主设备。

您的单机服务器或受管域的服务器组中的服务器现在配置为 mod_cluster worker 节点。如果您部署了集群应用,其会话将复制到所有集群节点以进行故障转移,并且可以接受来自外部 Web 服务器或负载均衡器的请求。默认情况下,集群的每个节点都使用自动发现来发现其他节点。

22.6.4. 配置 mod_cluster fail_on_status Parameter

fail_on_status 参数列出了这些 HTTP 状态代码(由集群中的 worker 节点返回)会将该节点标记为失败。然后,负载均衡器会将将来的请求发送到集群中的另一个 worker 节点。失败的 worker 节点将保持 NOTOK 状态,直到它向负载均衡器发送 STATUS 信息。

注意

fail_on_status 参数不能与 Hewlett-Packard 中的 HP-UX v11.3 hpws httpd B.2.2.15.15 一起使用,因为它不支持该功能。

fail_on_status 参数必须在负载均衡器的 httpd 配置文件中配置。fail_on_status 的多个 HTTP 状态代码可指定为用逗号分开的列表。以下示例为 fail_on_status. 指定 HTTP 状态代码 203204。⁠

fail_on_status 配置示例

ProxyPass / balancer://MyBalancer stickysession=JSESSIONID|jsessionid nofailover=on failonstatus=203,204
ProxyPassReverse / balancer://MyBalancer
ProxyPreserveHost on

22.6.5. 在集群间迁移流量

使用 JBoss EAP 创建新集群后,您可以在升级过程过程中将流量从上一集群迁移到新集群。在此任务中,您将看到可用于以最少的中断或停机时间迁移此流量的策略。

  • 新集群设置:(我们将调用此集群: ClusterNEW)。
  • 要实现冗余的旧集群设置(我们将调用此群集: ClusterOLD)。
集群的升级过程 - 负载均衡组
  1. 使用先决条件中介绍的步骤设置新集群。
  2. ClusterNEWClusterOLD 中,确保配置选项 sticky-session 设为 true (此选项默认设置为 true )。启用这个选项意味着对任何集群中集群节点的所有新请求都将继续进入对应的集群节点。

    /profile=full-ha/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=sticky-session,value=true)
  3. load-balancing-group 设置为 ClusterOLD,假设 ClusterOLD 中的所有集群节点都是 ClusterOLD 负载均衡组的成员。

    /profile=full-ha/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=load-balancing-group,value=ClusterOLD)
    <subsystem xmlns="urn:jboss:domain:modcluster:2.0">
      <mod-cluster-config load-balancing-group="ClusterOLD" advertise-socket="modcluster" connector="ajp">
        <dynamic-load-provider>
          <load-metric type="cpu"/>
        </dynamic-load-provider>
      </mod-cluster-config>
    </subsystem>
  4. 使用 Configure a mod_cluster Worker Node 部分所述的流程,将 ClusterNEW 中的节点分别添加到 mod_cluster 配置中。另外,使用上述过程,并将其负载平衡组设置为 ClusterNEW

    此时,您可以在 mod_cluster-manager 控制台中看到与上述短例类似的输出:

                    mod_cluster/<version>
    
        LBGroup ClusterOLD: [Enable Nodes]   [Disable Nodes]   [Stop Nodes]
            Node node-1-jvmroute (ajp://node1.oldcluster.example:8009):
                [Enable Contexts]   [Disable Contexts]   [Stop Contexts]
                Balancer: qacluster, LBGroup: ClusterOLD, Flushpackets: Off, ..., Load: 100
                Virtual Host 1:
                    Contexts:
                        /my-deployed-application-context, Status: ENABLED Request: 0 [Disable]   [Stop]
    
            Node node-2-jvmroute (ajp://node2.oldcluster.example:8009):
                [Enable Contexts]   [Disable Contexts]   [Stop Contexts]
                Balancer: qacluster, LBGroup: ClusterOLD, Flushpackets: Off, ..., Load: 100
                Virtual Host 1:
                    Contexts:
                        /my-deployed-application-context, Status: ENABLED Request: 0 [Disable]   [Stop]
    
    
        LBGroup ClusterNEW: [Enable Nodes]   [Disable Nodes]   [Stop Nodes]
            Node node-3-jvmroute (ajp://node3.newcluster.example:8009):
                [Enable Contexts]   [Disable Contexts]   [Stop Contexts]
                Balancer: qacluster, LBGroup: ClusterNEW, Flushpackets: Off, ..., Load: 100
                Virtual Host 1:
                    Contexts:
                        /my-deployed-application-context, Status: ENABLED Request: 0 [Disable]   [Stop]
    
            Node node-4-jvmroute (ajp://node4.newcluster.example:8009):
                [Enable Contexts]   [Disable Contexts]   [Stop Contexts]
                Balancer: qacluster, LBGroup: ClusterNEW, Flushpackets: Off, ..., Load: 100
                Virtual Host 1:
                    Contexts:
                        /my-deployed-application-context, Status: ENABLED Request: 0 [Disable]   [Stop]
  5. ClusterOLD 组中有旧的活跃会话,并在 ClusterOLDCLusterNEW 组中创建新的会话。接下来,我们希望禁用整个 ClusterOLD 组,因此我们可以关闭其集群节点,而不会导致当前活跃的客户端的会话出现错误。

    mod_cluster-manager web 控制台中,单击 LBGroup ClusterOLDDisable Nodes 链接。

    从此时,只有属于已建立的会话的请求才会路由到 ClusterOLD 负载平衡组的成员。任何新客户端的会话都会在 ClusterNEW 组中创建。当 ClusterOLD 组中没有活动会话后,我们就可以安全地删除其成员。

    注意

    使用 Stop Nodes 将命令负载均衡器停止将任何请求立即路由到这个域。这将强制故障转移到另一个负载平衡组,这会使会话数据丢失到客户端,只要 ClusterNEWClusterOLD 之间没有会话复制。

默认负载平衡组

如果当前的 ClusterOLD 设置不包含任何负载均衡组设置(一个可以看到 LBGroup:,在 mod_cluster-manager 控制台中),仍然可以利用禁用 ClusterOLD 节点。在本例中,单击每个 ClusterOLD 节点的 Disable Contexts。这些节点的上下文将被禁用,并且当没有活动会话时,它们将准备好删除。只有在本示例中启用了上下文(假定为 ClusterNEW 成员)的节点上,才会创建新的客户端的会话。

使用管理 CLI

除了使用 mod_cluster-manager Web 控制台外,您还可以使用 JBoss EAP 管理 CLI 停止或禁用特定上下文。

停止上下文

/host=master/server=server-one/subsystem=modcluster:stop-context(context=/my-deployed-application-context, virtualhost=default-host, waittime=0)

停止将 waittime 设为 0 的上下文(代表没有超时),指示均衡停止向其立即路由任何请求,这会强制故障转移到另一个可用上下文。

如果您使用 waittime 参数设置超时值,则不会在此上下文中创建新的会话,但现有会话将继续定向到这个节点,直到它们完成或指定的超时已过后。waittime 参数默认为 10 秒。

禁用上下文

/host=master/server=server-one/subsystem=modcluster:disable-context(context=/my-deployed-application-context, virtualhost=default-host)

禁用上下文会告知负载均衡器在这个上下文中不应创建新的会话。

22.7. Apache mod_jk HTTP Connector

Apache mod_jk 是一个 HTTP 连接器,为需要它来满足兼容性的用户提供。

JBoss EAP 可以接受 Apache HTTP 代理服务器的工作负载。代理服务器接受来自 Web 前端的客户端请求,并传递工作以参与 JBoss EAP 服务器。如果启用了粘性会话,则相同的客户端请求始终发送到相同的 JBoss EAP 服务器,除非服务器不可用。

mod_jk 通过 AJP 1.3 协议进行通信。其他协议可与 mod_clustermod_proxy 一起使用。如需更多信息,请参阅 HTTP Connectors 概述

注意

mod_cluster 是比 mod_jk 更高级的负载均衡器,是推荐的 HTTP 连接器。mod_cluster 提供 mod_jk 的所有功能,以及其他功能。与 JBoss EAP mod_cluster HTTP 连接器不同,Apache mod_jk HTTP 连接器不知道服务器或服务器组上部署的状态,也无法适应它相应地发送工作的位置。

如需更多信息,请参阅 Apache mod_jk 文档

22.7.1. 在 Apache HTTP 服务器中配置 mod_jk

安装 JBoss Core Services Apache HTTP 服务器或使用 JBoss Web 服务器时,mod_jk 模块(mod_jk.so)已包含在内,但默认情况下不加载它。

注意

自版本 3.1.0 起,Apache HTTP 服务器不再与 JBoss Web Server 一起分发。

使用以下步骤在 Apache HTTP 服务器中加载和配置 mod_jk。请注意,这些步骤假定您已导航到 Apache HTTP 服务器的 httpd/ 目录,这会根据您的平台而有所不同。如需更多信息,请参阅 JBoss Core Services Apache HTTP Server 安装指南中的 为您的平台安装说明。

注意

红帽客户还可以使用红帽客户门户上的 Load Balancer 配置工具,快速为 mod_jk 和其他连接器生成最佳配置模板。请注意,您必须登录才能访问此工具。

  1. 配置 mod_jk 模块。

    注意

    示例 mod_jk 配置文件在 conf.d/mod_jk.conf.sample 提供。您可以通过删除 .sample 扩展并根据需要修改其内容,来使用此示例而不是创建自己的文件。

    创建名为 conf.d/mod_jk.conf 的新文件。将以下配置添加到 文件中,确保修改内容以满足您的需要。

    # Load mod_jk module
    # Specify the filename of the mod_jk lib
    LoadModule jk_module modules/mod_jk.so
    
    # Where to find workers.properties
    JkWorkersFile conf.d/workers.properties
    
    # Where to put jk logs
    JkLogFile logs/mod_jk.log
    
    # Set the jk log level [debug/error/info]
    JkLogLevel info
    
    # Select the log format
    JkLogStampFormat  "[%a %b %d %H:%M:%S %Y]"
    
    # JkOptions indicates to send SSK KEY SIZE
    JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
    
    # JkRequestLogFormat
    JkRequestLogFormat "%w %V %T"
    
    # Mount your applications
    JkMount /application/* loadbalancer
    
    # Add shared memory.
    # This directive is present with 1.2.10 and
    # later versions of mod_jk, and is needed for
    # for load balancing to work properly
    JkShmFile logs/jk.shm
    
    # Add jkstatus for managing runtime data
    <Location /jkstatus/>
        JkMount status
        Require ip 127.0.0.1
    </Location>
    注意

    JkMount 指令指定 Apache HTTP 服务器必须转发到 mod_jk 模块的 URL。根据指令的配置,mod_jk 将接收的 URL 发送到正确的 worker。要直接提供静态内容,且仅对 Java 应用程序使用负载均衡器,URL 路径必须是 /application understanding。要将 mod_jk 用作负载均衡器,请使用值 required,将所有 URL 转发到 mod_jk。

    除了常规 mod_jk 配置外,此文件指定加载 mod_jk.so 模块,并定义在哪里查找 worker.properties 文件。

  2. 配置 mod_jk worker 节点。

    注意

    一个 worker 配置文件示例位于 conf.d/workers.properties.sample。您可以通过删除 .sample 扩展并根据需要修改其内容,来使用此示例而不是创建自己的文件。

    创建名为 conf.d/workers.properties 的新文件。将以下配置添加到 文件中,确保修改内容以满足您的需要。

    # Define list of workers that will be used
    # for mapping requests
    worker.list=loadbalancer,status
    
    # Define Node1
    # modify the host as your host IP or DNS name.
    worker.node1.port=8009
    worker.node1.host=node1.mydomain.com
    worker.node1.type=ajp13
    worker.node1.ping_mode=A
    worker.node1.lbfactor=1
    
    # Define Node2
    # modify the host as your host IP or DNS name.
    worker.node2.port=8009
    worker.node2.host=node2.mydomain.com
    worker.node2.type=ajp13
    worker.node2.ping_mode=A
    worker.node2.lbfactor=1
    
    # Load-balancing behavior
    worker.loadbalancer.type=lb
    worker.loadbalancer.balance_workers=node1,node2
    worker.loadbalancer.sticky_session=1
    
    # Status worker for managing load balancer
    worker.status.type=status

    有关 mod_jk worker.properties 文件的语法和其他高级配置选项的详情,请参阅 mod_jk Worker Properties

  3. (可选)指定 JKMountFile 指令。

    除了 mod-jk.conf 中的 JKMount 指令外,您还可以指定一个文件,其中包含要转发到 mod_jk 的多个 URL 模式。

    1. 创建一个 uriworkermap.properties 文件。

      注意

      URI worker 映射配置文件示例位于 conf.d/uriworkermap.properties.sample。您可以通过删除 .sample 扩展并根据需要修改其内容,来使用此示例而不是创建自己的文件。

      创建名为 conf.d/uriworkermap.properties 的新文件。为要匹配的每个 URL 模式添加一行,例如:

      # Simple worker configuration file
      /*=loadbalancer
    2. 更新配置以指向 uriworkermap.properties 文件。

      将以下内容附加到 conf.d/mod_jk.conf

      # Use external file for mount points.
      # It will be checked for updates each 60 seconds.
      # The format of the file is: /url=worker
      # /examples/*=loadbalancer
      JkMountFile conf.d/uriworkermap.properties

有关配置 mod_jk 的详情,请参阅 JBoss Web Server HTTP Connectors 和 Load Balancing Guide 中的 Configuring Apache HTTP Server to Load mod_jk 部分。

22.7.2. 使用 mod_jk 将 JBoss EAP 配置为 Communicate

JBoss EAP undertow 子系统需要指定一个侦听器来接受来自的请求,并将回复发回到外部 Web 服务器。由于 mod_jk 使用 AJP 协议,因此必须配置 AJP 侦听器。

如果您使用默认高可用性配置之一(hafull-ha),则已配置了 AJP 侦听器。

具体步骤请参阅 接受来自外部 Web 服务器的请求

22.8. Apache mod_proxy HTTP Connector

Apache mod_proxy 是一个 HTTP 连接器,支持通过 AJP、HTTP 和 HTTPS 协议的连接。mod_proxy 可以在负载均衡或非负载均衡配置中进行配置,它支持粘性会话的概念。

mod_proxy 模块要求 JBoss EAP 在 undertow 子系统中配置了 HTTP、HTTPS 或 AJP 侦听器,具体取决于您计划使用的协议。

注意

mod_cluster 是比 mod_proxy 更高级的负载均衡器,是推荐的 HTTP 连接器。mod_cluster 提供 mod_proxy 的所有功能,以及其他功能。与 JBoss EAP mod_cluster HTTP 连接器不同,Apache mod_proxy HTTP 连接器不知道服务器或服务器组上部署的状态,也无法适应它相应地发送工作的位置。

如需更多信息,请参阅 Apache mod_proxy 文档

22.8.1. 在 Apache HTTP 服务器中配置 mod_proxy

安装 JBoss Core Services Apache HTTP 服务器或使用 JBoss Web 服务器时,mod_proxy 模块已包含在内,默认加载。

注意

自版本 3.1.0 起,Apache HTTP 服务器不再与 JBoss Web Server 一起分发。

请参阅以下适当的部分,以配置基本 负载平衡 或非 负载平衡 代理。这些步骤假定您已导航到 Apache HTTP 服务器的 httpd/ 目录,这会根据您的平台而有所不同。如需更多信息,请参阅 JBoss Core Services Apache HTTP Server 安装指南中的 为您的平台安装说明。这些步骤还假定 JBoss EAP undertow 子系统中已配置了必要的 HTTP 侦听器。

注意

红帽客户还可以使用红帽客户门户上的 Load Balancer 配置工具,快速为 mod_proxy 和其他连接器生成最佳配置模板。请注意,您必须登录才能访问此工具。

添加非负载均衡代理

conf/httpd.conf 文件中直接添加以下配置,在您可能具有的任何其他 & lt;VirtualHost > 指令下。将值替换为适合您的设置的值。

<VirtualHost *:80>
# Your domain name
ServerName YOUR_DOMAIN_NAME

ProxyPreserveHost On

# The IP and port of JBoss
# These represent the default values, if your httpd is on the same host
# as your JBoss managed domain or server

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

# The location of the HTML files, and access control information
DocumentRoot /var/www
<Directory /var/www>
Options -Indexes
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
添加负载均衡代理
注意

默认的 Apache HTTP 服务器配置禁用了 mod_proxy_balancer.so 模块,因为它与 mod_cluster 不兼容。要完成此任务,您需要加载此模块并禁用 mod_cluster 模块。

要将 mod_proxy 用作负载平衡器,并将工作发送到多个 JBoss EAP 实例,请将以下配置添加到 conf/httpd.conf 文件中。示例 IP 地址是虚构的。将它们替换为适合您环境的相应值。

<Proxy balancer://mycluster>

Order deny,allow
Allow from all

# Add each JBoss Enterprise Application Server by IP address and port.
# If the route values are unique like this, one node will not fail over to the other.
BalancerMember http://192.168.1.1:8080 route=node1
BalancerMember http://192.168.1.2:8180 route=node2
</Proxy>

<VirtualHost *:80>
 # Your domain name
 ServerName YOUR_DOMAIN_NAME

 ProxyPreserveHost On
 ProxyPass / balancer://mycluster/

 # The location of the HTML files, and access control information DocumentRoot /var/www
 <Directory /var/www>
  Options -Indexes
  Order allow,deny
  Allow from all
 </Directory>

</VirtualHost>

上面的示例都使用 HTTP 协议进行通信。如果您加载适当的 mod_proxy 模块,您可以使用 AJP 或 HTTPS 协议。详情请查看 Apache mod_proxy 文档

启用粘性会话

粘性会话 意味着,如果客户端请求最初进入特定的 JBoss EAP worker,则将来的所有请求都将发送到同一工作程序,除非它不可用。这几乎总是推荐的行为。

要为 mod_proxy 启用粘性会话,请将 stickysession 参数添加到 ProxyPass 语句中。

ProxyPass / balancer://mycluster stickysession=JSESSIONID

您可以为 ProxyPass 语句指定额外的参数,如 lbmethodnofailover。有关可用参数的更多信息,请参阅 Apache mod_proxy 文档

22.8.2. 使用 mod_proxy 将 JBoss EAP 配置为 Communicate

JBoss EAP undertow 子系统需要指定一个侦听器来接受来自的请求,并将回复发回到外部 Web 服务器。根据您要使用的协议,您可能需要配置监听程序。

JBoss EAP 默认配置中配置 HTTP 侦听器。如果您使用默认高可用性配置之一(hafull-ha),也会预先配置一个 AJP 侦听器。

具体步骤请参阅 接受来自外部 Web 服务器的请求

22.9. Microsoft ISAPI Connector

Internet Server API (ISAPI)是一组 API,用于为 Microsoft 的 Internet Information Services (IIS)等 Web 服务器编写 OLE 服务器扩展和过滤器。isapi_redirect.dll 的扩展是 mod_jk 的扩展,经过调整到Sign。isapi_redirect.dll 可让您将 JBoss EAP 实例配置为 worker 节点,将 OC 配置为负载均衡器。

注意

有关 Windows Server 和 QPC 支持的配置的信息,请参阅 JBoss EAP 支持的配置。

22.9.1. 将 Microsoft IIS 配置为使用 ISAPI Connector

从红帽客户门户网站下载 ISAPI 连接器:

  1. 打开浏览器并登录到红帽客户门户网站 JBoss Software Downloads 页面
  2. 在产品 下拉菜单中选择 Web Connectors
  3. Version 下拉菜单中选择最新的 JBoss Core Services 版本。
  4. 在列表中找到 Red Hat JBoss Core Services ISAPI Connector,然后点 Download 链接。
  5. 提取存档并将 sbin 目录的内容复制到服务器上的位置。以下说明假定内容已复制到 C:\connectors\

使用 personnel Manager (IIS 7)配置 RuntimeClass Redirector:

  1. StartRun,并输入 inetmgr,打开framework manager。
  2. 在左侧的树视图窗格中,展开 IIS 7
  3. 双击 ISAPI 和 CGI 注册 以在新窗口中打开它。
  4. Actions 窗格中,单击 Add。此时会打开 Add ISAPI 或 CGI Restriction 窗口。
  5. 指定以下值:

    • ISAPI 或 CGI 路径:C:\connectors\isapi_redirect.dll
    • 描述jboss
    • 允许执行扩展路径 :选中复选框。
  6. OK 关闭 Add ISAPI 或 CGI Restriction 窗口。
  7. 定义 JBoss 原生虚拟目录

    • 右键单击 Default Web Site,然后单击 Add Virtual Directory。此时会打开 Add Virtual Directory 窗口。
    • 指定以下值来添加虚拟目录:

      • 别名jboss
      • 物理路径C:\connectors\
    • OK 保存值并关闭 Add Virtual Directory 窗口。
  8. 定义 JBoss Native ISAPI Redirect Filter

    • 在树视图窗格中,展开 SitesDefault Web Site
    • 双击 ISAPI Filters。此时会出现 ISAPI Filters Features 视图。
    • Actions 窗格中,点 Add。此时会出现 Add ISAPI Filter 窗口。
    • Add ISAPI Filter 窗口中指定以下值:

      • 过滤器名称jboss
      • 可执行:C:\connectors\isapi_redirect.dll
    • OK 保存值并关闭 Add ISAPI Filters 窗口。
  9. 启用 ISAPI-dll 处理程序

    • 双击树视图窗格中的framework 7 项。CNO 7 Home Features View 将打开。
    • 双击处理程序 映射。此时会出现 处理程序映射功能 视图。
    • Group by bo 框中,选择 State。处理程序 映射 显示在 Enabled 和 Disabled Groups 中。
    • 查找 ISAPI-dll。如果它位于 Disabled 组中,请右键单击它,然后选择 Edit Feature Permissions
    • 启用以下权限:

      • 脚本
      • 执行
    • OK 保存这些值,并关闭 Edit Feature Permissions 窗口。

Microsoft IIS 现在配置为使用 ISAPI 连接器。

22.9.2. 配置 ISAPI Connector 以向 JBoss EAP 发送客户端请求

此任务配置一组 JBoss EAP 服务器,以接受来自 ISAPI 连接器的请求。它不包括负载平衡或高可用性故障转移的配置。

此配置在 QPC 服务器上完成,假设您已将 JBoss EAP 配置为接受来自外部 Web 服务器 的请求。您还需要完全的管理员访问权限,并且需要将 RuntimeClass 配置为使用 ISAPI 连接器

创建属性文件并设置重定向
  1. 创建用于存储日志、属性文件和锁定文件的目录。

    此流程的其余部分假定您正在将目录 C:\connectors\ 用于此目的。如果您使用其他目录,请相应地修改指令。

  2. 创建 isapi_redirect.properties 文件。

    创建名为 C:\connectors\isapi_redirect.properties 的新文件。将以下内容复制到 文件中。

    # Configuration file for the ISAPI Connector
    # Extension uri definition
    extension_uri=/jboss/isapi_redirect.dll
    
    # Full path to the log file for the ISAPI Connector
    log_file=c:\connectors\isapi_redirect.log
    
    # Log level (debug, info, warn, error or trace)
    log_level=info
    
    # Full path to the workers.properties file
    worker_file=c:\connectors\workers.properties
    
    # Full path to the uriworkermap.properties file
    worker_mount_file=c:\connectors\uriworkermap.properties
    
    #Full path to the rewrite.properties file
    rewrite_rule_file=c:\connectors\rewrite.properties

    如果您不想使用 rewrite.properties 文件,请通过在行首放置一个 ; 字符来注释掉最后一行。

  3. 创建 uriworkermap.properties 文件

    uriworkermap.properties 文件包含部署的应用程序 URL 和 worker 处理请求之间的映射。以下示例文件显示了 文件的语法。将 uriworkermap.properties 文件放在 C:\connectors\ 中。

    # images and css files for path /status are provided by worker01
    /status=worker01
    /images/*=worker01
    /css/*=worker01
    
    # Path /web-console is provided by worker02
    # IIS (customized) error page is used for http errors with number greater or equal to 400
    # css files are provided by worker01
    /web-console/*=worker02;use_server_errors=400
    /web-console/css/*=worker01
    
    # Example of exclusion from mapping, logo.gif won't be displayed
    # /web-console/images/logo.gif=*
    
    # Requests to /app-01 or /app-01/something will be routed to worker01
    /app-01|/*=worker01
    
    # Requests to /app-02 or /app-02/something will be routed to worker02
    /app-02|/*=worker02
  4. 创建 worker.properties 文件。

    worker.properties 文件包含 worker 标签和服务器实例之间的映射定义。此文件遵循用于 Apache mod_jk worker 属性 配置的相同文件的语法。

    以下是 workers.properties 文件示例。worker 名称 worker01worker02 必须与 JBoss EAP undertow 子系统中配置的 instance-id 匹配。

    将此文件放在 C:\connectors\ 目录中。

    # An entry that lists all the workers defined
    worker.list=worker01, worker02
    
    # Entries that define the host and port associated with these workers
    
    # First JBoss EAP server definition, port 8009 is standard port for AJP in EAP
    worker.worker01.host=127.0.0.1
    worker.worker01.port=8009
    worker.worker01.type=ajp13
    
    # Second JBoss EAP server definition
    worker.worker02.host=127.0.0.100
    worker.worker02.port=8009
    worker.worker02.type=ajp13
  5. 创建 rewrite.properties 文件。

    rewrite.properties 文件包含特定应用程序的简单 URL 重写规则。重写的路径使用 name-value 对来指定,如下例所示。将此文件放在 C:\connectors\ 目录中。

    #Simple example
    # Images are accessible under abc path
    /app-01/abc/=/app-01/images/
  6. 使用 net stopnet start 命令重启您的 QPC 服务器。

    C:\> net stop was /Y
    C:\> net start w3svc

QPC 服务器被配置为根据特定应用将客户端请求发送到您配置的特定 JBoss EAP 服务器。

22.9.3. 将 ISAPI Connector 配置为跨多个 JBoss EAP 服务器的 Balance 客户端请求

此配置会在您指定的 JBoss EAP 服务器之间平衡客户端请求。此配置在 QPC 服务器上完成,假设您已将 JBoss EAP 配置为接受来自外部 Web 服务器 的请求。您还需要完全的管理员访问权限,并且需要将 RuntimeClass 配置为使用 ISAPI 连接器

跨多个服务器平衡客户端请求
  1. 创建用于存储日志、属性文件和锁定文件的目录。

    此流程的其余部分假定您正在将目录 C:\connectors\ 用于此目的。如果您使用其他目录,请相应地修改指令。

  2. 创建 isapi_redirect.properties 文件。

    创建名为 C:\connectors\isapi_redirect.properties 的新文件。将以下内容复制到 文件中。

    # Configuration file for the ISAPI Connector
    # Extension uri definition
    extension_uri=/jboss/isapi_redirect.dll
    
    # Full path to the log file for the ISAPI Connector
    log_file=c:\connectors\isapi_redirect.log
    
    # Log level (debug, info, warn, error or trace)
    log_level=info
    
    # Full path to the workers.properties file
    worker_file=c:\connectors\workers.properties
    
    # Full path to the uriworkermap.properties file
    worker_mount_file=c:\connectors\uriworkermap.properties
    
    #OPTIONAL: Full path to the rewrite.properties file
    rewrite_rule_file=c:\connectors\rewrite.properties

    如果您不想使用 rewrite.properties 文件,请通过在行首放置一个 ; 字符来注释掉最后一行。

  3. 创建 uriworkermap.properties 文件。

    uriworkermap.properties 文件包含部署的应用程序 URL 和 worker 处理请求之间的映射。以下示例文件显示了文件的语法,其具有负载均衡的配置。通配符(*)字符将各种 URL 子目录的所有请求发送到名为 router 的负载均衡器。下一步中涵盖了负载均衡器的配置。

    uriworkermap.properties 文件放在 C:\connectors\ 中。

    # images, css files, path /status and /web-console will be
    # provided by nodes defined in the load-balancer called "router"
    /css/*=router
    /images/*=router
    /status=router
    /web-console|/*=router
    
    # Example of exclusion from mapping, logo.gif won't be displayed
    # /web-console/images/logo.gif=*
    
    # Requests to /app-01 and /app-02 will be routed to nodes defined
    # in the load-balancer called "router"
    /app-01|/*=router
    /app-02|/*=router
    
    # mapping for management console, nodes in cluster can be enabled or disabled here
    /jkmanager|/*=status
  4. 创建 worker.properties 文件。

    worker.properties 文件包含 worker 标签和服务器实例之间的映射定义。此文件遵循用于 Apache mod_jk worker 属性 配置的相同文件的语法。

    以下是 workers.properties 文件示例。负载均衡器在文件的末尾配置,使其包含 worker worker01worker02。这些 worker 名称必须与 JBoss EAP undertow 子系统中配置的 instance-id 匹配。

    将此文件放在 C:\connectors\ 目录中。

    # The advanced router LB worker
    worker.list=router,status
    
    # First EAP server definition, port 8009 is standard port for AJP in EAP
    #
    # lbfactor defines how much the worker will be used.
    # The higher the number, the more requests are served
    # lbfactor is useful when one machine is more powerful
    # ping_mode=A – all possible probes will be used to determine that
    # connections are still working
    
    worker.worker01.port=8009
    worker.worker01.host=127.0.0.1
    worker.worker01.type=ajp13
    worker.worker01.ping_mode=A
    worker.worker01.socket_timeout=10
    worker.worker01.lbfactor=3
    
    # Second EAP server definition
    worker.worker02.port=8009
    worker.worker02.host=127.0.0.100
    worker.worker02.type=ajp13
    worker.worker02.ping_mode=A
    worker.worker02.socket_timeout=10
    worker.worker02.lbfactor=1
    
    # Define the LB worker
    worker.router.type=lb
    worker.router.balance_workers=worker01,worker02
    
    # Define the status worker for jkmanager
    worker.status.type=status

  5. 创建 rewrite.properties 文件。

    rewrite.properties 文件包含特定应用程序的简单 URL 重写规则。重写的路径使用 name-value 对来指定,如下例所示。将此文件放在 C:\connectors\ 目录中。

    #Simple example
    # Images are accessible under abc path
    /app-01/abc/=/app-01/images/
    Restart the IIS server.
    
    Restart your IIS server by using the net stop and net start commands.
    C:\> net stop was /Y
    C:\> net start w3svc

QPC 服务器被配置为将客户端请求发送到 workers.properties 文件中引用的 JBoss EAP 服务器,以 1:3 比例在服务器间分散负载。此比率源自分配给每台服务器的负载平衡因素(lbfactor)。

22.10. Oracle NSAPI Connector

Netscape Server API (NSAPI)是由 Oracle iPlanet Web 服务器(以前为 Netscape Web Server)提供的 API,用于为服务器实施扩展。这些扩展称为服务器插件。NSAPI 连接器在 nsapi_redirector.so 中使用,它是 mod_jk 调整到 Oracle iPlanet Web 服务器的扩展。NSAPI 连接器允许您将 JBoss EAP 实例配置为 worker 节点,并将 Oracle iPlanet Web Server 配置为负载均衡器。

注意

有关 Solaris 和 Oracle iPlanet Web 服务器支持的配置的信息,请参阅 JBoss EAP 支持的配置

22.10.1. 将 Oracle iPlanet Web Server 配置为使用 NSAPI Connector

先决条件

  • JBoss EAP 在充当工作程序的每个服务器上安装和配置。

从红帽客户门户网站下载 NSAPI 连接器:

  1. 打开浏览器并登录到红帽客户门户网站 JBoss Software Downloads 页面
  2. 在产品 下拉菜单中选择 Web Connectors
  3. Version 下拉菜单中选择最新的 JBoss Core Services 版本。
  4. 在列表中找到 Red Hat JBoss Core Services NSAPI Connector,确保为您的系统选择正确的平台和架构,然后点 Download 链接。
  5. 将位于 lib/lib64/ 目录的 nsapi_redirector.so 文件提取到 IPLANET_CONFIG/lib/IPLANET_CONFIG/lib/ 目录中。

设置 NSAPI 连接器:

注意

在这些说明中,IPLANET_CONFIG 指的是 Oracle iPlanet 配置目录,此目录通常是 /opt/oracle/webserver7/config/。如果您的 Oracle iPlanet 配置目录不同,请相应地修改说明。

  1. 禁用 servlet 映射。

    打开 IPLANET_CONFIG/default.web.xml 文件,找到带有 Built In Server Mappings 标题的部分。通过将其嵌套在 XML 注释字符( <!---->)中,禁用到以下三个 servlet 的映射。

    • default
    • invoker
    • jsp

      以下示例配置显示禁用的映射。

      <!-- ============== Built In Servlet Mappings =============== -->
      <!-- The servlet mappings for the built in servlets defined above. -->
      <!-- The mapping for the default servlet -->
      <!--servlet-mapping>
       <servlet-name>default</servlet-name>
       <url-pattern>/</url-pattern>
      </servlet-mapping-->
      <!-- The mapping for the invoker servlet -->
      <!--servlet-mapping>
       <servlet-name>invoker</servlet-name>
       <url-pattern>/servlet/*</url-pattern>
      </servlet-mapping-->
      <!-- The mapping for the JSP servlet -->
      <!--servlet-mapping>
       <servlet-name>jsp</servlet-name>
       <url-pattern>*.jsp</url-pattern>
      </servlet-mapping-->

      保存并退出文件。

  2. 配置 iPlanet Web 服务器以加载 NSAPI 连接器模块。

    将以下行添加到 IPLANET_CONFIG/magnus.conf 文件的末尾,修改要适合您的配置的文件路径。这些行定义 nsapi_redirector.so 模块的位置,以及 worker.properties 文件,该文件列出了 worker 及其属性。

    Init fn="load-modules" funcs="jk_init,jk_service" shlib="/lib/nsapi_redirector.so" shlib_flags="(global|now)"
    
    Init fn="jk_init" worker_file="IPLANET_CONFIG/connectors/workers.properties" log_level="info" log_file="IPLANET_CONFIG/connectors/nsapi.log" shm_file="IPLANET_CONFIG/connectors/tmp/jk_shm"

    以上配置适用于 32 位构架。如果您使用 64 位 Solaris,请将字符串 lib/nsapi_redirector.so 更改为 lib64/nsapi_redirector.so

    保存并退出文件。

  3. 配置 NSAPI 连接器。

    您可以为基本配置配置 NSAPI 连接器,没有负载均衡或负载平衡配置。选择以下选项之一,之后您的配置将完成。

22.10.2. 配置 NSAPI Connector 以向 JBoss EAP 发送客户端请求

此任务配置 NSAPI 连接器,将客户端请求重定向到没有负载均衡或故障转移的 JBoss EAP 服务器。重定向基于每个部署(因此每个 URL)进行。

重要

您必须 已经配置了 NSAPI 连接器,然后才能继续此任务。

设置基本 HTTP Connector
  1. 定义重定向到 JBoss EAP 服务器的 URL 路径。

    注意

    IPLANET_CONFIG/obj.conf 中,行首不允许使用空格,除非行是前一行的延续。

    编辑 IPLANET_CONFIG/obj.conf 文件。找到以 < Object name="default"& gt; 开头的部分,并添加要匹配的每个 URL 模式,格式为以下示例文件。字符串 jknsapi 指的是 HTTP 连接器,该连接器将在下一步中定义。示例中显示了使用通配符进行模式匹配。

    <Object name="default">
    [...]
    NameTrans fn="assign-name" from="/status" name="jknsapi"
    NameTrans fn="assign-name" from="/images(|/*)" name="jknsapi"
    NameTrans fn="assign-name" from="/css(|/*)" name="jknsapi"
    NameTrans fn="assign-name" from="/nc(|/*)" name="jknsapi"
    NameTrans fn="assign-name" from="/jmx-console(|/*)" name="jknsapi"
    </Object>
  2. 定义提供每个路径的 worker。

    继续编辑 IPLANET_CONFIG/obj.conf 文件。在您刚刚完成编辑的部分的关闭标签后直接添加以下内容:</ Object>

    <Object name="jknsapi">
    ObjectType fn=force-type type=text/plain
    Service fn="jk_service" worker="worker01" path="/status"
    Service fn="jk_service" worker="worker02" path="/nc(/*)"
    Service fn="jk_service" worker="worker01"
    </Object>

    上面的示例将请求重定向到名为 worker01 的 worker 路径 /status,并将 /nc/ 下的所有 URL 路径重定向到名为 worker02 的 worker。第三行表示分配给 jknsapi 对象的所有 URL 与上一行不匹配的所有 URL 都提供给 worker01

    保存并退出文件。

  3. 定义 worker 及其属性。

    IPLANET_CONFIG/connectors/ 目录中创建一个名为 worker.properties 的文件。将以下内容粘贴到 文件中,并将其修改为适合您的环境。

    # An entry that lists all the workers defined
    worker.list=worker01, worker02
    
    # Entries that define the host and port associated with these workers
    worker.worker01.host=127.0.0.1
    worker.worker01.port=8009
    worker.worker01.type=ajp13
    
    worker.worker02.host=127.0.0.100
    worker.worker02.port=8009
    worker.worker02.type=ajp13

    worker.properties 文件使用与 Apache mod_jk 相同的语法。

    保存并退出文件。

  4. 重启 iPlanet Web 服务器

    发出以下命令以重新启动 iPlanet Web 服务器。

    IPLANET_CONFIG/../bin/stopserv
    IPLANET_CONFIG/../bin/startserv

iPlanet Web 服务器现在将客户端请求发送到您在 JBoss EAP 上进行部署的 URL。

22.10.3. 将 NSAPI Connector 配置为跨多个 JBoss EAP 服务器的 Balance 客户端请求

此任务配置 NSAPI 连接器,以在负载平衡配置中将客户端请求发送到 JBoss EAP 服务器。

重要

您必须 已经配置了 NSAPI 连接器,然后才能继续此任务。

为负载平衡配置连接器
  1. 定义重定向到 JBoss EAP 服务器的 URL 路径。

    注意

    IPLANET_CONFIG/obj.conf 中,行首不允许使用空格,除非行是前一行的延续。

    编辑 IPLANET_CONFIG/obj.conf 文件。找到以 < Object name="default"& gt; 开头的部分,并添加要匹配的每个 URL 模式,格式为以下示例文件。字符串 jknsapi 指的是将在下一步中定义的 HTTP 连接器。示例中显示了使用通配符进行模式匹配。

    <Object name="default">
    [...]
    NameTrans fn="assign-name" from="/status" name="jknsapi"
    NameTrans fn="assign-name" from="/images(|/*)" name="jknsapi"
    NameTrans fn="assign-name" from="/css(|/*)" name="jknsapi"
    NameTrans fn="assign-name" from="/nc(|/*)" name="jknsapi"
    NameTrans fn="assign-name" from="/jmx-console(|/*)" name="jknsapi"
    NameTrans fn="assign-name" from="/jkmanager/*" name="jknsapi"
    </Object>
  2. 定义提供每个路径的 worker。

    继续编辑 IPLANET_CONFIG/obj.conf 文件。直接在您在上一步中修改的部分的右标签(</Object>)后,添加以下新部分并将其修改为您的需要:

    <Object name="jknsapi">
    ObjectType fn=force-type type=text/plain
    Service fn="jk_service" worker="status" path="/jkmanager(/*)"
    Service fn="jk_service" worker="router"
    </Object>

    这个 jksnapi 对象定义了用于为 默认 对象中映射到 name="jksnapi" 映射的每个路径的 worker 节点。除与 /jkmanagerAttr 匹配的 URL 外的所有内容都会被重定向到名为 路由器 的 worker。

  3. 定义 worker 及其属性。

    IPLANET_CONFIG/connector/ 中创建一个名为 worker.properties 的文件。将以下内容粘贴到 文件中,并将其修改为适合您的环境。

    # The advanced router LB worker
    # A list of each worker
    worker.list=router,status
    
    # First JBoss EAP server
    # (worker node) definition.
    # Port 8009 is the standard port for AJP
    #
    
    worker.worker01.port=8009
    worker.worker01.host=127.0.0.1
    worker.worker01.type=ajp13
    worker.worker01.ping_mode=A
    worker.worker01.socket_timeout=10
    worker.worker01.lbfactor=3
    
    # Second JBoss EAP server
    worker.worker02.port=8009
    worker.worker02.host=127.0.0.100
    worker.worker02.type=ajp13
    worker.worker02.ping_mode=A
    worker.worker02.socket_timeout=10
    worker.worker02.lbfactor=1
    
    # Define the load-balancer called "router"
    worker.router.type=lb
    worker.router.balance_workers=worker01,worker02
    
    # Define the status worker
    worker.status.type=status

    worker.properties 文件使用与 Apache mod_jk 相同的语法。

    保存并退出文件。

  4. 重启 iPlanet Web Server 7.0。

    IPLANET_CONFIG/../bin/stopserv
    IPLANET_CONFIG/../bin/startserv

iPlanet Web 服务器将 URL 模式重定向到您在负载平衡配置中配置的 JBoss EAP 服务器。

附录 A. 参考资料

A.1. 服务器运行时参数

应用服务器启动脚本在运行时接受参数和交换机。这允许服务器在 standalone.xmldomain.xmlhost.xml 配置文件中定义的配置的替代配置下启动。

其他配置可能包括启动服务器,并设置替代套接字绑定或辅助配置。

可以通过在启动时传递帮助开关 -h--help 来访问可用的参数列表。

表 A.1. 运行时的参数

参数操作模式描述

--admin-only

独立模式

将服务器的运行类型设置为 ADMIN_ONLY。这将导致它打开管理接口并接受管理请求,但不能启动其他运行时服务或接受最终用户请求。

--admin-only

将主机控制器的运行类型设置为 ADMIN_ONLY,导致它打开管理接口并接受管理请求,但不启动服务器;如果此主机控制器是域的主设备,则接受从属主机控制器的传入连接。

-b=<value>, -b <value>

独立,域

设置系统属性 jboss.bind.address,用于为公共接口配置绑定地址。如果未指定值,则默认为 127.0.0.1。有关为其他接口设置绑定地址,请参阅 -b<interface>=<value > 条目。

-b<interface>=<value>

独立,域

将系统属性 jboss.bind.address.<interface> 设置为给定值。例如,-bmanagement=IP_ADDRESS

--backup

即使此主机不是域控制器,也保留永久域配置的副本。

-c=<config>, -c <config>

独立模式

要使用的服务器配置文件的名称。默认值为 standalone.xml

-c=<config>, -c <config>

要使用的服务器配置文件的名称。默认值为 domain.xml

--cached-dc

如果主机不是域控制器,并且无法在引导时联系域控制器,则使用域配置的本地缓存副本引导。

--debug [<port>]

独立模式

使用可选参数激活调试模式以指定端口。只有启动脚本支持时才起作用。

-D<name>[=<value>]

独立,域

设置系统属性。

--domain-config=<config>

要使用的服务器配置文件的名称。默认值为 domain.xml

-h, --help

独立,域

显示帮助消息并退出。

--host-config=<config>

要使用的主机配置文件的名称。默认值为 host.xml

--interprocess-hc-address=<address>

主机控制器应侦听进程控制器通信的地址。

--interprocess-hc-port=<port>

主机控制器应侦听进程控制器通信的端口。

--master-address=<address>

将系统属性 jboss.domain.master.address 设置为给定的值。在默认的 slave 主机控制器配置中,这用于配置 master 主机控制器的地址。

--master-port=<port>

将系统属性 jboss.domain.master.port 设置为给定的值。在默认的从属主机控制器配置中,这用于配置供 master 主机控制器用于原生管理通信的端口。

--read-only-server-config=<config>

独立模式

要使用的服务器配置文件的名称。这与 --server-config-c 不同,原始文件不会被覆盖。

--read-only-domain-config=<config>

要使用的域配置文件的名称。这与 --domain-config-c 不同,因为初始文件不会被覆盖。

--read-only-host-config=<config>

要使用的主机配置文件的名称。这与 --host-config 的不同之处在于,初始文件永远不会被覆盖。

-P=<url>, -P <url>, --properties=<url>

独立,域

从指定的 URL 加载系统属性。

--pc-address=<address>

进程控制器侦听来自其控制的进程的通信的地址。

--pc-port=<port>

进程控制器在其上侦听其控制进程的通信的端口。

-S<name>[=<value>]

独立模式

设置安全属性。

-secmgr

独立,域

运行安装有安全管理器的服务器。

--server-config=<config>

独立模式

要使用的服务器配置文件的名称。默认值为 standalone.xml

-u=<value>, -u <value>

独立,域

设置系统属性 jboss.default.multicast.address,用于在配置文件中的 socket-binding 元素中配置多播地址。如果没有指定值,则默认为 230.0.0.4

-v, -V, --version

独立,域

显示应用服务器版本并退出。

警告

JBoss EAP 附带的配置文件已设置为处理交换机的行为,例如 -b-u。如果您将配置文件更改为不再使用交换机控制的系统属性,那么将其添加到启动命令将无效。

A.2. RPM 服务配置文件

与 ZIP 或安装程序安装相比,JBoss EAP 的 RPM 安装包括两个额外的配置文件。服务初始化脚本使用这些文件来指定 JBoss EAP 启动环境。这些服务配置文件的位置因 Red Hat Enterprise Linux 6 和 Red Hat Enterprise Linux 7 有所不同。

重要

对于 Red Hat Enterprise Linux 7,RPM 服务配置文件使用 systemd 加载,因此不会扩展变量表达式。

表 A.2. Red Hat Enterprise Linux 6 的 RPM 配置文件

File描述

/etc/sysconfig/eap7-standalone

特定于 Red Hat Enterprise Linux 6 上的独立 JBoss EAP 服务器的设置。

/etc/sysconfig/eap7-domain

特定于 JBoss EAP 的设置,作为受管域在 Red Hat Enterprise Linux 6 上运行。

表 A.3. Red Hat Enterprise Linux 7 的 RPM 配置文件

File描述

/etc/opt/rh/eap7/wildfly/eap7-standalone.conf

特定于 Red Hat Enterprise Linux 7 中独立 JBoss EAP 服务器的设置。

/etc/opt/rh/eap7/wildfly/eap7-domain.conf

特定于 JBoss EAP 的设置,作为受管域在 Red Hat Enterprise Linux 7 上运行。

A.3. RPM 服务配置属性

下表显示了 JBoss EAP RPM 服务及其默认值的可用配置属性列表。

注意

如果属性在两个 RPM 服务配置文件中具有相同的名称(例如,/etc/sysconfig/eap7-standalone)和 JBoss EAP 启动配置文件(如 EAP_HOME/bin/standalone.conf),则优先的值是 JBoss EAP 启动配置文件中的值。一个这样的属性是 JAVA_HOME

表 A.4. RPM 服务配置属性

属性描述

JAVA_HOME

安装 Java Runtime Environment 的目录。

默认值: /usr/lib/jvm/jre

JAVAPTH

安装 Java 可执行文件的路径。

默认值 :$JAVA_HOME/bin

WILDFLY_STARTUP_WAIT

初始化脚本将等待的秒数,直到确认服务器在收到 start 或 restart 命令后成功启动。此属性只适用于 Red Hat Enterprise Linux 6。

默认值: 60

WILDFLY_SHUTDOWN_WAIT

初始化脚本将等待服务器关闭的秒数,然后再收到 stop 或 restart 命令。此属性只适用于 Red Hat Enterprise Linux 6。

默认值 :20

WILDFLY_CONSOLE_LOG

CONSOLE 日志处理程序将重定向到的文件。

默认值:受管域的 /var/opt/rh/eap7/log/wildfly/standalone/console.log,或受管域的 /var/opt/rh/eap7/log/wildfly/domain/console.log

WILDFLY_SH

用于启动 JBoss EAP 服务器的脚本。

默认值: /opt/rh/eap7/root/usr/share/wildfly/bin/standalone.sh 用于独立服务器,或 /opt/rh/eap7/root/usr/share/wildfly/bin/domain.sh 用于受管域。

WILDFLY_SERVER_CONFIG

要使用的服务器配置文件。

此属性没有默认值。standalone.xmldomain.xml 可在启动时定义。

WILDFLY_HOST_CONFIG

对于受管域,此属性允许用户指定主机配置文件(如 host.xml)。它没有设置默认值。

WILDFLY_MODULEPATH

JBoss EAP 模块目录的路径。

默认值: /opt/rh/eap7/root/usr/share/wildfly/modules

WILDFLY_BIND

设置 jboss.bind.address 系统属性,用于为公共接口配置绑定地址。如果没有指定值,则默认为 0.0.0.0

A.4. JBoss EAP 子系统概述

下表简要介绍了 JBoss EAP 子系统。

表 A.5. JBoss EAP 子系统

JBoss EAP 子系统描述

batch-jberet

配置用于运行批处理应用的环境 并管理批处理作业

bean-validation

配置 bean 验证,以验证 Java 对象数据。

数据源

创建并配置 数据源,并管理 JDBC 数据库驱动程序

deployment-scanner

配置 部署扫描程序,以监控要部署的应用程序的特定位置。

ee

在 Java EE 平台中配置常见功能,如定义 全局模块、启用 基于描述符的属性替换 和配置默认绑定。

ejb3

配置企业 3.0.0 (EJB),包括会话和消息驱动的 Bean。

有关 ejb3 子系统的更多信息,请参阅为 JBoss EAP 开发 EJB 应用

iiop-openjdk

为 JTS 事务和其他 ORB 服务配置通用对象请求代理架构(CORBA)服务,包括安全性。在 JBoss EAP 6 中,此功能包含在 jacorb 子系统中。

Infinispan

为 JBoss EAP 高可用性服务配置缓存功能。???

io

定义供其他子系统使用的 worker缓冲区池

jaxrs

启用 JAX-RS 应用的部署和功能。

jca

配置 Java EE Connector 架构(JCA)容器和资源适配器 部署的一般设置。

jdr

启用诊断数据来收集,以帮助进行故障排除。JBoss EAP 订阅者可在请求支持时向红帽提供此信息。

jgroups

配置协议堆栈和集群中服务器如何 相互通信的机制

jmx

配置远程 Java 管理扩展(JMX)访问。

jpa

管理 Java Persistence API (diag) 2.1 容器管理要求,并允许您部署永久单元定义、注释和描述符。

有关 jpa 子系统的更多信息,请参阅 JBoss EAP 开发指南

jsf

管理 JavaServer Faces (JSF)实施。

jsr77

提供由 JSR-77 规范定义的 Java EE 管理功能。

logging

通过日志类别和日志处理程序的系统配置系统和应用程序级日志记录。??? ???

mail

配置 邮件服务器属性 和自定义邮件传输,以创建邮件服务,允许部署到 JBoss EAP 的应用使用该服务发送邮件。

messaging-activemq

配置 JMS 目的地、连接工厂和其他 Artemis 设置,这是集成的消息传递提供程序。在 JBoss EAP 6 中,消息传递功能包含在 messaging 子系统中。

有关 messaging-activemq 子系统的更多信息,请参阅为 JBoss EAP 配置消息传递。 https://access.redhat.com/documentation/zh-cn/red_hat_jboss_enterprise_application_platform/7.0/html-single/configuring_messaging/

modcluster

配置服务器端 mod_cluster worker 节点

命名

将条目绑定到全局 JNDI 命名空间,并配置远程 JNDI 接口。

PicketLink-federation

配置基于 PicketLink SAML 的单点登录(SSO)。

如需有关 picketlink-federation 子系统的更多信息,请参阅如何为 JBoss EAP 设置使用 SAML v2 的 SSO

picketlink-identity-management

配置 PicketLink 身份管理服务。这个子系统不受支持。

POJO

启用部署包含 JBoss Microcontainer 服务的应用程序,如旧版 JBoss EAP 支持。

远程

本地和远程服务配置 入站和出站连接的设置。

request-controller

配置设置以正常 暂停和关闭服务器

resource-adapters

配置和维护 资源适配器,以便使用 Java 连接器架构(JCA)规范在 Java EE 应用程序和企业信息系统(EIS)之间的通信。

rts

不支持实施 REST-AT。

aars

启用包含 MBean 服务的 SAR 存档部署,如旧版 JBoss EAP 支持。

安全

配置应用安全设置。

有关 security 子系统的更多信息,请参阅 JBoss EAP 的 安全架构

security-manager

配置 Java 安全策略供 Java 安全管理器使用。

有关 security-manager 子系统的更多信息,请参阅如何为 JBoss EAP 配置服务器安全性

单例

定义单例策略,以配置单例部署的行为或创建单例 MSC 服务。

有关 singleton 子系统的更多信息,请参阅 JBoss EAP 开发指南

Transactions

配置 事务管理器选项,如超时值、事务日志记录以及使用 Java 事务服务(JTS)。

undertow

配置 JBoss EAP 的 Web 服务器和 servlet 容器设置。在 JBoss EAP 6 中,此功能包含在 web 子系统中。

webservices

配置公布的端点地址和端点处理器链,以及 Web 服务提供程序的主机名、端口和 WSDL 地址。

有关 webservices 子系统的更多信息,请参阅 为 JBoss EAP 开发 Web 服务应用

weld

为 JBoss EAP 配置上下文和依赖注入(CDI)功能。

xts

配置在事务中协调 Web 服务的设置。

A.5. 附加用户实用程序参数

下表描述了适用于 add-user.shadd-user.bat 脚本的参数,它是将新用户添加到用于开箱即用身份验证的属性文件中的实用程序。

表 A.6. 附加用户命令参数

命令行参数描述

-a

在应用域中创建用户。如果省略,则默认设置是在管理域中创建用户。

-dc <value>

包含属性文件的域配置目录。如果省略,默认目录为 EAP_HOME/domain/configuration/

-sc <value>

将包含属性文件的替代单机服务器配置目录。如果省略,默认目录为 EAP_HOME/standalone/configuration/

-up, --user-properties <value>

备用用户属性文件的名称。它可以是绝对路径,也可以是与 -sc-dc 参数一起使用的文件名,该参数指定替代配置目录。

-g, --group <value>

要分配给此用户的组的逗号分隔列表。

-gp, --group-properties <value>

备用组属性文件的名称。它可以是绝对路径,也可以是与 -sc-dc 参数一起使用的文件名,该参数指定替代配置目录。

-p, --password <value>

用户的密码。

-u, --user <value>

用户名称。只有字母数字字符和以下符号有效: ,./=@\.

-r, --realm <value>

用于保护管理接口的域名称。如果省略,默认值为 ManagementRealm

-s, --silent

运行对控制台不带输出的 add-user 脚本。

-e, --enable

启用用户。

-d, --disable

禁用用户。

-cw, --confirm-warning

以交互模式自动确认警告。

-h, --help

显示 add-user 脚本的使用信息。

A.6. 管理审计日志记录属性

表 A.7. 日志记录器属性

属性描述

enabled

是否启用审计日志记录。

log-boot

是否应在服务器引导时记录操作。

log-read-only

是否应该记录没有修改配置的操作,或任何运行时服务都应该被记录。

表 A.8. 日志格式器属性

属性描述

compact

如果为 true,它将在一行中格式化 JSON。可能仍然存在包含新行的值,因此如果使整个记录在一行中都很重要,则将 escape-new-lineescape-control-characters 设置为 true

date-format

java.text.SimpleDateFormat 理解的日期格式。如果将 include-date 设为 false,则忽略此选项。

date-separator

日期与格式化日志消息的其余部分之间的分隔符。如果将 include-date 设为 false,则忽略此选项。

escape-control-characters

如果为 true,它将使用八进制的 ASCII 代码转义所有控制字符(ASCII 条目,其十进制值大于 32)。例如,新行将变为 #012。如果为 true这将覆盖 escape-new-line=false

escape-new-line

如果为 true,它将使用八进制的 ASCII 代码转义所有新行:{0 12

include-date

是否在格式化的日志记录中包含日期。

表 A.9. 文件处理程序属性

属性描述

disabled-due-to-failure

此处理程序是否因为日志记录失败而被禁用(只读)。

failure-count

由于处理程序已初始化以来,日志记录失败的数量(只读)。

formatter

用于格式化日志消息的 JSON 格式器。

max-failure-count

禁用此处理程序前的最大日志记录失败数。

path

审计日志文件的路径。

relative-to

之前命名的路径的名称,或者系统提供的其中一个标准路径。如果提供了 relative-topath 属性的值将被视为相对于此属性指定的路径。

表 A.10. syslog Handler 属性

属性描述

app-name

要添加到 RFC-5424 第 6.2.5 节中定义的 syslog 记录的应用程序名称。如果未指定,它将默认为产品的名称。

disabled-due-to-failure

此处理程序是否因为日志记录失败而被禁用(只读)。

facility

RFC-5424 第 6.2.1 节中定义的 syslog 日志记录功能以及 RFC-3164 的 4.1.1 部分。

failure-count

由于处理程序已初始化以来,日志记录失败的数量(只读)。

formatter

用于格式化日志消息的 JSON 格式器。

max-failure-count

禁用此处理程序前的最大日志记录失败数。

max-length

允许日志消息(包括标头)的最大长度(以字节为单位)。如果未定义,如果 syslog-formatRFC3164,则默认为 1024 字节,如果 syslog-formatRFC5424,则默认为 2048 字节。

protocol

用于 syslog 处理程序的协议。必须是 udptcptls 之一。

syslog-format

syslog 格式: RFC5424RFC3164

truncate

如果长度大于 max-length 属性的值,则是否包含截断消息(包括标头)。如果设置为 false,则消息将被分割并使用相同的标头值发送。

注意

syslog 服务器在实施中有所不同,因此并非所有设置都适用于所有 syslog 服务器。使用 rsyslog syslog 实现进行了测试。

此表仅列出高级别属性。每个属性具有配置参数,另一些则包含子配置参数。

A.7. 接口属性

表 A.11. 接口属性和值

接口元素描述

any

表明接口选择条件的部分内容应当是它至少满足一组嵌套条件,但不一定全部满足。

any-address

表示使用此接口的套接字应绑定到通配符地址的空元素。将使用 IPv6 通配符地址(::),除非 java.net.preferIPv4Stack 系统属性设为 true,否则将使用 IPv4 通配符地址(0.0.0.0)。如果套接字绑定到双栈计算机上的 IPv6 任意本地地址,则它可以接受 IPv6 和 IPv4 通信;如果套接字绑定到 IPv4(IPv4 映射)本地地址,则它只能接受 IPv4 流量。

inet-address

IPv6 或 IPv4 中的 IP 地址增量十进制表示法,或者解析为 IP 地址的主机名。

link-local-address

表示接口的部分选择条件的空元素应当是与其关联的地址是否为本地链接。

loopback

表明接口的部分选择条件的空元素应该是它是否为环回接口。

loopback-address

可能不会在计算机的回环接口上实际配置的环回地址。与 inet-address 类型不同,即使找不到具有与其关联的 IP 地址的 NIC,也会使用给定值。

multicast

表明接口选择条件的部分空白元素应该是它是否支持多播。

nic

网络接口的名称(如 eth0、eth1、lo)。

nic-match

一个正则表达式,可以匹配计算机上可用的网络接口名称来查找可接受的接口。

not

表明接口选择条件的部分元素应当是它不符合任何嵌套条件集。

point-to-point

表明接口的部分选择条件的空元素应该是它是否为点对点接口。

public-address

表示接口的部分选择条件的空元素应当是它是否具有可公开路由的地址。

site-local-address

表示接口的部分选择条件为与它关联的地址是否本地的空元素。

subnet-match

斜杠表示法编写的网络 IP 地址和地址网络前缀中的位数 (如 192.168.0.0/16)。

up

表示接口选择条件的部分为空的元素应当是当前是否启动。

virtual

表示接口的部分选择条件的空元素应当是它是否为虚拟接口。

A.8. 套接字绑定属性

表 A.12. 套接字绑定属性

属性描述

client-mappings

指定此套接字绑定的客户端映射。连接到此套接字的客户端应使用与所需的出站接口匹配的映射中指定的目标地址。这允许使用网络地址转换或绑定多个网络接口的高级网络拓扑。每个映射应当按照声明的顺序进行评估,第一个成功匹配项用于确定目的地。

fixed-port

即使将数值偏移应用到套接字组中的其他套接字,端口值是否应保持固定。

interface

套接字应绑定到的接口名称,或者对于多播套接字,则为它应侦听的接口。这应该是声明的接口之一。如果未定义,则将使用括起套接字绑定组中 default-interface 属性的值。

multicast-address

套接字应接收多播流量的多播地址。如果未指定,套接字将不会配置为接收多播。

multicast-port

套接字应接收多播流量的端口。如果配置了 'multicast-address',则必须配置。

name

套接字的名称。需要访问套接字配置信息的服务将使用此名称找到它。此属性是必需的。

port

套接字应绑定到的端口号。请注意,如果服务器应用 port-offset 以递增或减少所有端口值,则可以覆盖此值。

A.9. 默认套接字绑定

表 A.13. 默认套接字绑定

Name端口多播端口描述套接字绑定组

ajp

8009

 

Apache JServ 协议。用于 HTTP 集群和负载平衡。

standard-sockets, ha-sockets, full-sockets, full-ha-sockets

http

8080

 

部署 Web 应用的默认端口。

standard-sockets, ha-sockets, full-sockets, full-ha-sockets

https

8443

 

部署的 Web 应用程序和客户端之间的 SSL 加密连接。

standard-sockets, ha-sockets, full-sockets, full-ha-sockets

iiop

3528

 

用于 JTS 事务和其他 ORB 依赖服务的 CORBA 服务。

full-sockets, full-ha-sockets

iiop-ssl

3529

 

SSL 加密的 CORBA 服务。

full-sockets, full-ha-sockets

jgroups-mping

 

45700

多播。用于发现 HA 集群中的初始成员资格。

ha-sockets, full-ha-sockets

jgroups-tcp

7600

 

使用 TCP 在 HA 集群中单播对等发现。

ha-sockets, full-ha-sockets

jgroups-tcp-fd

57600

 

用于通过 TCP 进行 HA 故障检测。

ha-sockets, full-ha-sockets

jgroups-udp

55200

45688

使用 UDP 在 HA 集群中进行多播对等发现。

ha-sockets, full-ha-sockets

jgroups-udp-fd

54200

 

用于通过 UDP 进行 HA 故障检测。

ha-sockets, full-ha-sockets

management-http

9990

 

用于与管理层的 HTTP 通信。

standard-sockets, ha-sockets, full-sockets, full-ha-sockets

management-https

9993

 

用于与管理层通信的 HTTPS。

standard-sockets, ha-sockets, full-sockets, full-ha-sockets

modcluster

 

23364

用于 JBoss EAP 和 HTTP 负载平衡器之间通信的多播端口。

ha-sockets, full-ha-sockets

txn-recovery-environment

4712

 

JTA 事务恢复管理器。

standard-sockets, ha-sockets, full-sockets, full-ha-sockets

txn-status-manager

4713

 

JTA / JTS 事务管理器。

standard-sockets, ha-sockets, full-sockets, full-ha-sockets

A.10. 部署扫描器文件

部署扫描器使用标记文件,将应用的状态标记在 JBoss EAP 服务器实例的部署目录中。标志文件的名称与部署的名称相同,文件后缀表示应用部署的状态。

例如,成功部署 test-application.war 将具有名为 test-application.war.deployed 的标记文件。

下表列出了可用的标记文件类型及其含义。

表 A.14. 标记文件类型

文件名后缀Origin描述

.deployed

系统生成的

表示内容已经部署。如果删除了此文件,则内容将被取消部署。

.dodeploy

用户生成的

表示应部署或重新部署内容。

.failed

系统生成的

表示部署失败。标志文件包含有关失败原因的信息。如果删除了标记文件,则内容将再次自动部署。

.isdeploying

系统生成的

表示部署正在进行中。此标记文件将在完成后删除。

.isundeploying

系统生成的

通过删除 .deployed 文件触发,这表示内容正在取消部署。此标记文件将在完成后删除。

.pending

系统生成的

表示部署扫描器可以识别部署内容的需求,但问题目前正在防止自动部署(例如,如果内容位于复制过程中)。此标志充当全局部署 road-block,这意味着扫描程序不会在此标志文件存在时指示服务器部署或取消部署 任何内容

.skipdeploy

用户生成的

在存在时禁用应用程序的自动部署。作为临时阻止自动部署展开内容的方法很有用,防止推送内容编辑不完整的风险。可以与 zipped 内容一起使用,但扫描程序检测到对 zipped 内容的更改并等待完成。

.undeployed

系统生成的

表示内容已被取消部署。删除此标志文件不会影响内容重新部署。

A.11. 部署扫描器属性

部署扫描程序包含以下可配置属性:

表 A.15. 部署扫描器属性

Namedefault描述

auto-deploy-exploded

false

允许自动部署展开的内容,而无需 .dodeploy 标志文件。建议仅针对基本开发场景,以防止在开发人员或操作系统更改期间发生大量应用程序部署。

auto-deploy-xml

true

允许自动部署 XML 内容,而无需 .dodeploy 标记文件。

auto-deploy-zipped

true

允许自动部署 zipped 内容,而无需 .dodeploy 标记文件。

deployment-timeout

600

部署扫描程序在取消前允许部署尝试的时间值(以秒为单位)。

path

部署

要扫描的实际文件系统路径。除非指定了 relative-to 属性,否则将被视为绝对路径,在这种情况下,该值被视为相对于该路径。

relative-to

jboss.server.base.dir

对在服务器配置中定义为 路径 的文件系统路径的引用。

runtime-failure-causes-rollback

false

作为扫描操作的一部分,部署的运行时失败都会导致回滚部署以及所有其他(可能不相关的)部署。

scan-enabled

true

允许根据 scan-interval 和在启动时自动扫描应用程序。

scan-interval

5000

应该扫描该存储库进行更改的时间间隔(以毫秒为单位)。值小于 1 会导致扫描仅在初始启动时发生。

A.12. mail 子系统属性

下表描述了邮件 会话的 mail 子系统中以及以下邮件服务器类型的属性:

表 A.16. 邮件会话属性

属性描述

debug

是否启用 JavaMail 调试。

from

如果发送时未设置,要使用的默认"from"地址。

jndi-name

邮件会话应绑定到的 JNDI 名称。

表 A.17. IMAP 邮件服务器属性

属性描述

outbound-socket-binding-ref

引用邮件服务器的出站套接字绑定。

password

服务器上要进行身份验证的密码。

ssl

服务器是否需要 SSL。

tls

服务器是否需要 TLS。

username

要在服务器上进行身份验证的用户名。

表 A.18. POP3 邮件服务器属性

属性描述

outbound-socket-binding-ref

引用邮件服务器的出站套接字绑定。

password

服务器上要进行身份验证的密码。

ssl

服务器是否需要 SSL。

tls

服务器是否需要 TLS。

username

要在服务器上进行身份验证的用户名。

表 A.19. SMTP 邮件服务器属性

属性描述

outbound-socket-binding-ref

引用邮件服务器的出站套接字绑定。

password

服务器上要进行身份验证的密码。

ssl

服务器是否需要 SSL。

tls

服务器是否需要 TLS。

username

要在服务器上进行身份验证的用户名。

表 A.20. 自定义邮件服务器属性

属性描述

outbound-socket-binding-ref

引用邮件服务器的出站套接字绑定。

password

服务器上要进行身份验证的密码。

属性

此服务器的 JavaMail 属性。

ssl

服务器是否需要 SSL。

tls

服务器是否需要 TLS。

username

要在服务器上进行身份验证的用户名。

A.13. 根日志记录器属性

表 A.21. 根日志记录器属性

属性描述

filter

定义一个简单的过滤器类型。弃用了 filter-spec

filter-spec

定义过滤器的 expression 值。以下表达式定义了一个过滤器,它排除与模式匹配的日志条目: not (match ("WFLYAPPEND"))

处理程序

根日志记录器使用的日志处理程序列表。

level

根日志记录器记录的最低日志消息级别。

注意

为根日志记录器指定的 filter-spec 不会 由其他处理程序继承。相反,每个处理程序必须指定 filter-spec

A.14. 日志类别属性

表 A.22. 日志类别属性

属性描述

category

捕获日志消息的日志类别。

filter

定义一个简单的过滤器类型。弃用了 filter-spec

filter-spec

定义过滤器的 expression 值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLYAPPEND"))

处理程序

与日志记录器关联的日志处理程序列表。

level

日志类别记录的最低日志消息级别。

use-parent-handlers

如果设置为 true,则此类别除了任何其他分配的处理程序外,还将使用根日志记录器的日志处理程序。

A.15. 日志处理程序属性

表 A.23. 控制台日志处理程序属性

属性描述

Autoflush

如果设置为 true,则在接收后立即将日志消息发送到分配的处理程序。

enabled

如果设置为 true,则处理程序会被启用并正常运行。如果设置为 false,则处理日志消息时该处理程序将被忽略。

编码

用于输出的字符编码方案。

filter

定义一个简单的过滤器类型。弃用了 filter-spec

filter-spec

定义过滤器的 expression 值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLYAPPEND"))

formatter

此日志处理程序使用的日志格式器。

level

日志处理程序记录的最低日志消息级别。

name

日志处理程序的名称。弃用,因为处理程序的地址包含名称。

named-formatter

处理程序中使用的定义的 formatter 的名称。

target

日志处理程序的输出所发生的系统输出流。这可以是 system.err 或 System.out 用于系统错误流或标准流。

表 A.24. 文件日志处理程序属性

属性描述

附加

如果设置为 true,则此处理程序编写的所有消息都将附加到 文件中(如果已存在)。如果设置为 false,则每次应用服务器启动时都会创建一个新文件。

Autoflush

如果设置为 true,则在接收后立即将日志消息发送到分配的处理程序。

enabled

如果设置为 true,则处理程序会被启用并正常运行。如果设置为 false,则处理日志消息时该处理程序将被忽略。

编码

用于输出的字符编码方案。

file

代表此日志处理程序输出写入到的文件的对象。它有两个配置属性,即 relative-topath

filter

定义一个简单的过滤器类型。弃用了 filter-spec

filter-spec

定义过滤器的 expression 值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLYAPPEND"))

formatter

此日志处理程序使用的日志格式器。

level

日志处理程序记录的最低日志消息级别。

name

日志处理程序的名称。弃用,因为处理程序的地址包含名称。

named-formatter

处理程序中使用的定义的 formatter 的名称。

表 A.25. 定期日志处理程序属性

属性描述

附加

如果设置为 true,则此处理程序编写的所有消息都将附加到 文件中(如果已存在)。如果设置为 false,则每次应用服务器启动时都会创建一个新文件。

Autoflush

如果设置为 true,则在接收后立即将日志消息发送到分配的处理程序。

enabled

如果设置为 true,则处理程序会被启用并正常运行。如果设置为 false,则处理日志消息时该处理程序将被忽略。

编码

用于输出的字符编码方案。

file

代表此日志处理程序的输出写入的文件的对象。它有两个配置属性,即 relative-topath

filter

定义一个简单的过滤器类型。弃用了 filter-spec

filter-spec

定义过滤器的 expression 值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLYAPPEND"))

formatter

此日志处理程序使用的日志格式器。

level

日志处理程序记录的最低日志消息级别。

name

日志处理程序的名称。弃用,因为处理程序的地址包含名称。

named-formatter

处理程序中使用的定义的 formatter 的名称。

suffix

此字符串包含在附加到轮转日志的后缀中。后缀 的格式是句点(.),后跟一个日期字符串,可以被 SimpleDateFormat 类解析。

表 A.26. 大小日志处理程序属性

属性描述

附加

如果设置为 true,则此处理程序编写的所有消息都将附加到 文件中(如果已存在)。如果设置为 false,则每次应用服务器启动时都会创建一个新文件。

Autoflush

如果设置为 true,则日志消息将在接收后立即发送到分配的处理程序。

enabled

如果设置为 true,则处理程序会被启用并正常运行。如果设置为 false,则处理日志消息时该处理程序将被忽略。

编码

用于输出的字符编码方案。

file

代表此日志处理程序输出写入到的文件的对象。它有两个配置属性,即 relative-topath

filter

定义一个简单的过滤器类型。弃用了 filter-spec

filter-spec

定义过滤器的 expression 值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLYAPPEND"))

formatter

此日志处理程序使用的日志格式器。

level

日志处理程序记录的最低日志消息级别。

max-backup-index

保存的最大轮转日志数。当达到这个数字时,会重复使用最旧的日志。默认值为 1

如果使用 suffix 属性,则轮转日志文件的后缀包含在轮转算法中。当轮转日志文件时,名称以 名称+后缀 开头的最旧的文件会被删除,其余的轮转日志文件会递增其数字后缀,并且新轮转的日志文件被授予数字后缀 1

name

日志处理程序的名称。弃用,因为处理程序的地址包含名称。

named-formatter

处理程序中使用的定义的 formatter 的名称。

rotate-on-boot

如果设置为 true,则在服务器重启时创建一个新的日志文件。默认值为 false

rotate-size

日志文件在轮转前可以达到的最大大小。附加到数字中的单个字符表示大小单位: b 表示字节,k 表示 KB,m 表示 MB,g 表示 GB。例如,50MB 为 50m

suffix

此字符串包含在附加到轮转日志的后缀中。后缀 的格式是句点(.),后跟一个日期字符串,可以被 SimpleDateFormat 类解析。

表 A.27. 定期大小日志处理程序属性

属性描述

附加

如果设置为 true,则此处理程序编写的所有消息都将附加到 文件中(如果已存在)。如果设置为 false,则每次应用服务器启动时都会创建一个新文件。

Autoflush

如果设置为 true,则在接收后立即将日志消息发送到分配的处理程序。

enabled

如果设置为 true,则处理程序会被启用并正常运行。如果设置为 false,则处理日志消息时该处理程序将被忽略。

编码

用于输出的字符编码方案。

file

代表此日志处理程序输出写入到的文件的对象。它有两个配置属性,即 relative-topath

filter-spec

定义过滤器的 expression 值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLYAPPEND"))

formatter

此日志处理程序使用的日志格式器。

level

日志处理程序记录的最低日志消息级别。

max-backup-index

保存的最大轮转日志数。当达到这个数字时,会重复使用最旧的日志。默认值为 1

如果使用 suffix 属性,则轮转日志文件的后缀包含在轮转算法中。当轮转日志文件时,名称以 名称+后缀 开头的最旧的文件会被删除,其余的轮转日志文件会递增其数字后缀,并且新轮转的日志文件被授予数字后缀 1

name

日志处理程序的名称。弃用,因为处理程序的地址包含名称。

named-formatter

处理程序中使用的定义的 formatter 的名称。

rotate-on-boot

如果设置为 true,则在服务器重启时创建一个新的日志文件。默认值为 false

rotate-size

日志文件在轮转前可以达到的最大大小。附加到数字中的单个字符表示大小单位: b 表示字节,k 表示 KB,m 表示 MB,g 表示 GB。例如,50MB 为 50m

suffix

此字符串包含在附加到轮转日志的后缀中。后缀 的格式是句点(.),后跟一个日期字符串,可以被 SimpleDateFormat 类解析。

表 A.28. syslog Handler 属性

属性描述

app-name

以 RFC5424 格式格式化消息时使用的应用程序名称。默认情况下,应用程序名称为 java

enabled

如果设置为 true,则处理程序会被启用并正常运行。如果设置为 false,则处理日志消息时该处理程序将被忽略。

facility

RFC-5424 和 RFC-3164 定义的工具。

hostname

从其中发送消息的主机的名称。例如,应用服务器在其上运行的主机的名称。

level

日志处理程序记录的最低日志消息级别。

port

syslog 服务器侦听的端口。

server-address

syslog 服务器的地址。

syslog-format

根据 RFC 规范格式化日志消息。

表 A.29. 自定义日志处理程序属性

属性描述

要使用的日志记录处理程序类。

enabled

如果设置为 true,则处理程序会被启用并正常运行。如果设置为 false,则处理日志消息时该处理程序将被忽略。

编码

用于输出的字符编码方案。

filter

定义一个简单的过滤器类型。弃用了 filter-spec

filter-spec

定义过滤器的 expression 值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLYAPPEND"))

formatter

此日志处理程序使用的日志格式器。

level

日志处理程序记录的最低日志消息级别。

module

日志记录处理程序所依赖的模块。

name

日志处理程序的名称。弃用,因为处理程序的地址包含名称。

named-formatter

处理程序中使用的定义的 formatter 的名称。

属性

日志处理程序使用的属性。

表 A.30. async 日志处理程序属性

属性描述

enabled

如果设置为 true,则处理程序会被启用并正常运行。如果设置为 false,则处理日志消息时该处理程序将被忽略。

filter

定义一个简单的过滤器类型。弃用了 filter-spec

filter-spec

定义过滤器的 expression 值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLYAPPEND"))

level

日志处理程序记录的最低日志消息级别。

name

日志处理程序的名称。弃用,因为处理程序的地址包含名称。

overflow-action

此处理程序在超过其队列长度时响应。这可设置为 BLOCKDISCARDBLOCK 使日志记录应用等待,直到队列中有可用空间。这与非async 日志处理程序的行为相同。DISCARD 允许日志记录应用程序继续,但日志消息已被删除。

queue-length

在等待子处理程序响应时,此处理程序将保留的最大日志消息数。

subhandlers

此 async 处理程序将日志消息传递到的日志处理程序的列表。

A.16. 数据源连接 URL

表 A.31. 数据源连接 URL

DataSource连接 URL

IBM DB2

jdbc:db2://SERVER_NAME:PORT/DATABASE_NAME

MariaDB

jdbc:mariadb://SERVER_NAME:PORT/DATABASE_NAME

Microsoft SQL Server

jdbc:sqlserver://SERVER_NAME:PORT;DatabaseName=DATABASE_NAME

MySQL

jdbc:mysql://SERVER_NAME:PORT/DATABASE_NAME

Oracle

jdbc:oracle:thin:@SERVER_NAME:PORT:ORACLE_SID

PostgreSQL

jdbc:postgresql://SERVER_NAME:PORT/DATABASE_NAME

Sybase

jdbc:sybase:Tds:SERVER_NAME:PORT/DATABASE_NAME

A.17. 数据源参数

表 A.32. 数据源参数

参数数据源类型描述

allocation-retry

非 XA, XA

在抛出异常前,应尝试分配连接的次数。默认值为 0, 因此在第一次失败时抛出异常。

allocation-retry-wait-millis

非 XA, XA

重试分配连接之间等待的时间(以毫秒为单位)。默认值为 5000 ms。

allow-multiple-users

非 XA, XA

无论多个用户是否将通过 getConnection (user、password) 方法访问数据源,以及内部池类型帐户用于此行为。

background-validation

非 XA, XA

使用前,是否应在后台线程中验证连接与验证。后台验证通常不会与 validate-on-match 一起使用,或者有多余的检查。使用后台验证时,连接在验证时间不良的机会,并被移交给客户端,因此应用程序必须考虑这一点。

background-validation-millis

非 XA, XA

后台验证将运行的频率(以毫秒为单位)。

blocking-timeout-wait-millis

非 XA, XA

在抛出异常前等待连接时(以毫秒为单位)的最长时间(以毫秒为单位)。请注意,只有在等待锁定连接时此块,如果创建新连接需要很长时间,则永远不会抛出异常。

capacity-decrementer-class

非 XA, XA

定义在池中减少连接的策略。

capacity-decrementer-properties

非 XA, XA

在类中注入的属性,定义在池中减少连接的策略。

capacity-incrementer-class

非 XA, XA

定义用于在池中递增连接的策略的类。

capacity-incrementer-properties

非 XA, XA

在类中注入的属性,定义用于在池中递增连接的策略。

check-valid-connection-sql

非 XA, XA

用于检查池连接的有效性的 SQL 语句。从池中获取受管连接时,可以调用此设置。

connectable

非 XA, XA

启用 CMR 的使用,这意味着本地资源可以可靠地参与 XA 事务。

connection-listener-class

非 XA, XA

指定扩展 org.jboss.jca.adapters.jdbc.spi.listener.ConnectionListener 的类名称。此类侦听连接激活和传递,以便在返回到应用或到池的连接之前执行操作。使用两个资源 jar (将 JDBC 驱动程序安装为核心模块)或单独的全局模块(定义全局模块)中,必须将指定的类与 JDBC驱动程序捆绑到一起(定义全局模块)。

connection-listener-property

非 XA, XA

要注入到 connection-listener-class 中指定的类的属性。注入的属性符合 3.0.0 约定。例如,如果您指定了名为 foo 的属性,则连接监听程序类需要有一个方法 setFoo,它接受 String 作为参数。

connection-properties

仅限非 XA

传递给 Driver.connect (url,props) 方法的任意字符串名称/值对连接属性。

connection-url

仅限非 XA

JDBC 驱动程序连接 URL。

datasource-class

仅限非 XA

JDBC 数据源类的完全限定名称。

driver-class

仅限非 XA

JDBC 驱动程序类的完全限定名称。

driver-name

非 XA, XA

定义数据源应使用的 JDBC 驱动程序。它是与已安装驱动程序名称匹配的符号名称。如果驱动程序部署为 JAR,则名称是部署的名称。

enabled

非 XA, XA

是否应该启用数据源。

enlistment-trace

非 XA, XA

是否应该记录 trace。

exception-sorter-class-name

非 XA, XA

一个 org.jboss.jca.adapters.jdbc.ExceptionSorter 实例,它提供了一种验证异常是否应该广播错误的方法。

exception-sorter-properties

非 XA, XA

exception sorter 属性。

flush-strategy

非 XA, XA

指定在出错时应如何清除池。有效值为:

FailingConnectionOnly
只有失败的连接被删除。这是默认设置。
InvalidIdleConnections
共享相同凭据的故障连接和闲置连接,并通过 ValidatingManagedConnectionFactory.getInvalidConnections (…​) 方法返回为无效。
IdleConnections
共享相同凭证的故障连接和闲置连接会被删除。
正常
共享相同凭证的故障连接和闲置连接会被删除。共享相同凭证的活跃连接会在返回到池时销毁。
EntirePool
共享相同凭证的故障连接和闲置和活跃连接会被删除。对于生产环境的系统,不建议使用此设置。
AllInvalidIdleConnections
ValidatingManagedConnectionFactory.getInvalidConnections (…​) 方法返回的失败连接和闲置连接已被删除。
AllIdleConnections
失败的连接以及所有闲置连接都会被删除。
AllGracefully
失败的连接以及所有闲置连接都会被删除。活跃连接会在返回到池时销毁。
AllConnections
失败的连接以及所有闲置和活跃连接都会被删除。对于生产环境的系统,不建议使用此设置。

idle-timeout-minutes

非 XA, XA

连接在关闭前可以闲置的最长时间(以分钟为单位)。如果没有指定,则默认为 30 分钟。实际最长时间还取决于 IdleRemover 扫描时间,这是任何池的最小 idle-timeout-minutes 值的一半。

initial-pool-size

非 XA, XA

池应保存的初始连接数。

交集

XA Only

是否为 XA 连接启用交集。

jndi-name

非 XA, XA

数据源的唯一 JNDI 名称。

JTA

仅限非 XA

启用 JTA 集成。

max-pool-size

非 XA, XA

池可以保存的最大连接数。

MCP

非 XA, XA

ManagedConnectionPool 实现。例如,org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool

min-pool-size

非 XA, XA

池可以容纳的最小连接数。

new-connection-sql

非 XA, XA

每当将连接添加到连接池时要执行的 SQL 语句。

no-recovery

XA Only

连接池是否应从恢复中排除。

no-tx-separate-pool

XA Only

是否为每个上下文创建单独的子池。一些 Oracle datasources 可能需要此项,它们可能不允许 XA 连接在 JTA 事务内和外部使用。使用此选项将导致您的总池大小两倍的 max-pool-size,因为将创建两个实际池。

pad-xid

XA Only

是否用完 Xid。

password

非 XA, XA

创建新连接时使用的密码。

pool-fair

非 XA, XA

定义池是否应该公平。此设置是用于管理 JCA 中的连接池的 Semaphore 类的一部分,它在一些用例中提供了性能优势,因为不需要禁止连接顺序。

pool-prefill

非 XA, XA

是否应预先填充池。

pool-use-strict-min

非 XA, XA

min-pool-size 是否应该严格考虑。

prepared-statements-cache-size

非 XA, XA

在 Least Recently Used (LRU)缓存中每个连接的准备语句数量。

query-timeout

非 XA, XA

查询的超时时间(以秒为单位)。默认为没有超时。

reauth-plugin-class-name

非 XA, XA

reauthentication 插件实现的完全限定类名称,用于重新验证物理连接。

reauth-plugin-properties

非 XA, XA

reauthentication 插件的属性。

recovery-password

XA Only

用于连接到资源进行恢复的密码。

recovery-plugin-class-name

XA Only

恢复插件实现的完全限定类名称。

recovery-plugin-properties

XA Only

恢复插件的属性。

recovery-security-domain

XA Only

用于连接到资源进行恢复的安全域。

recovery-username

XA Only

用于连接到资源以恢复的用户名。

same-rm-override

XA Only

javax.transaction.xa.XAResource.isSameRM (XAResource) 类返回 truefalse

security-domain

非 XA, XA

处理身份验证的 JAAS security-manager 的名称。此名称与 JAAS 登录配置的 application-policy/name 属性关联。

set-tx-query-timeout

非 XA, XA

是否根据剩余时间设置查询超时,直到事务超时为止。如果没有事务,则会使用任何配置的查询超时。

share-prepared-statements

非 XA, XA

当提供给应用程序的打包程序由应用程序代码关闭时,JBoss EAP 是否应该缓存而不是关闭或终止底层物理声明。默认值为 false

spy

非 XA, XA

在 JDBC 层上启用 spy 功能。这会将所有 JDBC 流量记录到数据源。请注意,日志记录类别 jboss.jdbc.spy 还必须设置为 logging 子系统中的日志级别 DEBUG

stale-connection-checker-class-name

非 XA, XA

一个 org.jboss.jca.adapters.jdbc.StaleConnectionChecker 实例,它提供 isStaleConnection (SQLException) 方法。如果此方法返回 true,则异常会嵌套在 org.jboss.jca.adapters.jdbc.StaleConnectionException 中。

stale-connection-checker-properties

非 XA, XA

stale 连接检查程序属性。

启用统计

非 XA, XA

是否启用运行时统计信息。默认值为 false

track-statements

非 XA, XA

当连接返回到池时,是否要检查未关闭的声明,并且一个语句返回到准备的声明缓存。如果为 false,则不会跟踪语句。有效值:

  • true :声明和结果集被跟踪,并在没有关闭时发出警告。
  • 错误 : N 个语句或结果集会被跟踪。
  • nowarn: 声明会被跟踪,但没有发出警告(默认)。

tracking

非 XA, XA

是否跟踪跨事务界限的连接处理。

transaction-isolation

非 XA, XA

java.sql.Connection 事务隔离级别。有效值:

  • TRANSACTION_READ_UNCOMMITTED
  • TRANSACTION_READ_COMMITTED
  • TRANSACTION_REPEATABLE_READ
  • TRANSACTION_SERIALIZABLE
  • TRANSACTION_NONE

url-delimiter

非 XA, XA

connection-url 用于高可用性(HA)数据源的 URL 的分隔符。

url-property

XA Only

xa-datasource-property 值中 URL 属性的属性。

url-selector-strategy-class-name

非 XA, XA

实现 org.jboss.jca.adapters.jdbc.URLSelectorStrategy 的类。

use-ccm

非 XA, XA

启用缓存的连接管理器。

use-fast-fail

非 XA, XA

如果为 true,在连接无效时在第一次尝试时失败连接分配。如果为 false,请一直尝试直到池耗尽为止。

use-java-context

非 XA, XA

是否将数据源绑定到全局 JNDI。

use-try-lock

非 XA, XA

内部锁定的超时值。这会在锁定不可用时,在超时前尝试获取配置的秒数,而不是立即失败。使用 tryLock () 而不是 lock ()

user-name

非 XA, XA

创建新连接时使用的用户名。

valid-connection-checker-class-name

非 XA, XA

一个 org.jboss.jca.adaptors.jdbc.ValidConnectionChecker 的实现,它提供 SQLException.isValidConnection (Connection e) 方法来验证连接。一个例外表示连接被销毁。如果存在,这将覆盖参数 check-valid-connection-sql

valid-connection-checker-properties

非 XA, XA

有效的连接检查程序属性。

validate-on-match

非 XA, XA

当连接工厂尝试匹配受管连接时,是否执行连接验证。当客户端必须在使用前验证连接时,应使用此选项。validate-on-match 通常不用于 background-validation,否则将进行冗余检查。

wrap-xa-resource

XA Only

是否在 org.jboss.tm.XAResourceWrapper 实例中嵌套 XAResource。

xa-datasource-class

XA Only

javax.sql.XADataSource 实施类的完全限定名称。

xa-datasource-properties

XA Only

XA 数据源属性的字符串名称/值对。

xa-resource-timeout

XA Only

如果非零,则这个值将传递到 XAResource.setTransactionTimeout 方法。

A.18. 数据源统计

表 A.33. 核心池统计

Name描述

ActiveCount

活跃连接的数量。每个连接都由一个应用程序使用,或者在池中可用。

AvailableCount

池中可用连接的数量。

AverageBlockingTime

阻止在池中获取专用锁定的平均时间。这个值以毫秒为单位。

AverageCreationTime

创建连接的平均时间。这个值以毫秒为单位。

AverageGetTime

获取连接的平均时间。

AverageUsageTime

使用连接的平均时间。

BlockingFailureCount

尝试获取连接的失败次数。

CreatedCount

创建的连接数。

DestroyedCount

销毁的连接数量。

IdleCount

当前闲置的连接数量。

InUseCount

当前正在使用的连接数量。

MaxCreationTime

创建连接所需的最长时间。这个值以毫秒为单位。

MaxGetTime

获取连接的最长时间。

MaxPoolTime

池中连接的最大时间。

MaxUsageTime

使用连接的最大时间。

MaxUsedCount

使用的最大连接数。

MaxWaitCount

同时等待连接的最大请求数。

MaxWaitTime

等待池中专用锁定所花费的最长时间。

timedout

超时连接数量。

TotalBlockingTime

等待池中专用锁定的总时间。这个值以毫秒为单位。

TotalCreationTime

创建连接的总时间。这个值以毫秒为单位。

TotalGetTime

获取连接的总时间。

TotalPoolTime

池中连接所花费的总时间。

TotalUsageTime

使用连接的总时间。

WaitCount

必须等待获取连接的请求数。

XACommitAverageTime

XAResource 提交调用的平均时间。

XACommitCount

XAResource 提交调用的数量。

XACommitMaxTime

XAResource 提交调用的最长时间。

XACommitTotalTime

所有 XAResource 提交调用的总时间。

XAEndAverageTime

XAResource 结束调用的平均时间。

XAEndCount

XAResource 端到端调用的数量。

XAEndMaxTime

XAResource 端到端调用的最长时间。

XAEndTotalTime

所有 XAResource 结束调用的总时间。

XAForgetAverageTime

XAResource forget 调用的平均时间。

XAForgetCount

XAResource forget 调用的数量。

XAForgetMaxTime

XAResource forget 调用的最长时间。

XAForgetTotalTime

所有 XAResource forget 调用的总时间。

XAPrepareAverageTime

XAResource 准备调用的平均时间。

XAPrepareCount

XAResource 准备调用的数量。

XAPrepareMaxTime

XAResource 准备调用的最长时间。

XAPrepareTotalTime

所有 XAResource 准备调用的总时间。

XARecoverAverageTime

XAResource 恢复调用的平均时间。

XARecoverCount

XAResource 恢复调用的数量。

XARecoverMaxTime

XAResource 恢复调用的最长时间。

XARecoverTotalTime

所有 XAResource 恢复调用的总时间。

XARollbackAverageTime

XAResource 回滚调用的平均时间。

XARollbackCount

XAResource 回滚调用的数量。

XARollbackMaxTime

XAResource 回滚调用的最长时间。

XARollbackTotalTime

所有 XAResource 回滚调用的总时间。

XAStartAverageTime

XAResource 开始调用的平均时间。

XAStartCount

XAResource 开始调用的数量。

XAStartMaxTime

XAResource 开始调用的最长时间。

XAStartTotalTime

所有 XAResource 开始调用的总时间。

表 A.34. JDBC 统计

Name描述

PreparedStatementCacheAccessCount

访问声明缓存的次数。

PreparedStatementCacheAddCount

添加到声明缓存的声明数。

PreparedStatementCacheCurrentSize

当前在声明缓存中缓存的准备和可调用语句的数量。

PreparedStatementCacheDeleteCount

从缓存中丢弃的声明数。

PreparedStatementCacheHitCount

从缓存中使用该语句的次数。

PreparedStatementCacheMissCount

声明对缓存中声明无法满足的次数。

A.19. 事务管理器配置选项

表 A.35. 事务子系统属性

属性描述

default-timeout

默认事务超时。默认值为 300 秒。您可以根据每个事务以编程方式覆盖。

enable-statistics

弃用了 启用了统计数据的

enable-tsm-status

是否启用事务状态管理器(TSM)服务,该服务用于超出进程恢复。不支持这个选项,因为运行超出进程的进程恢复管理器,以从不同进程中联系 ActionStatusService,而不是在内存中。

hornetq-store-enable-async-io

已弃用,使用 journal-store-enable-async-io 替代。

jdbc-action-store-drop-table

JDBC 操作存储是否应丢弃表。默认值为 false

jdbc-action-store-table-prefix

在配置的 JDBC 操作存储中写入事务日志的表的可选前缀。

jdbc-communication-store-drop-table

JDBC 通信存储是否应丢弃表。默认值为 false

jdbc-communication-store-table-prefix

在配置的 JDBC 通信存储中写入事务日志的表的可选前缀。

jdbc-state-store-drop-table

JDBC 状态存储是否应丢弃表。默认值为 false

jdbc-state-store-table-prefix

在配置的 JDBC 状态存储中写入事务日志的表的可选前缀。

jdbc-store-datasource

使用的非 XA 数据源的 JNDI 名称。数据源应在数据源子系统中定义。

journal-store-enable-async-io

是否应该为日志存储启用 AsyncIO。默认值为 false。应重启服务器,以便此设置生效。

JTS

是否使用 Java 事务服务(JTS)事务。默认为 false,它仅使用 JTA 事务。

node-identifier

事务管理器的节点标识符。如果没有设置这个选项,您将在服务器启动时看到警告。在以下情况下需要这个选项:

  • 对于 JTS 到 JTS 通信
  • 当两个事务管理器访问共享资源管理器时
  • 当两个事务管理器访问共享对象存储时

每个事务管理器的 node-identifier 必须是唯一的,因为在恢复过程中强制数据完整性是必需的。对于 JTA,node-identifier 也必须是唯一的,因为多个节点可能与同一资源管理器交互或共享事务对象存储。

object-store-path

事务管理器对象存储数据的相对或绝对文件系统路径。默认情况下,相对于 object-store-relative-to 参数值。如果 object-store-relative-to 设置为空字符串,则此值被视为绝对路径。

object-store-relative-to

引用域模型中的全局路径配置。默认值为 JBoss EAP 的数据目录,它是 jboss.server.data.dir 属性的值,默认为受管域的 EAP_HOME/domain/data/,或 EAP_HOME/standalone/data/ 用于单机服务器实例。对象存储 object-store-path 事务管理器属性的值相对于此路径。将此属性设置为空字符串,使 object-store-path 被视为绝对路径。

process-id-socket-binding

如果事务管理器应使用基于套接字的进程 ID,要使用的套接字绑定配置的名称。如果 process-id-uuidtrue,则将 未定义 ;否则必须设置。

process-id-socket-max-ports

事务管理器为每个事务日志创建一个唯一标识符。提供两种不同的机制来生成唯一标识符:基于套接字的机制和基于进程的进程标识符的机制。

对于基于套接字的标识符,套接字会打开,其端口号用于标识符。如果端口已在使用中,则将探测到下一个端口,直到找到了一个空闲端口。process-id-socket-max-ports 代表事务管理器在失败前将尝试的最大套接字数。默认值为 10

process-id-uuid

设置为 true,以使用进程标识符为每个事务创建唯一标识符。否则,使用基于套接字的机制。默认值为 true。如需更多信息,请参阅 process-id-socket-max-ports。要启用 process-id-socket-binding,请将 process-id-uuid 设置为 false

recovery-listener

事务恢复过程是否应该侦听网络套接字。默认值为 false

socket-binding

指定当 recovery-listener 设置为 true 时事务定期恢复监听程序使用的套接字绑定的名称。

启用统计

是否应该启用统计信息。默认值为 false

status-socket-binding

指定用于事务状态管理器的套接字绑定。不支持此配置选项。

use-hornetq-store

弃用了 use-journal-store

use-jdbc-store

使用 JDBC 存储来编写事务日志。设置为 true 以启用和设置为 false,以使用默认日志存储类型。

use-journal-store

将 Apache ActiveMQ Artemis 日志存储机制而不是基于文件的存储用于事务日志。这默认是禁用的,但可以提高 I/O 性能。不建议在单独的事务管理器上进行 JTS 事务。更改此选项时,必须使用 shutdown 命令重新启动服务器,以使更改生效。

表 A.36. 日志存储属性

属性描述

expose-all-logs

是否公开所有日志。默认值为 false,表示只公开事务日志的子集。

type

指定日志记录存储的实施类型。默认为 default

表 A.37. 提交标记资源属性

属性描述

batch-size

此 CMR 资源的批处理大小。默认值为 100

immediate-cleanup

是否为这个 CMR 资源执行立即清理。默认值是 true

jndi-name

此 CMR 资源的 JNDI 名称。

name

用于存储 XID 的表名称。默认值为 xids

A.20. IIOP 子系统属性

表 A.38. IIOP 子系统属性

属性描述

add-component-via-interceptor

指明是否应通过 IOR 拦截器添加 SSL 组件。

auth-method

身份验证方法。有效值为 noneusername_password

caller-propagation

指明是否应在 SAS 上下文中传播调用者身份。有效值为 none支持

client-requires

表示客户端 SSL 所需的参数的值。有效值为 NoneServerAuthClientAuthMutualAuth

client-supports

表示客户端 SSL 支持的参数的值。有效值为 NoneServerAuthClientAuthMutualAuth

保密性

指明传输是否需要保密性保护。有效值为 none,supported, 和 required

detect-misordering

指明传输是否需要进行错误排序检测。有效值为 none,supported, 和 required

detect-replay

指明传输是否需要重播检测。有效值为 none,supported, 和 required

export-corbaloc

指明是否应将根上下文导出为 corbaloc::address:port/NameService

giop-version

要使用的 GIOP 版本。

high-water-mark

TCP 连接缓存参数.每次连接数量超过这个值时,ORB 会尝试重新声明连接。重新声明的连接数量由 number-to-reclaim 属性指定。如果没有设置此属性,则使用 OpenJDK ORB 默认。

完整性

指明传输是否需要完整性保护。有效值为 none,supported, 和 required

number-to-reclaim

TCP 连接缓存参数.每次连接数量超过 high-water-mark 属性时,ORB 会尝试重新声明连接。重新声明的连接数量由此属性指定。如果没有设置,则使用 OpenJDK ORB 默认。

persistent-server-id

服务器的持久 ID。持久对象引用在服务器的很多激活之间有效,它们使用此属性来识别它。因此,同一服务器的很多激活应该将此属性设置为相同的值,并且在同一主机上运行的不同服务器实例应具有不同的服务器 ID。

属性

通用键/值属性的列表。

realm

身份验证服务域名。

required

指明是否需要身份验证。

root-context

命名服务根上下文。

安全

指明是否要安装安全拦截器。有效值为 client,identity, 和 none

security-domain

包含用于建立 SSL 连接的密钥和信任存储的安全域的名称。

server-requires

表示服务器 SSL 所需的参数的值。有效值为 NoneServerAuthClientAuthMutualAuth

server-supports

表示服务器 SSL 支持参数的值。有效值为 NoneServerAuthClientAuthMutualAuth

socket-binding

指定 ORB 端口的套接字绑定配置的名称。

ssl-socket-binding

指定 ORB SSL 端口的套接字绑定配置的名称。

support-ssl

指明是否支持 SSL。

Transactions

指明是否要安装的事务拦截器。有效值为 fullspecnone。值 full 可启用 JTS,而 spec 值则启用拒绝传入的事务上下文的非JTS 规格兼容模式。

trust-in-client

指明传输是否需要在客户端中建立信任。有效值为 none,supported, 和 required

trust-in-target

指明传输是否需要在目标中建立信任。有效值为 none支持

A.21. 资源适配器属性

下表描述了资源适配器属性。

表 A.39. 主要属性

属性描述

archive

资源适配器存档。

beanvalidationgroups

应使用的 bean 验证组。

bootstrap-context

应该使用的 bootstrap 上下文的唯一名称。

config-properties

自定义定义的配置属性。

module

从中加载资源适配器的模块。

启用统计

是否启用运行时统计信息。

transaction-support

资源适配器的事务支持级别。

wm-security

为这个资源适配器打开/关闭 wm.security。如果是 false,则忽略所有 wm-security indices 参数,即使默认值也是如此。

wm-security-default-groups

应该添加到使用的 Subject 实例的默认组列表。

wm-security-default-principal

应该添加到使用的 Subject 实例的默认主体名称。

wm-security-domain

应使用的安全域的名称。

wm-security-mapping-groups

组映射列表。

wm-security-mapping-required

定义安全凭证是否需要映射。

wm-security-mapping-users

用户映射列表。

表 A.40. admin-objects 属性

属性描述

class-name

管理对象的完全限定类名称。

enabled

指定是否应启用管理对象。

jndi-name

管理对象的 JNDI 名称。

use-java-context

把它设置为 false 将对象绑定到全局 JNDI。

表 A.41. connection-definitions 属性

属性描述

allocation-retry

表示在抛出异常前应尝试分配连接的次数。

allocation-retry-wait-millis

重试分配连接之间等待的时间(以毫秒为单位)。

background-validation

指定在使用前,应在后台线程中验证连接。更改此值需要重启服务器。

background-validation-millis

后台验证将运行的时间(以毫秒为单位)。更改此值需要重启服务器。

blocking-timeout-wait-millis

在抛出异常前等待连接时(以毫秒为单位)的最长时间(以毫秒为单位)。请注意,只有在等待锁定连接时此块,如果创建新连接需要很长时间,则永远不会抛出异常。

capacity-decrementer-class

定义在池中减少连接的策略。

capacity-decrementer-properties

在类中注入属性,定义在池中减少连接的策略。

capacity-incrementer-class

定义用于在池中递增连接的策略的类。

capacity-incrementer-properties

在类中注入属性,定义池中递增连接的策略。

class-name

受管连接工厂或 admin 对象的完全限定类名称。

connectable

启用 CMR 的使用。此功能意味着本地资源可以可靠地参与 XA 事务。

enabled

指定是否应启用资源适配器。

enlistment

如果资源适配器支持,则应使用 lazy enlistment。

enlistment-trace

指定 JBoss EAP/IronJacamar 是否应该记录 enlistment trace。

flush-strategy

指定在出错时应如何清除池。有效值为:

FailingConnectionOnly
只有失败的连接被删除。这是默认设置。
InvalidIdleConnections
共享相同凭据的故障连接和闲置连接,并通过 ValidatingManagedConnectionFactory.getInvalidConnections (…​) 方法返回为无效。
IdleConnections
共享相同凭证的故障连接和闲置连接会被删除。
正常
共享相同凭证的故障连接和闲置连接会被删除。共享相同凭证的活跃连接会在返回到池时销毁。
EntirePool
共享相同凭证的故障连接和闲置和活跃连接会被删除。对于生产环境的系统,不建议使用此设置。
AllInvalidIdleConnections
ValidatingManagedConnectionFactory.getInvalidConnections (…​) 方法返回的失败连接和闲置连接已被删除。
AllIdleConnections
失败的连接以及所有闲置连接都会被删除。
AllGracefully
失败的连接以及所有闲置连接都会被删除。活跃连接会在返回到池时销毁。
AllConnections
失败的连接以及所有闲置和活跃连接都会被删除。对于生产环境的系统,不建议使用此设置。

idle-timeout-minutes

连接在关闭前可以闲置的最长时间(以分钟为单位)。实际最长时间还取决于 IdleRemover 扫描时间,这是任何池的最小 idle-timeout-minutes 值的一半。更改此值需要重启服务器。

initial-pool-size

池应保存的初始连接数。

交集

指定是否为 XA 连接启用交集。

jndi-name

连接工厂的 JNDI 名称。

max-pool-size

池连接的最大数量。在每个子池中不会创建更多连接。

MCP

ManagedConnectionPool 实现。例如: org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool

min-pool-size

池的最小连接数。

no-recovery

指定是否应从恢复中排除连接池。

no-tx-separate-pool

Oracle 不像 XA 连接在 JTA 事务内和外部使用。要解决这个问题,您可以为不同的上下文创建单独的子池。

pad-xid

指定是否应添加 Xid。

pool-fair

指定池使用是否应该公平。

pool-prefill

指定是否应预先填充池。更改此值需要重启服务器。

pool-use-strict-min

指定 min-pool-size 是否应该被视为严格。

recovery-password

用于恢复的密码。

recovery-plugin-class-name

恢复插件实现的完全限定类名称。

recovery-plugin-properties

恢复插件的属性。

recovery-security-domain

用于恢复的安全域。

recovery-username

用于恢复的用户名。

same-rm-override

无条件设置 javax.transaction.xa.XAResource.isSameRM (XAResource) 是否返回 true 或 false。

security-application

表示应用程序提供的参数(如 getConnection (user,pw) )用于区分池中的连接。

security-domain

定义 javax.security.auth.Subject 的安全域,用于区分池中的连接。

security-domain-and-application

表示应用程序提供的参数(如 getConnection (user,pw) )或 Subject (来自安全域)都用于区分池中的连接。

sharable

启用 sharable 连接的使用,允许启用 lazy 关联(如果支持)。

tracking

指定 IronJacamar 是否应该跟踪跨事务界限的连接处理。

use-ccm

启用使用缓存的连接管理器。

use-fast-fail

是否在第一次尝试时失败连接分配(为 ),或者一直尝试直到池耗尽所有潜在连接(错误 )。

use-java-context

把它设置为 false 将对象绑定到全局 JNDI。

validate-on-match

指定在连接工厂尝试匹配受管连接时是否应进行连接验证。这通常专用于使用后台验证。

wrap-xa-resource

指定 XAResource 实例是否应嵌套在 org.jboss.tm.XAResourceWrapper 实例中。

xa-resource-timeout

该值被传递给 XAResource.setTransactionTimeout (),以秒为单位。默认值为 0

资源适配器模式可在 EAP_HOME/docs/schema/wildfly-resource-adapters_4_0.xsd 中找到。

A.22. 资源适配器统计

表 A.42. 资源适配器统计

Name描述

ActiveCount

活跃连接的数量。每个连接都由一个应用程序使用,或者在池中可用

AvailableCount

池中可用连接的数量。

AverageBlockingTime

阻止在池中获取专用锁定的平均时间。该值以毫秒为单位。

AverageCreationTime

创建连接的平均时间。该值以毫秒为单位。

CreatedCount

创建的连接数。

DestroyedCount

销毁的连接数量。

InUseCount

当前正在使用的连接数量。

MaxCreationTime

创建连接所需的最长时间。该值以毫秒为单位。

MaxUsedCount

使用的最大连接数。

MaxWaitCount

同时等待连接的最大请求数。

MaxWaitTime

等待池中专用锁定所花费的最长时间。

timedout

超时连接数量。

TotalBlockingTime

等待池中专用锁定的总时间。该值以毫秒为单位。

TotalCreationTime

创建连接的总时间。该值以毫秒为单位。

WaitCount

必须等待连接的请求数。

A.23. Undertow 子系统属性

表 A.43. Undertow 属性

属性default描述

default-security-domain

其他

Web 部署使用的默认安全域。

default-server

default-server

用于部署的默认服务器。

default-servlet-container

default

用于部署的默认 servlet 容器。

default-virtual-host

default-host

用于部署的默认虚拟主机。

instance-id

${jboss.node.name}

集群实例 ID。

启用统计

false

是否启用统计数据。

缓冲缓存属性

表 A.44. buffer-cache 属性

属性default描述

buffer-size

1024

缓冲区的大小。较小的缓冲区可以更有效地使用空间。

buffer-per-region

1024

每个区域的缓冲数。

max-regions

10

区域的最大数量。这将控制可用于缓存的最大内存量。

Servlet 容器属性

servlet 容器组件具有以下结构:

servlet-container 属性

表 A.45. servlet-container 属性

属性default描述

allow-non-standard-wrappers

false

是否可以使用不扩展标准打包程序类的请求和响应打包程序。

default-buffer-cache

default

用于缓存静态资源的缓冲缓存。

default-encoding

 

所有已部署的应用使用的默认编码。

default-session-timeout

30

容器中部署的所有应用的默认会话超时(以分钟为单位)。

directory-listing

 

应该为默认 servlet 启用目录列表。

disable-caching-for-secured-pages

true

是否将标头设置为为安全页面禁用缓存。禁用这可能会造成安全问题,因为敏感页面可能会被中间的缓存。

eager-filter-initialization

false

是否在部署上调用 init (),而不是在第一次请求时调用 init ()。

ignore-flush

false

忽略 servlet 输出流上的清除。在大多数情况下,这些性能仅因好理由而造成影响。

max-sessions

 

一次可以处于活跃状态的最大会话数。

active-authentication

false

是否应使用主动身份验证。如果为 true,如果用户存在凭证,则始终会验证用户。

session-id-length

30

生成的会话 ID 的长度。会话 ID 较长的安全。

stack-trace-on-error

local-only

如果错误页面应当生成包含堆栈 trace 的错误页面。值为 all、none 和 local-only。

use-listener-encoding

false

使用监听器上定义的编码。

MIME-mapping 属性

表 A.46. MIME-mapping 属性

属性default描述

value

 

此映射的 mime 类型。

welcome-file 属性

定义欢迎文件,没有选项。

crawler-session-management 属性

为 crawler bots 配置特殊会话处理。

注意

在使用管理 CLI 管理 crawler-session-management 元素时,它位于 servlet-container 元素 中的设置 下。例如:

/subsystem=undertow/servlet-container=default/setting=crawler-session-management:add
/subsystem=undertow/servlet-container=default/setting=crawler-session-management:read-resource

表 A.47. crawler-session-management 属性

属性default描述

session-timeout

 

由 crawlers 拥有的会话的会话超时(以秒为单位)。

user-agents

 

用于匹配 crawler 的用户代理的正则表达式。

JSP 属性
注意

在使用管理 CLI 管理 jsp 元素时,它在 servlet-container 元素的 设置 下提供。例如:

/subsystem=undertow/servlet-container=default/setting=jsp:read-resource

表 A.48. JSP 属性

属性default描述

check-interval

0

使用后台线程检查 JSP 更新的时间间隔。

开发

false

启用开发模式,允许即时重新加载 JSP。

disabled

false

启用 JSP 容器。

display-source-fragment

true

发生运行时错误时,会尝试显示对应的 JSP 源片段。

dump-smap

false

将 SMAP 数据写入文件。

error-on-use-bean-invalid-class-attribute

false

在 useBean 中使用错误时启用错误。

generate-strings-as-char-arrays

false

生成字符串常量为 char 数组。

java-encoding

UTF8

指定用于 Java 源的编码。

keep-generated

true

保留生成的 servlet。

mapped-file

true

映射到 JSP 源.

modification-test-interval

4

更新的两个测试之间的最短时间(以秒为单位)。

optimize-scriptlets

false

如果 JSP scriptlets 应经过优化,以删除字符串串联。

recompile-on-fail

false

在每个请求上重试失败的 JSP 编译。

scratch-dir

 

指定不同的工作目录。

smap

true

启用 SMAP。

source-vm

1.8

用于编译的源虚拟机级别。

tag-pooling

true

启用标签池。

target-vm

1.8

用于编译的目标虚拟机级别。

trim-spaces

false

从生成的 servlet 中修剪一些空格。

x-powered-by

true

在 x-driven-by 中启用 JSP 引擎。

persistent-sessions 属性
注意

在使用管理 CLI 管理 persistent-sessions 元素时,它在 servlet-container 元素的 设置 下提供。例如:

/subsystem=undertow/servlet-container=default/setting=persistent-sessions:add
/subsystem=undertow/servlet-container=default/setting=persistent-sessions:read-resource

表 A.49. persistent-sessions 属性

属性default描述

path

 

持久会话数据目录的路径。如果这是 null,则会话将存储在内存中。

relative-to

 

路径相对的目录。

注意

在使用管理 CLI 管理 session-cookie 元素时,它在 servlet-container 元素的 设置 下提供。例如:

/subsystem=undertow/servlet-container=default/setting=session-cookie:add
/subsystem=undertow/servlet-container=default/setting=session-cookie:read-resource

表 A.50. session-cookie 属性

属性default描述

注释

 

Cookie 注释。

domain

 

Cookie 域.

http-only

 

Cookie 是否为 http-only。

max-age

 

Cookie 的最长期限。

name

 

cookie 的名称。

secure

 

Cookie 是否安全。

Websocket 属性
注意

在使用管理 CLI 管理 websockets 元素时,它在 servlet-container 元素的 设置 下提供。例如:

/subsystem=undertow/servlet-container=default/setting=websockets:read-resource

表 A.51. Websocket 属性

属性default描述

buffer-pool

default

用于 websocket 部署的缓冲池。

dispatch-to-worker

true

回调是否应分配给 worker 线程。如果是 false,则它们将在 IO 线程中运行,这更快,但必须不要执行阻塞操作。

worker

default

用于 websocket 部署的 worker。

过滤属性

custom-filter Filters

表 A.52. custom-filter 属性

属性default描述

class-name

 

HttpHandler 的类名称。

module

 

从其中加载类的模块名称。

parameters

 

过滤参数.

错误页面过滤器

错误页面

表 A.53. error-page 属性

属性default描述

code

 

错误页面代码。

path

 

错误页面路径。

expression-filter Filters

从 Undertow 表达式语言解析的过滤器。

表 A.54. expression-filter 属性

属性default描述

expression

 

定义过滤器的表达式。

module

 

用于加载过滤器定义的模块。

gzip Filters

定义 gzip 过滤器,没有属性。

mod-cluster Filters

mod-cluster 过滤器组件具有以下结构:

表 A.55. mod-cluster 属性

属性default描述

advertise-frequency

10000

mod_cluster 在网络上公告自己的频率(以毫秒为单位)。

advertise-path

/

mod_cluster 在下注册的路径。

advertise-protocol

http

正在使用的协议。

advertise-socket-binding

 

用于公告的多播组。

broken-node-timeout

60000

从表中删除损坏的节点前必须经过的时间。

cached-connections-per-thread

5

无限期保留的连接数量。

connection-idle-timeout

60

连接在关闭前可以闲置的时间。当池大小缩减到配置的最小大小后,连接不会超时,这由 cached-connections-per-thread 配置。

connections-per-thread

10

每个 IO 线程将维护至后端服务器的连接数量。

enable-http2

false

负载均衡器是否应该尝试将后端连接升级到 HTTP/2。如果不支持 HTTP/2,则 HTTP 或 HTTPS 将正常使用。

health-check-interval

10000

健康检查对后端节点进行 ping 的频率。

management-access-predicate

 

应用到传入请求的 predicate,以确定它们是否可以执行 mod 集群管理命令。通过将管理限制为源自 management-socket-binding 的请求,对提供什么方面提供额外的安全性。

management-socket-binding

 

mod_cluster 管理端口的套接字绑定。应定义使用 mod_cluster 两个 HTTP 侦听器时,一个用于处理请求,以及一个绑定到内部网络以处理 mod cluster 命令。此套接字绑定应当与内部监听程序对应,不应公开访问。

max-request-time

-1

对后端节点请求在被终止前可以花费的最长时间。

request-queue-size

10

如果连接池已满,可以在请求被拒绝前排队的请求数 503。

security-key

 

用于 mod_cluster 组的安全密钥。所有成员都必须使用相同的安全密钥。

security-realm

 

提供 SSL 配置的安全域。

use-alias

false

是否执行别名检查。

worker

default

用于发送通知的 XNIO worker。

表 A.56. 负载均衡器属性

属性default描述

max-attempts

 

将请求发送到后端服务器的尝试次数。

sticky-session

 

如果启用了粘性会话。

sticky-session-cookie

 

会话 Cookie 名称。

sticky-session-force

 

如果为 true,则如果请求无法路由到粘性节点,则返回错误,否则它将路由到另一个节点。

sticky-session-path

 

粘性会话 Cookie 的路径。

sticky-session-remove

 

如果请求无法路由到正确的主机,请删除会话 Cookie。

wait-worker

 

等待可用 worker 的秒数。

load-balancing-group 属性

定义负载平衡组,没有选项。

表 A.57. 节点属性

属性default描述

别名

 

节点别名。

cache-connections

 

要无限期保留的连接数量。

选择

 

选择的计数。

flush-packets

 

如果收到的数据应该会立即刷新。

load

 

此节点的当前负载。

load-balancing-group

 

此节点所属的负载平衡组。

max-connections

 

每个 IO 线程连接的最大数量。

open-connections

 

当前打开的连接数。

ping

 

节点 ping。

queue-new-requests

 

如果收到请求,且没有立即可用的 worker 会被排队。

读取

 

从节点读取的字节数。

request-queue-size

 

请求队列的大小。

status

 

此节点的当前状态。

timeout

 

请求超时。

ttl

 

如果连接数量大于 cache-connections,则在关闭前不会保留任何请求。

uri

 

负载均衡器用于连接节点的 URI。

 

传送到节点的字节数。

表 A.58. 上下文属性

属性default描述

requests

 

针对此上下文的请求数。

status

 

此上下文的状态。

request-limit Filters

表 A.59. request-limit 属性

属性default描述

max-concurrent-requests

 

并发请求数上限。

queue-size

 

在被拒绝前对队列的请求数。

response-header Filters

响应标头过滤器允许您添加自定义标头。

表 A.60. response-header 属性

属性default描述

header-name

 

标头名称。

header-value

 

标头值。

重写过滤器

表 A.61. 重写属性

属性default描述

重定向

false

重定向是否将进行,而不是重写。

target

 

定义目标的表达式。如果您要重定向到一个常态目标,请在值两处放置单引号。

处理程序属性

文件属性

表 A.62. 文件属性

属性default描述

cache-buffer-size

1024

缓冲区的大小。

cache-buffers

1024

缓冲区数量。

区分大小写

true

是否使用区分大小写的文件处理。请注意,仅当底层文件系统区分大小写时,将其设置为 false 才可以正常工作。

directory-listing

false

是否启用目录列表。

follow-symlink

false

是否启用以下符号链接:

path

 

文件处理程序将服务于资源的文件系统的路径。

safe-symlink-paths

 

安全地作为符号链接的目标的路径。

将 WebDAV 用于静态资源

以前的 JBoss EAP 版本允许使用带有 Web 子系统的 WebDAV,方法 WebdavServlet 托管静态资源,并启用额外的 HTTP 方法来访问和操作这些文件。在 JBoss EAP 7 中,undertow 子系统提供了使用文件处理程序提供静态文件的机制,但 undertow 子系统不支持 WebDAV。如果要将 WebDAV 与 JBoss EAP 7 搭配使用,您可以编写自定义 WebDAV servlet。

reverse-proxy 属性

reverse-proxy 处理程序组件具有以下结构:

表 A.63. reverse-proxy 属性

属性default描述

cached-connections-per-thread

5

无限期保留的连接数量。

connection-idle-timeout

60

连接在关闭前可以闲置的时间。当池大小缩减到配置的最小大小(由 cached-connections-per-thread 配置)后,连接不会超时。

connections-per-thread

10

每个 IO 线程将维护至后端服务器的连接数量。

max-request-time

-1

代理请求在被终止前可以处于活跃状态的最长时间。默认值为没有限制。

problem-server-retry

30

尝试重新连接关闭的服务器前等待的时间(以秒为单位)。

request-queue-size

10

如果连接池已满,可以在请求被拒绝前排队的请求数 503。

session-cookie-names

JSESSIONID

会话 Cookie 名称的逗号分隔列表。这通常只是 JSESSIONID。

表 A.64. 主机属性

属性default描述

instance-id

 

用于启用粘性会话的实例 ID 或 JVM 路由。

outbound-socket-binding

 

此主机的出站套接字绑定。

path

/

如果主机使用非 root 资源,则可选路径。

scheme

http

使用的方案类型。

security-realm

 

为与主机的连接提供 SSL 配置的安全域。

服务器属性

服务器组件具有以下结构:

服务器属性

表 A.65. 服务器属性

属性default描述

default-host

default-host

服务器的默认虚拟主机。

servlet-container

default

服务器的默认 servlet 容器。

http-listener 属性

表 A.66. http-listener 属性

属性default描述

allow-encoded-slash

false

如果请求附带编码的字符,例如 %2F,则是否对它们进行解码。

allow-equals-in-cookie-value

false

是否允许不加引号的 Cookie 值中的非转义等于字符。不加引号的 Cookie 值不能包含等号。如果显示该值在等号之前结束。Cookie 值的其余部分将被丢弃。

always-set-keep-alive

true

是否使用 Connection: keep-alive 标头将添加到响应中,即使规格严格要求也是如此。

buffer-pipelined-data

false

是否缓冲管道请求。

buffer-pool

default

侦听器的缓冲区池。

证书转发

false

是否应该启用证书转发。如果启用此项,则监听器将从 SSL_CLIENT_CERT 属性获取证书。只有代理后面,并且代理配置为始终设置这些标头时,才能启用。

decode-url

true

解析器是否使用所选字符编码(UTF-8)解码 URL 和查询参数。如果这是 false,则不会解码。这将允许后续处理程序将其解码为需要的任何 charset。

disallowed-methods

["TRACE"]

以逗号分隔的 HTTP 方法列表。

enable-http2

false

是否为这个监听程序启用 HTTP/2 支持。

enabled

true

是否启用监听程序。

http2-enable-push

true

是否为这个连接启用服务器推送。

http2-header-table-size

 

用于 HPACK 压缩的标头表的大小,以字节为单位。此内存量将为每个连接分配压缩。较大的值使用更多内存,但可能会提供更好的压缩。

http2-initial-window-size

 

流控制窗口大小,用来控制客户端向服务器发送数据的速度。

http2-max-concurrent-streams

 

单个连接上任何时间可以处于活跃状态的最大 HTTP/2 流数。

http2-max-frame-size

 

最大 HTTP/2 帧大小。

http2-max-header-list-size

 

服务器准备接受的最大请求标头大小。

max-buffered-request-size

16384

缓冲的请求的最大大小(在 bytesRequests 中通常不会被缓冲),最常见的情况是在为 POST 请求执行 SSL 重新协商时,必须完全缓冲后数据才能执行重新协商。

max-connections

 

并发连接的最大数量。

max-cookies

200

将要解析的最大 Cookie 数。这用于防止哈希漏洞。

max-header-size

1048576

HTTP 请求标头的最大大小(以字节为单位)。

max-headers

200

将要解析的最大标头数。这用于防止哈希漏洞。

max-parameters

1000

将解析的最大参数数。这用于防止哈希漏洞。这适用于查询参数和 POST 数据,但不适用于累积数据。例如,您可以有最大参数 * 2 个总计参数。

max-post-size

10485760

将接受的发布的最大值。

no-request-timeout

60000

在容器关闭前连接可以闲置的时间长度(以毫秒为单位)。

proxy-address-forwarding

false

是否启用 x-forwarded-host 和类似的标头并设置远程 IP 地址和主机名。

read-timeout

 

为套接字配置读取超时,以毫秒为单位。如果给定时间没有成功读取,则套接字的下一个读取将抛出 {@link ReadTimeoutException}。

receive-buffer

 

接收缓冲区大小。

record-request-start-time

false

是否记录请求启动时间,以允许记录请求时间。这很小,但可衡量的性能影响。

redirect-socket

 

如果此侦听器支持非 SSL 请求,并且收到匹配需要 SSL 传输的请求,是否自动将请求重定向到此处指定的套接字绑定端口。

request-parse-timeout

 

解析请求可花费的最大时间(毫秒)。

resolve-peer-address

false

启用主机 DNS 查找。

send-buffer

 

发送缓冲区大小。

socket-binding

 

侦听器的套接字绑定

tcp-backlog

 

使用指定的 backlog 配置服务器。

tcp-keep-alive

 

配置网络,以独立实施的方式发送 TCP 保持消息。

url-charset

UTF-8

URL charset。

worker

default

侦听器的 XNIO 工作程序。

write-timeout

 

为套接字配置写入超时,以毫秒为单位。如果给定时间没有成功写入,则套接字的下一个写入将抛出 {@link WriteTimeoutException}。

以下属性是只读的,仅在为 undertow 子系统启用统计数据时才可用:

表 A.67. http-listener Metric 属性

属性default描述

bytes-received

 

此监听器接收的字节数。

bytes-sent

 

在此侦听器上发送的字节数。

error-count

 

此监听器发送的 500 个响应数量。

max-processing-time

 

此监听器上请求所花费的最大处理时间。

processing-time

 

此监听器分发的所有请求的总处理时间。

request-count

 

此侦听器服务的请求数。

https-listener 属性

表 A.68. https-listener 属性

属性default描述

allow-encoded-slash

false

如果请求附带编码的字符,例如 %2F,则是否对它们进行解码。

allow-equals-in-cookie-value

false

是否允许不加引号的 Cookie 值中的非转义等于字符。不加引号的 Cookie 值不能包含等号。如果显示该值在等号之前结束。Cookie 值的其余部分将被丢弃。

always-set-keep-alive

true

是否使用 Connection: keep-alive 标头将添加到响应中,即使规格严格要求也是如此。

buffer-pipelined-data

false

是否缓冲管道请求。

buffer-pool

default

侦听器的缓冲区池。

decode-url

true

解析器是否使用所选字符编码(UTF-8)解码 URL 和查询参数。如果这是 false,则不会解码。这将允许后续处理程序将其解码为需要的任何 charset。

disallowed-methods

["TRACE"]

以逗号分隔的 HTTP 方法列表。

enable-http2

false

为此监听程序启用 HTTP/2 支持。

enable-spdy

false

为此监听程序启用 SPDY 支持。

enabled

true

如果启用了监听程序。

enabled-cipher-suites

 

配置已启用的 SSL 密码。

enabled-protocols

 

配置 SSL 协议。

http2-enable-push

true

如果为这个连接启用了 server push。

http2-header-table-size

 

用于 HPACK 压缩的标头表的大小,以字节为单位。此内存量将为每个连接分配压缩。较大的值使用更多内存,但可能会提供更好的压缩。

http2-initial-window-size

 

流控制窗口大小,用来控制客户端向服务器发送数据的速度。

http2-max-concurrent-streams

 

单个连接上任何时间可以处于活跃状态的最大 HTTP/2 流数。

http2-max-frame-size

 

最大 HTTP/2 帧大小。

http2-max-header-list-size

 

服务器准备接受的最大请求标头大小。

max-buffered-request-size

16384

缓冲的请求的最大大小(在 bytesRequests 中通常不会被缓冲),最常见的情况是在为 POST 请求执行 SSL 重新协商时,必须完全缓冲后数据才能执行重新协商。

max-connections

 

并发连接的最大数量。

max-cookies

100

将要解析的最大 Cookie 数。这用于防止哈希漏洞。

max-header-size

1048576

HTTP 请求标头的最大大小(以字节为单位)。

max-headers

200

将要解析的最大标头数。这用于防止哈希漏洞。

max-parameters

1000

将解析的最大参数数。这用于防止哈希漏洞。这适用于查询参数和 POST 数据,但不适用于累积数据。例如,您可以有 max parameters * 2 total 参数。

max-post-size

10485760

将接受的发布的最大值。

no-request-timeout

60000

在容器关闭前连接可以闲置的时间长度(以毫秒为单位)。

read-timeout

 

为套接字配置读取超时,以毫秒为单位。如果给定时间没有成功读取,则套接字的下一个读取将抛出 {@link ReadTimeoutException}。

receive-buffer

 

接收缓冲区大小。

record-request-start-time

false

是否记录请求启动时间,以允许记录请求时间。这很小,但可衡量的性能影响。

request-parse-timeout

 

解析请求可花费的最大时间(毫秒)。

resolve-peer-address

false

启用主机 DNS 查找。

security-realm

 

侦听器的安全域。

send-buffer

 

发送缓冲区大小。

socket-binding

 

侦听器的套接字绑定。

ssl-session-cache-size

 

活跃的 SSL 会话的最大数量。

ssl-session-timeout

 

SSL 会话的超时时间(以秒为单位)。

tcp-backlog

 

使用指定的 backlog 配置服务器。

tcp-keep-alive

 

配置网络,以独立实施的方式发送 TCP 保持消息。

url-charset

UTF-8

URL charset。

verify-client

NOT_REQUESTED

SSL 频道所需的 SSL 客户端身份验证模式。

worker

default

侦听器的 XNIO 工作程序。

write-timeout

 

为套接字配置写入超时,以毫秒为单位。如果给定时间没有成功写入,则套接字的下一个写入将抛出 {@link WriteTimeoutException}。

以下属性是只读的,仅在为 undertow 子系统启用统计数据时才可用:

表 A.69. https-listener Metric 属性

属性default描述

bytes-received

 

此监听器接收的字节数。

bytes-sent

 

在此侦听器上发送的字节数。

error-count

 

此监听器发送的 500 个响应数量。

max-processing-time

 

此监听器上请求所花费的最大处理时间。

processing-time

 

此监听器分发的所有请求的总处理时间。

request-count

 

此侦听器服务的请求数。

AJP-listener 属性

表 A.70. AJP-listener 属性

属性default描述

allow-encoded-slash

false

如果请求附带编码的字符,例如 %2F,则是否对它们进行解码。

allow-equals-in-cookie-value

false

是否允许不加引号的 Cookie 值中的非转义等于字符。不加引号的 Cookie 值不能包含等号。如果显示该值在等号之前结束。Cookie 值的其余部分将被丢弃。

always-set-keep-alive

true

是否使用 Connection: keep-alive 标头将添加到响应中,即使规格严格要求也是如此。

buffer-pipelined-data

false

是否缓冲管道请求。

buffer-pool

default

AJP 侦听器的缓冲区池。

decode-url

true

如果为 true,则解析器将使用所选字符编码(UTF-8)解码 URL 和查询参数。如果这是 false,则不会解码。这将允许后续处理程序将其解码为需要的任何 charset。

disallowed-methods

["TRACE"]

以逗号分隔的 HTTP 方法列表。

enabled

true

如果启用了监听程序。

max-ajp-packet-size

 

最多支持 AJP 数据包的大小。如果进行了修改,它会在负载均衡器和后端服务器上增加。

max-buffered-request-size

16384

缓冲的请求的最大大小(在 bytesRequests 中通常不会被缓冲),最常见的情况是在为 POST 请求执行 SSL 重新协商时,必须完全缓冲后数据才能执行重新协商。

max-connections

 

并发连接的最大数量。

max-cookies

200

将要解析的最大 Cookie 数。这用于防止哈希漏洞。

max-header-size

1048576

HTTP 请求标头的最大大小(以字节为单位)。

max-headers

200

将要解析的最大标头数。这用于防止哈希漏洞。

max-parameters

100

将解析的最大参数数。这用于防止哈希漏洞。这适用于查询参数和 POST 数据,但不适用于累积数据。例如,您可以有 max parameters * 2 total 参数。

max-post-size

10485760

将接受的发布的最大大小

no-request-timeout

60000

在容器关闭前连接可以闲置的时间长度(以毫秒为单位)。

read-timeout

 

为套接字配置读取超时,以毫秒为单位。如果给定时间没有成功读取,则套接字的下一个读取将抛出 {@link ReadTimeoutException}。

receive-buffer

 

接收缓冲区大小。

record-request-start-time

false

是否记录请求启动时间,以允许记录请求时间。这很小,但可衡量的性能影响。

redirect-socket

 

如果此侦听器支持非 SSL 请求,并且收到匹配需要 SSL 传输的请求,是否自动将请求重定向到此处指定的套接字绑定端口。

request-parse-timeout

 

解析请求可花费的最大时间(毫秒)。

resolve-peer-address

false

启用主机 DNS 查找。

scheme

 

侦听器方案可以是 HTTP 或 HTTPS。默认情况下,方案将从传入的 AJP 请求中获取。

send-buffer

 

发送缓冲区大小。

socket-binding

 

AJP 侦听器的套接字绑定.

tcp-backlog

 

使用指定的 backlog 配置服务器。

tcp-keep-alive

 

配置网络,以独立实施的方式发送 TCP 保持消息。

url-charset

UTF-8

URL charset。

worker

default

侦听器的 XNIO 工作程序。

write-timeout

 

为套接字配置写入超时,以毫秒为单位。如果给定时间没有成功写入,则套接字的下一个写入将抛出 {@link WriteTimeoutException}。

以下属性是只读的,仅在为 undertow 子系统启用统计数据时才可用:

表 A.71. AJP-listener Metric 属性

属性default描述

bytes-received

 

此监听器接收的字节数。

bytes-sent

 

在此侦听器上发送的字节数。

error-count

 

此监听器发送的 500 个响应数量。

max-processing-time

 

此监听器上请求所花费的最大处理时间。

processing-time

 

此监听器分发的所有请求的总处理时间。

request-count

 

此侦听器服务的请求数。

主机属性

表 A.72. 主机属性

属性default描述

alias

 

以逗号分隔的主机别名列表。

default-response-code

404

如果设置,在 server 上不存在请求的上下文时,这将发回响应代码。

default-web-module

ROOT.war

默认 Web 模块.

disable-console-redirect

false

如果设置为 true,则会为此主机启用 /console redirect wont。

filter-ref 属性

表 A.73. filter-ref 属性

属性default描述

predicate

 

predicates 提供了根据交换做出 true/false 决策的简单方法。许多处理程序要求有条件地应用它们,并且 predicates 提供了指定条件的通用方法。

priority

1

定义过滤器顺序。它应设置为 1 或更高。数值较高的指示服务器之前包含在处理程序链中,而不是同一上下文下的其他服务器。

access-log 属性
注意

在使用管理 CLI 管理 access-log 元素时,它在 host 元素的 settings 下可用。例如:

/subsystem=undertow/server=default-server/host=default-host/setting=access-log:add
/subsystem=undertow/server=default-server/host=default-host/setting=access-log:read-resource

表 A.74. access-log 属性

属性default描述

目录

${jboss.server.log.dir}

保存日志的目录。

Extended

false

日志是否使用扩展日志文件格式。

pattern

Common

访问日志模式。

predicate

 

决定是否应记录请求的 predicate。

prefix

access_log。

日志文件名称的前缀。

relative-to

 

路径相对的目录。

rotate

true

是否每天轮转访问日志。

suffix

log

日志文件名称的后缀。

use-server-log

false

日志是否应写入服务器日志,而不是单独的文件。

worker

default

用于日志记录的 worker 名称。

单点登录属性
注意

在使用管理 CLI 管理 single-sign-on 元素时,它在 host 元素中的 settings 下可用。例如:

/subsystem=undertow/server=default-server/host=default-host/setting=single-sign-on:add
/subsystem=undertow/server=default-server/host=default-host/setting=single-sign-on:read-resource
重要

虽然分布式单点登录与之前版本的 JBoss EAP 的应用视角不同,但在 JBoss EAP 7 中,身份验证信息的缓存和分发方式不同。对于 JBoss EAP 7,在运行 HA 配置文件时,默认情况下,每个主机都有自己的 Infinispan 缓存,该缓存将存储相关的会话和 SSO Cookie 信息。此缓存基于 Web 缓存容器的默认缓存。JBoss EAP 还将处理在所有主机的单个缓存之间传播信息。

表 A.75. 单点登录属性

属性default描述

cookie-name

JSESSIONIDSSO

cookie 的名称。

domain

 

要使用的 Cookie 域。

http-only

false

设置 Cookie httpOnly 属性。

path

/

Cookie 路径。

secure

false

设置 Cookie 安全属性。

位置属性

表 A.76. 位置属性

属性default描述

handler

 

此位置的默认处理程序。

A.24. HTTP 方法的默认行为

与前面 JBoss EAP 版本中的 Web 子系统相比,JBoss EAP 7.0 中的 undertow 子系统具有不同的 HTTP 方法默认行为。下表概述了 JBoss EAP 7.0 中的默认行为。

表 A.77. HTTP 方法默认行为

HTTP 方法JSPServlet静态 HTML

GET

确定

取决于其实现

确定

POST

确定

取决于其实现

NOT_ALLOWED

HEAD

确定

取决于其实现

确定

PUT

NOT_ALLOWED

取决于其实现

NOT_ALLOWED

TRACE

NOT_ALLOWED

NOT_ALLOWED

NOT_ALLOWED

DELETE

NOT_ALLOWED

取决于其实现

NOT_ALLOWED

选项

NOT_ALLOWED

取决于其实现

确定

A.25. IO 子系统属性

表 A.78. worker 属性

属性default描述

io-threads

 

要使用的 IO 线程数量。

stack-size

0

堆栈的大小。

task-keepalive

60

任务的 keepalive 时间。此属性不应使用,因为它当前被忽略。

task-max-threads

 

任务的最大线程数。

表 A.79. buffer-pool 属性

属性default描述

buffer-size

 

缓冲区的大小。

buffers-per-slice

 

每个分片的缓冲数量。

direct-buffers

 

缓冲区池是否使用直接缓冲区。

A.26. 补救子系统属性

表 A.80. 远程属性

属性default描述

worker-read-threads

1

为 remoting worker 创建的读取线程数量。

worker-task-core-threads

4

远程 worker 任务线程池的核心线程数量。

worker-task-keepalive

60

保持非内核远程 worker 任务线程的毫秒数。

worker-task-limit

16384

在拒绝前允许的最大重新 worker 任务数量。

worker-task-max-threads

16

remoting worker 任务线程池的最大线程数量。

worker-write-threads

1

为远程 worker 创建的写入线程数量。

重要

remoting 元素的上述属性已弃用。这些属性现在应使用 io 子系统进行配置。

表 A.81. 端点属性

属性default描述

auth-realm

 

如果没有指定身份验证 CallbackHandler,要使用的身份验证域。

authentication-retries

3

指定在关闭连接前允许客户端重试身份验证的次数。

authorize-id

 

SASL 授权 ID。如果没有指定身份验证 CallbackHandler,而所选的 SASL 机制需要用户名,则用作身份验证用户名。

buffer-region-size

 

分配的缓冲区区域的大小。

heartbeat-interval

2147483647

连接心跳的时间间隔,以毫秒为单位。如果连接在此时间的出站方向下闲置,将发送 ping 消息,这将触发相应的回复消息。

max-inbound-channels

40

频道中并发入站消息的最大数量。

max-inbound-message-size

9223372036854775807

允许的最大入站消息大小。超过这个大小的消息会在读端和写端抛出异常。

max-inbound-messages

80

支持连接的最大入站频道数。

max-outbound-channels

40

频道中并发出站消息的最大数量。

max-outbound-message-size

9223372036854775807

要发送的最大出站消息大小。没有大于此好的消息;尝试这样做将导致写端异常。

max-outbound-messages

65535

支持连接的出站频道的最大数量。

receive-buffer-size

8192

此端点通过连接接受的最大缓冲区的大小。

receive-window-size

131072

连接频道的接收方向的最大窗口大小,以字节为单位。

sasl-protocol

远程

如果默认创建 SaslServer 或 SaslClient,则指定的协议是 remoting,这可用于覆盖此值。

send-buffer-size

8192

此端点将通过连接传输的最大缓冲区的大小。

server-name

 

默认情况下,连接的服务器端将其名称与初始问候中的客户端传递,默认情况下会自动从连接的本地地址发现名称,也可以使用此操作覆盖该名称。

transmit-window-size

131072

连接频道的传输方向的最大窗口大小,以字节为单位。

worker

default

要使用的 worker

注意

当使用管理 CLI 更新 endpoint 元素时,可在 remoting 元素(例如: /subsystem= remoting / configuration =endpoint/)的配置下提供

连接器属性

连接器组件具有以下结构:

表 A.82. 连接器属性

属性default描述

authentication-provider

 

authentication-provider 元素包含用于传入连接的身份验证提供程序的名称。

sasl-protocol

remote

要传递给用于身份验证的 SASL 机制的协议。

security-realm

 

用于此连接器身份验证的相关安全域。

server-name

 

要在初始消息交换中发送的服务器名称,以及基于 SASL 的身份验证。

socket-binding

 

要附加的套接字绑定的名称(或名称)。

表 A.83. 属性属性

属性default描述

value

 

属性值。

安全属性

安全 组件允许您为连接器配置安全性,但不包含直接配置属性。它可以使用其嵌套组件(如 sasl )进行配置。

表 A.84. SASL 属性

属性default描述

include-mechanisms

 

可选的 nested include-mechanisms 元素包含允许的 SASL 机制名称的白名单。不允许在此列表中不存在任何机制。

qop

 

可选的嵌套 qop 元素包含质量保护值列表,以降序排列。

reuse-session

false

可选的 nested reuse-session 布尔值元素指定服务器是否应该尝试重复使用之前经过身份验证的会话信息。机制可能或者可能不支持这种重复使用,其他因素也可能会阻止它。

server-auth

false

可选的 server-auth 布尔值元素指定服务器是否应该对客户端进行身份验证。并非所有机制都可能支持此设置。

强度

 

可选的嵌套"strength"元素包含密码强度值列表,按首选顺序减少。

sasl-policy 属性

sasl-policy 组件允许您指定一个可选策略,用于缩小可用的机制集,但不包含直接配置属性。它可以通过其嵌套组件(如 策略 )进行配置。

表 A.85. 策略属性

属性default描述

forward-secrecy

true

可选的 nested forward-secrecy 元素包含一个布尔值,用于指定是否需要在会话之间实现转发保密的机制。转发保密意味着破坏到一个会话不会自动提供划分到将来会话的信息。

no-active

true

可选的 nested no-active 元素包含一个布尔值,它指定是否允许对活跃(非字典)攻击的机制。false 到 permit,true 代表拒绝。

no-anonymous

true

可选的 nested no-anonymous 元素包含一个布尔值,用于指定是否允许匿名登录机制。false 到 permit,true 代表拒绝。

无字典

true

可选的嵌套 no- 字典 元素包含一个布尔值,它指定是否允许机制易受被动字典攻击。false 到 permit,true 代表拒绝。

no-plain-text

true

可选的 nested no-plain-text 元素包含一个布尔值,它指定是否允许机制容易受到简单的纯文本攻击(如 PLAIN)。false 到 permit,true 代表拒绝。

pass-credentials

true

可选的嵌套 pass-credentials 元素包含一个布尔值,用于指定是否需要传递客户端凭证的机制。

HTTP Connector 属性

http-connector 组件具有以下结构:

表 A.86. http-connector 属性

属性default描述

authentication-provider

 

authentication-provider 元素包含用于传入连接的身份验证提供程序的名称。

connector-ref

 

undertow 子系统中要连接的连接器的名称(或名称)。

sasl-protocol

remote

要传递给用于身份验证的 SASL 机制的协议。

security-realm

 

用于此连接器身份验证的相关安全域。

server-name

 

要在初始消息交换中发送的服务器名称,以及基于 SASL 的身份验证。

出站连接属性

outbound-connection 组件具有以下结构:

表 A.87. outbound-connection 属性

属性default描述

uri

 

出站连接的连接 URI。

表 A.88. 属性属性

属性default描述

value

 

属性值。

注意

以上 属性 属性与创建连接过程中要使用的 XNIO 选项相关。

远程出站连接

remote-outbound-connection 组件具有以下结构:

表 A.89. remote-outbound-connection 属性

属性default描述

outbound-socket-binding-ref

 

用于确定连接的目标地址和端口的 outbound-socket-binding 的名称。

protocol

http-remoting

用于远程连接的协议。默认为 http-remoting

security-realm

 

对用于获取密码和 SSL 配置的安全域的引用。

username

 

对远程服务器进行身份验证时使用的用户名。

本地出站连接属性

local-outbound-connection 组件具有以下结构:

表 A.90. local-outbound-connection 属性

属性default描述

outbound-socket-binding-ref

 

用于确定连接的目标地址和端口的 outbound-socket-binding 的名称。

A.27. Apache HTTP Server mod_cluster Directives

mod_cluster 连接器是基于 Apache HTTP 服务器的负载均衡器。它使用通信通道将请求从 Apache HTTP 服务器转发到一组应用服务器节点。可以设置以下指令来配置 mod_cluster。

注意

不需要使用 ProxyPass 指令,因为 mod_cluster 会自动配置必须转发到 Apache HTTP 服务器的 URL。

表 A.91. mod_cluster Directives

指令描述

CreateBalancers

定义如何在 Apache HTTP 服务器 VirtualHosts 中创建负载均衡器。这允许指令,如: ProxyPass /balancer://mycluster1/

  • 0 :创建 Apache HTTP 服务器中定义的所有 VirtualHosts
  • 1: 不要创建负载均衡器(至少需要一个 ProxyPassProxyMatch 来定义负载均衡器名称)
  • 2: 仅创建主服务器 (默认)

UseAlias

检查别名是否与服务器名称对应。

  • 0 :忽略别名 (默认)
  • 1: 检查别名

LBstatusRecalTime

重新计算节点状态的负载平衡逻辑的时间间隔(以秒为单位)。

默认: 5 秒

WaitBeforeRemove

删除的节点被 httpd 忘记前的时间(以秒为单位)。

默认: 10 秒

ProxyPassMatch/ProxyPass

ProxyPassMatch 和 ProxyPass 是 mod_proxy 指令,在使用 ! (而不是后端 URL)时,会在路径中阻止反向代理。这用于允许 Apache HTTP 服务器提供静态内容。例如: ProxyPassMatch ^(/ prerequisites\.gif)$ !这个示例允许 Apache HTTP 服务器直接提供 .gif 文件。

 
注意

由于 JBoss EAP 7 中会话的性能优化,不支持配置热节点。

mod_manager

在所有情况下,mod_manager 指令的上下文都是 VirtualHost,除非另有说明。服务器配置 上下文表示该指令必须在 VirtualHost 配置之外。如果没有,则会显示错误消息,并且 Apache HTTP 服务器不会启动。

表 A.92. mod_manager Directives

指令描述

EnableMCPMReceive

允许 VirtualHost 从节点接收 MCPM。在 Apache HTTP 服务器配置中包含 EnableMCPMReceive 以允许 mod_cluster 工作。将它保存到配置广告的 VirtualHost 中。

 

MemManagerFile

mod_manager 用来存储配置的名称的基本名称,为共享内存或锁定文件生成密钥。这必须是绝对路径名;如果需要,会创建目录。建议将这些文件放在本地驱动器中,而不是 NFS 共享。context: server config

$server_root/logs/

Maxcontext

mod_cluster 支持的最大上下文数。context: server config

默认: 100

Maxnode

mod_cluster 支持的最大节点数。context: server config

默认 :20

Maxhost

mod_cluster 支持的最大主机数(别名)。它还包括负载均衡器的最大数量。context: server config

默认 :20

Maxsessionid

存储的活跃 sessionid 数量,以便在 mod_cluster-manager 处理程序中提供活动会话的数量。当 mod_cluster 没有在 5 分钟内从会话接收任何信息时,会话不活跃。上下文:服务器配置.此字段仅用于演示和调试目的。

0 :逻辑没有激活。

MaxMCMPMaxMessSize

来自其他 Max 指令的最大 MCMP 消息大小

从其他 Max 指令计算。Min: 1024

ManagerBalancerName

JBoss EAP 实例不提供均衡名称时要使用的平衡名称。

mycluster

PersistSlots

告知 mod_slotmem 在文件中持久保留节点、别名和上下文。context: server config

CheckNonce

使用 mod_cluster-manager 处理程序时切换检查 非ce

on/off Default: on - Nonce check

AllowDisplay

mod_cluster-manager 主页上切换其他显示。

on/off Default: off - 仅会显示版本

AllowCmd

使用 mod_cluster-manager URL 允许命令。

on/off 默认值: - 允许的命令

ReduceDisplay

减少主 mod_cluster-manager 页面上显示的信息,以便在页面中显示更多节点。

on/off Default: off - 此时会显示完整信息

SetHandler mod_cluster-manager

显示 mod_cluster 从集群中看到的节点的信息。该信息包括通用信息,另外计算活动会话的数量。

<Location /mod_cluster-manager>
  SetHandler mod_cluster-manager
  Require ip 127.0.0.1
</Location>

on/off 默认值: off

注意

在访问 httpd.conf 中定义的位置时:

  • 传输:发送到后端服务器的 POST 数据。
  • 已连接:在请求 mod_cluster 状态页面时,将处理的请求数量 Corresponds。
  • Num_sessions:Corresponds 将会话 mod_cluster 报告的数量作为活动状态(在过去 5 分钟内有一个请求)。当 Maxsessionid 为零且仅用于演示和调试目的时,此字段不存在。

A.28. modcluster 子系统属性

modcluster 子系统具有以下结构:

表 A.93. mod-cluster-config 配置选项

属性default描述

advertise

true

是否启用广告。

advertise-security-key

 

包含 Advertise 逻辑的安全密钥的字符串。

advertise-socket

 

用于 Advertise 套接字的套接字绑定名称。

auto-enable-contexts

true

如果设置为 false,则上下文将使用反向代理注册为禁用。您可以使用 enable-context 操作或使用 mod_cluster_manager 控制台启用上下文。

balancer

 

要注册的反向代理中负载均衡器的名称。如果没有设置,则使用 ManagerBalancerName 指令在 Apache HTTP 服务器端配置该值,该指令默认为 mycluster

connector

 

mod_cluster 反向代理将连接的 Undertow 侦听器的名称。

excluded-contexts

 

要从带有反向代理的注册中排除的上下文列表。如果未指定主机,则会假定主机为 localhostROOT 表示 Web 应用的根上下文。

flush-packets

false

是否启用数据包刷新到 Web 服务器。

flush-wait

-1

在 httpd 中清空数据包前等待的时间。最大值为 2,147,483,647

load-balancing-group

 

如果设置,请求将发送到负载均衡器上指定的负载均衡组。

max-attempts

1

在放弃前,反向代理将尝试向 worker 发送给定请求的次数。

node-timeout

-1

超时时间(以秒为单位),用于代理连接到 worker。这是 mod_cluster 在返回错误前等待后端响应的时间。如果 node-timeout 属性未定义,则使用 httpd ProxyTimeout 指令。如果 ProxyTimeout 未定义,则使用 httpd Timeout 指令,默认为 300 秒。

ping

10

以秒为单位的时间,以秒为单位,等待 ping 的 pong 回答。

proxies

 

mod_cluster 的代理列表,以通过 socket-binding-group 中的 outbound-socket-binding 定义来注册。

proxy-list

 

代理列表。格式为 HOST_NAME:PORT,用逗号分开。弃用了 代理

proxy-url

/

MCMP 请求的基本 URL。

session-draining-strategy

DEFAULT

会话排空策略,用于未部署 web 应用程序。有效值为 DEFAULTALWAYSNEVER

DEFAULT
只有在 Web 应用程序不可能的情况下,才会在 web 应用程序取消部署前排空会话。
ALWAYS
始终在 Web 应用程序取消前排空会话,即使是可分布式 Web 应用程序。
NEVER
在 Web 应用取消部署前,不要排空会话。

simple-load-provider

 

如果没有动态负载提供程序,则使用简单的负载提供程序。它为每个群集成员分配负载因 1,并在不应用负载平衡算法的情况下均匀分发工作。

smax

-1

httpd 中的软最大闲置连接数。

socket-timeout

20

在超时前等待从 httpd 代理到 MCMP 命令的响应的秒数,并将代理标记为出错。

status-interval

10

从应用服务器发送到反向代理的秒数。允许的值介于 12,147,483,647 之间。

sticky-session

true

如果可能,是否应将对给定会话的后续请求路由到同一节点。

sticky-session-force

false

当负载均衡器无法将请求路由到它卡住的节点时,反向代理是否应返回错误。如果禁用粘性会话,则忽略此设置。

sticky-session-remove

false

删除故障切换的会话信息。

stop-context-timeout

10

等待上下文处理待处理请求、分布式上下文或破坏活动会话的最大时间(以秒为单位)。

ttl

-1

smax 以上的空闲连接时间(以秒为单位)。允许的值介于 -12,147,483,647 之间。

worker-timeout

-1

在 httpd 中等待一个可用 worker 来处理请求的超时。允许的值介于 -12,147,483,647 之间。

表 A.94. dynamic-load-provider 配置选项

属性default描述

decay

2

减去.

history

9

历史.

表 A.95. custom-load-metric Attribute Options

属性default描述

capacity

1.0

指标的容量。

 

自定义指标的类名称。

属性

 

指标的属性。

weight

1

指标的权重。

表 A.96. load-metric 属性选项

属性default描述

capacity

1.0

指标的容量。

属性

 

指标的属性。

type

 

指标的类型。

weight

1

指标的权重。

表 A.97. SSL 属性选项

属性default描述

ca-certificate-file

 

证书颁发机构.

ca-revocation-url

 

证书颁发机构撤销列表。

certificate-key-file

${user.home}/.keystore

证书的密钥文件。

cipher-suite

 

允许的密码套件。

key-alias

 

密钥别名。

password

changeit

密码。

protocol

TLS

启用的 SSL 协议。

A.29. mod_jk Worker Properties

worker.properties 文件定义了 mod_jk 将客户端请求传递给的 worker 的行为。worker.properties 文件定义了不同的应用服务器所处的位置,以及工作负载应在它们间平衡的方式。

属性的一般结构是 worker.WORKER_NAME.DIRECTIVEWORKER_NAME 是唯一名称,必须与 JBoss EAP undertow 子系统中配置的 instance-id 匹配。DIRECTIVE 是应用到 worker 的设置。

Apache mod_jk Load Balancers 的配置参考

模板指定默认的 per-load-balancer 设置。您可以覆盖负载均衡器设置本身中的模板。

表 A.98. 全局属性

属性描述

worker.list

以逗号分隔的 worker 名称列表,它们将供 mod_jk 使用。

表 A.99. 强制指令

属性Description

type

worker 的类型。默认类型是 ajp13。其他可能的值有 ajp14,lb,status。有关这些指令的详情,请查看 Apache Tomcat Connectors 参考,网址为 https://tomcat.apache.org/connectors-doc/reference/workers.html

表 A.100. 负载均衡指令

属性描述

balance_workers

指定负载均衡器必须管理的 worker 节点。您可以对同一负载均衡器多次使用指令。它由以逗号分隔的 worker 节点名称列表组成。

sticky_session

指定来自同一会话的请求是否始终路由到同一 worker。默认值为 1,表示启用了粘性会话。要禁用粘性会话,请将其设为 0。除非所有请求都真正无状态,否则通常应启用粘性会话。

表 A.101. 连接指令

属性Description

主机

后端服务器的主机名或 IP 地址。后端服务器必须支持 ajp 协议堆栈。默认值为 localhost

port

侦听定义的协议请求的后端服务器实例的端口号。默认值为 8009,这是 AJP13 工作程序的默认侦听端口。AJP14 worker 的默认值为 8011

ping_mode

探测到网络状态的连接条件。该探测使用空的 AJP13 数据包进行 CPing,并需要 CPong 来响应。使用 指令标志的组合指定条件。标志不用逗号或任何空格分开。ping_mode 可以是 C、P、I 和 A 的任意组合。

  • C - 连接。连接到服务器后,一次探测连接。使用 connect_timeout 的值指定超时。否则,会使用 ping_timeout 的值。
  • P - Prepost.在将每个请求发送到服务器前探测连接。使用 prepost_timeout 指令指定超时。否则,会使用 ping_timeout 的值。
  • i - Interval.如果存在,使用 connection_ping_interval 指定的时间间隔探测连接。否则,会使用 ping_timeout 的值。
  • A - 所有.CPI 的快捷方式,用于指定所有连接探测都被使用。

ping_timeout, connect_timeout, prepost_timeout, connection_ping_interval

上面的连接探测设置的超时值。该值以毫秒为单位指定,ping_timeout 的默认值为 10000。

lbfactor

指定单个后端服务器实例的负载平衡因素。这有助于为更多工作负载提供更强大的服务器。要赋予 worker 3 倍的默认负载,请将其设置为 3worker.my_worker.lbfactor=3

以下示例演示了在两个 worker 节点(node1node2)侦听端口 8009 之间的粘性会话进行负载平衡。

worker.properties 文件示例

# Define list of workers that will be used for mapping requests
worker.list=loadbalancer,status

# Define Node1
# modify the host as your host IP or DNS name.
worker.node1.port=8009
worker.node1.host=node1.mydomain.com
worker.node1.type=ajp13
worker.node1.ping_mode=A
worker.node1.lbfactor=1

# Define Node2
# modify the host as your host IP or DNS name.
worker.node2.port=8009
worker.node2.host= node2.mydomain.com
worker.node2.type=ajp13
worker.node2.ping_mode=A
worker.node2.lbfactor=1

# Load-balancing behavior
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=1

# Status worker for managing load balancer
worker.status.type=status

Apache mod_jk 的更多配置详情超出了本文档的范围,并可在 Apache 文档 中找到。

A.30. 安全管理器子系统属性

security-manager 子系统本身没有可配置的属性,但它有一个带有可配置属性的子资源: deployment-permissions=default

表 A.102. 默认配置选项

属性default描述

maximum-permissions

 

可授予部署或 jars 的最大权限集。

minimum-permissions

 

要授予部署或 jars 的最小权限集。





更新于 2024-04-03

法律通告

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.