配置指南


Red Hat JBoss Enterprise Application Platform 8.0

设置和维护 Red Hat JBoss Enterprise Application Platform 的说明,包括运行应用程序和服务。

Red Hat Customer Content Services

摘要

本指南的目的是覆盖设置和维护 JBoss EAP 所需的许多配置任务,以及在其上运行应用和其他服务。

提供有关 JBoss EAP 文档的反馈

要报告错误或改进文档,请登录您的红帽 JIRA 帐户并提交问题。如果您没有红帽 JIRA 帐户,系统会提示您创建一个帐户。

流程

  1. 单击以下链接 来创建 ticket
  2. Summary 中输入有关此问题的简单描述。
  3. 提供有关 描述 中问题或增强功能的详细描述。包括一个 URL,以在文档中发生问题。
  4. Submit 创建问题并将其路由到适当的文档团队。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息

第 1 章 简介

在使用本指南来配置 JBoss EAP 之前,它会假定已下载并安装最新版本的 JBoss EAP。有关安装说明,请参阅 Red Hat JBoss Enterprise Application Platform 安装方法

重要

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

第 2 章 启动和停止 JBoss EAP

2.1. 启动和停止 JBoss EAP

启动 JBoss EAP 的方法取决于您是将 JBoss EAP 作为独立服务器还是在受管域中运行。

停止 JBoss EAP 的方法取决于您在运行 JBoss EAP 的交互式实例还是后台实例。

2.1.1. 将 JBoss EAP 作为独立服务器启动

您可以将 JBoss EAP 作为独立服务器运行,来管理单个 JBoss EAP 实例。

服务器以暂停状态启动,且不会在所有需要的服务启动之前接受请求。在启动所需的服务后,服务器过渡到正常的运行状态,并可开始接受请求。

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

注意

要查看终端中的启动脚本参数列表,请使用 --help 参数。

JBoss EAP 默认使用 standalone.xml 配置文件,但您可以使用其他配置文件来启动 JBoss EAP。

先决条件

  • 安装 JBoss EAP。

流程

  1. 打开终端。
  2. 使用以下脚本将 JBoss EAP 启动为独立服务器:

    $ EAP_HOME/bin/standalone.sh
    Copy to Clipboard Toggle word wrap
    1. 对于 Windows Server,请使用 EAP_HOME\bin\standalone.bat 脚本。

2.1.2. 为受管域中的服务器启动 JBoss EAP

您可以在受管域操作模式下运行 JBoss EAP,来使用单个域控制器管理多个 JBoss EAP 实例。

服务器以暂停状态启动,不接受请求,直到所有需要的服务都启动为止。在所需的服务都启动后,服务器将过渡到正常的运行状态,并开始接受请求。

您必须在域中的任何服务器组中的服务器启动之前启动域控制器。

先决条件

  • 安装 JBoss EAP。

流程

  1. 打开终端。
  2. 首先启动域控制器,然后使用以下脚本启动每个关联的主机控制器:

    $ EAP_HOME/bin/domain.sh
    Copy to Clipboard Toggle word wrap
    • 对于 Windows Server,请使用 EAP_HOME\bin\domain.bat 脚本。

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

JBoss EAP 默认使用 host.xml 主机配置文件,但您可以使用其他配置文件来启动 JBoss EAP。

设置受管域时,必须将额外的参数传给启动脚本。

注意

如需所有可用启动脚本参数及其目的的完整列表,请使用 --help 参数。

2.1.3. 停止 JBoss EAP 的交互式实例

您可以从启动它的终端停止独立服务器或域控制器的交互式实例。

先决条件

  • 拥有 JBoss EAP 的运行实例。

流程

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

2.1.4. 停止 JBoss EAP 的后台实例

您可以连接到管理 CLI,来关闭受管域中正在运行的独立服务器的实例。

先决条件

  • 有运行在终端中的 JBoss EAP 实例。

流程

  1. 使用以下脚本启动管理 CLI:

    $ EAP_HOME/bin/jboss-cli.sh --connect
    Copy to Clipboard Toggle word wrap
  2. 发出 shutdown 命令:

    shutdown
    Copy to Clipboard Toggle word wrap

当在受管域中的服务器上运行 JBoss EAP 实例时,您必须使用 shutdown 命令的 --host 参数来指定要关闭的主机名。

2.2. 以 admin-only 模式运行 JBoss EAP

JBoss EAP 可以在仅管理员模式下启动。此模式使 JBoss EAP 可以在不启动其他运行时服务或处理最终用户请求的情况下运行和接受管理请求。仅管理员模式 可用于 单机服务器和受管域

2.2.1. 以 admin-only 模式运行单机服务器

您可以使用单机服务器以 admin-only 模式运行 JBoss EAP 实例。

先决条件

  • 已安装 JBoss EAP。

流程

  1. 打开终端。
  2. 若要以 admin-only 模式启动 JBoss EAP 实例,请在启动 JBoss EAP 实例时使用--start-mode=admin-only 运行时参数。

    $ EAP_HOME/bin/standalone.sh --start-mode=admin-only
    Copy to Clipboard Toggle word wrap
    1. 使用以下命令检查服务器的运行模式。如果服务器以 admin-only 模式运行,则结果将为 ADMIN_ONLY

      :read-attribute(name=running-mode)
      {
        "outcome" => "success",
        "result" => "ADMIN_ONLY"
      }
      Copy to Clipboard Toggle word wrap
      注意

      此外,您可以使用以下命令检查启动 JBoss EAP 的初始运行模式:

      /core-service=server-environment:read-attribute(name=initial-running-mode)
      Copy to Clipboard Toggle word wrap
    2. 除了使用不同的运行时交换机停止和启动 JBoss EAP 实例外,也可使用管理 CLI 在不同的模式中重新加载它。

      1. 以 admin-only 模式重新载入服务器:

        reload --start-mode=admin-only
        Copy to Clipboard Toggle word wrap
      2. 以正常模式重新载入服务器:

        reload --start-mode=normal
        Copy to Clipboard Toggle word wrap
        注意

        如果服务器以 admin-only 模式启动,且 reload 命令中指定了 no --start-mode 参数,则服务器将以正常模式启动。

2.2.2. 以 admin-only 模式运行受管域

在受管域中,如果域控制器以 admin-only 模式启动,它将不接受来自次要主机控制器的传入连接。以 admin-only 模式启动的主机控制器不会启动服务器。

先决条件

  • 已安装 JBoss EAP。

流程

  1. 打开终端。
  2. 传递 --admin-only 运行时参数,以 admin-only 模式启动主机控制器。

    $ EAP_HOME/bin/domain.sh --admin-only
    Copy to Clipboard Toggle word wrap
    1. 使用以下命令检查主机控制器的运行模式。如果主机控制器以 admin-only 模式运行,则结果将为 ADMIN_ONLY

      /host=HOST_NAME:read-attribute(name=running-mode)
      {
        "outcome" => "success",
        "result" => "ADMIN_ONLY"
      }
      Copy to Clipboard Toggle word wrap
    2. 除了使用不同的运行时交换机停止和启动主机控制器外,也可使用管理 CLI 在不同的模式中重新加载它。

      1. 以 admin-only 模式重新载入主机控制器:

        reload --host=HOST_NAME --admin-only=true
        Copy to Clipboard Toggle word wrap
      2. 以正常模式重新载入主机控制器:

        reload --host=HOST_NAME --admin-only=false
        Copy to Clipboard Toggle word wrap
        注意

        如果主机控制器以 admin-only 模式启动,并且将 no --admin-only 参数指定在 reload 命令中,主机控制器将以正常模式启动。

2.3. 正常暂停和关闭 JBoss EAP

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

暂停和正常关闭在服务器范围内协调,专注于进入服务器的入口点。以下子系统支持挂起和安全关闭:

Undertow
undertow 子系统将等待所有请求完成。
mod_cluster
modcluster 子系统将通知负载均衡器,服务器在 PRE_SUSPEND 阶段暂停。
Jakarta Enterprise Beans
ejb3 子系统将等待所有远程会话 Bean 请求,以及要完成的 MDB 消息发送者。在 PRE_SUSPEND 阶段停止到 MDB。Jakarta Enterprise Bean 计时器被暂停,服务器恢复时将激活丢失的计时器。
Transactions

暂停后,服务器将不会接受新的请求,但动态事务和请求可以继续,直到它们完成或超时期限到期。例如,服务器将在暂停服务器上接受与活动事务相关的传入远程调用。

这也适用于与 XTS 事务关联的 Web 服务请求。

如果您在安全关闭前启动事务,且失败(例如,必要的数据库不可用),则事务不会自动恢复,因为安全关闭操作可能无法正常恢复。您需要恢复 JBoss EAP 实例,以使用恢复管理器并完成失败的事务。

默认情况下,ejb3 子系统禁用事务安全关闭。如果您希望服务器在暂停前等待 Jakarta Enterprise Beans 相关事务完成,则必须启用事务安全关闭。例如:

/subsystem=ejb3:write-attribute(name=enable-graceful-txn-shutdown,value=true)
Copy to Clipboard Toggle word wrap

默认情况下禁用此行为,因为它可在安全关闭期间导致 Jakarta Enterprise Beans 客户端调用集群节点。在集群环境中,在事务 完成后 服务器会通知远程客户端,该节点不再可用于远程调用。如果客户端在此时间窗口(完成事务前)期间发送一个新请求,则该节点将拒绝请求。

jakarta Concurrency

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

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

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

安全关闭目前不会拒绝新的入站 Jakarta 消息传递消息。目前,允许由动态活动调度的 Jakarta Batch 作业和 Jakarta Concurrency 任务进行;但是,在执行时提交的 Jakarta Concurrency 任务会传递超时窗口当前错误。

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

2.3.1. 挂起服务器

JBoss EAP 8.0 提供了一个 挂起 模式,可以安全地暂停服务器操作。这允许所有活跃的请求正常完成,但不接受任何新请求。服务器暂停后,可以将其关闭、返回到运行状态,或者处于暂停状态来执行维护。

注意

通过挂起服务器,管理接口不会受到影响。

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

检查服务器挂起状态

可使用以下管理 CLI 命令查看服务器暂停状态:生成的值将是 RUNNINGPRE_SUSPENDSUSPENDINGSUSPENDED 之一。

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

    :read-attribute(name=suspend-state)
    Copy to Clipboard Toggle word wrap
  • 检查受管域中服务器的挂起状态。

    /host=primary/server=server-one:read-attribute(name=suspend-state)
    Copy to Clipboard Toggle word wrap

suspend

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

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

  • 暂停单机服务器。

    :suspend(suspend-timeout=60)
    Copy to Clipboard Toggle word wrap
  • 暂停受管域中的所有服务器。

    :suspend-servers(suspend-timeout=60)
    Copy to Clipboard Toggle word wrap
  • 在受管域中暂停单个服务器。

    /host=primary/server-config=server-one:suspend(suspend-timeout=60)
    Copy to Clipboard Toggle word wrap
  • 暂停服务器组中的所有服务器。

    /server-group=main-server-group:suspend-servers(suspend-timeout=60)
    Copy to Clipboard Toggle word wrap
  • 挂起由特定主机控制器管理的所有服务器。

    /host=primary:suspend-servers(suspend-timeout=60)
    Copy to Clipboard Toggle word wrap

resume

resume 命令将服务器返回到正常的运行状态,以接受新请求。您可以在主机、服务器、服务器组或域级别上启动该命令。例如:

:resume
Copy to Clipboard Toggle word wrap

以 Suspended 状态启动服务器

您可以以暂停状态启动服务器,以便服务器不会接受任何请求,直到恢复为止。

  • 若要以暂停状态启动单机服务器,可在启动 JBoss EAP 实例时使用 --start-mode=suspend 运行时参数。

    $ EAP_HOME/bin/standalone.sh --start-mode=suspend
    Copy to Clipboard Toggle word wrap
  • 要以暂停状态启动受管域服务器,请将 start-mode=suspend 参数传递给管理 CLI 命令的 start 操作。

    /host=HOST_NAME/server-config=SERVER_NAME:start(start-mode=suspend)
    Copy to Clipboard Toggle word wrap
    注意

    您还可以将 start-mode 参数传递给服务器的 重新加载 和重启操作。

  • 要启动受管域服务器组中处于暂停状态的所有服务器,请将 start-mode=suspend 参数传递给管理 CLI 命令的 start-servers 操作。

    /server-group=SERVER_GROUP_NAME:start-servers(start-mode=suspend)
    Copy to Clipboard Toggle word wrap
    注意

    您还可以将 start-mode 参数传递给服务器组的 reload-serversrestart-servers 操作。

2.3.2. 使用管理 CLI 安全地关闭服务器

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

使用以下管理 CLI 命令,安全地关闭服务器:指定超时值(以秒为单位)用于等待活跃请求完成。默认值为 0, 它会立即关闭服务器。值 -1 将导致服务器在关闭前无限期等待所有活动请求完成。

在关闭前,每个示例最多等待 60 秒才能完成请求。

  • 正常关闭单机服务器。

    shutdown --suspend-timeout=60
    Copy to Clipboard Toggle word wrap
  • 正常停止受管域中的所有服务器。

    :stop-servers(suspend-timeout=60)
    Copy to Clipboard Toggle word wrap
  • 安全地停止受管域中的单个服务器。

    /host=primary/server-config=server-one:stop(suspend-timeout=60)
    Copy to Clipboard Toggle word wrap
  • 正常停止服务器组中的所有服务器。

    /server-group=main-server-group:stop-servers(suspend-timeout=60)
    Copy to Clipboard Toggle word wrap
  • 关闭主机控制器及其管理的所有服务器。

    /host=primary:shutdown(suspend-timeout=60)
    Copy to Clipboard Toggle word wrap

suspend-timeout 属性仅应用到由主机控制器管理的服务器,而非主机控制器本身。

使用操作系统信号安全地关闭服务器

可以通过设置 org.wildfly.sigterm.suspend.timeout 系统属性,然后发送 OS TERM 信号(如 kill -15 PID )来安全地关闭服务器。默认情况下,此行为与管理 CLI 的 shutdown --suspend-timeout=0 命令相同,从而立即终止任何当前处理请求。超时可由 org.wildfly.sigterm.suspend.timeout 系统属性配置,指示在服务器关闭前等待请求完成的最大秒数。值 -1 表示服务器将无限期等待。

重要

在受管域中,不应使用 OS 信号来关闭服务器。相反,服务器应使用 管理 CLI 或管理控制台,通过管理主机控制器来关闭

如果 JVM 配置为禁用信号处理,如将 -Xrs java 参数传递给 JVM 选项,或者发送信号不是进程可以响应的信号,如如果发送了 KILL 信号,则使用 OS 信号进行正常关闭将不起作用,例如如果发送了 KILL 信号。

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

与 ZIP 或安装程序安装相比,为 RPM 安装启动和停止 JBoss EAP 有所不同。

2.4.1. 启动 JBoss EAP 的 RPM 安装

您可以使用 命令在单机服务器或受管域工作模式中启动 JBoss EAP 的 RPM 安装。请注意,以下命令只与 Red Hat Enterprise Linux (RHEL) 8 及更新的版本兼容。

启动 JBoss EAP 作为单机服务器(RPM 安装)

$ sudo systemctl start eap8-standalone.service
Copy to Clipboard Toggle word wrap

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

在受管域中启动 JBoss EAP (RPM 安装)

$ sudo systemctl start eap8-domain.service
Copy to Clipboard Toggle word wrap

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

2.4.2. 配置 RPM 服务属性

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

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

重要

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

  • 指定服务器配置文件。

    在启动单机服务器时,默认使用 standalone.xml 文件。在受管域中运行时,将默认使用 host.xml 文件。您可以通过在适当的 RPM 配置文件 中设置 WILDFLY_SERVER_CONFIG 属性(如 eap8-standalone.conf ),来使用其他配置文件启动 JBoss EAP。

    WILDFLY_SERVER_CONFIG=standalone-full.xml
    Copy to Clipboard Toggle word wrap
  • 绑定到特定 IP 地址。

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

    WILDFLY_BIND=192.168.0.1
    Copy to Clipboard Toggle word wrap
    注意

    如果要将管理接口绑定到特定的 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"
    Copy to Clipboard Toggle word wrap
    注意

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

注意

如果属性在 RPM 服务配置文件中具有相同的名称,如 /usr/lib/systemd/system/eap8-standalone.service:,在 JBoss EAP 启动配置文件中,以及 JBoss EAP 启动配置文件中(如EAP_HOME/bin/standalone.conf )中的值是 JBoss EAP 启动配置文件中的值。一个这样的属性是 JAVA_HOME

2.4.3. 停止 JBoss EAP 的 RPM 安装

您可以使用 命令在单机服务器或受管域工作模式中停止 JBoss EAP 的 RPM 安装。请注意,以下命令只与 Red Hat Enterprise Linux (RHEL) 8 及更新的版本兼容。

停止 JBoss EAP 作为单机服务器(RPM 安装)

$ sudo systemctl stop eap8-standalone.service
Copy to Clipboard Toggle word wrap

在受管域中停止 JBoss EAP (RPM 安装)

$ sudo systemctl stop eap8-domain.service
Copy to Clipboard Toggle word wrap

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

2.5. Windows Server 的 PowerShell 脚本

重要

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

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

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"
Copy to Clipboard Toggle word wrap
注意

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

第 3 章 JBoss EAP 管理

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

JBoss EAP 使用简化的配置,每个单机服务器或受管域有一个配置文件。如果没有指定不同的配置文件,JBoss EAP 将使用以下示例配置文件之一:

  • 独立服务器的默认配置存储在 EAP_HOME/standalone/configuration/standalone.xml 文件中。
  • 受管域的默认配置存储在 EAP_HOME/domain/configuration/domain.xml 文件中。
  • 主机控制器的默认配置存储在 EAP_HOME/domain/configuration/host.xml 文件中。

JBoss EAP 支持使用 YAML 配置文件配置单机服务器。如需更多信息,请参阅使用 YAML 配置文件 配置单机服务器

注意

受管域中的服务器 不支持 YAML 配置。

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

JBoss EAP 中的不同子系统配置 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. 添加管理用户

您可以使用 add-user 实用程序脚本来添加管理用户。

先决条件

  • JBoss EAP 正在运行。

流程

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

    $ EAP_HOME/bin/add-user.sh
    Copy to Clipboard Toggle word wrap
    注意

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

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

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

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

    注意

    用户名只能以任何数字和顺序包含以下字符:

    • 字母数字字符(a-z、A-Z、0-9)
    • 短划线(-)、句点(.)、逗号(@)
    • 反斜杠(\)
    • 等号 (=)

    默认情况下,JBoss EAP 允许弱密码,但会发出警告。

    如需了解有关更改此默认行为的详细信息,请参阅设置 add-user 实用程序密码限制

  4. 输入以逗号分隔的用户所属组的列表。如果您不希望用户属于任何组,请按 ENTER 将它留空。
  5. 检查信息并输入 yes 进行确认。

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

3.2.2. 以非交互方式运行 add-user 工具

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

先决条件

  • JBoss EAP 正在运行。
警告

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

创建属于多个组的用户

以下命令添加了一个管理用户, mgmtuser1,它带有 guestmgmtgroup 组。

$ EAP_HOME/bin/add-user.sh -u 'mgmtuser1' -p 'password1!' -g 'guest,mgmtgroup'
Copy to Clipboard Toggle word wrap
指定备选属性文件

默认情况下,使用 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'
Copy to Clipboard Toggle word wrap

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

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

3.2.3. add-user utility password 限制

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

重要

add-user.properties 文件是一个未保护的纯文本文件,必须被保护,以避免意外访问其内容。

为避免设置异常密码,请检查键盘的系统键映射是否正确。默认系统键映射为 en-qwerty。如果更改此默认设置并创建新密码,您必须检查密码是否满足类 SimplePasswordStrengthChecker 中的条件。

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

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

Expand
表 3.1. 额外密码要求设置
属性描述

minLength

密码的最小字符数。例如,password.restriction.minLength=8 将密码限制为至少八个字符。

强度

设置密码必须满足的阈值。有效阈值条目包括:

* VERY_WEAK

*

* MODERATE ( 中度)

* MEDIUM

*

* VERY_STRONG

* 特殊信息

默认值为 MODERATE。定义了阈值,以及类 SimplePasswordStrengthChecker 中指定的默认值。

注意:如果您没有指定阈值,MODE RATE 将成为默认值。这个值在类 SimplePasswordStrengthChecker 中指定。

minAlpha

为密码设置的最小字母字符数。例如,password.restriction.minAlpha=1 将密码限制为至少包含一个字母字符。

minDigit

为密码设置的最小数字字符数。例如,password.restriction.minDigit=1 将密码限制为至少包含一个数字字符。

minSymbol

为密码设置的最小符号数。例如,password.restriction.minSymbol=1 限制密码至少包含一个符号。

forbiddenValue

限制用户设置易于确定的密码,如 root。例如,password.restriction.forbidden=root,admin,administrator 限制设置 rootadminadministrator 作为密码。

mustNotMatchUsername

限制用户设置其用户名作为密码。例如,password.restriction.mustNotMatchUsername=TRUE 限制用户将其用户名设置为密码。如果设置为 false,则忽略此规则。

3.2.4. 更新管理用户

您可以使用 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

Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username : test-user
User 'test-user' already exists and is enabled, would you like to...
 a) Update the existing user password and roles
 b) Disable the existing user
 c) Type a new username
(a):
Copy to Clipboard Toggle word wrap

当您输入已存在的用户名时,会显示几个选项:

  • 键入,以更新现有用户的密码。
  • 键入 b 以禁用现有用户。
  • 键入 c 来输入新用户名。
警告

当以非交互方式使用 add-user 脚本更新用户时,会在没有确认提示的情况下自动更新用户。

3.3. 管理界面

3.3.1. 管理 CLI

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

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

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

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

启动管理 CLI
$ EAP_HOME/bin/jboss-cli.sh
Copy to Clipboard Toggle word wrap
注意

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

连接到正在运行的服务器
connect
Copy to Clipboard Toggle word wrap

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

显示帮助

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

help
Copy to Clipboard Toggle word wrap

在命令中使用 --help 标志,以接收有关使用该特定命令的说明。例如,若要接收关于使用 deploy 的信息,请执行以下命令:

deploy --help
Copy to Clipboard Toggle word wrap
退出管理 CLI
quit
Copy to Clipboard Toggle word wrap
查看系统设置

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

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

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

/profile=default/subsystem=datasources/data-source=ExampleDS:read-attribute(name=enabled)
Copy to Clipboard Toggle word wrap
更新系统设置

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

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=enabled,value=false)
Copy to Clipboard Toggle word wrap
启动服务器

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

/host=HOST_NAME/server=server-one:start
Copy to Clipboard Toggle word wrap

3.3.2. 管理控制台概述

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

使用管理控制台启动和停止服务器、部署和删除应用程序、调优系统设置,并对服务器配置进行持久性修改。当用户进行需要重启或重新加载服务器的任何更改时,管理控制台还可以执行管理任务,并发出实时通知。

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

对于运行在本地主机上使用默认管理端口的 JBoss EAP 实例,您可以通过 Web 浏览器访问管理控制台 http://localhost:9990/console/index.html。以具有所需角色的用户身份登录,以访问管理控制台。

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

主页
了解如何完成几个常见配置和管理任务。参加导览,熟悉 JBoss EAP 管理控制台。
Deployments
添加、移除和启用部署。在受管域中,将部署分配到服务器组。
配置
配置可用的子系统,提供 Web 服务、消息传递或高可用性等功能。在受管域中,管理包含不同子系统配置的配置文件。
Runtime
查看运行时信息,如服务器状态、JVM 使用量和服务器日志。在受管域中,管理您的主机、服务器组和服务器。
更新管理器
更新现有安装并管理频道。
Access control
在使用基于角色的访问控制时,将角色分配给用户和组。
3.3.2.1. 更新管理控制台中的资源属性

如果您有所需的权限,您可以在管理控制台中编辑资源属性。

先决条件

  • JBoss EAP 正在运行。
  • 您有修改所选资源的适当权限。
  • 您已创建了用户。

流程

  1. 登录到管理控制台。对于在默认端口中运行的本地服务器,您可以访问位于 http://localhost:9990/console/index.html 的管理控制台。
  2. 进入您要修改的资源的管理控制台的适当部分。
  3. Edit
  4. 进行必要的更改。

    必填字段标记为星号(LVM)。您可以通过单击 Help 来查看属性描述。

    注意

    根据属性类型,输入字段可以是文本字段、ON/OFF 字段或下拉菜单。在某些文本字段中,当您键入时,配置中其他位置的值可能会显示为建议。

  5. 点击 Save
  6. 如有必要,重新加载服务器以使更改生效。

    当您进行需要重新加载的更改才能使更改生效时,会打开弹出窗口。若要重新加载单机服务器,可在弹出窗口中单击 Reload。要在受管域中重新加载服务器,可单击 Topology,选择适当的服务器,然后从下拉列表中选择 Reload

要查看您执行的最新配置操作的历史记录,请点通知图标。

3.3.2.2. 启用或禁用管理控制台

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

注意

启用或禁用管理控制台后,您必须重启或重新载入 JBoss EAP 实例。

启用管理控制台示例

/core-service=management/management-interface=http-interface:write-attribute(name=console-enabled,value=true)
Copy to Clipboard Toggle word wrap

禁用管理控制台示例

/core-service=management/management-interface=http-interface:write-attribute(name=console-enabled,value=false)
Copy to Clipboard Toggle word wrap

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

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

  • 德语(de)
  • 简体中文(州)
  • 巴西葡萄牙语(pt-BR)
  • 法语(fr)
  • 西班牙语(es)
  • 日语(ja)

前提条件

  • JBoss EAP 正在运行。
  • 您已创建了用户。

流程

  1. 登录到管理控制台。对于在默认端口中运行的本地服务器,您可以访问位于 http://localhost:9990/console/index.html 的管理控制台。
  2. 单击 Settings
  3. Locale 列表中选择所需的语言。
  4. 点击 Save。确认框通知您需要重新加载应用程序。
  5. 单击 Yes 。系统会自动刷新您的 Web 浏览器以使用所选区域设置。
3.3.2.4. 自定义管理控制台标题

您可以自定义管理控制台标题,以便可以快速轻松地识别每个 JBoss EAP 实例。如果您自定义管理控制台标题,在关闭管理控制台实例后,更改不会保留。当您打开控制台的新实例并登录时,会重置管理控制台标题。

前提条件

  • JBoss EAP 正在运行。
  • 您已创建了用户。

流程

  1. 登录到管理控制台。对于在默认端口中运行的本地服务器,您可以访问位于 http://localhost:9990/console/index.html 的管理控制台。
  2. 单击 Settings,再修改 Title 字段中的标题。
  3. 点击 Save

    确认框告知您必须重新加载管理控制台。

  4. 单击 Yes

    系统会自动刷新您的 Web 浏览器,并在标签标头中显示新的标题。

3.4. 管理 API

管理 API 端点充当管理客户端的入口点,以与 JBoss EAP 管理层集成。

3.4.1. HTTP API

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

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

读取资源

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

http://HOST_NAME:9990/management/PATH_TO_RESOURCE?operation=OPERATION&PARAMETER=VALUE
Copy to Clipboard Toggle word wrap

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

Expand
value描述

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
Copy to Clipboard Toggle word wrap

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

注意

默认操作为 read-resource

示例:读取资源属性值

http://HOST_NAME:9990/management/subsystem/datasources/data-source/ExampleDS?operation=attribute&name=enabled
Copy to Clipboard Toggle word wrap

这会读取 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"}'
Copy to Clipboard Toggle word wrap

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

示例:向服务器发出一个操作

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

这会重新加载服务器。

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

3.4.1.1. custom-constant HTTP 标头

JBoss EAP 的 HTTP 管理端点在发送到客户端的所有响应中返回预定义的 HTTP 标头集合。除了这个预定义的 HTTP 标头集外,您还可以定义返回的 custom-constant HTTP 标头。

JBoss EAP 将自定义 HTTP 标头应用到请求,如下所示:

  • JBoss EAP 通过将配置的前缀与请求路径匹配,从而应用 custom-constant HTTP 标头。

    例如,您可以将 custom-constant HTTP 标头映射到请求路径(如 //management )上的请求。

  • 如果请求与多个前缀匹配,JBoss EAP 会应用所有映射中的 custom-constant HTTP 标头。

    例如,指向路径 /management 的请求匹配 //management 的映射。JBoss EAP 应用来自两个映射的标头。

  • 在处理请求结束时,在响应返回到客户端之前,通过覆盖由对应端点设置的标头。

    例如,管理端点在每个响应中设置 X-Frame-Options 标头。如果您使用名称 X-Frame-Options 定义 custom-constant HTTP 标头,则 custom-constant HTTP 标头会覆盖默认标头。

您可以定义在单个映射的响应中返回的多个自定义 HTTP 标头。

以下是定义自定义 HTTP 标头的规则:

  • custom-constant HTTP 标头只能包含 RFC-7231 - Hypertext Transfer Protocol (HTTP/1.1)中支持的字符。
  • 您无法覆盖以下预定义的 HTTP 标头:

    • 连接
    • content-Length
    • Content-Type
    • Date
    • Transfer-Encoding

      尝试覆盖任何这些预定义的标头会导致错误。

    • 例如,如果您尝试使用名称 Date 设置 custom-constant HTTP 标头,则会返回以下错误:

      {
          "outcome" => "failed",
          "failure-description" => "WFLYCTL0458:Disallowed HTTP Header name 'Date'",
          "rolled-back" => true
      }
      Copy to Clipboard Toggle word wrap

创建自定义 HTTP 标头时的重要注意事项:

  • JBoss EAP 不验证是否可以访问指定路径。
  • 子系统可以动态添加 HTTP 管理接口支持的上下文。
  • Custom-constant HTTP 标头不会更改端点如何处理对请求的响应。
3.4.1.2. 定义 custom-constant HTTP 标头

定义在所需路径前缀的每个响应中返回的自定义 HTTP 标头。

重要

在创建 custom-constant HTTP 标头前,您必须了解以下注意事项:

  • JBoss EAP 验证是否可以访问指定路径。
  • 子系统可以动态添加 HTTP 管理接口支持的上下文。
  • Custom-constant HTTP 标头不会更改端点如何处理对请求的响应。

流程

  1. 定义自定义恒定的 HTTP 标头:

    /core-service=management/management-interface=http-interface:write-attribute(name=constant-headers,value=[{path="PATH_PREFIX",headers=[{name="HEADER_NAME",value="HEADER_VALUE"}]}])
    Copy to Clipboard Toggle word wrap
    重要

    使用 write-attribute 操作会导致 reload-required 提示符打开。

  2. 重新载入服务器以使更改生效:

    reload
    Copy to Clipboard Toggle word wrap

    现在,对 HTTP 管理接口的请求会返回 HTTP 标头 HEADER_NAME,它的值为 HEADER_VALUE,除了预定义的 HTTP 标头集合之外。

    custom-constant HTTP 标头 X-help 示例

    /core-service=management/management-interface=http-interface:write-attribute(name=constant-headers,value=[{path="/",headers=[{name="X-Help",value="http://mywebsite.com/help"}]}])
    Copy to Clipboard Toggle word wrap

验证步骤

  • 向 HTTP managment 接口发送请求:

    curl -s -D - -o /dev/null --digest http://localhost:9990/management/ -u USERNAME:PASSWORD
    Copy to Clipboard Toggle word wrap

    示例 custom-constant HTTP 标头 X-Help示例的响应

    admin:redhat
    HTTP/1.1 200 OK
    Connection: keep-alive
    X-Frame-Options: SAMEORIGIN
    Content-Type: application/json; charset=utf-8
    Content-Length: 3312
    X-Help: http://mywebsite.com
    Date: Tue, 27 Oct 2020 08:13:17 GMT
    Copy to Clipboard Toggle word wrap

    响应包含 X-Help custom-constant HTTP 标头。

3.4.1.3. 用于定义自定义 HTTP 标头的 CLI 命令

以下 CLI 命令在独立和受管域模式中定义自定义 HTTP 标头。

独立模式

  • 要定义单个自定义 HTTP 标头,请使用以下命令:

    /core-service=management/management-interface=http-interface:write-attribute(name=constant-headers,value=[{path=/PREFIX,headers=[{name=X-HEADER,value=HEADERVALUE}]}])
    Copy to Clipboard Toggle word wrap

    该命令生成以下 XML 配置:

    <management-interfaces>
        <http-interface http-authentication-factory="management-http-authentication">
            <http-upgrade enabled="true" sasl-authentication-factory="management-sasl-authentication/>
            <socket-binding http="management-http"/>
            <constant-headers>
                <header-mapping path="/PREFIX">
                    <header name="X-HEADER" value="HEADERVALUE"/>
                </header-mapping>
            </constant-headers>
        </http-interface>
    </management-interfaces>
    Copy to Clipboard Toggle word wrap
  • 要定义多个自定义 HTTP 标头,请使用以下命令:

    /core-service=management/management-interface=http-interface:write-attribute(name=constant-headers,value=[{path=/PREFIX1,headers=[{name=X-HEADER,value=HEADERVALUE-FOR-X}]},{path=/PREFIX2,headers=[{name=Y-HEADER,value=HEADERVALUE-FOR-Y}]}])
    Copy to Clipboard Toggle word wrap

域模式

  • 要定义单个自定义 HTTP 标头,请使用以下命令:

    /host=primary/core-service=management/management-interface=http-interface:write-attribute(name=constant-headers,value=[{path=/PREFIX,headers=[{name=X-HEADER,value=HEADER-VALUE}]}])
    Copy to Clipboard Toggle word wrap

    该命令生成以下 XML 配置:

    <management-interfaces>
        <http-interface http-authentication-factory="management-http-authentication">
            <http-upgrade enabled="true" sasl-authentication-factory="management-sasl-authentication/>
            <socket interface="management" port="${jboss.management.http.port:9990}"/>
            <constant-headers>
                <header-mapping path="/PREFIX">
                    <header name="X-HEADER" value="HEADER-VALUE"/>
                </header-mapping>
            </constant-headers>
        </http-interface>
    </management-interfaces>
    Copy to Clipboard Toggle word wrap
  • 要定义多个自定义 HTTP 标头,请使用以下命令:

    /host=primary/core-service=management/management-interface=http-interface:write-attribute(name=constant-headers,value=[ {path=/PREFIX-1,headers=[{name=X-HEADER,value=HEADER-VALUE-FOR-X}]},{path=/PREFIX-2,headers=[{name=Y-HEADER,value=HEADER-VALUE-FOR-Y}]}])
    Copy to Clipboard Toggle word wrap

3.4.2. 原生 API

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

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

注意

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

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

// Create the management client
import org.jboss.dmr.ModelNode;
import org.jboss.as.controller.client.ModelControllerClient;
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();
Copy to Clipboard Toggle word wrap

3.5. 配置数据

3.5.1. 独立服务器配置文件

独立配置文件位于 EAP_HOME/standalone/configuration/ 目录中。对于五个预定义的配置集(default, ha, full, full-ha, load-balancer),每个都有单独的文件。以下是启动 JBoss EAP 时可以使用管理 CLI 进行修改的示例配置文件。

Expand
表 3.2. 独立配置文件
配置文件用途

standalone.xml

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

standalone-ha.xml

此单机配置文件是 Jakarta EE Web 配置文件认证的配置具有高可用性,包括所有默认子系统,并且添加了高可用性所需的 modclusterjgroups 子系统。它不提供消息传递所需的子系统。

standalone-full.xml

此独立配置文件是 Jakarta EE 完整平台认证配置,包括所有默认子系统,并添加 messaging-activemqiiop-openjdk 子系统。它不提供高可用性所需的子系统。

standalone-full-ha.xml

此独立配置文件是 Jakarta EE 完整平台认证配置,包括对每个可能的子系统的支持,包括消息传递和高可用性的支持。

standalone-load-balancer.xml

此单机配置文件包含使用内置 mod_cluster 前端负载平衡器对其他 JBoss EAP 实例进行负载平衡所需的最小子系统。

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

$ EAP_HOME/bin/standalone.sh --server-config=standalone-full.xml
Copy to Clipboard Toggle word wrap
使用 YAML 文件更新单机服务器

使用 YAML 文件配置单机服务器可外部化自定义流程,并提高服务器升级的速度。使用此功能时,服务器以只读模式启动。这意味着,在服务器重启后,对配置的更改不会保留。

注意

受管域中的服务器 不支持 YAML 配置。

用户可以修改 YAML 文件中的各种资源。YAML 文件支持以下元素:

  • core-service
  • interface
  • socket-binding-group
  • subsystem
  • system-property

YAML 文件 不支持 以下元素:

  • 扩展 :向服务器添加扩展。不支持这个元素,因为它可能需要缺少的模块。
  • 部署 :添加部署到服务器。这个元素不被支持,因为它除了配置外还需要更多大量更改。
  • deployment-overlay :将 deployment-overlays 添加到服务器。这个元素不被支持,因为它除了配置外还需要更多大量更改。
  • 路径 :在解析 YAML 文件时定义就绪。

YAML root 节点是 wildfly-configuration。您可以跟踪模型树来修改资源。如果资源已存在(由 XML 配置文件或以前的 YAML 文件创建),您可以使用模型树更新它。如果资源不存在,您可以使用模型树创建它。

定义新的 PostGresql 数据源的 YAML 配置文件示例

wildfly-configuration:
  subsystem:
    datasources:
      jdbc-driver:
        postgresql:
          driver-name: postgresql
          driver-xa-datasource-class-name: org.postgresql.xa.PGXADataSource
          driver-module-name: org.postgresql.jdbc
      data-source:
        PostgreSQLDS:
          enabled: true
          exception-sorter-class-name: org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter
          jndi-name: java:jboss/datasources/PostgreSQLDS
          jta: true
          max-pool-size: 20
          min-pool-size: 0
          connection-url: "jdbc:postgresql://localhost:5432}/demo"
          driver-name: postgresql
          user-name: postgres
          password: postgres
          validate-on-match: true
          background-validation: false
          background-validation-millis: 10000
          flush-strategy: FailingConnectionOnly
          statistics-enable: false
          stale-connection-checker-class-name: org.jboss.jca.adapters.jdbc.extensions.novendor.NullStaleConnectionChecker
          valid-connection-checker-class-name: org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
          transaction-isolation: TRANSACTION_READ_COMMITTED
Copy to Clipboard Toggle word wrap

上面的示例定义了名为 postgresqljdbc-driver以及名为 PostgreSQLDS 的数据源

注意

您不能使用 YAML 配置文件来管理模块。相反,您需要手动或通过管理 CLI 创建或调配 org.postgresql.jdbc 模块。

3.5.1.1. 使用标签进行 YAML 文件操作

您可以使用标签对 YAML 配置文件执行几个操作。

  • !undefine: undefine a attribute

    undefine CONSOLE 日志记录器级别 YAML 配置文件示例

    wildfly-configuration:
        subsystem:
            logging:
              console-handler:
                CONSOLE:
                  level: !undefine
    Copy to Clipboard Toggle word wrap

  • !remove :删除资源

    删除嵌入的 Artemis 代理并连接到远程代理 YAML 配置文件示例

    wildfly-configuration:
      socket-binding-group:
        standard-sockets:
          remote-destination-outbound-socket-binding:
            remote-artemis:
              host: localhost
              port: 61616
      subsystem:
        messaging-activemq:
          server:
            default: !remove
          remote-connector:
            artemis:
              socket-binding: remote-artemis
          pooled-connection-factory:
            RemoteConnectionFactory:
              connectors:
                - artemis
              entries:
                - "java:jboss/RemoteConnectionFactory"
                - "java:jboss/exported/jms/RemoteConnectionFactory"
              enable-amq1-prefix: false
              user: admin
              password: admin
        ejb3:
          default-resource-adapter-name: RemoteConnectionFactory
        ee:
          service:
            default-bindings:
              jms-connection-factory: "java:jboss/RemoteConnectionFactory"
    Copy to Clipboard Toggle word wrap

  • !list-add : 向列表添加一个元素(使用可选索引)

    RemoteTransactionPermission 添加到权限列表 YAML 配置文件示例

    wildfly-configuration:
        subsystem:
            elytron:
              permission-set:
               default-permissions:
                 permissions: !list-add
                  - class-name: org.wildfly.transaction.client.RemoteTransactionPermission
                    module: org.wildfly.transaction.client
                    target-name: "*"
                    index: 0
    Copy to Clipboard Toggle word wrap

    注意

    如果未定义 index 属性,该条目将附加到列表的末尾。

3.5.1.2. 使用 YAML 文件启动单机服务器

您可以使用 YAML 配置文件启动单机服务器。

流程

  1. 打开终端。
  2. 使用以下命令启动带有 YAML 文件的单机服务器:

    ./standalone.sh -y=/home/ehsavoie/dev/wildfly/config2.yml:config.yml -c standalone-full.xml
    Copy to Clipboard Toggle word wrap

    --yaml or -y 参数允许您传递 YAML 文件列表。您必须使用分号(;)对于 Windows Server 或基于 Unix 的操作系统的冒号(:)来分隔每个 YAML 文件路径。您可以使用绝对路径、相对于当前执行目录的路径,或者相对于独立配置目录的路径。

    操作按照定义文件的顺序以及 XML 配置定义初始操作后的顺序应用。

3.5.2. 受管域配置文件

受管域配置文件位于 EAP_HOME/domain/configuration/ 目录中。以下是启动 JBoss EAP 时可以使用管理 CLI 进行修改的示例配置文件。

Expand
表 3.3. 受管域配置文件
配置文件用途

domain.xml

这是受管域的主配置文件。只有域控制器会读取此文件。此文件包含所有配置集(default, ha, full, full-ha, load-balancer)的配置。

host.xml

此文件包含特定于受管域中物理主机的配置详细信息,如网络接口、套接字绑定、主机名称和其他特定于主机的详细信息。host.xml 文件将自身定义为受管域控制器,并可启动服务器实例。它包括 host-primary.xmlhost-secondary.xml 的所有功能,如此表中所述。

host-primary.xml

此文件仅包含将服务器作为受管域控制器运行所需的配置详细信息。host-primary.xml 文件将自身定义为域控制器,不定义任何服务器实例。

host-secondary.xml

此文件仅包含作为受管域主机控制器运行服务器所需的配置详细信息。它没有定义域控制器,您必须为 host-secondary.xml 连接到配置域控制器地址。此 xml 文件代表一个示例配置,其中 host-secondary.xml 在计算机上运行,并由远程域控制器管理。机器充当一个主机控制器,来定义和启动服务器实例。域控制器管理这些服务器实例。

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

$ EAP_HOME/bin/domain.sh --host-config=host-primary.xml
Copy to Clipboard Toggle word wrap

3.5.3. 备份配置数据

要恢复您的 JBoss EAP 服务器配置,您必须在以下位置备份数据:

  • EAP_HOME/standalone/configuration/

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

    • 为在 data/content 目录中限制的受管部署备份数据。
  • EAP_HOME/standalone/deployments

    • 备份独立服务器的部署。
  • EAP_HOME/domain/configuration/

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

    • 备份 data/content 目录中限制的受管域和部署的数据。
  • 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"
}
Copy to Clipboard Toggle word wrap
列出快照

使用管理 CLI 列出所有快照。

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

使用管理 CLI 删除快照。

:delete-snapshot(name=20151022-133109702standalone.xml)
Copy to Clipboard Toggle word wrap

3.5.5. 使用快照启动服务器

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

先决条件

  • 您已安装了 JBoss EAP。
  • 您已生成了一个配置文件的快照。

流程

  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
    Copy to Clipboard Toggle word wrap
注意

在受管域中运行服务器时,请使用 --host-config--domain-config=<config> 参数来指定配置文件。

3.5.6. 查看配置更改

您可以使用 JBoss EAP 跟踪对正在运行的系统进行的配置更改。这样,管理员可以查看由其他授权用户进行的配置更改的历史记录。

重要

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

您可以通过 管理 CLI 或管理控制台 启用跟踪和查看配置更改。???

从管理 CLI 跟踪和查看配置更改

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

/subsystem=core-management/service=configuration-changes:add(max-history=20)
Copy to Clipboard Toggle word wrap
注意

在受管域中,在主机和服务器相关的修改的主机级别上跟踪配置更改。为主机控制器启用配置更改可为其所有受管服务器启用它。您可以使用以下命令跟踪每个主机的配置更改。

/host=HOST_NAME/subsystem=core-management/service=configuration-changes:add(max-history=20)
Copy to Clipboard Toggle word wrap

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

/subsystem=core-management/service=configuration-changes:list-changes
Copy to Clipboard Toggle word wrap
注意

在受管域中,您可以使用以下命令列出主机的配置更改:

/host=HOST_NAME/subsystem=core-management/service=configuration-changes:list-changes
Copy to Clipboard Toggle word wrap

您可以使用以下命令列出影响特定服务器的配置更改。

/host=HOST_NAME/server=SERVER_NAME/subsystem=core-management/service=configuration-changes:list-changes
Copy to Clipboard Toggle word wrap

这会列出所做的每个配置更改,以及日期、来源、结果和操作详情。例如,以下 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"}
            }]
        }
    ]
}
Copy to Clipboard Toggle word wrap

这个示例列出了影响配置的三个操作的详情:

  • 从管理 CLI 重新加载服务器。
  • 从管理 CLI 禁用 ExampleDS 数据源.
  • 从管理控制台中删除 ExpiryQueue 队列。
从管理控制台跟踪和查看配置更改

要启用从管理控制台跟踪配置更改,请选择 Runtime 选项卡,导航到服务器或主机,以跟踪更改并从下拉菜单中选择 Configuration Changes。点 Enable Configuration Changes 并提供最大历史记录值。

然后,此页中的表会列出所做的每个配置更改,以及日期、来源、结果和操作详情。

3.5.7. 属性替换

您可以在 JBoss EAP 中使用表达式来定义可替换属性,以替换配置中的文字值。

standalone*.xmldomain.xml 配置文件中使用属性替换,将属性替换为系统属性中找到的值。系统属性定义在 EAP 配置文件 xml 文件中,也可以在命令行终端中输入 -D 命令来定义。

要确定给定子系统中是否允许属性替换,请使用以下命令显示子系统配置的描述:

/subsystem=datasources:read-resource-description(recursive=true)
Copy to Clipboard Toggle word wrap

如果 expressions-allowed 属性被设为 true,则允许属性替换。

表达式的格式为 ${PARAMETER:DEFAULT_VALUE}。如果设置了指定参数,则将使用参数的值。否则,将使用提供的默认值。

解析表达式支持的源是系统属性和环境变量。使用环境变量解析表达式时,请使用 ${env.LANG} 格式。

来自 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>
Copy to Clipboard Toggle word wrap

在将 EAP 作为独立服务器启动时,您可以使用以下命令设置 jboss.bind.address 参数:

$ EAP_HOME/bin/standalone.sh -Djboss.bind.address=IP_ADDRESS
Copy to Clipboard Toggle word wrap
注意

对于部署,源可以是部署存档中的 META-INF/jboss.properties 文件中的属性。对于支持子部署的部署类型,如果属性文件位于外部部署中,则解析范围仅限于所有子部署,如 EAR。如果属性文件在子部署中,则解析的范围仅限于该子部署。

3.5.8. 嵌套表达式

您可以嵌套表达式,它允许更高级地使用表达式来代替固定值。

嵌套表达式的格式类似于普通表达式的格式,但一个表达式被嵌入在另一个表达式中,例如:

${SYSTEM_VALUE_1${SYSTEM_VALUE_2}}
Copy to Clipboard Toggle word wrap

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

例如,如果数据源定义密码被屏蔽,您可以使用嵌套的表达式。

3.5.9. 基于描述符的属性替换

部署基于描述符的属性替换根据描述符替换属性,以便您可以删除应用程序和构建链中有关环境的假设。

特定环境的配置可以在部署描述符中指定,而不是注释或构建系统脚本。您可以在文件中提供配置,或者作为参数在命令行中提供。

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

spec-descriptor-property-replacement 标志控制 Jakarta EE 描述符替换,JBoss EAP 默认 禁用 它。启用后,您可以在以下部署描述符中替换属性:

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

您可以使用以下管理 CLI 命令,来在 Jakarta EE 描述符中启用或禁用属性替换:

/subsystem=ee:write-attribute(name="spec-descriptor-property-replacement",value=VALUE)
Copy to Clipboard Toggle word wrap

jboss-descriptor-property-replacement 标志控制特定于 JBoss 的描述符替换,而 JBoss EAP 默认启用它。启用后,您可以在以下部署描述符中替换属性:

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

使用以下管理 CLI 命令,来在 JBoss EAP 特定描述符中启用或禁用属性替换:

/subsystem=ee:write-attribute(name="jboss-descriptor-property-replacement",value=VALUE)
Copy to Clipboard Toggle word wrap

注解-property-replacement 标志控制注释内的属性替换,它默认不启用。启用后,您可以替换应用程序类中注释属性中的属性。

使用以下管理 CLI 命令,来在注释中启用或禁用属性替换:

/subsystem=ee:write-attribute(name="annotation-property-replacement",value=VALUE)
Copy to Clipboard Toggle word wrap

当设置系统属性值时,您可以将 annotation-property-replacement 设置为 true,以在注解中启用属性替换。例如,您可以设置系统属性来替换 Message Driven Bean 上的 maxSession 值:

@MessageDriven(mappedName="jms/Queue", activationConfig =  {
        @ActivationConfigProperty(propertyName = "acknowledgeMode",
                                  propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "destinationType",
                                  propertyValue = "javax.jms.Queue")
@ActivationConfigProperty(propertyName = "maxSession", propertyValue = "${exampleMDB.maxSession:20}")})
    })
public class ExampleMessageDrivenBean implements MessageListener {
...
}
Copy to Clipboard Toggle word wrap

您可以将 -DexampleMDB.maxSession 系统属性设置为 100。如果没有设置此系统属性,则该值将默认为 20

3.5.10. 使用 Git 管理配置数据

您可以使用 Git 管理并持久保留服务器配置数据、属性文件和部署。这不仅允许您管理这些文件的版本历史记录,还允许您使用一个或多个 Git 存储库在多个服务器和节点之间共享服务器和应用程序配置。此功能仅适用于使用默认配置目录布局的单机服务器。

您可以选择 在本地 Git 存储库中 使用配置数据,也可以从 远程 Git 存储库拉取镜像。Git 存储库在 jboss.server.base.dir 目录中配置,这是单机服务器内容的基础目录。将 jboss.server.base.dir 目录配置为使用 Git 后,JBoss EAP 将使用管理 CLI 或管理控制台自动将您对配置进行的每个更新提交。通过手动编辑配置文件在服务器外进行的任何更改都不会提交或保留;但是,您可以使用 Git CLI 添加和提交手动更改。您还可以使用 Git CLI 查看提交历史记录、管理分支和管理内容。

要使用这个功能,请在启动服务器时在命令行上传递一个或多个参数。

Expand
表 3.4. Git 配置管理的服务器启动参数
参数描述

--git-repo

用于管理和持久服务器配置数据的 Git 存储库的位置。如果为本地存储则可以是 local;或是到远程存储库的 URL。

--git-branch

Git 存储库中要使用的分支或标签名称。此参数应命名现有的分支或标签名称,因为如果不存在,则不会创建该分支或标签名称。如果使用标签名称,请将存储库置于分离的 HEAD 状态,这意味着以后的提交不会附加到任何分支。标签名称为只读,通常在多个节点之间复制配置时使用。

--git-auth

指向 Elytron 配置文件的 URL,该文件包含连接远程 Git 存储库时要使用的凭据。如果您的远程 Git 存储库需要身份验证,则需要此参数。Elytron 不支持 SSH。因此,只支持使用没有密码的私钥进行默认的 SSH 身份验证。此参数不能与本地存储库一起使用。

使用本地 Git 存储库

要使用本地 Git 存储库,请使用 --git-repo=local 参数启动服务器。您也可以在启动服务器时添加- -git-branch=GIT_BRANCH_NAME 参数,在远程存储库中指定可选分支或标签名称。此参数应命名现有的分支或标签名称,因为如果不存在,则不会创建该分支或标签名称。如果使用标签名称,请将存储库置于分离的 HEAD 状态,这意味着以后的提交不会附加到任何分支。

以下是使用本地存储库的 1.0.x 分支启动服务器的命令示例。

$ EAP_HOME/bin/standalone.sh --git-repo=local --git-branch=1.0.x
Copy to Clipboard Toggle word wrap

如果您使用参数启动服务器 以使用本地 Git 存储库,JBoss EAP 会检查是否已为 Git 配置 jboss.server.base.dir 目录。如果没有,JBoss EAP 会使用现有配置内容在 jboss.server.base.dir 目录中创建并初始化 Git 存储库。JBoss EAP 检查由 -git-branch 参数传递 的分支名称。如果该参数未通过,它将检查 master 分支。初始化后,您应该在单机服务器内容基本目录中看到 .git/ 目录和一个 .gitignore 文件。

使用远程 Git 存储库

要使用远程 Git 存储库,请使用 --git-repo=REMOTE_REPO 参数启动服务器。参数的值可以是 URL 或您手动添加到本地 Git 配置中的远程别名。

您也可以在启动服务器时添加- -git-branch=GIT_BRANCH_NAME 参数,在远程存储库中指定可选分支或标签名称。此参数应命名现有的分支或标签名称,因为如果不存在,则不会创建该分支或标签名称。如果使用标签名称,请将存储库置于分离的 HEAD 状态,这意味着以后的提交不会附加到任何分支。

如果您的 Git 存储库需要身份验证,则必须在启动服务器时添加 --git-auth=AUTH_FILE_URL 参数。此参数应该是 Elytron 配置文件的 URL,其中包含连接到 Git 存储库所需的凭证。以下是 WildFly 客户端配置文件的示例,该文件指定可用于身份验证的 Elytron 配置。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <authentication-client xmlns="{ElytronAuthClientNamespace}">
    <authentication-rules>
      <rule use-configuration="test-login">
      </rule>
    </authentication-rules>
    <authentication-configurations>
      <configuration name="test-login">
        <sasl-mechanism-selector selector="BASIC" />
        <set-user-name name="eap-user" />
        <credentials>
          <clear-password password="my_api_key" />
        </credentials>
        <set-mechanism-realm name="testRealm" />
      </configuration>
    </authentication-configurations>
  </authentication-client>
</configuration>
Copy to Clipboard Toggle word wrap
注意

Elytron 不支持 SSH。因此,只支持使用没有密码的私钥进行默认的 SSH 身份验证。

以下是使用完整配置文件启动服务器的命令示例,使用远程 eap-configuration 存储库的 1.0.x 分支,并将 URL 传递给包含身份验证凭据的 Elytron 配置文件。

$ EAP_HOME/bin/standalone.sh --git-repo=https://github.com/MY_GIT_ID/eap-configuration.git --git-branch=1.0.x --git-auth=file:///home/USER_NAME/github-wildfly-config.xml --server-config=standalone-full.xml
Copy to Clipboard Toggle word wrap

如果您使用参数启动服务器以使用远程 Git 存储库,JBoss EAP 会检查是否为 Git 配置 jboss.server.base.dir 目录。如果没有,JBoss EAP 会删除 jboss.server.base.dir 目录中现有的配置文件,并将它们替换为远程 Git 配置数据。JBoss EAP 检查由 -git-branch 参数传递 的分支名称。如果该参数未通过,它将检查 master 分支。此过程完成后,您应该会在基本目录中看到 .git/ 目录和一个 .gitignore 文件,以供单机服务器内容使用。

警告

如果您稍后启动服务器传递一个不同于最初使用的不同 -git-repo URL 或- -git-branch 名称,您将看到错误消息 java.lang.RuntimeException: WFLYSRV0268: Failed to pull the repository GIT_REPO_NAMEwhen when you to pull the repository GIT_REPO_NAME。这是因为 JBoss EAP 尝试从 jboss.server.base.dir 目录中当前配置的存储库和分支拉取配置数据,而 Git pull 会导致冲突。

使用 Git 时发布远程配置数据

您可以使用管理 CLI 发布 配置操作将 Git 存储库更改推送到远程存储库。由于 JBoss EAP 在您启动服务器时从远程 Git 存储库拉取配置,因此这允许您在多个服务器间共享配置数据。您只能在远程存储库中使用此操作。它不适用于本地存储库。

以下管理 CLI 操作将配置数据发布到远程 eap-configuration 存储库。

:publish-configuration(location="=https://github.com/MY_GIT_ID/eap-configuration.git")
{"outcome" => "success"}
Copy to Clipboard Toggle word wrap
通过 Git 使用快照

除了使用 Git 提交历史记录来跟踪配置更改外,您还可以执行快照来在特定时间点保留配置。您可以列出快照并删除快照。

使用 Git 时执行快照

快照作为标签存储在 Git 中。您可以将快照标签名称和提交消息指定为 take-snapshot 操作的参数。

以下管理 CLI 操作采用快照,并将标签命名为"snapshot-01"。

:take-snapshot(name="snapshot-01", comment="1st snapshot")
{
    "outcome" => "success",
    "result" => "1st snapshot"
}
Copy to Clipboard Toggle word wrap
使用 Git 时列出快照

您可以使用 list-snapshots 操作列出所有快照标签。

以下管理 CLI 操作列出了快照标签。

:list-snapshots
{
    "outcome" => "success",
    "result" => {
        "directory" => "",
        "names" => [
            "snapshot : 1st snapshot",
            "refs/tags/snapshot-01",
            "snapshot2 : 2nd snapshot",
            "refs/tags/snapshot-02"
        ]
    }
}
Copy to Clipboard Toggle word wrap
使用 Git 时删除快照

您可以通过在 delete-snapshot 操作上传递标签名称来删除特定的快照。

以下管理 CLI 操作删除标签名为 "snapshot-01" 的快照。

:delete-snapshot(name="snapshot-01")
{"outcome" => "success"}
Copy to Clipboard Toggle word wrap

3.6. 文件系统路径

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

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

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

<file relative-to="jboss.server.log.dir" path="server.log"/>
Copy to Clipboard Toggle word wrap

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

Expand
表 3.5. 标准路径
属性描述

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. 查看文件系统路径

使用以下管理 CLI 命令列出文件系统路径:

ls /path
Copy to Clipboard Toggle word wrap
注意

在受管域中,您可以使用以下管理 CLI 命令列出特定服务器的文件系统路径:

ls /host=HOST_NAME/server=SERVER_NAME/path
Copy to Clipboard Toggle word wrap

使用以下管理 CLI 命令读取文件系统路径的值:

/path=PATH_NAME:read-resource
Copy to Clipboard Toggle word wrap
注意

在受管域中,您可以使用以下管理 CLI 命令读取特定服务器的文件系统路径值:

/host=HOST_NAME/server=SERVER_NAME/path=PATH_NAME:read-resource
Copy to Clipboard Toggle word wrap

3.6.2. 覆盖标准路径

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

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

    $ EAP_HOME/bin/standalone.sh -Djboss.server.log.dir=/var/log
    Copy to Clipboard Toggle word wrap
  • 修改服务器配置文件中的 JAVA_OPTS 变量(可以是 standalone.confdomain.conf )使其包含新位置。例如:

    JAVA_OPTS="$JAVA_OPTS -Djboss.server.log.dir=/var/log"
    Copy to Clipboard Toggle word wrap
覆盖受管域中的标准路径

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

  • 日志文件要存储在 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
Copy to Clipboard Toggle word wrap

生成的路径结构如下:

/opt/jboss_eap/domain_data/
               ├── all_data
               ├── all_logs
               ├── all_servers
               │   ├── server-one
               │   │   ├── data
               │   │   ├── log
               │   │   └── tmp
               │   └── server-two
               │       ├── data
               │       ├── log
               │       └── tmp
               └── all_temp
Copy to Clipboard Toggle word wrap

3.6.3. 添加自定义路径

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

先决条件

  • JBoss EAP 正在运行。

流程

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

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

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

<subsystem xmlns="{LoggingSubsystemNamespace}">
  ...
  <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>
Copy to Clipboard Toggle word wrap

3.7. 目录分组

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

按服务器进行目录分组

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

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

EAP_HOME/domain
         └─ servers
            ├── server-one
            │   ├── data
            │   ├── tmp
            │   └── log
            └── server-two
                ├── data
                ├── tmp
                └── log
Copy to Clipboard Toggle word wrap

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

/host=HOST_NAME:write-attribute(name=directory-grouping,value=by-server)
Copy to Clipboard Toggle word wrap

这将更新主机控制器的 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>
Copy to Clipboard Toggle word wrap
根据类型分组的目录

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

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

EAP_HOME/domain
         ├── data
         │   └── servers
         │       ├── server-one
         │       └── server-two
         ├── log
         │   └── servers
         │       ├── server-one
         │       └── server-two
         └── tmp
             └── servers
                 ├── server-one
                 └── server-two
Copy to Clipboard Toggle word wrap

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

/host=HOST_NAME:write-attribute(name=directory-grouping,value=by-type)
Copy to Clipboard Toggle word wrap

这将更新主机控制器的 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>
Copy to Clipboard Toggle word wrap

3.8. 系统属性

您可以使用 Java 系统属性来配置多个 JBoss EAP 选项,并设置应用服务器中使用的任何 name-value 对。

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

<inet-address value="${jboss.bind.address:127.0.0.1}"/>
Copy to Clipboard Toggle word wrap

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

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

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

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

$ EAP_HOME/bin/standalone.sh -Djboss.bind.address=192.168.1.2
Copy to Clipboard Toggle word wrap

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

使用管理 CLI 设置系统属性

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

/system-property=PROPERTY_NAME:add(value=PROPERTY_VALUE)
Copy to Clipboard Toggle word wrap

例如:

/system-property=jboss.bind.address:add(value=192.168.1.2)
Copy to Clipboard Toggle word wrap

使用管理 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"
    Copy to Clipboard Toggle word wrap
  • 对于 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
    ...
    Copy to Clipboard Toggle word wrap

3.9. 管理审计日志记录

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

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

注意

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

3.9.1. 独立服务器审计日志记录

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

<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>
Copy to Clipboard Toggle word wrap

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

/core-service=management/access=audit:read-resource(recursive=true)
Copy to Clipboard Toggle word wrap

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

3.9.2. 受管域审计日志记录

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

<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>
Copy to Clipboard Toggle word wrap

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

/host=HOST_NAME/core-service=management/access=audit:read-resource(recursive=true)
Copy to Clipboard Toggle word wrap

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

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

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

以下说明启用 NATIVEHTTP 审计日志记录。要配置 JMX 审计日志记录,请参阅启用 JMX 管理审计日志记录

要设置 syslog 审计日志记录,请参阅 向 syslog 服务器发送管理审计日志记录

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

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

/core-service=management/access=audit/logger=audit-log:write-attribute(name=enabled,value=true)
Copy to Clipboard Toggle word wrap

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

3.9.3.2. 启用受管域审计日志记录

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

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

/host=HOST_NAME/core-service=management/access=audit/logger=audit-log:write-attribute(name=enabled,value=true)
Copy to Clipboard Toggle word wrap

默认情况下,这会将审计日志写入 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)
Copy to Clipboard Toggle word wrap

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

3.9.4. 启用 JMX 管理审计日志记录

JBoss EAP 预配置了 JMX 审计日志记录的文件处理程序,但这些日志默认是禁用的。启用审计日志记录的管理 CLI 命令取决于您作为单机服务器还是受管域运行。

要配置 NATIVEHTTP 审计日志记录,请参阅启用管理审计日志记录

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

可以使用以下命令为单机服务器启用 JMX 审计日志记录:

/subsystem=jmx/configuration=audit-log:add()
/subsystem=jmx/configuration=audit-log/handler=file:add()
Copy to Clipboard Toggle word wrap

这可启用 JMX 审计日志记录,然后使用定义 的文件处理程序 将这些日志写入 EAP_HOME/standalone/data/audit-log.log

3.9.4.2. 启用受管域 JMX 审计日志记录

可以为受管域中的每个主机和配置文件启用 JMX 审计日志记录。

为主机启用 JMX 审计日志记录

  1. 在主机的 jmx 子系统中启用审计日志记录。

    /host=HOST_NAME/subsystem=jmx/configuration=audit-log:add()
    Copy to Clipboard Toggle word wrap
  2. 启用 jmx 子系统的审计日志记录后,可以使用以下命令为主机定义处理程序:

    /host=HOST_NAME/subsystem=jmx/configuration=audit-log/handler=host-file:add()
    Copy to Clipboard Toggle word wrap

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

为配置集启用 JMX 审计日志记录

  1. 在配置文件的 jmx 子系统中启用审计日志记录。

    /profile=PROFILE_NAME/subsystem=jmx/configuration=audit-log:add()
    Copy to Clipboard Toggle word wrap
  2. 启用 jmx 子系统的审计日志记录后,可以使用以下命令为配置集定义处理程序:

    /profile=PROFILE_NAME/subsystem=jmx/configuration=audit-log/handler=server-file:add()
    Copy to Clipboard Toggle word wrap

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

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

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

先决条件

  • JBoss EAP 正在运行。

流程

  1. 添加 syslog 处理程序。

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

    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
    Copy to Clipboard Toggle word wrap
    注意

    要传递的参数因指定的协议而异。

    要将处理程序配置为使用 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)
    Copy to Clipboard Toggle word wrap
  2. 添加对 syslog 处理程序的引用。

    在受管域中,您必须在此命令之前加上 /host=HOST_NAME

    /core-service=management/access=audit/logger=audit-log/handler=SYSLOG_HANDLER_NAME:add
    Copy to Clipboard Toggle word wrap
  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.9.6. 读取审计日志条目

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

注意

不建议使用 文本编辑器 查看日志文件,因为有些可能会防止将其他日志条目写入到日志文件中。

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

Expand
表 3.6. 管理审计日志字段
字段名称描述

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 实例的版本号。

3.10. 服务器生命周期事件通知

您可以使用 JBoss EAP core-management 子系统JMX 为服务器生命周期事件设置通知。服务器运行时配置状态或服务器运行状态的更改将触发通知。

JBoss EAP 的服务器运行时配置状态是 STARTINGRUNNINGRELOAD_REQUIREDRESTART_REQUIREDSTOPPINGSTOPPED

运行 JBoss EAP 的服务器状态为 STARTING,NORMAL,ADMIN_ONLY,PRE_SUSPEND,SUSPENDING,SUSPENDED,STOPPING, 和 STOPPED

您可以将监听程序注册到 JBoss EAP core-management 子系统,以监控服务器生命周期事件。以下步骤演示了如何创建并注册将事件记录到文件中的示例监听程序。

先决条件

  • JBoss EAP 正在运行。

流程

  1. 创建监听程序。

    创建 org.wildfly.extension.core.management.client.ProcessStateListener 的实现,如下例所示。

    示例:Listener 类

    package org.simple.lifecycle.events.listener;
    
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    
    import org.wildfly.extension.core.management.client.ProcessStateListener;
    import org.wildfly.extension.core.management.client.ProcessStateListenerInitParameters;
    import org.wildfly.extension.core.management.client.RunningStateChangeEvent;
    import org.wildfly.extension.core.management.client.RuntimeConfigurationStateChangeEvent;
    
    public class SimpleListener implements ProcessStateListener {
    
        private File file;
        private FileWriter fileWriter;
        private ProcessStateListenerInitParameters parameters;
    
        public void init(ProcessStateListenerInitParameters parameters) {
            this.parameters = parameters;
            this.file = new File(parameters.getInitProperties().get("file"));
            try {
                fileWriter = new FileWriter(file, true);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public void cleanup() {
            try {
                fileWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                fileWriter = null;
            }
        }
    
        public void runtimeConfigurationStateChanged(RuntimeConfigurationStateChangeEvent evt) {
            try {
                fileWriter.write(String.format("Runtime configuration state change for %s: %s to %s\n", parameters.getProcessType(), evt.getOldState(), evt.getNewState()));
                fileWriter.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public void runningStateChanged(RunningStateChangeEvent evt) {
            try {
                fileWriter.write(String.format("Running state change for %s: %s to %s\n", parameters.getProcessType(), evt.getOldState(), evt.getNewState()));
                fileWriter.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    Copy to Clipboard Toggle word wrap

    注意

    在实施监听器时请注意以下几点:

    • 如果服务器重新加载,侦听器会在服务器尝试停止时停止侦听,并在服务器启动时重新加载监听程序。因此,实施必须确保在同一 JVM 内正确加载、初始化和删除它们。
    • 对监听器的通知阻止阻止对服务器状态的更改。实施必须确保它们不会阻止或死锁。
    • 每个监听器实例都以自己的线程执行,且不会保证顺序。
  2. 编译类并将其打包为 JAR。

    请注意,要编译,您需要依赖于 org.wildfly.core:wildfly-core-management-client Maven 模块。

  3. 将 JAR 添加为 JBoss EAP 模块。

    使用以下管理 CLI 命令,并提供 JAR 的模块名称和路径。

    module add --name=org.simple.lifecycle.events.listener --dependencies=org.wildfly.extension.core-management-client --resources=/path/to/simple-listener-0.0.1-SNAPSHOT.jar
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  4. 注册侦听器。

    使用以下管理 CLI 命令,将侦听器添加到 core-management 子系统:指定类、模块和文件位置,以记录服务器生命周期事件。

    /subsystem=core-management/process-state-listener=my-simple-listener:add(class=org.simple.lifecycle.events.listener.SimpleListener, module=org.simple.lifecycle.events.listener,properties={file=/path/to/my-listener-output.txt})
    Copy to Clipboard Toggle word wrap

现在,服务器生命周期事件将根据上面的 SimpleListener 类记录到 my-listener-output.txt 文件中。例如,在管理 CLI 中发出 :suspend 命令会将以下内容输出到 my-listener-output.txt 文件。

Running state change for STANDALONE_SERVER: normal to suspending
Running state change for STANDALONE_SERVER: suspending to suspended
Copy to Clipboard Toggle word wrap

这表明,running 状态从 normal 改为 suspending,然后从 挂起 挂起

3.10.2. 使用 JMX 通知监控服务器生命周期事件

您可以注册 JMX 通知监听程序,以监控服务器生命周期事件。以下步骤演示了如何创建并添加将事件记录到文件中的示例监听程序。

先决条件

  • JBoss EAP 正在运行。

流程

  1. 创建监听程序。

    创建 java.management.NotificationListener 的实现,如下例所示。

    示例:Listener 类

    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.nio.charset.StandardCharsets;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.StandardOpenOption;
    
    import java.management.AttributeChangeNotification;
    import java.management.Notification;
    import java.management.NotificationListener;
    
    import org.jboss.logging.Logger;
    
    public class StateNotificationListener implements NotificationListener {
    
      public static final String RUNTIME_CONFIGURATION_FILENAME = "runtime-configuration-notifications.txt";
      public static final String RUNNING_FILENAME = "running-notifications.txt";
      private final Path targetFile;
    
      public StateNotificationListener() {
        this.targetFile = Paths.get("notifications/data").toAbsolutePath();
        init(targetFile);
      }
    
      protected Path getRuntimeConfigurationTargetFile() {
        return this.targetFile.resolve(RUNTIME_CONFIGURATION_FILENAME);
      }
    
      protected Path getRunningConfigurationTargetFile() {
        return this.targetFile.resolve(RUNNING_FILENAME);
      }
    
      protected final void init(Path targetFile) {
        try {
          Files.createDirectories(targetFile);
    
          if (!Files.exists(targetFile.resolve(RUNTIME_CONFIGURATION_FILENAME))) {
            Files.createFile(targetFile.resolve(RUNTIME_CONFIGURATION_FILENAME));
          }
    
          if (!Files.exists(targetFile.resolve(RUNNING_FILENAME))) {
            Files.createFile(targetFile.resolve(RUNNING_FILENAME));
          }
        } catch (IOException ex) {
            Logger.getLogger(StateNotificationListener.class).error("Problem handling JMX Notification", ex);
        }
      }
    
      @Override
      public void handleNotification(Notification notification, Object handback) {
        AttributeChangeNotification attributeChangeNotification = (AttributeChangeNotification) notification;
        if ("RuntimeConfigurationState".equals(attributeChangeNotification.getAttributeName())) {
          writeNotification(attributeChangeNotification, getRuntimeConfigurationTargetFile());
        } else {
          writeNotification(attributeChangeNotification, getRunningConfigurationTargetFile());
        }
      }
    
      private void writeNotification(AttributeChangeNotification notification, Path path) {
        try (BufferedWriter in = Files.newBufferedWriter(path, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {
          in.write(String.format("%s %s %s %s", notification.getType(), notification.getSequenceNumber(), notification.getSource().toString(), notification.getMessage()));
          in.newLine();
          in.flush();
        } catch (IOException ex) {
          Logger.getLogger(StateNotificationListener.class).error("Problem handling JMX Notification", ex);
        }
      }
    }
    Copy to Clipboard Toggle word wrap

  2. 注册通知监听程序。

    将通知监听程序添加到 MBeanServer

    示例:添加通知监听程序

    MBeanServer server = ManagementFactory.getPlatformMBeanServer();
    server.addNotificationListener(ObjectName.getInstance("jboss.root:type=state"), new StateNotificationListener(), null, null);
    Copy to Clipboard Toggle word wrap

  3. 打包并部署到 JBoss EAP.

服务器生命周期事件现在根据上面的 StateNotificationListener 类记录到文件中。例如,在管理 CLI 中发出 :suspend 命令会输出到 running-notifications.txt 文件。

jmx.attribute.change 5 jboss.root:type=state The attribute 'RunningState' has changed from 'normal' to 'suspending'
jmx.attribute.change 6 jboss.root:type=state The attribute 'RunningState' has changed from 'suspending' to 'suspended'
Copy to Clipboard Toggle word wrap

这表明,running 状态从 normal 改为 suspending,然后从 挂起 挂起

第 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>
Copy to Clipboard Toggle word wrap

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

$ EAP_HOME/bin/standalone.sh -Djboss.bind.address=IP_ADDRESS
Copy to Clipboard Toggle word wrap

或者,您也可以在 server start 命令行上使用 -b 参数。

$ EAP_HOME/bin/standalone.sh -b IP_ADDRESS
Copy to Clipboard Toggle word wrap

在上面的命令中,-b IP_ADDRESS 等同于 -Djboss.bind.address=IP_ADDRESS

您还可以使用 -b 开关来设置 管理接口inet-address

$ EAP_HOME/bin/standalone.sh -bmanagement=IP_ADDRESS
Copy to Clipboard Toggle word wrap

如果您只想设置单个变量,您可以将 jboss.bind.address.management 更改为 jboss.bind.address。当您 set -b 切换 or -Djboss.bind.address 时,公共和管理界面将共享相同的 IP_ADDRESS

有关服务器启动选项的更多信息,请参阅 服务器运行时参数

重要

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

4.1.2. 配置接口

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

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

添加一个带有 NIC 值的接口

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

/interface=external:add(nic=eth0)
Copy to Clipboard Toggle word wrap
<interface name="external">
   <nic name="eth0"/>
</interface>
Copy to Clipboard Toggle word wrap
添加具有多个条件值的接口

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

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

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

/interface=public:write-attribute(name=inet-address,value="${jboss.bind.address:192.168.0.0}")
Copy to Clipboard Toggle word wrap
<interface name="public">
    <inet-address value="${jboss.bind.address:192.168.0.0}"/>
</interface>
Copy to Clipboard Toggle word wrap
向受管域中的服务器添加接口
/host=HOST_NAME/server-config=SERVER_NAME/interface=INTERFACE_NAME:add(inet-address=127.0.0.1)
Copy to Clipboard Toggle word wrap
<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>
Copy to Clipboard Toggle word wrap

4.2. 套接字绑定

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

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

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

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

JBoss EAP 配置的套接字绑定组中可以定义三种类型的套接字绑定:

进站套接字绑定

socket-binding 元素用于为 JBoss EAP 服务器配置入站套接字绑定。默认 JBoss EAP 配置提供多个预配置的 socket-binding 元素,例如用于 HTTP 和 HTTPS 流量的元素。另一个示例可在为 JBoss EAP 配置消息传递 的广播 部分找到。

此元素的属性可以在 Inbound 套接字绑定属性表中找到

远程出站套接字绑定

remote-destination-outbound-socket-binding 元素用于为远程到 JBoss EAP 服务器的目的地配置出站套接字绑定。默认 JBoss EAP 配置提供一个示例远程目标套接字绑定,可用于邮件服务器。另一个示例包括在为 JBoss EAP 配置消息传递 的将集成 Artemis 资源适配器用于远程连接 部分。

此元素的属性可以在 远程出站套接字绑定属性表中找到

本地出站套接字绑定

local-destination-outbound-socket-binding 元素用于为属于 JBoss EAP 服务器本地的目的地配置出站套接字绑定。预计通常不会使用这种套接字绑定。

此元素的属性可以在 Local outbound 套接字绑定属性 表中找到。

4.2.1. 管理端口

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

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

4.2.2. 默认的套接字绑定

JBoss EAP 为预定义的五个配置集(default, ha, full, full-ha, load-balancer)的每一个都提供了一个套接字绑定组。

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

重要

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

独立服务器

作为单机服务器运行时,每个配置文件仅定义一个套接字绑定组。每个独立配置文件(standalone.xmlstandalone-ha.xmlstandalone-full.xmlstandalone-full-ha.xmlstandalone-load-balancer.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>
Copy to Clipboard Toggle word wrap
受管域

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

  • standard-sockets
  • ha-sockets
  • full-sockets
  • full-ha-sockets
  • load-balancer-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-udp" interface="private" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
    <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-group name="load-balancer-sockets" default-interface="public">
    <!-- Needed for server groups using the 'load-balancer' profile  -->
    ...
  </socket-binding-group>
</socket-binding-groups>
Copy to Clipboard Toggle word wrap
注意

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

4.2.3. 配置套接字绑定

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

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

流程

  1. 添加新套接字绑定组。

    注意

    作为单机服务器运行时,无法执行此步骤。

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

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

    /socket-binding-group=new-sockets/socket-binding=new-socket-binding:write-attribute(name=interface,value=unsecure)
    Copy to Clipboard Toggle word wrap

以下示例显示了在上述步骤完成后 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>
Copy to Clipboard Toggle word wrap

4.2.4. 查看服务器的套接字绑定和开放端口

您可以从管理控制台查看服务器的套接字绑定名称和打开的端口。

先决条件

只有在服务器处于以下状态之一时才会看到套接字绑定名称和开放端口:

  • running
  • reload-required
  • restart-required

流程

  1. 访问管理控制台,再导航到 Runtime
  2. 点服务器,在右侧窗格中查看套接字绑定名称和打开的端口。

4.2.5. 端口偏移

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

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

/host=primary/server-config=server-two/:write-attribute(name=socket-binding-port-offset,value=250)
Copy to Clipboard Toggle word wrap

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

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

$ EAP_HOME/bin/standalone.sh -Djboss.socket.binding.port-offset=100
Copy to Clipboard Toggle word wrap

4.3. IPv6 地址

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

4.3.1. 为 IPv6 地址配置 JVM 堆栈

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

流程

  1. 打开启动配置文件。

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

    -Djava.net.preferIPv4Stack=false
    Copy to Clipboard Toggle word wrap
  3. 附加 java.net.preferIPv6Addresses 属性,并将它设为 true

    -Djava.net.preferIPv6Addresses=true
    Copy to Clipboard Toggle word wrap

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

# Specify options to pass to the Java VM.
#
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="$JBOSS_JAVA_SIZING -Djava.net.preferIPv4Stack=false"
   JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv6Addresses=true"
else
Copy to Clipboard Toggle word wrap

4.3.2. 更新 IPv6 地址的接口声明

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

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

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

<interfaces>
    <interface name="management">
        <inet-address value="${jboss.bind.address.management:[::1]}"/>
    </interface>
    ....
</interfaces>
Copy to Clipboard Toggle word wrap

第 5 章 JBoss EAP 类加载概述

JBoss EAP 使用模块化类加载系统来控制部署的应用程序的类路径。与传统的分层类加载程序系统相比,该系统提供更大的灵活性和控制。开发人员对可供其应用程序使用的类进行精细控制,并且可以配置部署来忽略应用服务器提供的类,以自行使用。

模块类加载程序将所有 Java 类分离为名为 modules 的逻辑组。每个模块都可以定义其他模块的依赖关系,将该模块中的类包含在其自己的类路径中。由于每个部署的 Java 存档(JAR)和 Web 存档(WAR)文件都被视为模块,因此开发人员可以通过添加模块配置来控制其应用程序的类路径的内容。

5.1. JBoss EAP 中的模块类型

模块是类加载和依赖项管理的逻辑类分组。JBoss EAP 识别两种不同类型的模块:

  • 静态模块
  • 动态模块

这两者的主要区别在于它们是如何打包的。

JBoss EAP 还提供一组预定义的模块。

5.1.1. JBoss EAP 中的静态模块

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

示例:MySQL JDBC Driver module.xml 文件

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="com.mysql">
  <resources>
    <resource-root path="mysql-connector-j-8.0.33.jar"/>
  </resources>
  <dependencies>
    <module name="java.xml" export="true"/>
    <module name="java.xml.crypto" export="true"/>
    <module name="jdk.xml.dom" export="true"/>
    <module name="jakarta.transaction.api"/>
  </dependencies>
</module>
Copy to Clipboard Toggle word wrap

注意

MySQL 驱动程序 JAR 名称 mysql-connector-j-8.0.33.jar 仅作为示例提供。有关经过测试的 MySQL 版本的详情,请参考 测试的数据库

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

如果许多应用程序部署到使用相同的第三方库的同一服务器上,则创建自定义静态模块非常有用。管理员可以创建并安装包含这些库的模块,而不必将这些库与每个应用程序绑定。然后,应用程序可以声明对自定义静态模块的明确依赖项。

JBoss EAP 发行版中提供的模块位于 EAP_HOME/modules 目录中的 系统 目录中。这使得它们独立于第三方提供的任何模块。任何红帽提供的产品都在 JBoss EAP 之上,也会在 系统 目录中安装其模块。

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

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

也支持在 module.xml 文件的 resource-root path 元素中使用绝对路径。这样,您的资源库就可以被访问,而无需将它们移到 EAP_HOME/modules 目录。

示例: module.xml 文件中的 Absolute 路径

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="oracle.jdbc">
    <resources>
        <resource-root path="/home/redhat/test.jar"/>
    </resources>
</module>
Copy to Clipboard Toggle word wrap

5.1.2. JBoss EAP 中的动态模块

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

只有在需要时才加载模块,通常当部署具有显式或隐式依赖项的应用程序时。

5.1.3. JBoss EAP 中的预定义模块

当您使用应用服务器中的默认模块加载程序时,您可以获得一组预定义的模块。特殊模块 org.jboss.modules 包括所有 JBoss 模块 API,始终可用,并由 JBoss 模块提供。标准 Java 平台模块系统(JPMS)模块也按标准名称提供。

有关 Java 9 或更高版本中可用平台模块列表,请参阅相应的 JDK 文档。

5.2. JBoss EAP 中的模块依赖项

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

部署的应用程序(如 Java 存档(JAR)或 Web Archive (WAR))作为动态模块加载,并使用依赖项访问 JBoss EAP 提供的 API。

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

显式依赖项
开发人员在配置文件中声明显式依赖项。静态模块可以在其 module.xml 文件中声明依赖项。动态模块可以在部署的 MANIFEST.MF 中声明依赖项,或者 jboss-deployment-structure.xml 部署描述符。
隐式依赖项
当部署中的特定条件或元数据时,JBoss EAP 会自动添加隐式依赖项。JBoss EAP 提供的 Jakarta EE API 是通过在部署过程中检测隐式依赖项添加的模块示例。

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

可选依赖项

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

导出的依赖项

模块的类路径仅包含自己的类及其直接依赖项。模块无法访问依赖项的类。但是,模块可以指定导出有显式依赖项。导出的依赖项会提供给依赖于导出该模块的任何模块。

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

  • 模块 A 声明对 Module C 的明确依赖关系,或者
  • 模块 B 将其对模块 C 的依赖导出。
全局模块

全局模块是 JBoss EAP 作为每个应用的依赖项提供的模块。任何模块都可以通过添加到 JBoss EAP 的全局模块列表来实现全局设置。它不需要更改该模块。

如需更多信息,请参阅 JBoss EAP 中的全局模块

5.3. 为 JBoss EAP 创建自定义模块

如果许多应用程序部署到使用相同的第三方库的同一服务器上,则创建自定义模块很有用。管理员可以创建并安装包含这些库的模块,而不必将这些库与每个应用程序绑定。

您可以使用以下方法创建自定义模块:

5.3.1. 手动创建自定义模块

您可以从 Java 归档(JAR)或其他资源文件创建模块,使其可用于 JBoss EAP 中的应用程序。

先决条件

  • 您有模块所需的 JAR 或资源文件。

流程

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

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

    $ cd EAP_HOME/modules/
    $ mkdir -p com/mysql/main
    Copy to Clipboard Toggle word wrap

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

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

    $ cp /path/to/mysql-connector-j-8.0.33.jar EAP_HOME/modules/com/mysql/main/
    Copy to Clipboard Toggle word wrap

    注意

    MySQL 驱动程序 JAR 名称 mysql-connector-j-8.0.33.jar 仅作为示例提供。有关经过测试的 MySQL 版本的详情,请参考 测试的数据库

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

    示例:MySQL JDBC 驱动程序 module.xml 文件

    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.9" name="com.mysql">
      <resources>
        <resource-root path="mysql-connector-j-8.0.33.jar"/>
      </resources>
      <dependencies>
        <module name="java.xml" export="true"/>
        <module name="java.xml.crypto" export="true"/>
        <module name="jdk.xml.dom" export="true"/>
    
        <module name="jakarta.transaction.api"/>
      </dependencies>
    </module>
    Copy to Clipboard Toggle word wrap

    注意

    MySQL 驱动程序 JAR 名称 mysql-connector-j-8.0.33.jar 仅作为示例提供。有关经过测试的 MySQL 版本的详情,请参考 测试的数据库

5.3.2. 使用管理 CLI 创建自定义模块

您可以使用管理 CLI 从 Java 归档(JAR)或其他资源文件创建模块,使其可用于 JBoss EAP 中的应用程序。

重要

使用 module 管理 CLI 命令仅作为技术预览提供和删除模块。此命令不适合在受管域中使用,或者在远程连接到管理 CLI 时。在生产环境中应该手动添加和删除模块。如需更多信息,请参阅:

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

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

先决条件

  • 您有模块所需的 JAR 或资源文件。

流程

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

    $ EAP_HOME/bin/jboss-cli.sh
    Copy to Clipboard Toggle word wrap
  3. 使用 module add 管理 CLI 命令添加新的核心模块。

    语法

    module add --name=<MODULE_NAME> --resources=<PATH_TO_RESOURCE> --dependencies=<DEPENDENCIES>
    Copy to Clipboard Toggle word wrap

    示例:创建一个 MySQL 模块

    module add --name=com.mysql --resources=</path/to>/mysql-connector-j-8.0.33.jar --dependencies=java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
    Copy to Clipboard Toggle word wrap

    注意

    MySQL 驱动程序 JAR 名称 mysql-connector-j-8.0.33.jar 仅作为示例提供。有关经过测试的 MySQL 版本的详情,请参考 测试的数据库

5.4. 将模块添加为依赖项

要访问模块的资源,应用程序必须具有作为依赖项添加的模块。

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

流程

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

    module add --name=myprops --resources=</path/to>/properties.jar
    Copy to Clipboard Toggle word wrap
  2. 将此模块定义为全局模块,使其可用于所有部署。

    /subsystem=ee:list-add(name=global-modules,value={name=myprops})
    Copy to Clipboard Toggle word wrap

验证

  • 验证您的应用是否可以从 Java 存档(JAR)中包含的其中一个属性文件中检索属性。

    Thread.currentThread().getContextClassLoader().getResource("my.properties");
    Copy to Clipboard Toggle word wrap

5.5. 从 JBoss EAP 中删除自定义模块

您可以使用以下方法从 JBoss EAP 中删除任何不必要的模块:

5.5.1. 手动删除自定义模块

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

流程

  • 删除 EAP_HOME/modules/ 下的模块目录,其中包含其 module.xml 文件以及关联的 JAR 文件或其他资源。

    例如,删除 EAP_HOME/modules/com/mysql/main/ 目录,以删除 插槽中的自定义 MySQL JDBC 驱动程序模块。

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

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

重要

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

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

先决条件

  • JBoss EAP 正在运行。

流程

  1. 启动管理 CLI。

    $ EAP_HOME/bin/jboss-cli.sh
    Copy to Clipboard Toggle word wrap
  2. 使用 module remove 管理 CLI 命令删除自定义模块。

    语法

    module remove --name=MODULE_NAME
    Copy to Clipboard Toggle word wrap

    • 如果要删除 的模块位于 之外的插槽中,请使用--slot 参数。

    示例:删除 MySQL 模块

    module remove --name=com.mysql
    Copy to Clipboard Toggle word wrap

使用此命令添加或删除模块的更多详细信息,执行 模块 --help

5.6. JBoss EAP 中的全局模块

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

注意

您必须知道要配置为全局模块的模块名称。有关所含模块的完整列表以及是否支持它们,请参阅红帽客户门户网站中的 Red Hat JBoss Enterprise Application Platform 8.0 包括的模块。如需部署 中的模块的命名约定,请参阅 JBoss EAP 的动态模块命名约定。

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

/subsystem=ee:write-attribute(name=global-modules,value=[{name=<MODULE_NAME_1>},{name=<MODULE_NAME_2>}]
Copy to Clipboard Toggle word wrap

使用以下管理 CLI 命令,将单个模块添加到现有全局模块列表中:

/subsystem=ee:list-add(name=global-modules,value={name=<MODULE_NAME>})
Copy to Clipboard Toggle word wrap

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

如果您希望外部依赖项可以访问全局模块,您必须明确使其可用。以下选项可用于在外部提供的全局模块中提供服务:

  • services="import" 添加到 jboss-deployment-structure.xml中的模块中
  • 在全局模块定义中添加 services="true"。

    /subsystem=ee:write-attribute(name=global-modules,value=[{name=module1,services=true}]
    Copy to Clipboard Toggle word wrap

    或者,在添加多个模块时:

    /subsystem=ee:write-attribute(name=global-modules,value=[{name=module1,services=true},{name=module2,services=false}]
    Copy to Clipboard Toggle word wrap

    将新模块添加到现有列表中:

    /subsystem=ee:list-add(name=global-modules,value={name=module1,services=true})
    Copy to Clipboard Toggle word wrap
  • 使用管理控制台定义全局模块时,请确保 Services 属性的值为 On

5.7. 创建全局目录

全局目录可以更好地替代全局模块方法。例如,如果要更改全局模块中列出的库名称,您必须删除全局模块,更改库的名称,然后将库添加到一个新的全局模块。如果您更改了全局目录中列出的库名称,您只需要重新载入服务器,以便对所有部署都可用库名称更改。

使用全局目录,您可以执行以下操作:

  • 在已部署的应用程序间共享多个库。
  • 通过将常用框架(通常添加到应用程序库)移到一个通用位置来维护库。

当您创建全局目录时,EE 子系统配置全局目录,然后扫描目录以创建 JBoss 模块依赖项。模块依赖项包括全局目录库和 JAR 文件。这个模块依赖项还包括以下资源加载程序:

  • 路径资源加载程序提供文件作为应用程序的资源。
  • 资源加载程序向应用提供 JAR 文件中包含的类。

EE 子系统添加了一个模块依赖项,作为对各个部署的应用程序的系统依赖项。

先决条件

  • 在操作系统上创建标准目录。此标准目录必须包含您需要部署到应用程序的所有 JAR 文件和资源。这会创建一个目录树。

    显示复制到应用程序的通用库列表的常用目录示例:

    /my-common-libs/log4j2.xml
    /my-common-libs/libs/log4j-api-2.14.1.jar
    /my-common-libs/libs/log4j-core-2.14.1.jar
    Copy to Clipboard Toggle word wrap

    注意

    由于服务器部署了应用并加载全局目录,因此您无法配置全局目录来覆盖服务器的库版本。全局目录不能替换服务器附带的库。

流程

  1. 根据您的服务器设置,创建一个全局目录。您可以使用可选的 relative-to 属性来设置带有相对路径的全局目录。

    在独立服务器上创建全局目录的示例:

    [standalone@localhost:9990 /] /subsystem=ee/global-directory=my-common-libs:add(path=my-common-libs, relative-to=jboss.home.dir)
    Copy to Clipboard Toggle word wrap

    在受管域中在服务器上创建全局目录的示例:

    [domain@localhost:9990 /] /profile=default/subsystem=ee/global-directory=my-common-libs:add(path=my-common-libs, relative-to=jboss.server.data.dir)
    Copy to Clipboard Toggle word wrap

    对于受管域中的服务器,您可以使用 relative-path 属性将全局目录添加到 JBoss EAP 配置文件下(在 domain.xml 中定义)。您可以指定系统路径或此 relative-to 属性的自定义系统路径。

    注意

    在受管域中运行服务器时,您必须确保全局目录的内容在所有服务器实例之间保持一致。例如,每个主机必须包含包含全局目录内容的本地文件系统目录。

  2. 重新加载服务器实例,以激活全局目录。

    您必须重新加载服务器,以便服务器可以按字母顺序扫描目录树的内容,包括每个子目录级别(从根目录开始)。服务器以字母顺序将来自每个目录级别的文件添加到 JBoss 模块依赖项中。

    如果更改全局目录的内容,或者在全局目录中更改或添加 JAR 文件,您必须重新加载服务器,使更改可供已部署的应用使用。例如,如果您替换全局目录中的 JAR 库,请重新加载服务器,以确保它重新扫描全局目录,并使用更改后的 JAR 库更新部署的应用程序。

5.8. 读取全局目录配置的当前值

您可以使用 read-resource 操作读取全局目录配置的当前值。

流程

  • 根据您的服务器设置,使用 read-resource 操作来读取全局目录配置的当前值。

    读取单机服务器上全局目录配置的当前值的输出示例。

    [standalone@localhost:9990 /] /subsystem=ee/global-directory=my-common-libs:read-resource
    {
          "outcome" => "success",
          "result" => {
              "path" => "my-common-libs",
              "relative-to" => "jboss.home.dir"
          }
     }
    Copy to Clipboard Toggle word wrap

    在受管域中读取全局目录配置的当前值的示例。

    [domain@localhost:9990 /] /subsystem=ee/global-directory=my-common-libs:read-resource
     {
          "outcome" => "success",
          "result" => {
              "path" => "my-common-libs",
              "relative-to" => "jboss.server.data.dir"
          }
     }
    Copy to Clipboard Toggle word wrap

5.9. 删除全局目录

您可以从服务器配置中删除全局目录。此操作只从服务器配置文件中删除全局目录资源,不会影响底层目录或其文件。

流程

  • 要从独立服务器中删除全局目录,请使用以下命令:

    [standalone@localhost:9990 /] /subsystem=ee/global-directory=my-common-libs:remove()
    Copy to Clipboard Toggle word wrap
  • 要删除受管域中的服务器上的全局目录,请使用以下命令:

    [domain@localhost:9990 /] /profile=default/subsystem=ee/global-directory=my-common-libs:remove()
    Copy to Clipboard Toggle word wrap

5.10. JBoss EAP 中的子部署隔离配置

企业存档(EAR)中的每个子部署都是带有其自身类加载程序的动态模块。子部署始终对父模块具有隐式依赖项,这赋予他们对 EAR/lib 中的类的访问权限。默认情况下,子部署可以访问该 EAR 中其他子部署的资源。

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

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

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

流程

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

    /subsystem=ee:write-attribute(name=ear-subdeployments-isolated,value=true)
    Copy to Clipboard Toggle word wrap

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

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

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

注意

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

流程

  1. 编辑启动配置文件。

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

    JBOSS_MODULEPATH="/path/to/modules/directory/"
    Copy to Clipboard Toggle word wrap

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

    注意

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

    set "JBOSS_MODULEPATH /path/to/modules/directory/"
    Copy to Clipboard Toggle word wrap

    要指定目录列表,请使用分号(;)来分隔符目录列表。

5.12. JBoss EAP 的动态模块命名约定

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

  • Web 归档(WAR)和 Java 归档(JAR)文件部署使用以下格式进行命名:

    deployment.DEPLOYMENT_NAME
    Copy to Clipboard Toggle word wrap

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

  • Enterprise Archive (EAR)中的子部署使用以下格式进行命名:

    deployment.EAR_NAME.SUBDEPLOYMENT_NAME
    Copy to Clipboard Toggle word wrap

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

第 6 章 管理应用部署

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

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

  • 启动服务器时。

    $ EAP_HOME/bin/standalone.sh -Dorg.jboss.metadata.parser.validate=true
    Copy to Clipboard Toggle word wrap
  • 使用以下管理 CLI 命令将它添加到服务器配置中:

    /system-property=org.jboss.metadata.parser.validate:add(value=true)
    Copy to Clipboard Toggle word wrap

6.1. 使用管理 CLI 管理应用部署

使用管理 CLI 部署应用程序为您提供了单个命令行界面的好处,能够创建和运行部署脚本。您可以使用此脚本功能来配置特定的应用程序部署和管理场景。在作为单机服务器运行时,您可以管理单个服务器的部署,或者在受管域中运行时管理整个服务器网络。

6.1.1. 在独立服务器中管理应用程序部署

6.1.1.1. 使用管理 CLI 将应用部署到独立服务器

您可以使用 部署 deploy-file 命令,使用管理 CLI 部署应用程序。

先决条件

  • JBoss EAP 正在运行。

流程

  • 从管理 CLI 部署打包为 Web 归档(war)的应用。

    语法

    deployment deploy-file <path_to_the_application>/<application_name>.war
    Copy to Clipboard Toggle word wrap

    Example

    deployment deploy-file /my-applications/test-application.war
    Copy to Clipboard Toggle word wrap

    成功部署不会向管理 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")
    Copy to Clipboard Toggle word wrap

同样,您可以使用以下 部署命令

  • 使用 deployment deploy-cli-archive.cli 归档文件中部署内容。CLI 部署存档是采用 .cli 扩展名的 JAR 文件。它包含应当要部署的应用程序存档,以及 CLI 脚本文件 deploy.scrundeploy.scr,其中包含命令和操作。一个脚本文件 deploy.scr 包含部署应用程序存档和设置环境的命令和操作;另一个脚本文件 undeploy.scr,包含用于取消部署应用程序存档和清理环境的命令。
  • 使用 deployment deploy-url 部署 URL 引用的内容。
注意

当使用-- runtime-name 选项指定 runtime-name 属性时,您必须将 .war 扩展包含在名称中,否则 Web 上下文不会由 JBoss EAP 注册。

您可以使用 部署 undeploy 命令,从单机服务器取消部署应用。取消部署应用会从存储库中删除部署内容。如果要在应用程序不可用时保留部署内容,您可以禁用部署。如需更多信息,请参阅使用 管理 CLI 在单机服务器中禁用应用程序

先决条件

  • JBoss EAP 正在运行。

流程

  • 使用管理 CLI 取消部署应用。

    语法

    deployment undeploy <deployment>
    Copy to Clipboard Toggle word wrap

    Example

    deployment undeploy test-application.war
    Copy to Clipboard Toggle word wrap

    成功取消部署不会向管理 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")
    Copy to Clipboard Toggle word wrap

类似地,您可以使用 deployment undeploy-cli-archive.cli 归档文件中取消部署内容。您还可以使用通配符()取消部署所有部署

deployment undeploy *
Copy to Clipboard Toggle word wrap

您可以在不从存储库中删除部署内容的情况下禁用部署的应用程序。

先决条件

  • JBoss EAP 正在运行。

流程

  • 您可以使用管理 CLI 中的 部署 disable 命令,禁用单个应用程序或部署到 JBoss EAP 的所有应用。

    • 禁用单个部署:

      语法

      deployment disable <deployment>
      Copy to Clipboard Toggle word wrap

      Example

      deployment disable test-application.war
      Copy to Clipboard Toggle word wrap

    • 禁用所有部署:

      deployment disable-all
      Copy to Clipboard Toggle word wrap

您可以启用禁用的应用程序。

先决条件

  • JBoss EAP 正在运行。

流程

  • 您可以使用管理 CLI 中的 部署 enable 命令启用单个应用程序或部署到 JBoss EAP 的所有应用。

    • 启用单个部署:

      语法

      deployment enable <deployment>
      Copy to Clipboard Toggle word wrap

      Example

      deployment enable test-application.war
      Copy to Clipboard Toggle word wrap

    • 启用所有部署:

      deployment enable-all
      Copy to Clipboard Toggle word wrap
6.1.1.5. 使用管理 CLI 列出单机服务器中的部署

您可以列出单机服务器中的部署,并查看运行时名称、状态等部署信息。

先决条件

  • JBoss EAP 正在运行。

流程

  • 使用 部署 info 命令列出部署信息。

    deployment info
    Copy to Clipboard Toggle word wrap

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

    NAME                 RUNTIME-NAME         PERSISTENT ENABLED STATUS
    helloworld.war       helloworld.war       true       true    OK
    test-application.war test-application.war true       true    OK
    Copy to Clipboard Toggle word wrap

    按名称显示部署信息:

    deployment info helloworld.war
    Copy to Clipboard Toggle word wrap

您还可以使用部署 list 命令列出所有 部署

6.1.2. 在受管域中管理应用程序部署

6.1.2.1. 使用管理 CLI 将应用部署到受管域

您可以使用 部署 deploy-file 命令并使用管理 CLI 部署应用程序,并指定应该部署到哪个服务器组。

先决条件

  • JBoss EAP 作为受管域运行。

流程

  • 您可以将打包为 Web 归档(war)的应用程序从管理 CLI 部署到特定的服务器组或所有服务器组。

    • 将应用程序部署到特定的服务器组:

      语法

      deployment deploy-file <path_to_the_application>/<application_name>.war --server-groups=<server-group_1>,..., <server-group_1>
      Copy to Clipboard Toggle word wrap

      Example

      deployment deploy-file /my-applications/test-application.war --server-groups=main-server-group,other-server-group
      Copy to Clipboard Toggle word wrap

    • 将应用程序部署到所有服务器组:

      语法

      deployment deploy-file <path_to_the_application>/<application_name>.war --all-server-groups
      Copy to Clipboard Toggle word wrap

      Example

      deployment deploy-file /my-applications/test-application.war --all-server-groups
      Copy to Clipboard Toggle word wrap

      成功部署不会向管理 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")
    Copy to Clipboard Toggle word wrap

同样,您可以使用以下 部署命令

  • 使用 deployment deploy-cli-archive 命令从 .cli 归档文件中部署内容。CLI 部署存档是采用 .cli 扩展名的 JAR 文件。它包含应当要部署的应用程序存档,以及 CLI 脚本文件 deploy.scrundeploy.scr,其中包含命令和操作。一个脚本文件 deploy.scr 包含部署应用程序存档和设置环境的命令和操作;另一个脚本文件 undeploy.scr,包含用于取消部署应用程序存档和清理环境的命令。
  • 使用 deployment deploy-url 命令部署 URL 引用的内容。
注意

当使用-- runtime-name 选项指定 runtime-name 属性时,您必须将 .war 扩展包含在名称中,否则 Web 上下文不会由 JBoss EAP 注册。

6.1.2.2. 使用管理 CLI 从受管域中取消部署应用

您可以使用 部署 undeploy 命令,从作为受管域运行的 JBoss EAP 取消部署应用。取消部署应用会从存储库中删除部署内容。如果要在应用程序不可用时保留部署内容,您可以禁用部署。如需更多信息,请参阅使用 管理 CLI 在受管域中禁用应用程序

先决条件

  • JBoss EAP 作为受管域运行。

流程

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

    语法

    deployment undeploy <application_name>.war --all-relevant-server-groups
    Copy to Clipboard Toggle word wrap

    Example

    deployment undeploy test-application.war --all-relevant-server-groups
    Copy to Clipboard Toggle word wrap

    成功取消部署不会向管理 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")
Copy to Clipboard Toggle word wrap

类似地,您可以使用 deployment undeploy-cli-archive 命令从 .cli 归档文件中取消部署内容。您还可以使用通配符()取消部署所有部署

deployment undeploy * --all-relevant-server-groups
Copy to Clipboard Toggle word wrap
6.1.2.3. 使用管理 CLI 禁用受管域中的应用程序

您可以从特定的服务器组禁用部署的应用程序,并使用该部署的其他服务器组在存储库中保留其内容。

先决条件

  • JBoss EAP 作为受管域运行。

流程

  • 您可以使用管理 CLI 中的 部署 disable 命令,禁用单个应用程序或部署到 JBoss EAP 的所有应用。

    • 分离单个应用程序:

      语法

      deployment disable <application_name>.war --server-groups=<server-group_1>,..., <server-group_1>
      Copy to Clipboard Toggle word wrap

      Example

      deployment disable test-application.war --server-groups=other-server-group
      Copy to Clipboard Toggle word wrap

    • 禁用所有部署:

      语法

      deployment disable-all --server-groups=<server-group_1>,..., <server-group_1>
      Copy to Clipboard Toggle word wrap

      Example

      deployment disable-all --server-groups=other-server-group
      Copy to Clipboard Toggle word wrap

6.1.2.4. 使用管理 CLI 在受管域中启用应用程序

启用禁用部署的应用程序。

先决条件

  • JBoss EAP 作为受管域运行。

流程

  • 您可以使用管理 CLI 中的 部署 enable 命令启用单个应用程序或部署到 JBoss EAP 的所有应用。

    • 启用单个部署:

      语法

      deployment enable <deployment> --server-groups=<server-group_1>,..., <server-group_1>
      Copy to Clipboard Toggle word wrap

      Example

      deployment enable test-application.war --server-groups=other-server-group
      Copy to Clipboard Toggle word wrap

    • 启用所有部署:

      deployment enable-all --server-groups=<server-group_1>,..., <server-group_1>
      Copy to Clipboard Toggle word wrap

      Example

      deployment enable-all --server-groups=other-server-group
      Copy to Clipboard Toggle word wrap

6.1.2.5. 使用管理 CLI 列出受管域中的部署

您可以列出部署并查看运行时名称、状态等部署信息。

先决条件

  • JBoss EAP 作为受管域运行。

流程

  • 使用 部署 info 命令列出部署信息。

    deployment info helloworld.war
    Copy to Clipboard Toggle word wrap

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

    NAME               RUNTIME-NAME
    helloworld.war     helloworld.war
    
    SERVER-GROUP       STATE
    main-server-group  enabled
    other-server-group added
    Copy to Clipboard Toggle word wrap

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

    deployment info --server-group=other-server-group
    Copy to Clipboard Toggle word wrap

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

    NAME                 RUNTIME-NAME         STATE
    helloworld.war       helloworld.war       added
    test-application.war test-application.war enabled
    Copy to Clipboard Toggle word wrap

您还可以使用部署 list 命令列出域中的所有 部署

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

使用管理控制台部署应用程序可让您轻松使用图形界面的好处。您可以看到将应用程序部署到服务器或服务器组中,您可以根据需要从内容存储库中启用、禁用或删除应用程序。

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

部署应用程序

Add 按钮。您可以通过 上传部署添加非受管部署或 创建空的部署 来选择部署应用。部署是默认启用的。

  • 上传部署

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

  • 添加非受管部署

    指定部署的位置。此部署不会复制到服务器的内容存储库,并且不由 JBoss EAP 管理。

  • 创建空部署

    创建一个空的展开部署。您可以在创建后向部署添加文件。

取消部署应用程序

选择部署并选择 Undeploy 选项。JBoss EAP 从内容存储库移除部署。

禁用应用程序

选择部署并选择 Disable 选项来禁用应用程序。这将取消部署部署,但不将它从内容存储库移除。

替换应用程序

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

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

  • 内容存储库

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

  • 服务器组

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

您可以使用管理控制台将应用程序添加到内容存储库中。

先决条件

  • JBoss EAP 正在运行。
  • 您已在 JBoss EAP 中创建了一个用户。

流程

  1. 登录到管理控制台。

    默认情况下,管理控制台位于 http://localhost:9990

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

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

您可以使用管理控制台将应用程序部署到服务器组。

先决条件

  • JBoss EAP 正在运行。
  • 您已在 JBoss EAP 中创建了一个用户。
  • 您已将应用程序添加到内容存储库中。

流程

  1. 登录到管理控制台。

    默认情况下,管理控制台位于 http://localhost:9990

  2. 内容存储库,选择部署并单击 Deploy 按钮。
  3. 选择部署应部署到的一个或多个服务器组。
  4. (可选)选择在所选服务器组上启用部署的选项。

您可以使用管理控制台从服务器组取消部署应用。

先决条件

  • JBoss EAP 正在运行。
  • 您已在 JBoss EAP 中创建了一个用户。

流程

  1. 服务器组 中,选择适当的服务器组。
  2. 选择所需的部署,然后单击 Undeploy 按钮

也可以一次从多个服务器组取消部署部署,只需在 内容 存储库中 为部署选择 Undeploy 按钮。

您可以使用管理控制台从受管域中删除应用程序。

先决条件

  • JBoss EAP 正在运行。
  • 您已在 JBoss EAP 中创建了一个用户。

流程

  1. 如果部署仍然部署到任何服务器组,请务必取消部署。
  2. 内容存储库,选择部署并 单击删除按钮

这会从内容存储库中删除部署。

您可以使用管理控制台在受管集群中禁用应用程序。禁用应用仅从服务器取消部署,但不会将它从内容存储库移除。

先决条件

  • JBoss EAP 正在运行。
  • 您已在 JBoss EAP 中创建了一个用户。

流程

  1. 服务器组 中,选择适当的服务器组。
  2. 选择所需的部署,再单击 Disable 按钮。

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

您可以使用管理控制台,将应用程序部署替换为受管域中的较新版本。

先决条件

  • JBoss EAP 正在运行。
  • 您已在 JBoss EAP 中创建了一个用户。

流程

  1. 内容存储库,选择部署并单击 替换 按钮。
  2. 选择部署的新版本,它的名称必须与原始名称相同,然后单击 replace。

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

6.3. 使用部署扫描程序进行应用程序部署

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

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

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

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

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

警告

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

部署应用程序

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

$ cp /path/to/test-application.war EAP_HOME/standalone/deployments/
Copy to Clipboard Toggle word wrap

如果启用了自动部署,则会自动获取、部署此文件,并且创建 .deployed 标记文件。如果没有启用自动部署,则需要手动添加 .dodeploy 标记文件来触发部署。

$ touch EAP_HOME/standalone/deployments/test-application.war.dodeploy
Copy to Clipboard Toggle word wrap
取消部署应用程序

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

$ rm EAP_HOME/standalone/deployments/test-application.war.deployed
Copy to Clipboard Toggle word wrap

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

重新部署应用程序

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

$ touch EAP_HOME/standalone/deployments/test-application.war.dodeploy
Copy to Clipboard Toggle word wrap

6.3.2. 部署扫描程序配置

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

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

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

禁用部署扫描器
/subsystem=deployment-scanner/scanner=default:write-attribute(name=scan-enabled,value=false)
Copy to Clipboard Toggle word wrap

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

更改 Scan Interval
/subsystem=deployment-scanner/scanner=default:write-attribute(name=scan-interval,value=10000)
Copy to Clipboard Toggle word wrap

这会将 5000 毫秒(五秒)的扫描间隔时间更新为 10000 毫秒(秒)。

更改 Deployment Folder
/subsystem=deployment-scanner/scanner=default:write-attribute(name=path,value=/path/to/deployments)
Copy to Clipboard Toggle word wrap

这会将 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)
Copy to Clipboard Toggle word wrap

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

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

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

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

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

6.3.3. 自定义部署扫描程序

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

以下管理 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)
Copy to Clipboard Toggle word wrap
注意

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

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

6.4. 使用 Maven 管理应用程序部署

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

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

您可以使用 WildFly Maven 插件,部署和取消部署应用到作为单机服务器运行的 JBoss EAP。

6.4.1.1. 使用 Maven 将应用部署到独立服务器

以下说明演示了如何使用 Maven 将 JBoss EAP helloworld 快速入门部署到单机服务器。

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

流程

  1. 在 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>
    Copy to Clipboard Toggle word wrap
  2. helloworld 快速启动目录,执行以下 Maven 命令。

    $ mvn clean install wildfly:deploy
    Copy to Clipboard Toggle word wrap

    在向部署发出 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] ------------------------------------------------------------------------
    Copy to Clipboard Toggle word wrap

验证

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

    WFLYSRV0027: Starting deployment of "helloworld.war" (runtime-name: "helloworld.war")
    WFLYUT0021: Registered web context: /helloworld
    WFLYSRV0010: Deployed "helloworld.war" (runtime-name : "helloworld.war")
    Copy to Clipboard Toggle word wrap
6.4.1.2. 使用 Maven 从单机服务器取消部署应用

以下说明演示了如何使用 Maven 将 JBoss EAP helloworld 快速入门部署到单机服务器。

先决条件

  • 您已在 Maven pom.xml 文件中初始化了 WildFly Maven 插件。

流程

  • helloworld 快速启动目录,执行以下 Maven 命令。

    $ mvn wildfly:undeploy
    Copy to Clipboard Toggle word wrap

    在向 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] ------------------------------------------------------------------------
    Copy to Clipboard Toggle word wrap

验证

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

    WFLYUT0022: Unregistered web context: /helloworld
    WFLYSRV0028: Stopped deployment helloworld.war (runtime-name: helloworld.war) in 27ms
    WFLYSRV0009: Undeployed "helloworld.war" (runtime-name: "helloworld.war")
    Copy to Clipboard Toggle word wrap

6.4.2. 使用 Maven 管理受管域上的应用程序部署

您可以使用 WildFly Maven 插件,部署和取消部署应用到作为受管域运行的 JBoss EAP。

6.4.2.1. 使用 Maven 将应用部署到受管域

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

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

流程

  1. 指定应用应部署到 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>
    Copy to Clipboard Toggle word wrap
  2. helloworld 快速启动目录,执行以下 Maven 命令。

    $ mvn clean install wildfly:deploy
    Copy to Clipboard Toggle word wrap

    在向部署发出 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] ------------------------------------------------------------------------
    Copy to Clipboard Toggle word wrap

    验证

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

      WFLYSRV0027: Starting deployment of "helloworld.war" (runtime-name: "helloworld.war")
      WFLYUT0021: Registered web context: /helloworld
      WFLYSRV0010: Deployed "helloworld.war" (runtime-name : "helloworld.war")
      Copy to Clipboard Toggle word wrap
6.4.2.2. 使用 Maven 从受管域中取消部署应用

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

先决条件

  • 您已初始化 WildFly Maven 插件。

流程

  • helloworld 快速启动目录,执行以下 Maven 命令。

    $ mvn wildfly:undeploy
    Copy to Clipboard Toggle word wrap

    在向 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] ------------------------------------------------------------------------
    Copy to Clipboard Toggle word wrap

验证

  • 也可以通过查看活跃服务器实例的服务器日志来确认取消部署。
WFLYUT0022: Unregistered web context: /helloworld
WFLYSRV0028: Stopped deployment helloworld.war (runtime-name: helloworld.war) in 106ms
WFLYSRV0009: Undeployed "helloworld.war" (runtime-name: "helloworld.war")
Copy to Clipboard Toggle word wrap

6.5. 使用 HTTP API 管理应用程序部署

可以使用 curl 命令的 HTTP API 将应用部署到 JBoss EAP。有关使用 HTTP API 的更多信息,请参阅 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}'
Copy to Clipboard Toggle word wrap

取消部署应用程序

$ 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}'
Copy to Clipboard Toggle word wrap

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

您可以使用 HTTP API 在受管域中部署和取消部署应用。

6.5.2.1. 使用 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}'
    Copy to Clipboard Toggle word wrap
  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}'
    Copy to Clipboard Toggle word wrap
  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}'
    Copy to Clipboard Toggle word wrap
6.5.2.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" : "remove", "address" : {"server-group" : "main-server-group","deployment":"test-application.war"},"json.pretty":1}'
    Copy to Clipboard Toggle word wrap
  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}'
    Copy to Clipboard Toggle word wrap

6.6. 自定义部署行为

6.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
Copy to Clipboard Toggle word wrap

在 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
Copy to Clipboard Toggle word wrap

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

6.6.2. 控制部署顺序

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

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

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

<jboss xmlns="urn:jboss:1.0">
  <jboss-deployment-dependencies xmlns="urn:jboss:deployment-dependencies:1.0">
    <dependency name="framework.ear" />
  </jboss-deployment-dependencies>
</jboss>
Copy to Clipboard Toggle word wrap
注意

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

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

重要

如果您在 app.ear 中创建 jboss-all.xml 文件,且您没有部署 framework.ear,服务器会尝试部署 app.ear 并失败。

6.6.3. 覆盖部署内容

6.6.3.1. 关于部署覆盖

部署覆盖 可用于将内容覆盖到现有部署中,而无需实际修改部署存档的内容。它允许您在不重建存档的情况下覆盖部署描述符、库 JAR 文件、类、Jakarta Server Pages 页面和其他文件。

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

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

参数

您可以使用以下任一参数来配置部署覆盖:

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

如需完整的使用详情,请执行 deployment-overlay --help

6.6.3.2. 定义部署覆盖

您可以定义部署覆盖以覆盖现有部署中的内容,而无需实际修改部署存档的内容。

流程

  1. 使用 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
    Copy to Clipboard Toggle word wrap
    注意

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

  2. 创建部署覆盖后,您可以在现有覆盖中添加内容,将覆盖链接到部署或删除覆盖。
  3. 可选:您可以使用 <overlay> 元素指定指向包含静态 Web 资源(如 HTML、镜像或视频)的外部目录的 覆盖 配置。

    & lt;overlay > 元素指定覆盖 Web 应用程序静态文件的静态文件,类似于 JAR 覆盖过程。此元素位于应用程序文件 jboss-web.xml 中。使用这个元素配置,您不需要重新打包应用。

    以下示例显示了 < overlay> 元素中 的系统属性替换,其中 {example.path.to.overlay} 定义 /PATH/TO/STATIC/WEB/CONTENT 位置。

    示例:& lt;overlay > 元素在 jboss-web.xml 文件中

    <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">
            <overlay>{example.path.to.overlay}</overlay>
    </jboss-web>
    Copy to Clipboard Toggle word wrap

    如果 jboss-descriptor-property-replacement 设为 true,您可以在 < overlay > 项中指定一个系统属性,这是描述符属性的默认值。

    要配置 jboss-descriptor-property-replacement,请使用以下管理 CLI 命令:

    /subsystem=ee:write-attribute(name=jboss-descriptor-property-replacement,value=true)
    Copy to Clipboard Toggle word wrap

    该命令在 JBoss EAP 配置中的 ee 子系统中添加以下 XML 内容:

    <subsystem xmlns="urn:jboss:domain:ee:4.0">
        <jboss-descriptor-property-replacement>true</jboss-descriptor-property-replacement>
    </subsystem>
    Copy to Clipboard Toggle word wrap
    注意

    & lt;overlay > 元素不会覆盖 EAP 项目中已存在的部署文件。如果多个 <overlay > 元素包含同一文件,则优先级顺序会根据应用程序 jboss-web.xml 文件中的 overlay 元素序列来决定。

6.6.4. 使用 rollout 计划

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

6.6.4.1. rollout 计划示例

以下是涉及五个服务器组的推出部署计划示例。操作可以按顺序应用到服务器组、in-series 或并发 并发组。如需更多信息,请参阅 Rollout 计划语法

{"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"
}}}
Copy to Clipboard Toggle word wrap

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

  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 将同时应用该操作。该操作将应用于 组-D 中的服务器,而 group-E 中的所有服务器将同时处理该操作。如果 group-D 中超过 20% 的服务器无法应用该操作,它将在这个组中回滚。如果 group-E 中的任何服务器都无法应用该操作,它将在这个组中回滚。
6.6.4.2. rollout plan 语法

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

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

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

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

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

      • 滚动到服务器 :一个布尔值,如果设为 true,则将操作应用到系列组中的每台服务器。如果值为 false 或未指定,则操作将同时应用到组中的服务器。
      • max-failed-servers: 一个整数,使用组中的最大服务器数量,在应该在组中的所有服务器上恢复操作前无法应用该操作。如果没有指定的默认值是 0, 这表示任何服务器上的故障会在组中触发回滚。
      • max-failure-percentage0100 之间的整数,代表组中服务器总数的最大百分比,在应该在组的所有服务器上恢复操作前无法应用该操作。如果没有指定的默认值是 0, 这表示任何服务器上的故障会在组中触发回滚。

        注意

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

  • rollback-across-groups: 一个布尔值,指示需要在一个服务器组中的所有服务器上回滚操作,这会触发所有服务器组的回滚。默认值为 false
6.6.4.3. 使用推出部署计划部署应用程序

您可以通过将 rollout 设置传递给 headers 参数,直接向 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)}
Copy to Clipboard Toggle word wrap
6.6.4.4. 使用存储的 rollout 计划部署应用程序

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

流程

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

    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}
    Copy to Clipboard Toggle word wrap

    这会创建以下部署计划。

    "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
    }
    Copy to Clipboard Toggle word wrap
  2. 指定部署应用程序时存储的 rollout 计划名称。

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

    deploy /path/to/test-application.war --all-server-groups --headers={rollout id=my-rollout-plan}
    Copy to Clipboard Toggle word wrap
6.6.4.5. 存储的 rollout 计划删除

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

rollout-plan remove --name=my-rollout-plan
Copy to Clipboard Toggle word wrap
6.6.4.6. 默认推出计划

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

  • 只会有一个高级别的阶段。所有受操作影响的服务器组将同时应用该操作。
  • 在每个服务器组中,操作将同时应用到所有服务器。
  • 在服务器组中的任何服务器出现故障时,将导致对组的回滚。
  • 任何服务器组失败将导致回滚所有其他服务器组。

6.7. 管理展开的部署

您可以使用管理界面管理展开的部署。这可让您在不部署新版本的应用的情况下更改展开的应用程序的内容。

注意

对部署中静态文件的更新(如 JavaScript 和 CSS 文件)会立即生效。对其他文件(如 Java 类)的更改可能需要重新部署应用程序才能使更改生效。

您可以从 空部署 开始,或者 探索现有的存档部署,然后 添加或删除内容

请参阅 查看 Deployment Content 以浏览部署中的文件或读取文件的内容。

创建一个 Empty Exploded Deployment

您可以创建一个空的展开部署,稍后您可以根据需要添加内容。使用以下管理 CLI 命令,创建一个空的展开部署。

/deployment=DEPLOYMENT_NAME.war:add(content=[{empty=true}])
Copy to Clipboard Toggle word wrap

需要 empty=true 选项,以确认您要创建空部署。

缩减现有归档部署

您可以探索现有的存档部署,以便能更新其内容。请注意,必须先禁用部署,然后才能展开部署。使用以下管理 CLI 命令探索部署:

/deployment=ARCHIVE_DEPLOYMENT_NAME.ear:explode
Copy to Clipboard Toggle word wrap

现在,您可以从此部署 中添加或删除内容

注意

您也可以从管理控制台探索现有的存档部署。在 Deployments 选项卡中,选择部署并选择 Explode 下拉列表选项。

将内容添加到 Exploded Deployment 中

要向部署中添加内容,请使用 add-content 管理 CLI 操作。提供应添加内容的部署中的位置路径,并提供上传的内容。要上传的内容可以作为本地文件流、URL、已存在于 JBoss EAP 内容存储库中的内容哈希或内容的字节数组提供。以下管理 CLI 命令使用 input-stream-index 选项将本地文件的内容上传到部署。

/deployment=DEPLOYMENT_NAME.war:add-content(content=[{target-path=/path/to/FILE_IN_DEPLOYMENT, input-stream-index=/path/to/LOCAL_FILE_TO_UPLOAD}]
Copy to Clipboard Toggle word wrap
注意

当使用 add-content 操作向部署添加内容时,部署中的内容会被默认覆盖。您可以通过将 overwrite 选项设置为 false 来更改此行为。

从 Exploded Deployment 中删除内容

要从部署中删除内容,请使用 remove-content 管理 CLI 操作,并提供要删除的部署中的内容路径。

/deployment=DEPLOYMENT_NAME.war:remove-content(paths=[/path/to/FILE_1, /path/to/FILE_2])
Copy to Clipboard Toggle word wrap

6.8. 查看部署内容

您可以浏览 受管部署中文件的信息,并使用 JBoss EAP 管理界面 读取文件的内容

6.8.1. 浏览部署中的文件

使用 browse-content 操作来查看受管部署中的文件和目录。不提供任何参数来返回整个部署结构,或使用 path 参数来提供到特定目录的路径。

注意

您也可以从管理控制台浏览部署内容,导航到 Deployments 选项卡,选择部署,然后从下拉菜单中选择 View

/deployment=helloworld.war:browse-content(path=META-INF/)
Copy to Clipboard Toggle word wrap

这将显示 helloworld.war 部署的 META-INF/ 目录中的文件和目录。

{
    "outcome" => "success",
    "result" => [
        {
            "path" => "MANIFEST.MF",
            "directory" => false,
            "file-size" => 827L
        },
        {
            "path" => "maven/org.jboss.eap.quickstarts/helloworld/pom.properties",
            "directory" => false,
            "file-size" => 106L
        },
        {
            "path" => "maven/org.jboss.eap.quickstarts/helloworld/pom.xml",
            "directory" => false,
            "file-size" => 2713L
        },
        {
            "path" => "maven/org.jboss.eap.quickstarts/helloworld/",
            "directory" => true
        },
        {
            "path" => "maven/org.jboss.eap.quickstarts/",
            "directory" => true
        },
        {
            "path" => "maven/",
            "directory" => true
        },
        {
            "path" => "INDEX.LIST",
            "directory" => false,
            "file-size" => 251L
        }
    ]
}
Copy to Clipboard Toggle word wrap

您还可以在 browse-content 操作中指定以下参数。

archive
是否仅返回存档文件。
depth
指定要返回的文件的深度。

6.8.2. 读取部署内容

您可以使用 read-content 操作读取受管部署中文件的内容。不提供任何参数来返回整个部署,或使用 path 参数来提供到特定文件的路径。例如:

/deployment=helloworld.war:read-content(path=META-INF/MANIFEST.MF)
Copy to Clipboard Toggle word wrap

这会返回一个文件流,可在 管理 CLI 中显示或 保存到文件系统 中

{
    "outcome" => "success",
    "result" => {"uuid" => "24ba8e06-21bd-4505-b4d4-bdfb16451b95"},
    "response-headers" => {"attached-streams" => [{
        "uuid" => "24ba8e06-21bd-4505-b4d4-bdfb16451b95",
        "mime-type" => "text/plain"
    }]}
}
Copy to Clipboard Toggle word wrap
6.8.2.1. 显示文件的内容

使用 attachment display 命令来读取 MANIFEST.MF 文件的内容。

attachment display --operation=/deployment=helloworld.war:read-content(path=META-INF/MANIFEST.MF)
Copy to Clipboard Toggle word wrap

这将显示从 helloworld.war 部署到管理 CLI 的 MANIFEST.MF 文件的内容。

ATTACHMENT 8af87836-2abd-423a-8e44-e731cc57bd80:
Manifest-Version: 1.0
Implementation-Title: Quickstart: helloworld
Implementation-Version: 7.4.0.GA
Java-Version: 1.8.0_131
Built-By: username
Scm-Connection: scm:git:git@github.com:jboss/jboss-parent-pom.git/quic
 kstart-parent/helloworld
Specification-Vendor: JBoss by Red Hat
...
Copy to Clipboard Toggle word wrap
6.8.2.2. 保存文件的内容

使用 attachment save 命令将 MANIFEST.MF 文件的内容保存到文件系统。

attachment save --operation=/deployment=helloworld.war:read-content(path=META-INF/MANIFEST.MF) --file=/path/to/MANIFEST.MF
Copy to Clipboard Toggle word wrap

这会将 helloworld.war 部署中的 MANIFEST.MF 文件保存到 路径/到 /MANIFEST.MF 的文件系统。如果不使用 the-file 参数指定文件路径,该文件将使用其唯一附加 ID 命名,并保存在管理 CLI 的工作目录中,默认为 EAP_HOME/bin/

第 7 章 配置 JBoss EAP 受管域

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

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

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

域控制器
域控制器是从中控制域的中心点。它确保根据域的管理策略配置每台服务器。域控制器也是主机控制器。
主机控制器
主机控制器是与域控制器交互的物理或虚拟主机,用于控制其主机上运行的应用服务器实例并协助域控制器管理它们。每个主机可以包含多个服务器组。
服务器组
服务器组是一组在它们上安装了 JBoss EAP 的服务器实例,它们作为一个进行管理和配置。域控制器管理服务器组上部署的 和 应用的配置。因此,服务器组中的每个服务器共享相同的配置和部署。

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

7.1. 受管域中域控制器的角色

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

域控制器的主要职责包括:

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

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

domain.xml 文件包含可供域中的服务器使用的配置集配置。配置文件包含该配置文件中各种子系统的详细设置。域配置还包括套接字组和服务器组定义的定义。有关配置集的更多信息,请参阅关于配置集

7.2. 受管域中主机控制器的角色

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

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

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

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

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

7.3. 受管域中进程控制器的角色

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

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

7.4. 关于受管域中的服务器组

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

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

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

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

7.5. 关于受管域中的服务器

服务器代表一个应用服务器实例。在受管域中,所有服务器实例都是服务器组的成员。主机控制器在其自己的 Java 虚拟机(JVM)进程中启动每个服务器实例。如需更多信息,请参阅 受管域中的服务器配置

7.6. 域配置导航

JBoss EAP 提供可扩展的管理接口,支持小型和大规模受管域。

管理控制台

JBoss EAP 管理控制台提供域的图形视图,允许您轻松管理域的主机、服务器、部署和配置文件。

配置

Configuration 选项卡中,您可以为域中使用的每个配置文件配置子系统。您的域中的不同服务器组可能会根据所需的功能使用不同的配置文件。

选择所需的配置文件后,将列出该配置文件的所有可用子系统。有关配置配置文件的更多信息,请参阅 JBoss EAP 配置文件管理

Runtime

Runtime 选项卡中,您可以管理服务器和服务器组以及主机配置。您可以通过主机或服务器组浏览域。

从主机 中,您可以配置主机属性和 JVM 设置,并为该主机添加和配置服务器。

服务器组 中,您可以添加新的服务器组并配置属性和 JVM 设置,并为该服务器组添加和配置服务器。您可以执行诸如启动、停止、暂停和重新加载所选服务器组中的所有服务器等操作。

主机或 服务器组 中,您可以添加新服务器并配置服务器属性和 JVM 设置。您可以执行诸如启动、停止、暂停和重新载入所选服务器等操作。您还可以查看运行时信息,如 JVM 使用情况、服务器日志和特定于子系统的信息。

Topology 中,您可以看到概述并查看域中主机、服务器组和服务器的详细信息。您可以对每个方法执行操作,如重新载入或暂停。

部署

Deployments 选项卡中,您可以添加部署并部署到服务器组。您可以查看内容存储库中的所有部署,或者查看部署到特定服务器组的部署。

有关使用管理控制台部署应用程序的更多信息,请参阅 在受管域中部署应用程序

管理 CLI

JBoss EAP 管理 CLI 提供了一个命令行界面,用于管理您的域的主机、服务器、部署和配置文件。

一旦选择了适当的配置集,就可以访问子系统配置。

/profile=<profile_name>/subsystem=<subsystem_name>:read-resource(recursive=true)
Copy to Clipboard Toggle word wrap
注意

本指南整个说明和示例可能包含作为单机服务器运行时应用的子系统配置的管理 CLI 命令,例如:

/subsystem=datasources/data-source=ExampleDS:read-resource
Copy to Clipboard Toggle word wrap

要调整这些管理 CLI 命令要在受管域中运行,您必须指定要配置的适当配置集,例如:

/profile=default/subsystem=datasources/data-source=ExampleDS:read-resource
Copy to Clipboard Toggle word wrap

在指定适当的主机后,您可以配置主机设置并对该主机执行操作。

/host=<host_name>/server=<server_name>:read-resource
Copy to Clipboard Toggle word wrap

在指定适当的主机后,您可以为该主机配置服务器。

/host=<host_name>/server-config=<server_name>:write-attribute(name=<attribute_name>,value=<value>)
Copy to Clipboard Toggle word wrap

在指定适当的服务器组后,您可以配置服务器组设置,并在所选服务器组中的所有服务器上执行操作。

/server-group=<server_group_name>:read-resource
Copy to Clipboard Toggle word wrap

您可以使用部署管理 CLI 命令并指定适当的服务器组,在受管域中部署应用程序。具体步骤请参阅 在受管域中部署应用程序

7.7. 受管域配置

7.7.1. 将 JBoss EAP 作为受管域启动

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

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

先决条件

流程

  1. 使用 host-primary.xml 配置文件启动域控制器,该文件已针对专用域控制器进行了预配置。

    $ EAP_HOME/bin/domain.sh --host-config=host-primary.xml
    Copy to Clipboard Toggle word wrap
  2. 使用 host-secondary.xml 配置文件启动主机控制器,该文件已针对次要主机控制器进行了预配置。

    $ EAP_HOME/bin/domain.sh  --host-config=host-secondary.xml
    Copy to Clipboard Toggle word wrap

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

7.7.2. 配置域控制器

您必须在域中配置一个主机作为域控制器。

重要

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

流程

  1. 通过在 <domain -controller> 声明中添加 <local /> 元素,将主机配置为域控制器。& lt;domain-controller& gt; 元素不应包含任何其他内容。

    <domain-controller>
      <local/>
    </domain-controller>
    Copy to Clipboard Toggle word wrap
  2. 公开一个管理界面,它应当可以被域中的其他主机访问。HTTP 接口是标准管理界面。

    <management-interfaces>
      <http-interface http-authentication-factory="management-http-authentication">
        <http-upgrade enabled="true" sasl-authentication-factory="management-sasl-authentication"/>
        <socket interface="management" port="${jboss.management.http.port:9990}"/>
      </http-interface>
    </management-interfaces>
    Copy to Clipboard Toggle word wrap

示例最小域控制器配置文件 EAP_HOME/domain/configuration/host-primary.xml 包括这些配置设置。

7.7.3. 配置主机控制器

主机控制器必须配置为连接到域控制器,以便主机控制器能够向域注册其自身。

重要

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

流程

  • 使用配置的 <domain-controller > 元素来配置与域控制器的连接。

    <domain-controller>
      <remote>
        <discovery-options>
          <static-discovery name="primary" protocol="${jboss.domain.primary.protocol:remote+http}" host="${jboss.domain.primary.address}" port="${jboss.domain.primary.port:9990}"/>
          </discovery-options>
      </remote>
    </domain-controller>
    Copy to Clipboard Toggle word wrap

示例最小主机控制器配置文件 EAP_HOME/domain/configuration/host-secondary.xml,包括用于连接域控制器的配置设置。配置假设您在启动主机控制器时提供 jboss.domain.primary.address 属性。

$ EAP_HOME/bin/domain.sh --host-config=host-secondary.xml -Djboss.domain.primary.address=<ip_address>
Copy to Clipboard Toggle word wrap

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

7.7.4. 受管域的主机名配置

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

  • 如果设置,host.xml 配置文件中的 host 元素 name 属性。
  • jboss.host.name 系统属性的值。
  • jboss.qualified.host.name 系统属性前面带有第一个句点(.)字符的值,如果没有最终句点(.)字符,则该值或整个值。
  • 基于 POSIX 的操作系统的 HOSTNAME 环境变量中的句点(.)字符前面的值、适用于 Microsoft Windows 的 COMPUTERNAME 环境变量,如果没有最终句点(.)字符,则整个值。

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

<host xmlns="urn:jboss:domain:default:20.0" name="host1">
Copy to Clipboard Toggle word wrap

7.7.5. 更新受管域中的主机名称

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

先决条件

  • JBoss EAP 作为受管域运行。

流程

  1. 启动管理 CLI,连接域控制器。

    $ EAP_HOME/bin/jboss-cli.sh --connect --controller=<domain_controller_ip_address>
    Copy to Clipboard Toggle word wrap
  2. 使用以下命令设置新主机名:

    /host=<existing_host_name>:write-attribute(name=name,value=<new_host_name>)
    Copy to Clipboard Toggle word wrap

    这会修改 host-secondary.xml 文件中的 host name 属性,如下所示:

    <host name="<new_host_name>" xmlns="urn:jboss:domain:default:20.0">
    Copy to Clipboard Toggle word wrap
  3. 重新加载主机控制器,以使更改生效。

    reload --host=<existing_host_name>
    Copy to Clipboard Toggle word wrap

如果主机控制器没有在配置文件中设置的名称,您也可以在运行时传递主机名。

$ EAP_HOME/bin/domain.sh --host-config=host-secondary.xml  -Djboss.host.name=<host_name>
Copy to Clipboard Toggle word wrap

7.8. 服务器组配置

可以使用管理 CLI 或管理控制台 Runtime 选项卡配置服务器组。

以下是服务器组定义的示例:

<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="helloworld.war" runtime-name="helloworld.war" enabled="false"/>
  </deployments>
</server-group>
Copy to Clipboard Toggle word wrap
服务器组CLI命令

添加服务器组

/server-group=<server_group_name>:add(profile=<profile_name>,socket-binding-group=<socket_binding_group_name>)
Copy to Clipboard Toggle word wrap

更新服务器组

/server-group=<server_group_name>:write-attribute(name=<attribute_name>,value=<value>)
Copy to Clipboard Toggle word wrap

删除服务器组

/server-group=<server_group_name>:remove
Copy to Clipboard Toggle word wrap

7.9. 受管域中的服务器配置

可以使用管理 CLI 或管理控制台 Runtime 选项卡配置服务器。

默认 host.xml 配置文件定义了三个服务器:

<servers>
  <server name="server-one" group="main-server-group">                       
1

  </server>
  <server name="server-two" group="main-server-group" auto-start="true">     
2

    <socket-bindings port-offset="150"/>
  </server>
  <server name="server-three" group="other-server-group" auto-start="false"> 
3

    <socket-bindings port-offset="250"/>
  </server>
</servers>
Copy to Clipboard Toggle word wrap
1
名为 server-one 的服务器实例与 main-server-group 关联,并继承由该服务器组指定的子系统配置和套接字绑定。
2
名为 server-two 的服务器实例也与 main-server-group 关联,但也定义了套接字绑定 port-offset 值,因此不与 server-one 使用的端口值冲突。
3
名为 server-three 的服务器实例与 other-server-group 关联,并使用该组的配置。它还定义 port-offset 值,并将 auto-start 设置为 false,以便此服务器在主机控制器启动时不会启动。
服务器配置CLI命令

添加服务器

/host=<host_name>/server-config=<server_name>:add(group=<server_group_name>)
Copy to Clipboard Toggle word wrap

更新服务器

/host=<host_name>/server-config=<server_name>:write-attribute(name=<attribute_name>,value=<value>)
Copy to Clipboard Toggle word wrap

删除服务器

/host=<host_name>/server-config=<server_name>:remove
Copy to Clipboard Toggle word wrap

7.10. 受管域中的服务器操作

您可以通过导航到 Runtime 选项卡并选择适当的主机或服务器组,从管理控制台中对服务器执行操作,如启动、停止和重新加载。

启动服务器

您可以在特定主机上启动单个服务器。

/host=<host_name>/server=<server_name>:start
Copy to Clipboard Toggle word wrap

您可以启动指定服务器组中的所有服务器。

/server-group=<server_group_name>:start-servers
Copy to Clipboard Toggle word wrap
停止服务器

您可以停止特定主机上的单个服务器。

/host=<host_name>/server=<server_name>:stop
Copy to Clipboard Toggle word wrap

您可以停止指定服务器组中的所有服务器。

/server-group=<server_group_name>:stop-servers
Copy to Clipboard Toggle word wrap
重新加载服务器

您可以在特定主机上重新加载单个服务器。

/host=<host_name>/server=<server_name>:reload
Copy to Clipboard Toggle word wrap

您可以重新加载指定服务器组中的所有服务器。

/server-group=<server_group_name>:reload-servers
Copy to Clipboard Toggle word wrap
终止服务器

您可以终止指定服务器组中的所有服务器进程。

/server-group=<server_group_name>:kill-servers
Copy to Clipboard Toggle word wrap

7.11. 域控制器发现和故障转移配置

在设置受管域时,必须使用与域控制器联系所需的信息来配置每个主机控制器。在 JBoss EAP 中,每个主机控制器可以配置多个选项来查找域控制器。主机控制器会迭代选项列表,直到成功为止。

如果主域控制器出现问题,则备份主机控制器可以提升到域控制器。这允许主机控制器在新的域控制器被提升后自动故障转移到新的域控制器。如需更多信息,请参阅 提升主机控制器以充当域控制器

7.11.1. 域发现选项

以下是如何将主机控制器配置为具有多个选项来查找域控制器。

示例:具有多个域控制器选项的主机控制器

<domain-controller>
  <remote>
    <discovery-options>
      <static-discovery name="primary" protocol="${jboss.domain.primary.protocol:remote}" host="172.16.81.100" port="${jboss.domain.primary.port:9990}"/>
      <static-discovery name="backup" protocol="${jboss.domain.primary.protocol:remote}" host="172.16.81.101" port="${jboss.domain.primary.port:9990}"/>
    </discovery-options>
  </remote>
</domain-controller>
Copy to Clipboard Toggle word wrap

静态发现选项包括以下所需属性:

名称
此域控制器发现选项的名称。
主机
远程域控制器的主机名。
port
远程域控制器的端口。

在上例中,第一个发现选项是成功的预期。第二个可用于故障转移情况。

7.11.2. 带有缓存域配置的主机控制器

可以使用- -cached-dc 选项在不连接域控制器的情况下启动主机控制器;但是,主机控制器之前必须从域控制器本地缓存其域配置。使用 this -cached-dc 选项启动主机控制器将缓存主机控制器的域控制器配置。

Example

$ EAP_HOME/bin/domain.sh --host-config=host-secondary.xml --cached-dc
Copy to Clipboard Toggle word wrap

这会在 EAP_HOME/domain/configuration/ 目录中创建 domain.cached-remote.xml 文件,其中包含此主机控制器在没有域控制器连接的情况下暂时管理其当前服务器所需的信息。

注意

默认情况下,使用 --cached-dc 选项仅缓存此主机控制器使用的配置,这意味着无法将其提升到整个域的域控制器。有关缓存 整个域配置的信息,请参阅提升 主机控制器,以充当域控制器。

如果域控制器在通过 -cached-dc 启动此主机控制器时不可用,主机控制器将开始使用存储在 domain.cached-remote.xml 文件中的缓存配置。请注意,这个文件必须存在,否则主机控制器将无法启动。

在处于此状态时,主机控制器无法修改域配置,但可以启动服务器并管理部署。

使用缓存的配置启动后,主机控制器将继续尝试重新连接到域控制器。域控制器可用后,主机控制器将自动重新连接,并同步域配置。请注意,一些配置更改可能需要重新载入主机控制器才能生效。如果发生这种情况,它将在主机控制器上记录警告。

7.11.3. 提升主机控制器以充当域控制器

如果主域控制器出现问题,您可以提升主机控制器,以充当域控制器。主机控制器必须首先将域配置从域控制器本地缓存,然后才能提升。

流程

  1. 对您可能想成为域控制器的任何主机控制器使用-- backup 选项。

    $ EAP_HOME/bin/domain.sh --host-config=host-secondary.xml --backup
    Copy to Clipboard Toggle word wrap

    这会在 EAP_HOME/domain/configuration/ 目录中创建一个 domain.cached-remote.xml 文件,其中包含整个域配置的副本。如果主机控制器重新配置为充当域控制器,则将使用此配置。

    注意

    ignore-unused-configuration 属性用于确定特定主机要缓存的配置量。值为 true 表示仅缓存与此主机控制器相关的配置,不允许将其作为域控制器接管。值为 false 表示缓存整个域配置。

    --backup 参数将此属性默认为 false 以缓存整个域。但是,如果您在 host.xml 文件中设置此属性,则会使用该值。

    您也可以单独使用 --cached-dc 选项来创建域配置的副本,但必须在 host.xml 中将 ignore-unused-configuration 设置为 false 来缓存整个域。例如:

    <domain-controller>
      <remote username="$local" ignore-unused-configuration="false">
        <discovery-options>
          ...
        </discovery-options>
      </remote>
    </domain-controller>
    Copy to Clipboard Toggle word wrap
  2. 将主机控制器提升为域控制器。

    1. 确保原始域控制器已停止。
    2. 使用管理 CLI 连接要成为新域控制器的主机控制器。
    3. 执行以下命令,将主机控制器配置为充当新的域控制器。

      /host=backup:write-attribute(name=domain-controller.local, value={})
      Copy to Clipboard Toggle word wrap
    4. 执行以下命令以重新加载主机控制器:

      reload --host=<host_name>
      Copy to Clipboard Toggle word wrap

    此主机控制器现在将充当域控制器。

7.12. 在一台机器上设置受管域

您可以使用 jboss.domain.base.dir 属性在一台机器上运行多个主机控制器。

重要

不支持将多个 JBoss EAP 主机控制器配置为单一计算机上的系统服务。

流程

  1. 复制 域控制器的EAP_HOME/domain 目录。

    $ cp -r EAP_HOME/domain <path_to>/domain1
    Copy to Clipboard Toggle word wrap
  2. 为主机控制器复制 EAP_HOME/domain 目录。

    $ cp -r EAP_HOME/domain <path_to>/host1
    Copy to Clipboard Toggle word wrap
  3. 使用 < path_to>/domain1 启动域控制器

    $ EAP_HOME/bin/domain.sh --host-config=host-primary.xml -Djboss.domain.base.dir=<path_to>/domain1
    Copy to Clipboard Toggle word wrap
  4. 使用 < path_to>/host1 启动主机控制器

    $ EAP_HOME/bin/domain.sh --host-config=host-secondary.xml -Djboss.domain.base.dir=<path_to>/host1 -Djboss.domain.primary.address=<ip_adress> -Djboss.management.http.port=<port>
    Copy to Clipboard Toggle word wrap
    注意

    在启动主机控制器时,您必须使用 jboss.domain.primary.address 属性指定域控制器的地址。

    另外,由于此主机控制器与域控制器在同一台计算机上运行,所以您必须更改管理界面,使其不会与域控制器的管理界面冲突。此命令设置 jboss.management.http.port 属性。

以这种方式启动的每一实例将共享基本安装目录中的其余资源,如 EAP_HOME/modules/,但使用 jboss.domain.base.dir 指定的目录中的域配置。

7.13. 在两台机器上设置受管域

您可以在两台机器上创建受管域,其中一台机器是域控制器,另一个机器是主机。如需更多信息,请参阅 受管域中域控制器的角色

  • <IP 1> = 域控制器的 IP 地址(Machine 1)
  • <IP 2> = 主机的 IP 地址(Machine 2)
注意

您可能需要配置防火墙以运行此示例。

流程

  1. 在 Machine 1 中

    1. 添加管理用户,以便主机可以被域控制器进行身份验证。

      使用 add-user.sh 脚本为主机控制器 HOST_NAME 添加管理用户。

    2. 启动域控制器。

      指定 host-primary.xml 配置文件,该文件已针对专用的域控制器预先配置。另外,设置 jboss.bind.address.management 属性,使域控制器对其他计算机可见。

      $ EAP_HOME/bin/domain.sh --host-config=host-primary.xml -Djboss.bind.address.management=<IP1>
      Copy to Clipboard Toggle word wrap
  2. 在 Machine 2 中

    1. 按如下方式更新主机配置:

      1. elytron 子系统中添加以下配置:

        <subsystem xmlns="urn:wildfly:elytron:18.0"...>
          <authentication-client>
            <authentication-configuration name="secondary-hc-auth" authentication-name="MGMT_USER_NAME">
              <credential-reference clear-text="MGMT_USER_PASSWORD"/>
            </authentication-configuration>
            <authentication-context name="secondary-hc-auth-context">
              <match-rule authentication-configuration="secondary-hc-auth"/>
            </authentication-context>
          </authentication-client>
        ...
        </subsystem>
        Copy to Clipboard Toggle word wrap
        重要

        本例使用明文密码 "MGMT_USER_PASSWORD"。在生产环境中,可以使用引用凭证存储或使用加密表达式,而不是使用明文密码来提高安全性。如需更多信息,请参阅 JBoss EAP 中的安全存储凭据

      2. 在域控制器中添加身份验证上下文:

        <domain-controller>
          <remote authentication-context="secondary-hc-auth-context">
          ...
        </domain-controller>
        Copy to Clipboard Toggle word wrap
    2. 启动主机控制器。

      指定 host-secondary.xml 配置文件,该文件已针对辅助主机控制器进行了预配置。另外,设置 jboss.domain.primary.address 属性,以连接域控制器和 jboss.bind.address 属性来设置主机控制器绑定地址。

      $ EAP_HOME/bin/domain.sh --host-config=host-secondary.xml  -Djboss.domain.primary.address=<IP1>  -Djboss.bind.address=<IP2>
      Copy to Clipboard Toggle word wrap

现在,您可以在启动时使用--controller 参数指定域控制器地址,从管理 CLI 管理域。

$ EAP_HOME/bin/jboss-cli.sh --connect --controller=<IP1>
Copy to Clipboard Toggle word wrap

或者,您可以从位于 http:// <IP1>:9990 的管理控制台管理域

如果主机和服务器正在运行 JBoss EAP 7.4 或更高版本,则 JBoss EAP 8.0 域控制器可以管理运行 JBoss EAP 7.4 的主机和服务器。

要允许域控制器管理 JBoss EAP 7.4 服务器,您必须在 JBoss EAP 8.0 域配置中提供 JBoss EAP 7.4 配置详情。您可以通过将 JBoss EAP 7.4 配置集、套接字绑定组和服务器组复制到 JBoss EAP 8.0 domain.xml 配置文件来实现此目的。

如果 JBoss EAP 7.4 配置中现有名称之间存在任何冲突,则需要重命名资源。另外还有一些额外的 调整 才能确保行为正确。

以下流程使用 JBoss EAP 7.4 默认配置文件standard-sockets 套接字绑定组和 main-server-group 服务器组。

流程

  1. 编辑 JBoss EAP 8.0 domain.xml 配置文件。建议您在编辑前备份此文件。
  2. 将适用的 JBoss EAP 7.4 配置集复制到 JBoss EAP 8.0 domain.xml 文件中。

    此流程假设 JBoss EAP 7.4 默认配置集已复制,并重命名为 eap74- default

    JBoss EAP 7.4 domain.xml

    <profiles>
      ...
      <profile name="eap74-default">
        ...
      </profile>
    </profiles>
    Copy to Clipboard Toggle word wrap

  3. 添加此配置集使用的必要扩展。

    如果您的 JBoss EAP 7.4 配置集使用 JBoss EAP 8.0 中不再存在的子系统,您必须将适当的扩展添加到 JBoss EAP 域配置。

    JBoss EAP 8.0 domain.xml

    <extensions>
      ...
      <extension module="org.jboss.as.jsr77"/>
      <extension module="org.jboss.as.security"/>
    <extensions>
    Copy to Clipboard Toggle word wrap

  4. 将适用的 JBoss EAP 7.4 套接字绑定组复制到 JBoss EAP 8.0 domain.xml 文件。

    此流程假设 JBoss EAP 7.4 standard-sockets 套接字绑定组已复制,并重命名为 eap74-standard-sockets

    JBoss EAP 8.0 domain.xml

    <socket-binding-groups>
      ...
      <socket-binding-group name="eap74-standard-sockets" default-interface="public">
        ...
      </socket-binding-group>
    </socket-binding-groups>
    Copy to Clipboard Toggle word wrap

  5. 将适用的 JBoss EAP 7.4 服务器组复制到 JBoss EAP 8.0 domain.xml 文件中。

    此流程假设 JBoss EAP 7.4 main-server-group 服务器组已复制,并重命名为 eap74-main-server-group。您还必须更新此服务器组,以使用 JBoss EAP 7.4 配置文件、eap74-default 和 JBoss EAP 7.4 套接字绑定组 eap74-standard-sockets

    JBoss EAP 8.0 domain.xml

    <server-groups>
      ...
      <server-group name="eap74-main-server-group" profile="eap7.4-default">
        ...
        <socket-binding-group ref="eap7.4-standard-sockets"/>
      </server-group>
    </server-groups>
    Copy to Clipboard Toggle word wrap

7.14.2. 更新 JBoss EAP 7.4 版本配置集的行为

根据 JBoss EAP 版本和所需行为,需要对 JBoss EAP 7.4 实例使用的配置集进行额外的更新。根据现有 JBoss EAP 7.4 实例使用的子系统和配置,您可能需要进行其他更改。以下流程假设 JBoss EAP 7.4 配置集是 eap74-default

流程

  1. 启动 JBoss EAP 8.0 域控制器,并启动其管理 CLI 以执行下列更新:
  2. 设置 CDI 1.0 行为。

    只有在您希望 CDI 1.0 的行为用于 JBoss EAP 7.4 服务器时才需要此功能,而不是 JBoss EAP 8.0 中使用的 CDI 版本的行为。如果您希望 CDI 1.0 行为,请对 weld 子系统进行以下更新。

    JBoss EAP 8.0 域控制器 CLI

    /profile=eap74-default/subsystem=weld:write-attribute(name=require-bean-descriptor,value=true)
    
    /profile=eap74-default/subsystem=weld:write-attribute(name=non-portable-mode,value=true)
    Copy to Clipboard Toggle word wrap

7.14.3. 为 JBoss EAP 7.4 服务器设置服务器组

如果您重命名了服务器组,您需要更新 JBoss EAP 7.4 主机配置,以使用 JBoss EAP 8.0 配置中指定的新服务器组。本例使用 JBoss EAP 8.0 domain.xml 配置文件中指定的 eap74-main-server-group 服务器组。

流程

  • 更新主机配置。

    JBoss EAP 7.4 host-secondary.xml

    <servers>
        <server name="server-one" group="eap74-main-server-group"/>
        <server name="server-two" group="eap74-main-server-group">
            <socket-bindings port-offset="150"/>
        </server>
    </servers>
    Copy to Clipboard Toggle word wrap

注意

主机无法使用较之主机运行的 JBoss EAP 较新版本的功能或配置设置。

受管域中的域控制器将配置更新转发到其主机控制器。您必须使用 host-exclude 配置来指定应在特定版本中隐藏的资源。为您的 JBoss EAP 7.4 版本选择适当的预配置的 host-exclude 选项: EAP74

host-exclude 配置的 active-server-groups 属性指定特定版本使用的服务器组列表。这些服务器组及其关联的配置文件、套接字绑定组和部署资源可供此版本的主机使用,但所有其他服务器都将在这些主机中隐藏。

本例假定版本是 JBoss EAP 7.4,并将 JBoss EAP 7.4 服务器组 eap74-main-server-group 添加为活跃的服务器组。

JBoss EAP 8.0 域控制器 CLI

/host-exclude=EAP74:write-attribute(name=active-server-groups,value=[eap74-main-server-group])
Copy to Clipboard Toggle word wrap

如果需要,您可以使用 active-socket-binding-groups 属性指定服务器使用的额外套接字绑定组。这只适用于与 active-server-groups 中指定的服务器组无关的套接字绑定组。

7.15. JBoss EAP 配置文件管理

7.15.1. 关于配置集

JBoss EAP 使用配置文件来组织哪些子系统可供服务器使用。配置文件由一组可用的子系统以及各个子系统的特定配置组成。具有大量子系统的配置集会导致服务器具有大量功能。含有小型、集中的一组子系统的配置文件将具有较少的能力,但占用较小的功能。

JBoss EAP 附带五个预定义的配置集,它们应满足大多数用例:

default
包括常用的子系统,如日志记录安全数据源infinispanwebserviceseeejb 3、事务 等。
ha
包含 default 配置文件中提供的子系统,以及添加 jgroupsmodcluster 子系统以实现高可用性。
full
包含 default 配置文件中提供的子系统,以及添加 messaging-activemqiiop-openjdk 子系统。
full-ha
包含 full 配置集中提供的子系统,以及添加 jgroupsmodcluster 子系统以实现高可用性。
load-balancer
包括使用内置 mod_cluster 前端负载平衡器来负载平衡其他 JBoss EAP 实例所需的最小子系统。

7.15.2. 克隆配置集

JBoss EAP 允许您通过克隆现有配置文件来在受管域中创建新配置文件。这将创建原始配置集的配置和子系统的副本。

流程

  • 对所需的配置集使用 clone 操作来克隆配置集。

    /profile=full-ha:clone(to_profile=<cloned_profile>)
    Copy to Clipboard Toggle word wrap

您也可以从管理控制台克隆配置集,方法是选择要克隆所需的配置文件,然后单击 克隆

7.15.3. 受管域中的分级配置集

在受管域中,您可以创建配置文件层次结构。这可让您创建带有其他配置集可以继承的通用扩展的基本配置集。

受管域在 domain.xml 中定义多个配置集。如果多个配置集为特定子系统使用相同的配置,则只能在一个位置而不是不同的配置集进行配置。父配置集中的值不能被覆盖。

此外,每个配置集都必须自我工作。如果引用元素或子系统,则必须在引用它的配置集中定义。

配置集可以使用 list-add 操作并提供要包含的配置集,使用管理 CLI 在层次结构中包含其他配置集。

/profile=new-profile:list-add(name=includes, value=<profile_name>)
Copy to Clipboard Toggle word wrap

第 8 章 配置 JVM 设置

您可以为独立 JBoss EAP 服务器或受管域中的 JBoss EAP 服务器配置 Java 虚拟机(JVM)设置。

对于单机 JBoss EAP 服务器实例,服务器启动进程在启动时将 JVM 设置传递给 JBoss EAP 服务器。在启动 JBoss EAP 之前,可以从命令行声明它们,也可以使用管理控制台中的 Configuration 下的 系统属性 页面。

在受管域中,在 host.xmldomain.xml 配置文件中声明 JVM 设置,可以在主机、服务器组或服务器级别进行配置。

注意

如果需要由 JVM 本身读取或 JBoss EAP 模块(如日志记录管理器),在单机服务器或受管域主机控制器的初始阶段,在 JAVA_OPTS 中配置系统属性。

8.1. 为独立服务器配置 JVM 设置

您可以在服务器启动前设置 JAVA_OPTS 环境变量,在运行时为独立 JBoss EAP 服务器实例定义 Java 虚拟机(JVM)设置。或者,您可以通过设置系统属性,将 JVM 设置添加到 standalone.confstandalone.bat 配置文件。如果以多种方式设置系统属性,JBoss EAP 配置文件 standalone*.xml 中的值会覆盖其他值。

流程

  • 设置 JAVA_OPTS 环境变量:

    Linux

    $ export JAVA_OPTS="-Xmx1024M"
    Copy to Clipboard Toggle word wrap

    Microsoft Windows

    set JAVA_OPTS="Xmx1024M"
    Copy to Clipboard Toggle word wrap

  • 或者,可以在 EAP_HOME/bin 文件夹中将 JVM 设置添加到 standalone.conf 文件,也可以添加到用于 Windows 服务器的 standalone.conf.bat 中,其中包含要传递给 JVM 的选项示例。
  • 除了设置 JAVA_OPTS 环境变量外,您还可以使用以下替代方法之一设置系统属性:

    • 执行以下命令:

      $ EAP_HOME/bin/standalone.sh -Dmyproperty=value
      Copy to Clipboard Toggle word wrap
    • 编辑 JBoss EAP 配置文件 standalone*.xml
警告

如果以多种方式设置系统属性,JBoss EAP 配置文件 standalone*.xml 中的值会覆盖其他值,这可能会导致 JBoss EAP 启动问题。例如,如果您在 JAVA_OPTS 环境变量和 JBoss EAP 配置文件中定义了系统设置,则 JBoss EAP 配置中的值会覆盖 JAVA_OPTS 中的值。

8.2. 为受管域配置 JVM 设置

在 JBoss EAP 受管域中,您可以在多个级别上定义 JVM 设置。您可以在特定主机上定义自定义 JVM 设置,然后将这些设置应用到服务器组或单个服务器实例。

默认情况下,服务器组和个别服务器将继承其父级的 JVM 设置,但您可以选择覆盖各个级别的 JVM 设置。

注意

domain.conf 中的 JVM 设置或用于 Windows 服务器的 domain.conf.bat 应用于 JBoss EAP 主机控制器的 Java 进程,而不是由该主机控制器控制的独立 JBoss EAP 服务器实例。

8.2.1. 在主机控制器中定义 JVM 设置

您可以在主机控制器上定义 Java 虚拟机(JVM)设置,并将这些设置应用到服务器组或个别服务器。JBoss EAP 附带 默认的 JVM 设置,但以下流程演示了创建名为 production_jvm 的新 JVM 设置以及一些自定义 JVM 设置和选项。这些设置存储在 host.xml 中的 <jvm > 标签中。

先决条件

  • JBoss EAP 作为受管域运行。

流程

  • 使用管理 CLI 定义 JVM 设置。

    语法

    /host=<HOST_NAME>/jvm=<SETTING_NAME>:add(heap-size=<HEAP_SIZE>, max-heap-size=<MAX_HEAP_SIZE>, max-permgen-size=<MAX_PERMANENT_GENERATION_SIZED>, stack-size=<STACK_SIZE>, jvm-options=["<JVM_OPTIONS>"])
    Copy to Clipboard Toggle word wrap

    Example

    /host=exampleHost1/jvm=production_jvm:add(heap-size=2048m, max-heap-size=2048m, max-permgen-size=512m, stack-size=1024k, jvm-options=["-XX:-UseParallelGC"])
    Copy to Clipboard Toggle word wrap

    有关所有可用选项的描述,请参阅受管域 JVM 配置属性。

  • 使用管理控制台定义 JVM 设置。

    1. 在管理控制台中导航到 RuntimeHosts
    2. 选择主机并单击 查看
    3. 选择 JVM 选项卡来定义设置。

8.2.2. 将 JVM 设置应用到服务器组

在创建服务器组时,您可以指定组中所有服务器将使用的 JVM 配置。服务器组的这些设置存储在 domain.xml 中。

先决条件

流程

  • 使用管理 CLI 将 JVM 设置应用到服务器组。

    创建使用 production_jvm JVM 设置的服务器组名称 exampleGroupA

    /server-group=exampleGroupA:add(profile=default,socket-binding-group=standard-sockets)
    /server-group=exampleGroupA/jvm=production_jvm:add
    Copy to Clipboard Toggle word wrap

    您还可以在服务器组级别上覆盖特定的 JVM 设置。例如,要设置不同的堆大小,您可以使用以下命令:

    /server-group=exampleGroupA/jvm=production_jvm:write-attribute(name=heap-size,value="1024m")
    Copy to Clipboard Toggle word wrap

    应用上述命令后,服务器组 groupA 将继承 production_jvm 的 JVM 设置,但堆大小为 1024m 除外。

  • 使用管理控制台将 JVM 设置应用到服务器组。

    1. 导航到 RuntimeServer Groups
    2. 选择服务器组,然后单击 查看
    3. 选择 JVM 选项卡以应用设置。

默认情况下,单个 JBoss EAP 服务器实例将继承其所属服务器组的 JVM 设置。但是,您可以选择使用主机控制器的另一完整 JVM 设置定义覆盖继承的设置,或者选择覆盖特定的 JVM 设置。单个服务器的这些设置存储在 host.xml 中。

先决条件

流程

  • 使用管理 CLI 将 JVM 设置应用到单个服务器。

    将 Applying JVM 设置中的 JVM 定义覆盖到服务器组流程中,并将 server -one 的 JVM 设置设为 默认的 JVM 定义:

    /host=exampleHost1/server-config=server-one/jvm=default:add
    Copy to Clipboard Toggle word wrap

    另外,与服务器组类似,您还可以覆盖服务器级别的特定 JVM 设置。例如,要设置不同的堆大小,您可以使用以下命令:

    /host=exampleHost1/server-config=server-one/jvm=default:write-attribute(name=heap-size,value="1024m")
    Copy to Clipboard Toggle word wrap
  • 使用管理控制台将 JVM 设置应用到单独的服务器。

    1. 导航到 RuntimeHosts
    2. 选择主机,然后单击服务器上的 View
    3. 选择 JVM 选项卡以应用设置。

8.3. 在管理控制台中查看 JVM 资源状态

您可以从管理控制台查看单机或受管域服务器等 JVM 资源的状态,如堆和线程使用情况。虽然统计未实时显示,但您可以单击 Refresh 以提供 JVM 资源的最新概述。

先决条件

  • JBoss EAP 正在运行。

流程

  • 查看独立 JBoss EAP 服务器的 JVM 状态:

    • 导航到 Runtime 选项卡,选择服务器,然后选择 Status
  • 查看受管域中 JBoss EAP 服务器的 JVM 状态:

    • 导航到 RuntimeHosts,选择 host 和 server,然后选择 Status

此时会显示以下堆用法信息:

Max
可用于内存管理的最大内存量。
Used
已用内存量。
已提交
提交 Java 虚拟机使用的内存量。

也可以使用其他信息,如 JVM 运行时间和线程使用情况。

有关优化 JVM 性能的详情,请参考 JBoss EAP 性能调整指南中的 JVM 调优

第 9 章 邮件子系统

本章重点介绍将电子邮件功能集成到 JBoss EAP 应用中的 mail 子系统。本节提供了配置邮件服务器设置、自定义传输协议以满足您组织的特定需求的详细信息,并通过使用凭据存储进行密码管理来增强安全性。

先决条件

  • 已安装 JBoss EAP 8.0。

9.1. 配置邮件子系统

mail 子系统允许您在 JBoss EAP 中配置邮件会话,然后使用 JNDI 将这些会话注入到应用中。此外,它支持使用 Jakarta EE 注释,如 @MailSessionDefinition@MailSessionDefinitions 来简化配置过程。

先决条件

  • 已安装并运行 JBoss EAP。
  • 有到 SMTP 服务器的网络访问。

流程

  1. 使用以下 CLI 命令配置 SMTP 服务器和出站套接字绑定,例如:

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-smtp:add(host=localhost, port=25)
    Copy to Clipboard Toggle word wrap
    /subsystem=mail/mail-session=mySession:add(jndi-name=java:jboss/mail/MySession)
    Copy to Clipboard Toggle word wrap
    /subsystem=mail/mail-session=mySession/server=smtp:add(outbound-socket-binding-ref=my-smtp, username=user, password=pass, tls=true)
    Copy to Clipboard Toggle word wrap
  2. 在应用程序中调用配置的邮件会话:

    @Resource(lookup="java:jboss/mail/MySession")
    private Session session;
    Copy to Clipboard Toggle word wrap

9.2. 配置自定义传输

当您在 JBoss EAP 中配置标准邮件服务器(如 SMTP、POP3 或 IMAP)时,您需要定义几个属性,并且最关键是 outbound-socket-binding-ref 属性。此属性将您的邮件会话链接到特定的主机和端口。但是,如果您的设置涉及多个用于负载均衡的主机,则标准 Jakarta 邮件配置可能会很短,因为它们不支持多个主机。在这种情况下,您应该通过管理 CLI 设置自定义邮件传输。这些自定义传输允许更灵活的配置,且不需要 outbound-socket-binding-ref 属性。

先决条件

  • JBoss EAP 已安装并运行。

流程

  1. 添加新邮件会话并指定 JNDI 名称。

    /subsystem=mail/mail-session=mySession:add(jndi-name=java:jboss/mail/MySession)
    Copy to Clipboard Toggle word wrap
  2. 添加出站套接字绑定并指定主机和端口。

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-smtp-binding:add(host=localhost, port=25)
    Copy to Clipboard Toggle word wrap
  3. 添加 SMTP 服务器并指定出站套接字绑定、用户名和密码。

    /subsystem=mail/mail-session=mySession/server=smtp:add(outbound-socket-binding-ref=my-smtp-binding, username=user, password=pass, tls=true)
    Copy to Clipboard Toggle word wrap
注意

您可以使用类似步骤配置 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)
Copy to Clipboard Toggle word wrap

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)
Copy to Clipboard Toggle word wrap

要使用自定义服务器,请创建一个没有出站套接字绑定的自定义邮件服务器。您可以在自定义邮件服务器的属性定义中指定主机信息。例如:

/subsystem=mail/mail-session=mySession/custom=myCustomServer:add(username=user,password=pass, properties={"host" => "myhost", "my-property" =>"value"})
Copy to Clipboard Toggle word wrap

如果您定义了自定义协议,则包含句点(.)的任何属性名称都将被视为完全限定名称,并直接传递。任何其它格式(如 my-property )都以以下格式转换: mail.server-name.my-property

以下 XML 是包含自定义服务器的示例邮件配置。

<subsystem xmlns="urn:jboss:domain:mail:4.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>
Copy to Clipboard Toggle word wrap

9.3. 将凭证存储用于密码

除了使用明文密码外,您还可以使用凭据存储来增强 JBoss EAP 邮件子系统中的安全性。elytron 子系统允许您创建和管理凭据存储,以安全地存储和访问密码。有关如何设置和使用这些凭据存储的详细步骤,请参阅如何 配置服务器安全性的 Credential Store 部分。

先决条件

  • JBoss EAP 已安装并运行。

通过管理 CLI 使用凭证存储作为密码:

/subsystem=mail/mail-session=mySession/server=smtp:add(outbound-socket-binding-ref=my-smtp-binding, username=user, credential-reference={store=exampleCS, alias=mail-session-pw}, tls=true)
Copy to Clipboard Toggle word wrap

注意

以下是如何指定使用明文密码的 credential-reference 属性的示例。

credential-reference={clear-text="MASK-Ewcyuqd/nP9;A1B2C3D4;351"}
Copy to Clipboard Toggle word wrap

使用凭证存储作为管理控制台的密码:

  1. 访问管理控制台。如需更多信息,请参阅 管理控制台
  2. 导航到 ConfigurationSubsystemsMail
  3. 选择适当的邮件会话,然后单击 查看
  4. 选择 Server 并选择适当的邮件服务器。您可以在 Credential Reference 选项卡中配置凭证引用,并在 Attributes 选项卡中编辑其他属性。

第 10 章 使用 JBoss EAP 进行日志记录

JBoss EAP 为其内部使用和已部署的应用程序提供了高度可配置日志记录功能。logging 子系统基于 JBoss LogManager,除了 JBoss Logging 外,还支持多种第三方应用程序日志框架。

10.1. JBoss EAP 中的日志记录机制

JBoss EAP 提供一系列日志记录机制,以支持监控、故障排除和管理服务器环境。了解这些机制有助于维护和调试 JBoss EAP 设置:

10.1.1. JBoss EAP 中的服务器日志记录

在 JBoss EAP 中,服务器日志记录主要通过 server.log 文件进行管理,其中记录了所有日志条目。

此日志文件的位置取决于您的操作模式:

  • 单机服务器: EAP_HOME/standalone/log/server.log
  • 受管域: EAP_HOME/domain/servers/SERVER_NAME/log/server.log

此文件通常称为服务器日志。

10.1.2. JBoss EAP 中的引导日志

在启动过程中,JBoss EAP 会记录有关 Java 环境以及各个服务的启动信息。此日志可用于故障排除,并默认写入服务器日志。???

引导日志记录在 logging.properties 文件中配置,该文件在 JBoss EAP 日志记录子系统启动前被使用。

文件位置取决于您的操作模式:

  • 独立服务器: 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 文件的手动修改。

10.1.2.1. 查看引导错误

在对 JBoss EAP 进行故障排除时,检查引导错误是一个关键步骤。您可以使用这些信息诊断并解决错误。如果需要,创建一个支持问题单,以协助对启动错误进行故障排除。

您可以使用以下方法查看引导错误:

  • 查看 server.log 文件中的引导错误
  • 使用管理 CLI 命令读取引导错误

每种方法都有自己的优势,具体取决于您的要求。

10.1.2.1.1. 查看 server.log 文件中的引导错误

您可以打开 server.log 文件,以查看引导过程中出现的任何错误。

这个方法提供了错误消息以及相关信息,可帮助您了解错误的原因。它以纯文本格式显示错误消息。

先决条件

  • 您可以访问 JBoss EAP 服务器的文件系统。
  • 您可以访问 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
            ...
    Copy to Clipboard Toggle word wrap
10.1.2.1.2. 使用管理 CLI 命令读取引导错误

在对 JBoss EAP 进行故障排除时,您可以使用 read-boot-errors 管理 CLI 命令查看启动期间报告的错误。

如果您无法访问服务器的文件系统,则此方法很有用,通过脚本进行远程监控和错误检查。使用管理 CLI 命令,您可以识别和解决引导错误。例如,您可以编写一个启动多个 JBoss EAP 实例的脚本,并检查启动错误。

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 启动管理 CLI。

    $ <EAP_HOME>/bin/jboss-cli.sh
    Copy to Clipboard Toggle word wrap
  2. 运行以下管理 CLI 命令:

    /core-service=management:read-boot-errors
    Copy to Clipboard Toggle word wrap
  3. 查看输出以查看引导过程中出现的任何错误列表。

    输出示例
    {
        "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"}
            }
            ...
        ]
    }
    Copy to Clipboard Toggle word wrap

10.1.3. JBoss EAP 中的垃圾回收日志记录

垃圾回收日志记录以纯文本日志文件记录所有垃圾回收活动。这些日志可用于诊断目的。

垃圾回收日志位于 EAP_HOME/standalone/log/gc.log.DIGIT.current。每个日志文件都限制为 3 MB,最多轮转五个文件。

建议您启用垃圾回收日志,因为它有助于进行故障排除并尽可能少的开销。但是,您可以在启动服务器前将 GC_LOG 变量设置为 false 来禁用它。例如:

$ export GC_LOG=false
$ EAP_HOME/bin/standalone.sh
Copy to Clipboard Toggle word wrap

10.1.4. JBoss EAP 中的默认日志文件位置

以下日志文件基于默认日志记录配置创建。这些配置使用定期日志处理程序来编写服务器日志文件。

Expand
表 10.1. 独立服务器的默认日志文件
日志文件描述

EAP_HOME/standalone/log/server.log

包含服务器日志消息,包括启动消息。

EAP_HOME/standalone/log/gc.log.DIGIT.current

包含垃圾回收详情。

Expand
表 10.2. 受管域的默认日志文件
日志文件描述

EAP_HOME/domain/log/host-controller.log

包含与主机控制器启动相关的日志消息。

EAP_HOME/domain/log/process-controller.log

包含与进程控制器启动相关的日志消息。

EAP_HOME/domain/servers/SERVER_NAME/log/server.log

包含 named 服务器的日志消息,包括启动消息。

您可以通过将 JVM 属性设置为启动配置文件来配置 JBoss EAP 的默认区域设置。启动配置文件是单机服务器的 EAP_HOME/bin/standalone.conf,或者用于受管域的 EAP_HOME/bin/domain.conf

注意

对于 Windows 服务器,JBoss EAP 启动配置文件是 standalone.conf.batdomain.conf.bat

已国际化和本地化的日志消息将使用此默认区域设置。

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问服务器模式的启动配置文件。

流程

  1. 通过将 user.language 属性添加到 JAVA_OPTS 变量来设置语言。例如,要将区域设置设置为法语,请在启动配置文件中添加以下行:

    JAVA_OPTS="$JAVA_OPTS -Duser.language=fr"
    Copy to Clipboard Toggle word wrap
  2. 通过添加 user.languageuser.country 属性来设置语言和国家/地区。例如,要将区域设置设置为 Brazilian Portuguese,请添加以下行:

    JAVA_OPTS="$JAVA_OPTS -Duser.language=pt -Duser.country=BR"
    Copy to Clipboard Toggle word wrap
  3. 使用 o'rg.jboss.logging.locale' 属性设置服务器区域设置,为日志消息指定不同的区域设置。这会覆盖用于日志记录的默认区域设置。例如,要将服务器区域设置设置为 Brazilian Portuguese,请添加以下行:

    JAVA_OPTS="$JAVA_OPTS -Dorg.jboss.logging.locale=pt-BR"
    Copy to Clipboard Toggle word wrap

    此属性仅影响使用 JBoss Logging 及其依赖项的日志消息。Jakarta Server Faces 等其他依赖项无法获取覆盖的区域。

    注意

    要使用与系统默认区域不同的区域设置启动 JBoss EAP,可编辑 EAP_HOME/bin/standalone.conf 用于单机模式,或为受管域模式的 EAP_HOME/bin/domain.conf 编辑 EAP_HOME /bin/domain.conf。使用 org.jboss.logging.locale 属性以 BCP 47 格式设置区域设置。

10.2. 查看日志文件

查看服务器和应用程序日志对于诊断错误、性能问题和其他问题至关重要。

您可以使用以下方法查看日志:

考虑有关日志访问和管理的以下关键点:

  • 日志必须位于服务器的 jboss.server.log.dir 属性指定的目录中。
  • 日志定义为文件、定期轮转、大小轮转或定期大小轮转日志处理程序。
  • 基于角色的访问控制(RBAC)限制用户仅查看他们有权在管理控制台或 CLI 中访问的日志。

10.2.1. 从管理控制台查看日志

您可以直接从 JBoss EAP 管理控制台查看日志,该控制台为日志访问提供了图形界面。

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理控制台。

流程

  1. 登录到管理控制台。
  2. 选择 Runtime 选项卡,然后选择相应的服务器。
  3. 选择 Log Files 并选择日志文件。
  4. 单击 View 以打开并搜索日志内容,或者从下拉菜单中选择 Download,以将日志文件保存到本地文件系统。

    警告

    管理控制台日志查看器不是为非常大的日志文件而设计的,例如大于 100MB。如果您尝试打开大于 15MB 的日志文件,您将收到确认提示。在管理控制台中打开非常大的文件可能会导致浏览器崩溃。建议下载大型日志文件,并在文本编辑器中打开这些文件。

10.2.2. 从管理 CLI 查看日志

您可以使用 read-log-file 命令从管理 CLI 读取日志文件内容。默认情况下,这会显示指定日志文件的最后 10 行。

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令读取日志文件的内容:

    /subsystem=logging/log-file=LOG_FILE_NAME:read-log-file
    Copy to Clipboard Toggle word wrap
    注意

    在受管域中,在此命令之前加上 /host=HOST_NAME/server=SERVER_NAME

  2. 使用以下参数自定义日志输出:

    • 编码 :指定用于读取文件的字符编码。
    • :设置要从文件中读取的行数。值 1 将读取所有日志行。默认值为 10
    • skip :指定读取前要跳过的行数。默认值为 0
    • tail :设置是否从文件的末尾读取。默认值为 true

例如,以下管理 CLI 命令从 server.log 日志文件的顶部读取前 5 行:

/subsystem=logging/log-file=server.log:read-log-file(lines=5,tail=false)
Copy to Clipboard Toggle word wrap

这会生成以下输出:

{
    "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"
    ]
}
Copy to Clipboard Toggle word wrap

10.3. 日志记录子系统配置概述

JBoss EAP 日志记录子系统 使用 日志类别日志处理程序 进行配置。日志类别指定要捕获的消息,而日志处理程序定义了如何处理这些消息,例如将它们写入磁盘或将它们发送到控制台。

应用程序日志记录配置集 允许您创建唯一命名的日志配置,这些配置可以分配给部署或多个部署,与主日志记录设置分开。日志记录 配置集配置与主日志记录子系统的配置几乎相同。

10.3.1. 根日志记录器配置

JBoss EAP 根日志记录器捕获在由日志记录器未捕获的指定日志级别或更高级别的所有日志消息。但是,如果定义的日志记录器将 use-parent-handlers 设置为 true,并且也定义了处理程序,则定义的日志记录器和根日志记录器将用于处理消息。

默认情况下,根日志记录器使用控制台和定期日志处理程序,它写入到 server.log 文件。此文件通常称为服务器日志。

10.3.2. JBoss EAP 中的日志类别

日志类别定义一组用于捕获的日志消息,以及处理这些消息的一个或多个日志处理程序。

日志消息由指定的原始卷和日志级别决定。可以指定任何字符串值。但是,首选软件包名称或类名称。日志记录器的名称使用点表示法来指定,例如 Logger.getLogger ("example.logger.name")。日志管理器处理名称的每个部分,并检查匹配的配置。如果 found 和 use-parent-handlers 设为 false,进程将停止。如果没有定义配置,或者 use-parent-handlers 被设置为 true,则日志管理器会继续检查父名称,如 "example.logger"。日志记录器的配置取决于日志记录器的创建方式,而不是软件包或类名称。

注意

虽然日志类别通常基于 Java 软件包和类名称,但它可以是 Logger.getLogger (LOGGER_NAME) 方法指定的任何名称。

日志记录器可以分配有处理程序。如果 use-parent-handlers 设为 false,则没有更高级别的日志记录器将处理消息,即使日志记录器确定该消息是 loggable。例如,如果日志记录器名称为 org.jboss.as.logging,并且配置了 use-parent-handlers=false,则不会检查 org.jboss.as logger。

10.3.3. JBoss EAP 中的日志处理程序

日志处理程序定义捕获的日志消息的记录方式,并指定条目的目的地和格式。了解不同类型的日志处理程序对于有效的日志记录配置至关重要,因为每种类型满足满足各种需求的不同需要。

注意

日志处理程序必须添加到至少一个日志记录器才能处于活动状态。

10.3.3.1. 日志处理程序的类型

日志处理程序分为几种类型,它们决定了日志条目是如何处理和存储的。每种类型都有不同的功能来满足各种日志记录要求:

  • 控制台 :将日志消息写入主机操作系统的标准 out、stdout 或标准错误 stderr、流。当 JBoss EAP 从命令行提示符运行时,将显示这些消息。来自控制台日志处理程序的消息不会被保存,除非操作系统被配置为捕获标准输出或标准错误流。
  • 文件 :将日志消息写入指定的文件。
  • periodic: 将日志消息写入命名的文件,直到指定的时间段过。之后,该文件使用时间戳进行重命名,处理程序将继续写入使用原始名称的新创建日志文件。
  • 大小 :将日志消息写入指定文件,直到文件达到指定大小。当文件达到该大小时,使用数字后缀对其进行重命名,处理程序将继续写入带有原始名称的新创建的日志文件。每个大小日志处理程序都必须指定要以这种方式保留的最大文件数。
  • periodic Size: 将日志消息写入指定文件,直到文件达到指定大小或指定时间段过期。然后,处理程序会重命名文件,并继续写入新创建的带有原始名称的日志文件。此处理程序组合了定期日志处理程序的功能。
  • syslog :将消息发送到远程日志记录服务器。这可让多个应用程序将其日志消息发送到同一服务器以进行解析。
  • 套接字 :通过套接字将日志消息发送到远程日志记录服务器。这可使用 TCP 或 UDP 套接字。
  • 自定义 :允许您配置新的日志处理程序。自定义处理程序必须实施为扩展 java.util.logging.Handler 并包含在模块中的 Java 类。您还可以使用 Log4J appender 作为自定义日志处理程序。
  • async :为一个或多个其他日志处理程序提供异步行为。这对可能具有高延迟或性能问题的日志处理程序很有用,如将日志文件写入网络文件系统。

10.3.4. JBoss EAP 中支持的日志级别

日志级别是一个枚举的值,表示日志消息的性质和严重性。作为开发人员,您可以使用您选择的日志记录框架的适当方法指定日志消息级别来发送消息。

JBoss EAP 支持由受支持的应用程序日志记录框架使用的所有日志级别。从最低到最高级别的最常用日志级别为 TRACE,DEBUG,INFO,WARN,ERROR, 和 FATAL

日志级别可帮助日志类别和处理程序限制它们处理的消息。每个日志级别都有一个分配的数字值,表示其相对于其他日志级别的顺序。日志类别和处理程序被分配一个日志级别,仅处理该级别或更高级别的日志消息。例如,一个日志处理程序,其级别为 WARN ERRORFATAL 的消息。

Expand
表 10.3. 支持的日志级别
日志级别value描述

ALL

integer.MIN_VALUE

提供所有日志消息。

FINEST

300

-

FINER

400

-

TRACE

400

TRACE 级别日志消息提供有关应用的运行状态的详细信息,通常仅在调试期间捕获。

DEBUG

500

DEBUG 级别日志消息表示单个请求或应用活动的进度,通常仅在调试期间捕获。

正常的

500

-

CONFIG

700

-

INFO

800

INFO 级别日志消息表示应用的整体进度。通常用于应用程序启动、关闭和其他主要生命周期事件。

WARN

900

WARN 级别日志消息表示没有出错的情况,但不被视为理想的情况。警告 日志消息可能指示可能导致将来的错误的情况。

WARNING

900

-

ERROR

1000

ERROR 级别日志消息指出可能阻止当前活动或请求完成但不会阻止应用运行的错误。

严重

1000

-

FATAL

1100

FATAL 级别日志消息指示可能导致关键服务失败和应用程序关闭的事件,这可能会导致 JBoss EAP 关闭。

OFF

integer.MAX_VALUE

不显示任何日志消息。

注意

ALL 是最低的日志级别,包括所有日志级别的消息。这提供了最多的日志。

FATAL 是最高日志级别,仅包含该级别的信息。这提供了最少的日志量。

10.3.5. JBoss EAP 中的日志格式器

日志格式器用于格式化日志消息。您可以使用 named-formatter 属性为日志记录处理程序分配一个格式器。

10.3.5.1. 日志格式器的类型

日志格式将分为几种类型,来确定如何格式化日志条目。

logging 子系统包括四种格式:

  • Pattern formatter: 以纯文本格式格式化日志消息。除了将 formatter 用作日志处理程序的 named-formatter 属性外,您还可以将它用作 formatter 属性,而无需先创建 formatter 资源。
  • JSON 格式 :以 JSON 格式格式化日志消息。
  • XML 格式 :在 XML 中格式化日志消息.
  • 自定义格式 :与处理程序搭配使用。大多数日志记录都以 printf 格式格式化。Formatters 可能需要调用 org.jboss.logmanager.ExtLogRecord"getFormattedMessage () 才能正确格式化。

10.3.6. 在 JBoss EAP 中记录的过滤表达式

过滤器表达式使用 filter-spec 属性进行配置,根据各种条件记录日志消息。过滤器应用到原始未格式化的消息。您可以将过滤器添加到日志记录器或处理程序,但日志记录器过滤器优先于处理程序上的过滤器。

注意

为根日志记录器指定的 filter-spec 不会被其他日志记录器继承。相反,必须为每个处理程序指定 filter-spec

下表描述了日志的可用过滤器表达式:

Expand
表 10.4. 日志过滤表达式
过滤表达式描述

accept

接受所有日志消息。

deny

拒绝所有日志消息。

not[filter 表达式]

返回单个过滤器表达式的反转值。例如:

not (match ("WFLY"))

all[filter 表达式]

从以逗号分隔的过滤器表达式列表中返回串联的值。例如:

all (match ("WFLY"),match ("WELD"))

any[filter 表达式]

从以逗号分隔的过滤器表达式列表中返回一个值。例如:

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"]

使用替换文本(second 参数)替换到模式(第一个参数)的第一个匹配项。例如:

替换("WFLY","EAP")

substituteAll["pattern","replacement value"]

使用替换文本(秒)替换所有模式匹配的模式(第一个参数)。例如:

replaceAll ("WFLY","EAP")

注意

使用管理 CLI 配置过滤器表达式时,过滤文本中的转义逗号和引号,以确保以字符串的形式正确处理该值。您必须在逗号和引号前加上反斜杠(\),并在引号中换出整个表达式。以下是正确转义 替换All ("WFLY","YLFW")的示例

/subsystem=logging/console-handler=CONSOLE:write-attribute(name=filter-spec, value="substituteAll(\"WFLY\"\,\"YLFW\")")
Copy to Clipboard Toggle word wrap

10.3.7. JBoss EAP 中的隐式日志记录依赖项

默认情况下,JBoss EAP 日志记录子系统 为部署添加隐式日志记录 API 依赖项。您可以使用 add-logging-api-dependencies 属性来管理这些隐式依赖项是否添加到部署中,该属性默认设置为 true

要防止这些依赖项被添加,请使用管理 CLI 将 add-logging-api-dependencies 属性设置为 false

/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)
Copy to Clipboard Toggle word wrap

10.4. 配置日志类别

您可以使用管理 CLI 在 JBoss EAP 中配置日志类别。或者,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,然后选择 Categories

您可以执行以下任务来配置日志类别:

重要

如果您为日志记录配置集配置此日志类别,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

10.4.1. 使用管理 CLI 添加和配置日志类别

日志类别名称是原始的 Java 软件包。但是,日志记录器可以根据您的要求使用任何字符串名称。如需更多信息,请参阅 Java 日志记录 API 文档。如果来自该软件包中的类的信息符合其他设置(如日志级别),则会捕获来自该软件包的消息。

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令添加日志类别:

    /subsystem=logging/logger=LOG_CATEGORY:add
    Copy to Clipboard Toggle word wrap
  2. 您可以根据您的需要设置一个或多个日志类别属性:

    • 使用以下命令为日志类别设置日志级别:

      /subsystem=logging/logger=LOG_CATEGORY:write-attribute(name=level,value=LEVEL)
      Copy to Clipboard Toggle word wrap

      默认值为 ALL

    • 使用以下命令设置此类别是否应使用根日志记录器的日志处理程序:

      /subsystem=logging/logger=LOG_CATEGORY:write-attribute(name=use-parent-handlers,value=USE_PARENT_HANDLERS)
      Copy to Clipboard Toggle word wrap

      默认情况下,除了它们自己的外,日志类别还使用根日志记录器的处理程序。将 use-parent-handlers 属性设置为 false,以确保日志类别仅使用其分配的处理程序。

    • 使用以下命令设置过滤器表达式:

      /subsystem=logging/logger=LOG_CATEGORY:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)
      Copy to Clipboard Toggle word wrap

      指定表达式来过滤日志类别的日志消息。转义任何逗号和引号,并使用引号括起表达式。例如,将 FILTER_EXPRESSION 变量替换为 "not (match (\"WFLY\") ) ",以设置 not (match ("WFLY")的过滤器表达式

10.4.2. 分配日志处理程序并管理日志类别

JBoss EAP 中的日志处理程序控制如何处理和记录日志消息以进行日志类别。将日志处理程序分配到特定的日志类别,以根据您的应用需求自定义日志记录行为。您也可以在不再需要时删除日志类别,保持日志记录配置组织和效率。

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令,为日志类别分配一个日志处理程序:

    /subsystem=logging/logger=LOG_CATEGORY:add-handler(name=LOG_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap
  2. 如果需要,您可以使用以下命令使用 remove 操作来删除日志类别:

    /subsystem=logging/logger=LOG_CATEGORY:remove
    Copy to Clipboard Toggle word wrap
    注意

    当日志记录配置不再需要时,您可以删除日志类别。

10.5. 配置日志处理程序

日志处理程序定义如何记录捕获的日志消息。

请参阅配置特定日志处理器的适当部分:

10.5.1. 配置控制台日志处理程序

您可以使用管理 CLI 在 JBoss EAP 中配置控制台日志处理程序。或者,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,然后选择 Handler > Console Handler

您可以执行以下任务来配置控制台日志处理器:

  • 添加新的控制台日志处理程序
  • 配置控制台日志处理程序设置
  • 将控制台日志处理程序分配给日志记录器
重要

如果您为日志记录配置集配置此日志处理器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令添加控制台日志处理器:

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:add
    Copy to Clipboard Toggle word wrap
  2. 您可以根据您的需要设置一个或多个控制台日志处理器属性:

    • 使用以下命令为处理器设置日志级别:

      /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
      Copy to Clipboard Toggle word wrap

      默认值为 ALL

    • 使用以下命令为处理器设置目标:

      /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=target,value=TARGET)
      Copy to Clipboard Toggle word wrap

      目标可以是 System.outSystem.errconsole。默认为 System.out

    • 使用以下命令,设置处理程序的编码,如 utf-8

      /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
      Copy to Clipboard Toggle word wrap
    • 使用以下命令为处理器设置 formatter 字符串:

      /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
      Copy to Clipboard Toggle word wrap

      例如,默认格式字符串为 %d{HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n。将 FORMAT 值用引号括起来。

      注意
    • 使用以下命令设置自动清除:

      /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
      Copy to Clipboard Toggle word wrap

      指定在每次写入后是否自动清除。默认值为 true

    • 使用以下命令设置过滤器表达式:

      /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)
      Copy to Clipboard Toggle word wrap

      指定表达式来过滤处理程序的日志消息。转义任何逗号和引号,并使用引号括起表达式。例如,将 FILTER_EXPRESSION 变量替换为 "not (match (\"WFLY\") ) ",以创建 not (match ("WFLY")的过滤器表达式

  3. 使用以下命令将控制台日志处理程序分配给日志记录器:

    /subsystem=logging/root-logger=ROOT:add-handler(name=CONSOLE_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap

    要激活日志处理程序,您可以将控制台日志处理程序分配给根日志记录器或任何其他日志记录器。

  4. 如果需要,您可以使用以下命令使用 remove 操作来删除日志处理程序:

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:remove
    Copy to Clipboard Toggle word wrap
    注意

    当日志记录配置不再需要时,您可以删除日志处理程序。但是,如果日志处理程序当前已分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

10.5.2. 配置文件日志处理程序

您可以使用管理 CLI 在 JBoss EAP 中配置文件日志处理程序。或者,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,然后选择 Handler > File Handler

您可以执行以下任务来配置文件日志处理器:

  • 添加新文件日志处理程序
  • 配置文件日志处理程序设置
  • 将文件日志处理程序分配给日志记录器
重要

如果您为日志记录配置集配置此日志处理器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令添加文件日志处理器:

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH})
    Copy to Clipboard Toggle word wrap
    注意

    当您添加文件日志处理程序时,请使用 file 属性指定文件路径,该属性由 pathrelative-to 属性组成。使用 path 属性设置日志文件路径,包括文件名,如 my-log.log。(可选)使用 relative-to 属性来指示路径相对于命名路径,如 jboss.server.log.dir

  2. 您可以根据您的需要设置一个或多个文件日志处理器属性:

    • 使用以下命令为处理器设置日志级别:

      /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
      Copy to Clipboard Toggle word wrap

      默认值为 ALL

    • 使用以下命令为处理器设置附加行为:

      /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=append,value=APPEND)
      Copy to Clipboard Toggle word wrap

      append 属性设置为 false,以在服务器重启时覆盖文件。默认情况下,JBoss EAP 在服务器重启时将日志消息附加到同一文件中。

    • 使用以下命令设置处理程序的编码,如 utf-8

      /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
      Copy to Clipboard Toggle word wrap
    • 使用以下命令为处理器设置 formatter 字符串:

      /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
      Copy to Clipboard Toggle word wrap

      例如,默认格式字符串为 %d{HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n。将 FORMAT 值用引号括起来。

      注意
    • 使用以下命令设置自动清除:

      /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
      Copy to Clipboard Toggle word wrap

      指定在每次写入后是否自动清除。默认值为 true

    • 使用以下命令设置过滤器表达式:

      /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)
      Copy to Clipboard Toggle word wrap

      指定表达式来过滤处理程序的日志消息。转义任何逗号和引号,并使用引号括起表达式。例如,将 FILTER_EXPRESSION 变量替换为 "not (match (\"WFLY\") ) ",以创建 not (match ("WFLY")的过滤器表达式

  3. 使用以下命令将文件日志处理程序分配给日志记录器:

    /subsystem=logging/root-logger=ROOT:add-handler(name=FILE_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap

    若要激活日志处理程序,您可以将文件日志处理程序分配给根日志记录器或任何其他日志记录器。

  4. 使用以下命令,将文件日志处理程序分配给名为 CATEGORY 的特定日志记录器:

    /subsystem=logging/logger=CATEGORY:add-handler(name=FILE_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap

    CATEGORY 替换为您要为其分配文件日志处理程序的日志记录器的名称。

  5. 如果需要,您可以使用以下命令使用 remove 操作来删除日志处理程序:

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:remove
    Copy to Clipboard Toggle word wrap
    注意

    当日志记录配置不再需要时,您可以删除日志处理程序。但是,如果日志处理程序当前已分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

10.5.3. 配置定期轮转日志处理程序

您可以使用管理 CLI 在 JBoss EAP 中配置定期轮转日志处理程序。或者,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,然后选择 Handler > Periodic Handler

您可以执行以下任务来配置定期轮转日志处理器:

  • 添加新的定期轮转日志处理程序
  • 配置定期轮转日志处理程序设置
  • 将定期轮转日志处理程序分配给日志记录器
重要

如果您为日志记录配置集配置此日志处理器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令添加定期轮转日志处理器:

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH},suffix=SUFFIX)
    Copy to Clipboard Toggle word wrap
    注意

    当您添加定期轮转日志处理程序时,请使用 file 属性指定文件路径,该属性由 pathrelative-to 属性组成。使用 path 属性设置日志文件路径,包括文件名,如 my-log.log。(可选)使用 relative-to 属性来指示路径相对于命名路径,如 jboss.server.log.dir

    您必须使用 suffix 属性为轮转日志设置 后缀。后缀必须采用 java.text.SimpleDateFormat 可以理解的格式,如 .yyyy-MM-dd-HH。轮转周期会根据此后缀自动计算。

  2. 您可以根据您的需要设置一个或多个定期轮转日志处理器属性:

    • 使用以下命令为处理器设置日志级别:

      /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
      Copy to Clipboard Toggle word wrap

      默认值为 ALL

    • 使用以下命令为处理器设置附加行为:

      /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=append,value=APPEND)
      Copy to Clipboard Toggle word wrap

      append 属性设置为 false,以在服务器重启时覆盖文件。默认情况下,JBoss EAP 在服务器重启时将日志消息附加到同一文件中。

    • 使用以下命令,设置处理程序的编码,如 utf-8

      /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
      Copy to Clipboard Toggle word wrap
    • 使用以下命令为处理器设置 formatter 字符串:

      /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
      Copy to Clipboard Toggle word wrap

      例如,默认格式字符串为 %d{HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n。将 FORMAT 值用引号括起来。

      注意
    • 使用以下命令设置自动清除:

      /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
      Copy to Clipboard Toggle word wrap

      指定在每次写入后是否自动清除。默认值为 true

    • 使用以下命令设置过滤器表达式:

      /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)
      Copy to Clipboard Toggle word wrap

      指定表达式来过滤处理程序的日志消息。转义任何逗号和引号,并使用引号括起表达式。例如,将 FILTER_EXPRESSION 变量替换为 "not (match (\"WFLY\") ) ",以创建 not (match ("WFLY")的过滤器表达式

  3. 使用以下命令,将定期轮转日志处理器分配给日志记录器:

    /subsystem=logging/root-logger=ROOT:add-handler(name=PERIODIC_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap

    要激活日志处理程序,您可以将定期轮转日志处理程序分配给根日志记录器或任何其他日志记录器。

  4. 如果需要,您可以使用以下命令使用 remove 操作来删除日志处理程序:

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:remove
    Copy to Clipboard Toggle word wrap
    注意

    当日志记录配置不再需要时,您可以删除日志处理程序。但是,如果日志处理程序当前已分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

10.5.4. 配置大小轮转日志处理程序

您可以使用管理 CLI 在 JBoss EAP 中配置大小日志处理程序。或者,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,然后选择 Handler > Size Handler

您可以执行以下任务来配置大小日志处理器:

  • 添加新的大小日志处理程序
  • 配置大小日志处理程序设置
  • 将 size 日志处理程序分配给日志记录器
重要

如果您为日志记录配置集配置此日志处理器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令添加大小日志处理器:

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH})
    Copy to Clipboard Toggle word wrap
    注意

    当您添加大小日志处理程序时,请使用 file 属性指定文件路径,它由 pathrelative-to 属性组成。使用 path 属性设置日志文件路径,包括文件名,如 my-log.log。(可选)使用 relative-to 属性来指示路径相对于命名路径,如 jboss.server.log.dir

  2. 您可以根据您的需要设置一个或多个大小日志处理器属性:

    • 使用以下命令为处理器设置日志级别:

      /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
      Copy to Clipboard Toggle word wrap

      默认值为 ALL

    • 使用以下命令为轮转的日志设置后缀:

      /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=suffix, value=SUFFIX)
      Copy to Clipboard Toggle word wrap
      注意

      如果指定,后缀必须采用 java.text.SimpleDateFormat 可以理解的格式,如 .yyyy-MM-dd-HH。后缀对于 size-rotating-file-handler 是可选的。它表示文件轮转的时间,而不是轮转周期本身。

    • 使用以下命令,设置处理程序的编码,如 utf-8

      /subsystem=logging/size-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
      Copy to Clipboard Toggle word wrap
    • 使用以下命令设置轮转大小:

      /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=rotate-size, value=ROTATE_SIZE)
      Copy to Clipboard Toggle word wrap

      在轮转前设置最大文件大小。默认值为 2m,表示 2MB。

    • 使用以下命令设置要保留的最大备份日志数:

      /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=max-backup-index, value=MAX_BACKUPS)
      Copy to Clipboard Toggle word wrap

      指定要保留的备份数量。默认值为 1

      注意

      根据大小限制而不是后缀进行轮转。如果定义了后缀,则会将其添加到轮转的文件中,但不会删除这些文件。只有在轮转过程中会删除达到大小限制的文件。

    • 使用以下命令设置是否在引导时轮转日志:

      /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=rotate-on-boot, value=ROTATE_ON_BOOT)
      Copy to Clipboard Toggle word wrap

      默认情况下,服务器重启时不会创建新的日志文件。把它设置为 true,以在服务器重启时轮转日志。

    • 使用以下命令为处理器设置附加行为:

      /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=append,value=APPEND)
      Copy to Clipboard Toggle word wrap

      append 属性设置为 false,以在服务器重启时覆盖文件。默认情况下,JBoss EAP 在服务器重启时将日志消息附加到同一文件中。

    • 使用以下命令,设置处理程序的编码,如 utf-8

      /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
      Copy to Clipboard Toggle word wrap
    • 使用以下命令为处理器设置 formatter 字符串:

      /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
      Copy to Clipboard Toggle word wrap

      例如,默认格式字符串为 %d{HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n。将 FORMAT 值用引号括起来。

      注意
    • 使用以下命令设置自动清除:

      /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
      Copy to Clipboard Toggle word wrap

      指定在每次写入后是否自动清除。默认值为 true

    • 使用以下命令设置过滤器表达式:

      /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)
      Copy to Clipboard Toggle word wrap

      指定表达式来过滤处理程序的日志消息。转义任何逗号和引号,并使用引号括起表达式。例如,将 FILTER_EXPRESSION 变量替换为 "not (match (\"WFLY\") ) ",以创建 not (match ("WFLY")的过滤器表达式

  3. 使用以下命令,将大小日志处理程序分配给日志记录器:

    /subsystem=logging/root-logger=ROOT:add-handler(name=SIZE_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap

    要激活日志处理程序,您可以将 size 日志处理程序分配给根日志记录器或任何其他日志记录器。

  4. 如果需要,您可以使用以下命令使用 remove 操作来删除日志处理程序:

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:remove
    Copy to Clipboard Toggle word wrap
    注意

    当日志记录配置不再需要时,您可以删除日志处理程序。但是,如果日志处理程序当前已分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

10.5.5. 配置定期大小轮转日志处理程序

您可以使用管理 CLI 在 JBoss EAP 中配置定期大小轮转日志处理程序。或者,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,然后选择 Handler > Periodic Size Handler

您可以执行以下任务来配置定期大小日志处理器:

  • 添加新的定期大小日志处理程序
  • 配置定期大小日志处理程序设置
  • 将定期大小日志处理程序分配给日志记录器
重要

如果您为日志记录配置集配置此日志处理器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令添加定期大小日志处理器:

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH},suffix=SUFFIX)
    Copy to Clipboard Toggle word wrap
    注意

    当您添加定期大小日志处理程序时,请使用 file 属性指定文件路径,它由 pathrelative-to 属性组成。使用 path 属性设置日志文件路径,包括文件名,如 my-log.log。(可选)使用 relative-to 属性来指示路径相对于命名路径,如 jboss.server.log.dir

    您必须使用 suffix 属性为轮转日志设置 后缀。后缀必须采用 java.text.SimpleDateFormat 可以理解的格式,如 .yyyy-MM-dd-HH。轮转周期会根据此后缀自动计算。

  2. 您可以根据您的需要设置一个或多个定期大小日志处理器属性:

    • 使用以下命令为处理器设置日志级别:

      /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
      Copy to Clipboard Toggle word wrap

      默认值为 ALL

    • 使用以下命令设置轮转大小:

      /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=rotate-size, value=ROTATE_SIZE)
      Copy to Clipboard Toggle word wrap

      在轮转前设置最大文件大小。默认值为 2m,表示 2MB。

    • 使用以下命令设置要保留的最大备份日志数:

      /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=max-backup-index, value=MAX_BACKUPS)
      Copy to Clipboard Toggle word wrap

      指定要保留的备份数量。默认值为 1

      注意

      当由后缀轮转时,轮转的文件不会被删除。只有在轮转过程中会删除轮转时,只有达到大小限制的文件。

    • 使用以下命令设置是否在引导时轮转日志:

      /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=rotate-on-boot, value=ROTATE_ON_BOOT)
      Copy to Clipboard Toggle word wrap

      默认情况下,服务器重启时不会创建新的日志文件。把它设置为 true,以在服务器重启时轮转日志。

    • 使用以下命令为处理器设置附加行为:

      /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=append,value=APPEND)
      Copy to Clipboard Toggle word wrap

      append 属性设置为 false,以在服务器重启时覆盖文件。默认情况下,JBoss EAP 在服务器重启时将日志消息附加到同一文件中。

    • 使用以下命令,设置处理程序的编码,如 utf-8

      /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
      Copy to Clipboard Toggle word wrap
    • 使用以下命令为处理器设置 formatter 字符串:

      /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
      Copy to Clipboard Toggle word wrap

      例如,默认格式字符串为 %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=autoflush,value=AUTO_FLUSH)
      Copy to Clipboard Toggle word wrap

      指定在每次写入后是否自动清除。默认值为 true

    • 使用以下命令设置过滤器表达式:

      /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)
      Copy to Clipboard Toggle word wrap

      指定表达式来过滤处理程序的日志消息。转义任何逗号和引号,并使用引号括起表达式。例如,将 FILTER_EXPRESSION 变量替换为 "not (match (\"WFLY\") ) ",以创建 not (match ("WFLY")的过滤器表达式

  3. 使用以下命令,将定期大小日志处理程序分配给日志记录器:

    /subsystem=logging/root-logger=ROOT:add-handler(name=PERIODIC_SIZE_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap

    要激活日志处理程序,您可以将定期大小日志处理程序分配给根日志记录器或任何其他日志记录器。

  4. 如果需要,您可以使用以下命令使用 remove 操作来删除日志处理程序:

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:remove
    Copy to Clipboard Toggle word wrap
    注意

    当日志记录配置不再需要时,您可以删除日志处理程序。但是,如果日志处理程序当前已分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

10.5.6. 配置 syslog 处理程序

您可以使用管理 CLI 在 JBoss EAP 中配置 syslog 处理程序。此处理程序将消息发送到支持 Syslog 协议的远程日志服务器,可以是 RFC-3164 或 RFC-5424。或者,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,然后选择 Handler > Syslog Handler

您可以执行以下任务来配置 syslog 处理程序:

  • 添加新的 syslog 处理程序
  • 配置 syslog 处理程序设置
  • 将 syslog 处理程序分配给日志记录器
重要

如果您为日志记录配置集配置此日志处理器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令添加 syslog 处理程序:

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:add
    Copy to Clipboard Toggle word wrap
  2. 您可以根据您的需要设置一个或多个 syslog handler 属性:

    • 使用以下命令为处理器设置日志级别:

      /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
      Copy to Clipboard Toggle word wrap

      默认值为 ALL

    • 使用以下命令为日志记录设置应用程序名称:

      /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=app-name,value=APP_NAME)
      Copy to Clipboard Toggle word wrap

      默认应用名称为 java

    • 使用以下命令设置 syslog 服务器的地址:

      /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=server-address,value=SERVER_ADDRESS)
      Copy to Clipboard Toggle word wrap

      默认地址为 localhost

    • 使用以下命令设置 syslog 服务器的端口:

      /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=port,value=PORT)
      Copy to Clipboard Toggle word wrap

      默认端口为 514

    • 使用以下命令,根据 RFC 规格设置 syslog 格式:

      /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=syslog-format,value=SYSLOG_FORMAT)
      Copy to Clipboard Toggle word wrap

      默认格式为 RFC5424

    • 使用以下命令指定 named-formatter 属性来格式化 syslog 有效负载消息:

      /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=named-formatter, value=FORMATTER_NAME)
      Copy to Clipboard Toggle word wrap
  3. 使用以下命令将 syslog 处理程序分配给日志记录器:

    /subsystem=logging/root-logger=ROOT:add-handler(name=SYSLOG_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap

    要激活日志处理程序,您可以将 syslog 处理程序分配给根日志记录器或任何其他日志记录器。

  4. 如果需要,您可以使用以下命令使用 remove 操作来删除日志处理程序:

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:remove
    Copy to Clipboard Toggle word wrap
    注意

    当日志记录配置不再需要时,您可以删除日志处理程序。但是,如果日志处理程序当前已分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

10.5.7. 配置套接字日志处理程序

您可以使用管理 CLI 在 JBoss EAP 中配置套接字日志处理程序。处理程序通过 TCP 或 UDP 套接字发送消息。或者,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,然后选择 Handler > Socket Handler

注意

如果服务器以 admin-only 模式启动,它会丢弃日志消息。

您可以执行以下任务来配置套接字日志处理器:

  • 添加套接字绑定
  • 添加日志格式器
  • 添加套接字日志处理程序
  • 配置设置
  • 将套接字日志处理程序分配给日志记录器
重要

如果您为日志记录配置集配置此日志处理器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令添加套接字绑定:

    /socket-binding-group=SOCKET_BINDING_GROUP/remote-destination-outbound-socket-binding=SOCKET_BINDING_NAME:add(host=HOST, port=PORT)
    Copy to Clipboard Toggle word wrap
    注意

    您可以将 remote-destination-outbound-socket-bindinglocal-destination-outbound-socket-binding 定义为要使用的 套接字绑定

  2. 使用以下命令,添加要使用的 日志格式 器,如 JSON 格式:

    /subsystem=logging/json-formatter=FORMATTER:add
    Copy to Clipboard Toggle word wrap
  3. 使用以下命令指定使用的套接字绑定和格式ter来添加套接字日志处理器:

    /subsystem=logging/socket-handler=SOCKET_HANDLER_NAME:add(outbound-socket-binding-ref=SOCKET_BINDING_NAME,named-formatter=FORMATTER)
    Copy to Clipboard Toggle word wrap
  4. 您可以根据您的需要设置一个或多个套接字日志处理器属性:

    • 使用以下命令设置协议:

      /subsystem=logging/socket-handler=SOCKET_HANDLER_NAME:write-attribute(name=protocol,value=PROTOCOL)
      Copy to Clipboard Toggle word wrap

      默认协议是 TCP

    • 使用以下命令为处理器设置日志级别:

      /subsystem=logging/socket-handler=SOCKET_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
      Copy to Clipboard Toggle word wrap

      默认值为 ALL

      注意

      在服务器启动期间,由套接字日志处理程序处理的日志消息排队,直到配置了套接字绑定并且 logging 子系统已初始化为止。如果日志级别设置为 low,如 TRACEDEBUG,则可能会导致启动期间大量内存消耗。

    • 使用以下命令,设置处理程序的编码,如 utf-8

      /subsystem=logging/socket-handler=SOCKET_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
      Copy to Clipboard Toggle word wrap
    • 使用以下命令设置自动清除:

      /subsystem=logging/socket-handler=SOCKET_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
      Copy to Clipboard Toggle word wrap

      指定在每次写入后是否自动清除。默认值为 true

    • 使用以下命令设置过滤器表达式:

      /subsystem=logging/socket-handler=SOCKET_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)
      Copy to Clipboard Toggle word wrap

      指定表达式来过滤处理程序的日志消息。转义任何逗号和引号,并使用引号括起表达式。例如,将 FILTER_EXPRESSION 变量替换为 "not (match (\"WFLY\") ) ",以创建 not (match ("WFLY")的过滤器表达式

  5. 使用以下命令将套接字日志处理程序分配给日志记录器:

    /subsystem=logging/root-logger=ROOT:add-handler(name=SOCKET_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap

    要激活日志处理程序,您可以将套接字日志处理程序分配给根日志记录器或任何其他日志记录器。

  6. 如果需要,您可以使用以下命令使用 remove 操作来删除套接字日志处理器:

    /subsystem=logging/socket-handler=SOCKET_HANDLER_NAME:remove
    Copy to Clipboard Toggle word wrap
    注意

    当日志记录配置不再需要时,您可以删除日志处理程序。但是,如果日志处理程序当前已分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

10.5.7.1. 通过 SSL/TLS 发送套接字日志消息

您可以设置套接字日志处理程序,以使用 SSL_TCP 协议通过套接字发送日志消息。此设置涉及在 elytron 子系统中配置密钥组件,包括密钥存储、信任管理器和客户端 SSL 上下文。此配置可确保通过指定的套接字从根日志记录器安全地传输日志消息,并且消息由 JSON 格式化。

先决条件

  • JBoss EAP 正在运行。

流程

  1. 按照以下步骤配置 Elytron 设置:

    1. 使用以下命令添加密钥存储:

      /subsystem=elytron/key-store=log-server-ks:add(path=/path/to/keystore.jks, type=JKS, credential-reference={clear-text=mypassword})
      Copy to Clipboard Toggle word wrap
    2. 使用以下命令添加信任管理器:

      /subsystem=elytron/trust-manager=log-server-tm:add(key-store=log-server-ks)
      Copy to Clipboard Toggle word wrap
    3. 使用以下命令添加客户端 SSL 上下文:

      /subsystem=elytron/client-ssl-context=log-server-context:add(trust-manager=log-server-tm, protocols=["TLSv1.2"])
      Copy to Clipboard Toggle word wrap
  2. 使用以下命令添加套接字绑定:

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=log-server:add(host=localhost, port=4560)
    Copy to Clipboard Toggle word wrap
  3. 使用以下命令添加 JSON 格式:

    /subsystem=logging/json-formatter=json:add
    Copy to Clipboard Toggle word wrap
  4. 使用以下命令添加套接字日志处理器:

    /subsystem=logging/socket-handler=log-server-handler:add(named-formatter=json, level=INFO, outbound-socket-binding-ref=log-server, protocol=SSL_TCP, ssl-context=log-server-context)
    Copy to Clipboard Toggle word wrap
  5. 使用以下命令将日志处理程序分配给根日志记录器:

    /subsystem=logging/root-logger=ROOT:add-handler(name=log-server-handler)
    Copy to Clipboard Toggle word wrap

10.5.8. 配置自定义日志处理程序

您可以使用管理 CLI 在 JBoss EAP 中配置自定义日志处理程序。或者,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,然后选择 Handler > Custom Handler

您可以执行以下任务来配置自定义日志处理器:

  • 添加新的自定义日志处理程序
  • 配置自定义日志处理程序设置
  • 将自定义日志处理程序分配给日志记录器
重要

如果您为日志记录配置集配置此日志处理器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令添加自定义日志处理器:

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:add(class=CLASS_NAME,module=MODULE_NAME)
    Copy to Clipboard Toggle word wrap
    注意

    添加自定义日志处理程序时,指定处理程序的 Java 类以及包含它的 JBoss EAP 模块。类必须扩展 java.util.logging.Handler

    确保 您已创建了包含自定义日志记录器的模块,否则此命令将失败。

  2. 您可以根据您的需要设置一个或多个自定义日志处理器属性:

    • 使用以下命令为处理器设置日志级别:

      /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
      Copy to Clipboard Toggle word wrap

      默认值为 ALL

    • 使用以下命令设置日志处理器的属性:

      /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=properties.PROPERTY_NAME,value=PROPERTY_VALUE)
      Copy to Clipboard Toggle word wrap

      属性必须使用 setter 方法访问。

    • 使用以下命令,设置处理程序的编码,如 utf-8

      /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
      Copy to Clipboard Toggle word wrap
    • 使用以下命令为处理器设置 formatter 字符串:

      /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
      Copy to Clipboard Toggle word wrap

      例如,默认格式字符串为 %d{HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n。将 FORMAT 值用引号括起来。

      注意
    • 使用以下命令设置过滤器表达式:

      /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)
      Copy to Clipboard Toggle word wrap

      指定表达式来过滤处理程序的日志消息。转义任何逗号和引号,并使用引号括起表达式。例如,将 FILTER_EXPRESSION 变量替换为 "not (match (\"WFLY\") ) ",以创建 not (match ("WFLY")的过滤器表达式

  3. 使用以下命令将自定义日志处理程序分配给日志记录器:

    /subsystem=logging/root-logger=ROOT:add-handler(name=CUSTOM_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap

    要激活日志处理程序,您可以将处理程序分配给根日志记录器或任何其他日志记录器。

  4. 使用以下命令,将自定义日志处理程序分配给名为 CATEGORY 的特定日志记录器:

    /subsystem=logging/logger=CATEGORY:add-handler(name=CUSTOM_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap

    CATEGORY 替换为您要为其分配自定义日志处理程序的日志记录器的名称。

  5. 如果需要,您可以使用以下命令使用 remove 操作来删除自定义日志处理器:

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:remove
    Copy to Clipboard Toggle word wrap
    注意

    当日志记录配置不再需要时,您可以删除日志处理程序。但是,如果日志处理程序当前已分配给日志记录器或 async 日志处理程序,则无法删除日志处理程序。

10.5.9. 配置 async 日志处理程序

您可以使用管理 CLI 在 JBoss EAP 中配置 async 日志处理程序。或者,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,然后选择 Handler > Async Handler

您可以执行以下任务来配置 async 日志处理器:

  • 添加新的 async 日志处理程序
  • 将子处理程序添加到 async 日志处理程序
  • 配置 async 日志处理程序设置
  • 将 async 日志处理程序分配给日志记录器
重要

如果您为日志记录配置集配置此日志处理器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令添加 async 日志处理器:

    /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:add(queue-length=QUEUE_LENGTH)
    Copy to Clipboard Toggle word wrap
    注意

    当您添加 async 日志处理程序时,请指定队列长度,这是在任何给定时间可以在队列中保留的最大日志请求数。

  2. 使用以下命令添加子处理程序:

    /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:add-handler(name=HANDLER_NAME)
    Copy to Clipboard Toggle word wrap
    注意

    您可以添加一个或多个处理程序,作为此 async 日志处理程序的子处理程序。处理程序必须已存在于配置中,否则此命令将失败。

  3. 您可以根据您的需要设置一个或多个 async 日志处理器属性:

    • 使用以下命令为处理器设置日志级别:

      /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
      Copy to Clipboard Toggle word wrap

      默认值为 ALL

    • 使用以下命令设置 overflow 操作:

      /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:write-attribute(name=overflow-action,value=OVERFLOW_ACTION)
      Copy to Clipboard Toggle word wrap

      默认值为 BLOCK,这意味着如果队列已满,线程将阻止。您可以将此值更改为 DISCARD,这意味着将删除最旧的日志消息,以适应完整队列时的新消息。

    • 使用以下命令设置过滤器表达式:

      /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)
      Copy to Clipboard Toggle word wrap

      指定表达式来过滤处理程序的日志消息。转义任何逗号和引号,并使用引号括起表达式。例如,将 FILTER_EXPRESSION 变量替换为 "not (match (\"WFLY\") ) ",以创建 not (match ("WFLY")的过滤器表达式

  4. 使用以下命令将 async 日志处理器分配给日志记录器:

    /subsystem=logging/root-logger=ROOT:add-handler(name=ASYNC_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap

    要激活日志处理程序,您可以将 async 日志处理程序分配给根日志记录器或任何其他日志记录器。

  5. 如果需要,您可以使用以下命令使用 remove 操作来删除 async 日志处理器:

    /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:remove
    Copy to Clipboard Toggle word wrap
    注意

    当日志记录配置不再需要时,您可以删除日志处理程序。但是,如果日志处理程序当前已分配给日志记录器,则无法移除日志处理程序。

10.6. 配置根日志记录器

根日志记录器捕获指定日志级别或较高发送到日志类别未捕获的服务器的所有日志消息。

您可以使用管理 CLI 在 JBoss EAP 中配置根日志记录器。或者,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,然后选择 Root Logger

重要

如果您为日志记录配置集配置此日志处理器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令将日志处理程序分配给根日志记录器:

    /subsystem=logging/root-logger=ROOT:add-handler(name=LOG_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap
  2. 如果需要,您可以使用以下命令删除 root 处理程序:

    /subsystem=logging/root-logger=ROOT:remove-handler(name=LOG_HANDLER_NAME)
    Copy to Clipboard Toggle word wrap
    注意

    当日志记录配置不再需要时,您可以删除日志处理程序。

  3. 使用以下命令为处理器设置日志级别:

    /subsystem=logging/root-logger=ROOT:write-attribute(name=level,value=LEVEL)
    Copy to Clipboard Toggle word wrap

10.7. 配置日志格式器

日志格式器定义来自处理程序的日志消息的外观。

logging 子系统允许您配置以下类型的日志格式:

10.7.1. 配置模式格式

您可以创建命名的模式格式ter,用于跨日志处理程序来格式化日志消息。

您可以使用管理 CLI 在 JBoss EAP 中配置模式格式化器。另外,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,选择 Formatter,然后选择 Pattern Formatter 选项。

重要

如果您为日志记录配置集配置此日志格式器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令创建模式格式器:

    /subsystem=logging/pattern-formatter=PATTERN_FORMATTER_NAME:add(pattern=PATTERN)
    Copy to Clipboard Toggle word wrap

    在定义模式格式化器时,请提供模式字符串来格式化日志消息。例如,默认配置为服务器日志消息使用以下日志格式字符串: %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n

    Example

    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
    Copy to Clipboard Toggle word wrap

  2. 使用以下命令为模式格式器设置颜色映射:

    /subsystem=logging/pattern-formatter=PATTERN_FORMATTER_NAME:write-attribute(name=color-map,value="LEVEL:COLOR,LEVEL:COLOR")
    Copy to Clipboard Toggle word wrap

    定义颜色映射,为不同的日志级别分配颜色。格式是用逗号分开的 LEVEL 列表:COLOR

    • 有效级别:t、t、t、t、configtracedebuginfowarningwarnerrorfatal严重
    • 有效颜色: 黑色,green,red, blue ,blue,magenta,cyan,white,brightblack, brightgreen,brightblue,brightyellow ,brightmagenta,brightcyan,brightwhite

10.7.2. 配置 JSON 日志格式器

您可以创建一个 JSON 日志格式器来格式化 JSON 中的日志消息。

您可以使用管理 CLI 在 JBoss EAP 中配置 JSON 日志格式ter。另外,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,选择 Formatter,然后选择 JSON Formatter 选项。

重要

如果您为日志记录配置集配置此日志格式器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 添加 JSON 日志格式器。

    Example

    /subsystem=logging/json-formatter=JSON_FORMATTER_NAME:add(pretty-print=true, exception-output-type=formatted)
    Copy to Clipboard Toggle word wrap

    预期输出

    {
        "timestamp": "2018-10-18T13:53:43.031-04:00",
        "sequence": 62,
        "loggerClassName": "org.jboss.as.server.logging.ServerLogger_$logger",
        "loggerName": "org.jboss.as",
        "level": "INFO",
        "message": "WFLYSRV0025: JBoss EAP 8.1.0.GA (WildFly Core 21.0.5.Final-redhat-00001) started in 5227ms - Started 317 of 556 services (343 services are lazy, passive or on-demand),
        "threadName": "Controller Boot Thread",
        "threadId": 22,
        "mdc": {
        },
        "ndc": "",
        "hostName": "localhost.localdomain",
        "processName": "jboss-modules.jar",
        "processId": 7461
    }
    Copy to Clipboard Toggle word wrap

  2. 使用以下命令添加 Logstash JSON 日志格式ter:

    /subsystem=logging/json-formatter=logstash:add(exception-output-type=formatted, key-overrides=[timestamp="@timestamp"], meta-data=[@version=1])
    Copy to Clipboard Toggle word wrap
    注意

    您可以修改 JSON 日志格式化器输出密钥并添加静态元数据。JSON 日志格式器的主要用途是在 JSON 中格式化日志消息。Logstash 会消耗此 JSON 输出并搜索 @timestamp@version 字段。以下示例创建一个 JSON 日志格式器,用于格式化 Logstash 的信息。

    您可以使用 JSON formatter 属性,如下所示:

    • key-overrides 属性覆盖定义的键的名称。
    • 通过将 exception-output-type 属性设置为 formatted 来将例外格式为对象。
    • 通过将 exception-output-type 属性设置为 detailed,包含异常堆栈跟踪。
    • 通过将 exception-output-type 设置为 detailed-and- formatted 来格式化例外作为对象,并包含堆栈跟踪。
    • 使用 meta-data 属性将元数据添加到日志记录中。

10.7.3. 配置 XML 日志格式器

您可以创建一个 XML 日志格式器来格式化 XML 中的日志消息。

您可以使用管理 CLI 在 JBoss EAP 中配置 XML 日志格式ter。另外,您可以通过管理控制台配置它们,方法是导航到 ConfigurationSubsystemsLoggingConfiguration,点 View,选择 Formatter,然后选择 XML Formatter 选项。

重要

如果您为日志记录配置集配置此日志格式器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 添加 XML 日志格式器。

    Example

    /subsystem=logging/xml-formatter=XML_FORMATTER_NAME:add(pretty-print=true, exception-output-type=detailed-and-formatted)
    Copy to Clipboard Toggle word wrap

    预期输出

    <record>
        <timestamp>2018-10-18T13:55:53.419-04:00</timestamp>
        <sequence>62</sequence>
        <loggerClassName>org.jboss.as.server.logging.ServerLogger_$logger</loggerClassName>
        <loggerName>org.jboss.as</loggerName>
        <level>INFO</level>
        <message>WFLYSRV0025: {ProductCurrentVersionExamples} (WildFly Core 10.0.0.Final-redhat-20190924) started in 6271ms - Started 495 of 679 services (331 services are lazy, passive or on-demand)</message>
        <threadName>Controller Boot Thread</threadName>
        <threadId>22</threadId>
        <mdc>
        </mdc>
        <ndc></ndc>
        <hostName>localhost.localdomain</hostName>
        <processName>jboss-modules.jar</processName>
        <processId>7790</processId>
    </record>
    Copy to Clipboard Toggle word wrap

  2. 使用以下命令添加密钥覆盖 XML 日志格式ter:

    /subsystem=logging/xml-formatter=XML_FORMATTER_NAME:add(pretty-print=true, print-namespace=true, namespace-uri="urn:custom:1.0", key-overrides={message=msg, record=logRecord, timestamp=date}, print-details=true)
    Copy to Clipboard Toggle word wrap

    您可以使用 XML formatter 属性,如下所示:

    • key-overrides 属性覆盖定义的键的名称。
    • 通过将 exception-output-type 属性设置为 formatted 来将例外格式为对象。
    • 通过将 exception-output-type 属性设置为 detailed,包含异常堆栈跟踪。
    • 通过将 exception-output-type 设置为 detailed-and- formatted 来格式化例外作为对象,并包含堆栈跟踪。
    • 使用 meta-data 属性将元数据添加到日志记录中。

10.7.4. 配置自定义日志格式器

您可以创建自定义日志格式ter来跨日志处理程序使用,以格式化日志消息。

您可以使用管理 CLI 在 JBoss EAP 中配置自定义日志格式器。另外,您可以通过管理控制台配置它们,导航到 Configuration > Subsystems > Logging > Configuration,点 View,选择 Formatter,然后选择 Custom Formatter 选项。

重要

如果您为日志记录配置集配置此日志格式器,请使用 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 来启动该命令。

另外,如果您在受管域中运行,请在命令前面加上 /profile=PROFILE_NAME

先决条件

  • JBoss EAP 正在运行。
  • 您可以访问管理 CLI。

流程

  1. 使用以下命令添加自定义日志格式ter:

    /subsystem=logging/custom-formatter=CUSTOM_FORMATTER_NAME:add(class=CLASS_NAME, module=MODULE_NAME)
    Copy to Clipboard Toggle word wrap
    注意

    添加自定义日志格式器时,指定 formatter 的 Java 类和包含它的 JBoss EAP 模块。此类必须扩展 java.util.logging.Formatter。确保 您已创建了包含自定义日志记录器的模块,否则此命令将失败。

  2. 使用以下命令设置日志格式器的属性:

    /subsystem=logging/custom-formatter=CUSTOM_FORMATTER_NAME:write-attribute(name=properties.PROPERTY_NAME,value=PROPERTY_VALUE)
    Copy to Clipboard Toggle word wrap

    属性必须使用 setter 方法访问。

  3. 使用以下命令为日志处理器分配自定义格式器:

    /subsystem=logging/periodic-rotating-file-handler=FILE_HANDLER_NAME:write-attribute(name=named-formatter, value=CUSTOM_FORMATTER_NAME)
    Copy to Clipboard Toggle word wrap

    此命令分配由定期轮转文件处理程序使用的自定义格式器。

以下示例配置了自定义 XML 格式。它使用 org.jboss.logmanager 模块中提供的 java.util.logging.XMLFormatter 类,并将其分配给控制台日志处理程序。

Example

/subsystem=logging/custom-formatter=custom-xml-formatter:add(class=java.util.logging.XMLFormatter, module=java.logging)
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=named-formatter, value=custom-xml-formatter)
Copy to Clipboard Toggle word wrap

预期输出

<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>
Copy to Clipboard Toggle word wrap

10.8. 在 JBoss EAP 中配置应用程序日志

您可以使用 JBoss EAP 日志记录子系统 或基于每个 部署的应用配置日志记录logging 子系统提供集中管理,而 每个 部署日志则启用特定于每个应用程序的自定义配置。

10.8.1. 每部署配置的日志配置

通过按部署的日志,开发人员可以提前为其应用程序配置日志记录。部署应用程序时,日志会根据定义的配置启动。通过此配置生成的日志文件仅包含有关应用行为的信息。

注意

使用每部署日志记录时,应用不使用 logging 子系统配置。相反,它使用应用部署文件中定义的日志记录配置。每个应用程序都可以具有自定义日志记录设置,独立于全局配置。

与系统范围的日志记录相比,这种方法具有优缺点。优点是 JBoss EAP 管理员不需要配置服务器日志以外的任何日志。缺点是,每个部署的日志记录配置在服务器启动时只只读,且在运行时无法更改。

10.8.1.1. 禁用每个部署的日志

您可以通过设置 use-deployment-logging-config 属性或排除 logging 子系统来禁用 JBoss EAP 中的每次部署日志记录。

先决条件

  • JBoss EAP 正在运行。

流程

使用以下方法之一禁用每个部署的日志:

  • use-deployment-logging-config 属性设置为 false

    /subsystem=logging:write-attribute(name=use-deployment-logging-config,value=false)
    Copy to Clipboard Toggle word wrap

    use-deployment-logging-config 属性控制您的部署是否针对每个部署日志记录扫描。默认值为 true。把它设置为 false 以禁用每个部署的日志。

  • 使用 jboss-deployment-structure.xml 文件排除 logging 子系统。

10.8.2. 应用程序日志记录配置集

日志记录配置集是您可以分配给部署的应用程序的独立日志记录配置集合。与常规的 logging 子系统一样,日志记录配置集可以定义处理程序、类别、格式器和根日志记录器。但是,它无法引用其他配置集或主 日志记录子系统 中的配置。日志记录配置文件的设计类似于 logging 子系统,以便更轻松地配置。

通过日志记录配置集,管理员可以创建特定于一个或多个应用的日志记录配置,而不影响其他配置。每个配置集在服务器配置中定义,允许更改日志记录设置,而无需重新部署受影响的应用。

每个日志记录配置集都可以有:

  • 唯一的名称。此值是必需的。
  • 任意数量的日志处理程序。
  • 任意数量的日志类别。
  • 最多为一个根日志记录器。
  • 日志格式器.

应用程序可以通过设置 Logging-Profile 属性来指定要在其 MANIFEST.MF 文件中使用的日志记录配置集。

10.8.2.1. 配置日志记录配置集

您可以使用日志处理程序、类别和根日志记录器配置日志记录配置集。配置日志记录配置集的语法与配置 logging 子系统相同,但有以下区别:

  • root 配置路径为 /subsystem=logging/logging-profile=NAME
  • 日志记录配置集不能包含其他日志记录配置集。
  • logging 子系统包括以下属性,它们不适用于日志记录配置集:

    • add-logging-api-dependencies
    • use-deployment-logging-config

您可以使用管理 CLI 在 JBoss EAP 中配置日志配置文件。或者,您可以通过管理控制台配置它们,方法是导航到 Configuration > Subsystems > Logging > Logging > Logging Profiles

先决条件

  • JBoss EAP 正在运行。

流程

  1. 使用以下命令创建日志记录配置集:

    /subsystem=logging/logging-profile=PROFILE_NAME:add
    Copy to Clipboard Toggle word wrap
  2. 使用以下命令添加文件处理器:

    /subsystem=logging/logging-profile=PROFILE_NAME/file-handler=FILE_HANDLER_NAME:add(file={path=>"LOG_NAME.log", "relative-to"=>"jboss.server.log.dir"})
    Copy to Clipboard Toggle word wrap
  3. 使用以下命令为文件处理器设置日志记录级别:

    /subsystem=logging/logging-profile=PROFILE_NAME/file-handler=FILE_HANDLER_NAME:write-attribute(name="level", value="DEBUG")
    Copy to Clipboard Toggle word wrap
  4. 使用以下命令创建日志记录器名称:

    /subsystem=logging/logging-profile=PROFILE_NAME/logger=CATEGORY_NAME:add(level=TRACE)
    Copy to Clipboard Toggle word wrap
  5. 使用以下命令将文件处理程序分配给类别:

    /subsystem=logging/logging-profile=PROFILE_NAME/logger=CATEGORY_NAME:add-handler(name="FILE_HANDLER_NAME")
    Copy to Clipboard Toggle word wrap

然后,您可以在其 MANIFEST.MF 文件中将应用程序设置为使用日志记录配置集。

10.8.2.2. 应用程序日志记录配置集配置示例

本例演示了日志记录配置集的配置和使用它的应用程序。它包括管理 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")
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap

应用程序 MANIFEST.MF 文件

Manifest-Version: 1.0
Logging-Profile: accounts-app-profile
Copy to Clipboard Toggle word wrap

10.8.3. 查看部署日志配置

您可以使用管理 CLI 查看 JBoss EAP 中部署的日志配置。

先决条件

  • JBoss EAP 正在运行。

流程

  1. 使用以下命令检索特定部署的日志记录配置:

    /deployment=DEPLOYMENT_NAME/subsystem=logging/configuration=CONFIG:read-resource
    Copy to Clipboard Toggle word wrap

    CONFIG 值可以是以下之一:

  2. 要显示特定日志记录配置集的配置,请运行以下命令:

    /deployment=mydeployment.war/subsystem=logging/configuration=profile-MYPROFILE:read-resource(recursive=true,include-runtime=true)
    Copy to Clipboard Toggle word wrap

    此命令检索指定部署使用的 MYPROFILE 日志记录配置集的配置。

    预期输出

    {
        "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
        }
    }
    Copy to Clipboard Toggle word wrap

  3. 您还可以执行递归 read-resource 操作来检索整个日志记录配置以及有关部署的其他信息:

    /deployment=DEPLOYMENT_NAME/subsystem=logging:read-resource(include-runtime=true, recursive=true)
    Copy to Clipboard Toggle word wrap

10.9. Logging 子系统性能管理

您可以优化和监控 logging 子系统的性能,以确保有效的日志记录和资源管理。常规监控有助于识别潜在问题,然后再对性能造成影响。

第 11 章 数据源管理

11.1. 关于 JBoss EAP 数据源

关于 JDBC

JDBC API 是定义如何由 Java 应用访问数据库的标准。应用配置引用 JDBC 驱动程序的数据源。然后,可以针对驱动程序编写应用程序代码,而不是数据库。驱动程序将代码转换为数据库语言。这意味着,如果安装了正确的驱动程序,应用程序可以与任何支持的数据库一起使用。

如需更多信息,请参阅 JDBC 规格

支持的数据库

如需 JBoss EAP 8.0 支持的 JDBC 兼容数据库列表,请参阅 JBoss EAP 8.0 支持的配置。

数据源类型

两种通用资源类型称为 数据源和 XA 数据源

非 XA 数据源
用于不使用事务的应用程序,或将事务与单个数据库搭配使用的应用程序。
XA datasources
由使用多个数据库或其他 XA 资源作为一个 XA 事务一部分的应用程序使用。XA datasources 引入了额外的开销。

您可以使用 JBoss EAP 管理接口创建数据源时要使用的数据源类型。

ExampleDS 数据源

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

警告

ExampleDS 数据源和 H2 数据库 不应在生产环境中 使用。这是一个非常小的、自包含的数据源,支持测试和构建应用程序所需的所有标准,但不可靠或可扩展供生产使用。

11.2. JDBC 驱动程序

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

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

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

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

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

  1. 下载 JDBC 驱动程序。

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

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

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

    $ EAP_HOME/bin/jboss-cli.sh
    Copy to Clipboard Toggle word wrap
  4. 使用 module add 管理 CLI 命令添加新的核心模块。

    [disconnected /] module add --name=MODULE_NAME --resources=PATH_TO_JDBC_JAR --dependencies=DEPENDENCIES
    Copy to Clipboard Toggle word wrap

    Example

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

    [disconnected /] module add --name=com.mysql --resources=/path/to/mysql-connector-j-8.0.33.jar --dependencies=jakarta.transaction.api,java.se,wildflyee.api,java.xml,java.xml.crypto,jdk.xml.dom
    Copy to Clipboard Toggle word wrap

    Example

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

    $ EAP_HOME/bin/jboss-cli.sh --command="module add --name=MODULE_NAME --resources=PATH_TO_JDBC_JAR --dependencies=DEPENDENCIES"
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

    使用此命令添加或删除模块的更多详细信息,执行 模块 --help

接下来,您必须注册它作为 JDBC 驱动程序,才能被应用程序数据源引用。

11.2.1.2. 注册 JDBC 驱动程序

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

/subsystem=datasources/jdbc-driver=DRIVER_NAME:add(driver-name=DRIVER_NAME,driver-module-name=MODULE_NAME,driver-xa-datasource-class-name=XA_DATASOURCE_CLASS_NAME, driver-class-name=DRIVER_CLASS_NAME)
Copy to Clipboard Toggle word wrap
注意

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

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

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

在这种情况下,您将传递 driver-class-name=com.mysql.cj.jdbc.Driver

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

/subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-xa-datasource-class-name=com.mysql.cj.jdbc.MysqlXADataSource, driver-class-name=com.mysql.cj.jdbc.Driver)
Copy to Clipboard Toggle word wrap

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

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

使用管理 CLI 或管理控制台,可以将 JDBC 驱动程序安装为 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
    Copy to Clipboard Toggle word wrap
    注意

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

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

    deploy /path/to/mysql-connector-j-8.0.33.jar
    Copy to Clipboard Toggle word wrap

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

    WFLYJCA0018: Started Driver service with driver-name = mysql-connector-j-8.0.33.jar
    Copy to Clipboard Toggle word wrap

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

将 JDBC 驱动程序 JAR 更新为 JDBC 4 兼容

如果 JDBC 驱动程序 JAR 不兼容 JDBC 4,则可通过下列步骤进行可部署资源:

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

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

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

    jar \-uf jdbc-driver.jar META-INF/services/java.sql.Driver
    Copy to Clipboard Toggle word wrap

11.2.3. JDBC 驱动程序下载位置

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

注意

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

Expand
表 11.1. JDBC 驱动程序下载位置
Vendor下载位置

MySQL

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

PostgreSQL

http://jdbc.postgresql.org/

Oracle

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

IBM

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

Sybase

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

Microsoft

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

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

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

警告

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

重要

在使用重新身份验证机制和访问特定供应商的类时,需要这个过程。

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

如果您尚未这样做,请将 JDBC 驱动程序安装为核心模块

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

    例如,以下行将 com.mysql 模块声明为依赖项。

    Dependencies: com.mysql
    Copy to Clipboard Toggle word wrap
使用 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>
    Copy to Clipboard Toggle word wrap

以下示例代码访问 MySQL API。

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

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

11.3. 创建数据源

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

JBoss EAP 8.0 允许您在数据源属性值中使用表达式,如 enabled 属性。

11.3.1. 创建非 XA 数据源

您可以使用管理 CLI 或管理控制台创建非 XA 数据源。

使用管理控制台定义非 XA 数据源
  1. 在单机或域模式中导航到数据源。

    • 在独立模式中使用以下导航:

      ConfigurationSubsystemsDatasources & DriversDatasources

    • 在域模式中使用以下导航:

      configurationProfilesfullDatasources & DriversDatasources

  2. 单击 Add (+)按钮,再选择 Add Datasource
  3. 它打开 Add Datasource 向导,您可以在其中选择数据源类型,然后单击 Next。这会为您的数据库创建一个模板。以下向导页面会预先填充特定于所选数据源的值。这使得数据源创建过程变得简单。
  4. 在完成数据源创建过程前,您可以在 Test Connection 页面中测试您的连接。
  5. 查看详情并点 Finish 创建数据源。
使用管理 CLI 定义非 XA 数据源

非 XA 数据源可以使用 data-source add management CLI 命令来定义。

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

    data-source add --name=DATASOURCE_NAME --jndi-name=JNDI_NAME --driver-name=DRIVER_NAME --connection-url=CONNECTION_URL --user-name=USER_NAME --password=PASSWORD
    Copy to Clipboard Toggle word wrap
    注意

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

    有关这些参数值的提示,请参见以下的 Datasource 参数 部分。

有关详细 示例,请参阅支持的数据库 的数据源配置示例。

数据源参数
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.cj.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.cj.jdbc.Driver_5_1
    Copy to Clipboard Toggle word wrap
connection-url
有关支持的数据库的连接 URL 格式的详情,请查看 Datasource Connection URL 列表。

有关所有可用数据源属性的完整列表,请参阅 Datasource Attributes 部分。

user-name
创建新数据源连接时要使用的用户名。
password
创建新数据源连接时要使用的密码。

11.3.2. 创建 XA 数据源

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

使用管理控制台定义 XA 数据源
  1. 在单机或域模式中导航到数据源。

    • 在独立模式中使用以下导航:

      ConfigurationSubsystemsDatasources & DriversDatasources

    • 在域模式中使用以下导航:

      configurationProfilesfullDatasources & DriversDatasources

  2. 单击添加(+)按钮,再选择 Add XA Datasource
  3. 它打开 Add XA Datasource 向导,您可以在其中选择数据源类型,然后单击 Next。这会为您的数据库创建一个模板。以下向导页面会预先填充特定于所选数据源的值。这使得数据源创建过程变得简单。
  4. 在完成数据源创建过程前,您可以在 Test Connection 页面中测试您的连接。
  5. 查看详情并点 Finish 创建数据源。
使用管理 CLI 定义 XA 数据源

XA 数据源可以使用 xa-data-source add management CLI 命令来定义。

注意

在受管域中,您将需要指定要使用的配置文件。根据管理 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"=>"HOST_NAME","DatabaseName"=>"DATABASE_NAME"}
    Copy to Clipboard Toggle word wrap

    有关这些参数值的提示,请参见以下的 Datasource 参数 部分。

  3. 设置 XA 数据源属性

    在定义 XA 数据源时,至少需要一个 XA 数据源属性,或者在上一步中添加数据源时收到错误。定义 XA 数据源时未设置的任何属性都可以单独设置。

    1. 设置服务器名称。

      /subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME/xa-datasource-properties=ServerName:add(value=HOST_NAME)
      Copy to Clipboard Toggle word wrap
    2. 设置数据库名称。

      /subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME/xa-datasource-properties=DatabaseName:add(value=DATABASE_NAME)
      Copy to Clipboard Toggle word wrap

有关详细 示例,请参阅支持的数据库 的数据源配置示例。

数据源参数
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.mysql.j.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.cj.jdbc.Driver_5_1
    Copy to Clipboard Toggle word wrap
xa-datasource-class
jakarta.sql.XADataSource 类的 JDBC 驱动程序实现指定 XA 数据源类。
xa-datasource-properties
在定义 XA 数据源时,至少需要一个 XA 数据源属性,或者在尝试添加它时收到错误。在定义后,也可以向 XA 数据源添加其他属性。

有关所有可用数据源属性的完整列表,请参阅 Datasource Attributes 部分。

11.4. 修改数据源

数据源设置可以使用管理控制台或管理 CLI 进行配置。

JBoss EAP 8.0 允许您在数据源属性值中使用表达式,如 enabled 属性。

11.4.1. 修改非 XA 数据源

可以使用数据源管理 CLI 命令更新非 XA 数据源 设置。您还可以在独立或域模式中从管理控制台更新 数据源 属性:

  • 在单机模式中,导航到 ConfigurationSubsystemsDatasources & DriversDatasources
  • 在域模式中,导航到 ConfigurationProfilesfullDatasources & DriversDatasources
注意

非 XA 数据源可以与 Jakarta 交易事务集成。要将数据源与 Jakarta 交易集成,请确保 jta 参数设置为 true

更新数据源设置的示例

可以通过以下管理 CLI 命令更新数据源的设置:

data-source --name=DATASOURCE_NAME --ATTRIBUTE_NAME=ATTRIBUTE_VALUE
Copy to Clipboard Toggle word wrap
注意

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

可能需要重新加载服务器才能使更改生效。

11.4.2. 修改 XA 数据源

XA 数据源设置可使用 xa-data-source 管理 CLI 命令更新。您还可以在独立或域模式中从管理控制台更新 数据源 属性:

  • 在单机模式中,导航到 ConfigurationSubsystemsDatasources & DriversDatasources
  • 在域模式中,导航到 ConfigurationProfilesfullDatasources & DriversDatasources

更新 XA 数据源示例

  • 可以使用以下管理 CLI 命令更新 XA 数据源的设置:

    xa-data-source --name=XA_DATASOURCE_NAME --ATTRIBUTE_NAME=ATTRIBUTE_VALUE
    Copy to Clipboard Toggle word wrap
    注意

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

添加 XA 数据源属性示例

  • 可以使用以下管理 CLI 命令添加 XA 数据源属性

    /subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME/xa-datasource-properties=PROPERTY:add(value=VALUE)
    Copy to Clipboard Toggle word wrap
    注意

    在受管域中,您必须在此命令前加上 /profile=PROFILE_NAME

可能需要重新加载服务器才能使更改生效。

11.5. 删除数据源

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

11.5.1. 删除非 XA 数据源

可以使用 data-source remove management CLI 命令删除非 XA 数据源。您还可以在独立或域模式中使用管理控制台删除数据源:

  • 在单机模式中,导航到 ConfigurationSubsystemsDatasources & DriversDatasources
  • 在域模式中,导航到 ConfigurationProfilesfullDatasources & DriversDatasources

使用以下命令删除非 XA 数据源:

data-source remove --name=DATASOURCE_NAME
Copy to Clipboard Toggle word wrap
注意

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

在数据源被删除后,服务器将需要重新加载。

11.5.2. 删除 XA 数据源

可以使用 xa-data-source remove management CLI 命令删除 XA 数据源。您还可以在独立或域模式中使用管理控制台删除数据源:

  • 在单机模式中,导航到 ConfigurationSubsystemsDatasources & DriversDatasources
  • 在域模式中,导航到 ConfigurationProfilesfullDatasources & DriversDatasources

使用以下命令删除 XA 数据源:

xa-data-source remove --name=XA_DATASOURCE_NAME
Copy to Clipboard Toggle word wrap
注意

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

在 XA 数据源移除后,服务器将需要重新加载。

11.6. 测试数据源连接

您可以使用管理 CLI 或管理控制台测试数据源连接,以验证其设置是否正确。

使用管理 CLI 测试数据源连接

以下管理 CLI 命令可用于测试数据源的连接:

/subsystem=datasources/data-source=DATASOURCE_NAME:test-connection-in-pool
Copy to Clipboard Toggle word wrap
注意

在受管域中,您必须在此命令之前加上 /host=HOST_NAME/server=SERVER_NAME。如果您要测试 XA 数据源,请将 data-source=DATASOURCE_NAME 替换为 xa-data-source=XA_DATASOURCE_NAME

使用管理控制台测试数据源连接

在管理控制台中使用 Add Datasource 向导时,您有机会在创建数据源之前测试连接。在向导的 Test Connection 屏幕中,单击 Test Connection 按钮。

添加数据源时,您可以按照以下流程测试连接:

  1. 在独立模式中导航到 ConfigurationSubsystemsDatasources & DriversDatasourcesConfigurationProfilesfullDatasources & DriversDatasources
  2. 选择数据源。
  3. 从下拉列表中选择 Test Connection

11.7. 清空数据源连接

您可以使用以下管理 CLI 命令清除数据源连接。

注意

在受管域中,您必须在这些命令前加上 /host=HOST_NAME/server=SERVER_NAME

  • 刷新池中的所有连接。

    /subsystem=datasources/data-source=DATASOURCE_NAME:flush-all-connection-in-pool
    Copy to Clipboard Toggle word wrap
  • 安全地清除池中的所有连接。

    /subsystem=datasources/data-source=DATASOURCE_NAME:flush-gracefully-connection-in-pool
    Copy to Clipboard Toggle word wrap

    服务器将等待连接变为空闲状态,然后再清空它们。

  • 刷新池中所有闲置连接。

    /subsystem=datasources/data-source=DATASOURCE_NAME:flush-idle-connection-in-pool
    Copy to Clipboard Toggle word wrap
  • 刷新池中所有无效连接。

    /subsystem=datasources/data-source=DATASOURCE_NAME:flush-invalid-connection-in-pool
    Copy to Clipboard Toggle word wrap

    服务器将刷新它决定无效的所有连接,例如,通过 valid-connection-checker-class-namecheck-valid-connection-sql 验证机制在 Database Connection Validation 中讨论。

您还可以使用管理控制台清除连接。在 Runtime 选项卡中,选择服务器,选择 Datasources,选择数据源,然后使用下拉菜单来选择适当的操作。

11.8. XA 数据源恢复

XA 数据源是可以参与 XA 全局事务的数据源,由事务管理器协调,并可跨越单个事务中的多个资源。如果其中一个参与者无法提交更改,其他参与者将中止事务并在交易发生前恢复其状态。这是为了保持一致性,避免潜在的数据丢失或损坏。

XA 恢复是确保受事务影响的所有资源都已更新或回滚的过程,即使有任何资源或交易参与者崩溃或不可用。XA 恢复在没有用户干预的情况下发生。

每个 XA 资源都需要有一个与其配置关联的恢复模块。恢复模块是在执行恢复时执行的代码。JBoss EAP 自动注册 JDBC XA 资源的恢复模块。如果要实施自定义恢复代码,您可以将自定义模块注册到 XA 数据源。恢复模块必须扩展类 com.arjuna.ats.jta.recovery.XAResourceRecovery

11.8.1. 配置 XA 恢复

对于大多数 JDBC 资源,恢复模块将自动与该资源关联。在这些情况下,您只需要配置允许恢复模块连接到资源执行恢复的选项。

下表描述了特定于 XA 恢复的 XA 数据源参数。这些配置属性可在数据源创建或之后设置。您可以使用管理控制台或管理 CLI 设置它们。有关配置 XA 数据源的信息,请参阅修改 XA 数据源。

Expand
表 11.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)
Copy to Clipboard Toggle word wrap

11.8.2. 特定于供应商的 XA 恢复

特定于供应商的配置

有些数据库需要特定的配置,才能协调由 JBoss EAP 事务管理器管理的 XA 事务。有关详细信息和最新信息,请参阅您的数据库供应商文档。

MySQL
不需要特殊配置。如需更多信息,请参阅 MySQL 文档。
注意

为了自动化 XA 恢复,MySQL 8 及更高版本需要特殊配置。如需更多信息,请参阅 JBoss EAP 8.0 支持的配置

PostgreSQL 和 Postgres Plus Advanced Server
要使 PostgreSQL 能够处理 XA 事务,请将配置参数 max_prepared_transactions 改为一个大于 0 的值,并等于或大于 max_connections
Oracle

确保 Oracle 用户 USER 可以访问恢复所需的表。

GRANT SELECT ON sys.dba_pending_transactions TO USER;
GRANT SELECT ON sys.pending_trans$ TO USER;
GRANT SELECT ON sys.dba_2pc_pending TO USER;
GRANT EXECUTE ON sys.dbms_xa TO USER;
Copy to Clipboard Toggle word wrap

如果 Oracle 用户没有正确的权限,您可能会看到类似如下的错误:

WARN [com.arjuna.ats.jta.logging.loggerI18N] [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery got XA exception jakarta.transaction.xa.XAException, XAException.XAER_RMERR
Copy to Clipboard Toggle word wrap
Microsoft SQL Server
如需更多信息,请参阅 Microsoft SQL Server 文档,包括 了解 XA 事务
IBM DB2
不需要特殊配置。如需更多信息,请参阅 IBM DB2 文档。
Sybase

Sybase 预期在数据库上启用 XA 事务。如果没有正确的数据库配置,XA 事务将无法正常工作。enable xact coordination 参数启用或禁用 Adaptive Server transaction 协调服务。启用此参数后,Astaptive Server 确保更新远程 Adaptive Server 数据提交,或使用原始事务回滚。

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

sp_configure 'enable xact coordination', 1
Copy to Clipboard Toggle word wrap
MariaDB
不需要特殊配置。如需更多信息,请参阅 MariaDB 文档。
已知问题

处理 XA 事务的这些已知问题适用于特定的数据库和 JBoss EAP 8.0 支持的 JDBC 驱动程序版本。有关支持的数据库的最新信息,请参阅 JBoss EAP 8.0 支持的配置

MySQL
MySQL 无法完全能够处理 XA 事务。如果客户端与 MySQL 断开连接,则有关此类事务的所有信息都将丢失。如需更多信息,请参阅此 MySQL 错误。请注意,这个问题已在 MySQL 5.7 中解决。
PostgreSQL 和 Postgres Plus Advanced Server

当网络故障在双阶段提交(2PC)的提交阶段发生时,JDBC 驱动程序会返回 XAER_RMERR XAException 错误代码。这个错误向事务管理器发送不可恢复的灾难事件,但事务在数据库端处于 in-doubt 状态,并可在再次建立网络连接后轻松纠正。正确的返回代码应为 XAER_RMFAILXAER_RETRY。错误错误的错误代码会导致事务在 JBoss EAP 端处于 Heuristic 状态,并在数据库中保存锁定,这需要人工干预。如需更多信息,请参阅 这个 PostgreSQL 错误

如果使用单阶段提交优化,如果连接失败,则 JDBC 驱动程序会返回 XAER_RMERR,但应返回 XAER_RMFAIL 错误代码。如果在一次阶段提交期间数据库提交数据,且连接在此时停机,则这可能会导致数据不一致,然后通知客户端被回滚。

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

Oracle

当恢复管理器使用配置了某些用户凭证的数据源调用恢复时,JDBC 驱动程序会返回属于数据库实例上的所有用户的 XID。JDBC 驱动程序会抛出异常 ORA-24774: 无法切换到指定的事务,因为它尝试恢复属于其他用户的 XID。

这个问题的解决方法是,为在恢复数据源配置中使用凭证的用户授予 FORCE ANY TRANSACTION 特权。有关配置特权的更多信息,请参阅 手动覆盖 in-doubt 事务

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 错误代码。如果在一次阶段提交期间数据库提交数据,且连接在此时停机,则这可能会导致数据不一致,然后通知客户端被回滚。

如果包含插入到 Sybase 15.7 或 16 数据库的 XA 事务在 Sybase 事务分支处于准备状态之前失败,则重复 XA 事务,并插入具有相同主密钥的相同记录会失败,并显示 com.sybase.jdbc4.jdbc.SybSQLException: Attempt to insert duplicate key 行 错误。这个异常会被抛出,直到回滚原始未完成 Sybase 事务分支。

MariaDB
MariaDB 无法完全能够处理 XA 事务。如果客户端与 MariaDB 断开连接,则有关此类事务的所有信息都将丢失。
MariaDB Galera 集群
MariaDB Galera 集群 不支持 XA 事务。

11.9. 数据库连接验证

数据库维护、网络问题或其他中断事件可能会导致 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 语句。

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

    select 1 from dual
    Copy to Clipboard Toggle word wrap

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

    select 1
    Copy to Clipboard Toggle word wrap
  3. 设置异常分类器类名称。

    当异常标记为致命时,连接会立即关闭,即使连接参与事务。使用 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

11.10. 数据源安全性

数据源安全性指的是为数据源连接加密或模糊密码。这些密码可以在配置文件中以纯文本形式存储,但这代表存在安全风险。

您可以使用几种方法进行数据源安全性。以下是每个选项的示例。

使用安全域保护数据源

使用以下步骤通过安全域保护数据源:

  1. 创建新安全域。

    /subsystem=security/security-domain=DsRealm:add(cache-type=default)
    /subsystem=security/security-domain=DsRealm/authentication=classic:add(login-modules=[{code=ConfiguredIdentity,flag=required,module-options={userName=sa,
    principal=sa, password=sa}}])
    Copy to Clipboard Toggle word wrap

    定义了数据源的安全域。以下 XML 提取是调用 CLI 命令的结果。

     <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>
    Copy to Clipboard Toggle word wrap
  2. 添加新数据源。

    data-source add --name=securityDs
    --jndi-name=java:jboss/datasources/securityDs
    --connection-url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 --driver-name=h2
    --new-connection-sql="select current_user()"
    Copy to Clipboard Toggle word wrap
  3. 在数据源上设置安全域。

    data-source --name=securityDs --security-domain=DsRealm
    Copy to Clipboard Toggle word wrap
  4. 重新加载服务器,使更改生效。

    reload
    Copy to Clipboard Toggle word wrap
注意

如果您使用带有多个数据源的安全域,请在安全域中禁用缓存。这可以通过将 cache-type 属性的值设置为 none 来实现;但是,如果需要缓存,请对每个数据源使用单独的安全域。

以下 XML 提取显示了使用 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>
Copy to Clipboard Toggle word wrap

有关使用安全域的更多信息,请参阅 如何配置身份管理

使用密码库保护数据源

使用以下步骤,使用密码 vault 保护数据源:

  1. 为 ExampleDS 数据源设置密码库。

    data-source --name=ExampleDS
    --password=${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}
    Copy to Clipboard Toggle word wrap
  2. 重新加载服务器以实施更改。

    reload
    Copy to Clipboard Toggle word wrap

以下 XML 安全元素添加到使用密码 vault 保护的 ExampleDS 数据源。

<security>
  <user-name>admin</user-name>
  <password>${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}</password>
</security>
Copy to Clipboard Toggle word wrap

有关使用 Password Vault 的更多信息,请参阅 JBoss EAP 如何配置服务器安全 指南中的 Password Vault 部分。

使用凭证存储保护数据源

您还可以使用凭证存储来提供密码。elytron 子系统提供创建凭据存储的功能,以安全地内部使用您的密码,在整个 JBoss EAP 中使用您的密码。您可以在 JBoss EAP 如何配置服务器安全指南Credential Store 部分中找到关于创建和使用凭据存储的更多详细信息。

为 ExampleDS 添加凭证存储引用

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=credential-reference,value={store=exampleCS, alias=example-ds-pw})
Copy to Clipboard Toggle word wrap

使用身份验证上下文保护数据源

您还可以使用 Elytron 身份验证上下文提供用户名和密码。

使用以下步骤为数据源安全性配置和使用身份验证上下文。

  1. 删除 passworduser-name

    /subsystem=datasources/data-source=ExampleDS:undefine-attribute(name=password)
    /subsystem=datasources/data-source=ExampleDS:undefine-attribute(name=user-name)
    Copy to Clipboard Toggle word wrap
  2. 为数据源启用 Elytron 安全性。

    /subsystem=datasources/data-source=ExampleDS:write-attribute(name=elytron-enabled,value=true)
    
    reload
    Copy to Clipboard Toggle word wrap
  3. 为您的凭证创建 authentication-configuration

    身份验证配置包含您要数据源在建立连接时使用的凭证。以下示例使用对凭证存储的引用,但也可以使用 Elytron 安全域。

    /subsystem=elytron/authentication-configuration=exampleAuthConfig:add(authentication-name=sa,credential-reference={clear-text=sa})
    Copy to Clipboard Toggle word wrap
  4. 创建 authentication-context

    /subsystem=elytron/authentication-context=exampleAuthContext:add(match-rules=[{authentication-configuration=exampleAuthConfig}])
    Copy to Clipboard Toggle word wrap
  5. 更新数据源以使用身份验证上下文。

    以下示例更新了 ExampleDS 以使用身份验证上下文。

    /subsystem=datasources/data-source=ExampleDS:write-attribute(name=authentication-context,value=exampleAuthContext)
    
    reload
    Copy to Clipboard Toggle word wrap
    注意

    如果没有设置 authentication-context 属性,并且 elytron-enabled 属性设置为 true,JBoss EAP 将使用当前上下文进行身份验证。

使用 Kerberos 保护数据源

要使用 kerberos 身份验证保护数据源,需要以下配置:

  • Kerberos 在数据库服务器上配置。
  • JBoss EAP 主机服务器具有数据库服务器的 keytab 条目。

使用 kerberos 保护数据源:

  1. 将 JBoss EAP 配置为使用 kerberos。

    /system-property=java.security.krb5.conf:add(value="/path/to/krb5.conf")
    /system-property=sun.security.krb5.debug:add(value="false")
    /system-property=sun.security.spnego.debug:add(value="false")
    Copy to Clipboard Toggle word wrap

    对于调试,请将 sun.security.krb5.debugsun.security.spnego.debug 的值改为 true。在生产环境中,建议将值设置为 false

  2. 配置安全性。

    您可以使用旧的安全或 Elytron 安全性来保护数据源。

    • 使用带有旧安全的 kerberos :

      1. 配置 infinispan 缓存,以定期从缓存中删除过期的票据。

        batch
        /subsystem=infinispan/cache-container=security:add(default-cache=auth-cache)
        /subsystem=infinispan/cache-container=security/local-cache=auth-cache:add()
        /subsystem=infinispan/cache-container=security/local-cache=auth-cache/expiration=EXPIRATION:add(lifespan=3540000,max-idle=3540000)
        /subsystem=infinispan/cache-container=security/local-cache=auth-cache/memory=object:add(size=1000)
        run-batch
        Copy to Clipboard Toggle word wrap

        以下属性定义票据过期:

        • Lifespan : 间隔(以毫秒为单位)从 KDC 请求新证书。将 lifespan 属性的值设置为 仅小于 KDC 定义的生命周期。
        • max-idle: Interval,以毫秒为单位,如果不使用有效票据,则应从缓存中删除有效的票据。
        • max-entries :在缓存中保留的最大 kerberos 票据副本数。该值对应于数据源中配置的连接数量。
      2. 创建安全域。

        batch
        /subsystem=security/security-domain=KerberosDatabase:add(cache-type=infinispan)
        /subsystem=security/security-domain=KerberosDatabase/authentication=classic:add
        /subsystem=security/security-domain=KerberosDatabase/authentication=classic/login-module="KerberosDatabase-Module":add(code="org.jboss.security.negotiation.KerberosLoginModule",module="org.jboss.security.negotiation",flag=required, module-options={ "debug" => "false", "storeKey" => "false", "useKeyTab" => "true", "keyTab" => "/path/to/eap.keytab", "principal" => "PRINCIPAL@SERVER.COM", "doNotPrompt" => "true", "refreshKrb5Config" => "true", "isInitiator" => "true", "addGSSCredential" => "true", "credentialLifetime" => "-1"})
        run-batch
        Copy to Clipboard Toggle word wrap
        • 将 Microsoft JDBC 驱动程序用于 SQL 服务器时,在 module-options 中添加属性和值 "wrapGSSCredential" appear "true "。
        • 要进行调试,请将 module-options 中的 debug 属性的值更改为 true
    • 在 Elytron 中使用 kerberos :

      1. 在 Elytron 中设置 kerberos 工厂。

        /subsystem=elytron/kerberos-security-factory=krbsf:add(debug=false, principal=PRINCIPAL@SERVER.COM, path=/path/to/keytab, request-lifetime=-1, obtain-kerberos-ticket=true, server=false)
        Copy to Clipboard Toggle word wrap
      2. 创建身份验证配置以使用 kerberos 工厂。

        /subsystem=elytron/authentication-configuration=kerberos-conf:add(kerberos-security-factory=krbsf)
        Copy to Clipboard Toggle word wrap
      3. 创建身份验证上下文。

        /subsystem=elytron/authentication-context=ds-context:add(match-rules=[{authentication-configuration=kerberos-conf}])
        Copy to Clipboard Toggle word wrap
  3. 使用 kerberos 保护数据源.

    • 如果使用 Elytron:

      1. 将数据源配置为使用身份验证上下文。

        /subsystem=datasources/data-source=KerberosDS:add(connection-url="URL", min-pool-size=0, max-pool-size=10, jndi-name="java:jboss/datasource/KerberosDS", driver-name=<jdbc-driver>.jar, elytron-enabled=true, authentication-context=ds-context, allow-multiple-users=false, pool-prefill=false, pool-use-strict-min=false, idle-timeout-minutes=2)
        Copy to Clipboard Toggle word wrap
      2. 配置特定于供应商的连接属性。

        /subsystem=datasources/data-source=KerberosDS/connection-properties=<connection-property-name>:add(value="(<kerberos-value>)")
        Copy to Clipboard Toggle word wrap

        示例: Oracle 数据库的连接属性

        /subsystem=datasources/data-source=KerberosDS/connection-properties=oracle.net.authentication_services:add(value="(KERBEROS5)")
        Copy to Clipboard Toggle word wrap

      使用 kerberos 身份验证时,建议在数据源中使用以下属性和值:

      • pool-prefill=false
      • pool-use-strict-min=false
      • idle-timeout-minutes

    有关支持的属性列表,请参阅 数据源属性

11.11. 数据源统计

为数据源 启用 统计集合后,您可以查看数据源的运行时统计信息

11.11.1. 启用数据源统计信息

默认情况下不启用 数据源统计信息。您可以使用管理 CLI 或管理控制台启用数据源统计集合。???

11.11.1.1. 使用管理 CLI 启用数据源统计信息

以下管理 CLI 命令启用 ExampleDS 数据源的统计信息集合。

注意

在受管域中,在此命令前加上 /profile=PROFILE_NAME

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=statistics-enabled,value=true)
Copy to Clipboard Toggle word wrap

重新加载服务器,使更改生效。

11.11.1.2. 使用管理控制台启用数据源统计信息

使用以下步骤,通过管理控制台为数据源启用统计数据集合。

流程

  1. 在单机或域模式中导航到数据源。

    • 在独立模式中使用以下导航:

      ConfigurationSubsystemsDatasources & DriversDatasources

    • 在域模式中使用以下导航:

      configurationProfilesfullDatasources & DriversDatasources

  2. 选择数据源,再单击 View
  3. 单击 Attributes 选项卡下的 Edit
  4. Statistics Enabled 字段设置为 ON,然后单击 Save。此时会出现一个弹出窗口,表示更改需要重新加载才能生效。
  5. 重新加载服务器。

    • 对于单机服务器,单击弹出窗口中的 Reload 链接以重新加载服务器。
    • 对于受管域,点弹出窗口中的 Topology 链接。在 Topology 选项卡中,选择适当的服务器并选择 Reload drop down 选项以重新加载服务器。

11.11.2. 查看数据源统计信息

您可以使用管理 CLI 或管理控制台查看数据源的运行时统计信息。???

11.11.2.1. 使用管理 CLI 查看数据源统计信息

以下管理 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,
        ...
}
Copy to Clipboard Toggle word wrap

以下管理 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
    }
}
Copy to Clipboard Toggle word wrap
注意
Since statistics are runtime information, be sure to specify the `include-runtime=true` argument.
Copy to Clipboard Toggle word wrap

有关所有可用统计的详细列表,请参阅 Datasource Statistics

11.11.2.2. 使用管理控制台查看数据源统计信息

要从管理控制台查看数据源统计信息,请导航到 Runtime 选项卡中的 Datasources 子系统,选择数据源,然后单击 View

有关所有可用统计的详细列表,请参阅 Datasource Statistics

11.12. 数据源调整

有关监控 datasources 子系统性能的提示,请参阅 JBoss EAP 性能调整的 Datasource 和 Resource Adapter Tuning 部分。

11.13. 容量策略

JBoss EAP 支持为 Jakarta Connectors 部署定义容量策略,包括数据源。容量策略定义了如何创建池的物理连接,称为容量递增和销毁,称为容量减少。默认策略设置为为每个请求创建一个容量递增的连接,并在为容量减少调度空闲超时时销毁所有连接。

要配置容量策略,您需要指定容量递增类、容量减少类或两者。

示例:定义容量策略

/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")
Copy to Clipboard Toggle word wrap

您还可以配置指定容量递增或减少类的属性。

示例:为容量策略配置属性

/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)
Copy to Clipboard Toggle word wrap

MaxPoolSize incrementer 策略

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

MaxPoolSize incrementer 策略会将池填充到每个请求的最大值中。当您要保持所有可用连接的最大数量时,此策略很有用。

大小递增策略

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

Size incrementer 策略将根据每个请求的指定连接数填充池。当您要递增每个请求时,这个策略很有用,因为下一个请求还需要连接。

Expand
表 11.3. 大小策略属性
Name描述

Size

应该创建的连接数

注意

这是默认的递增策略,大小为 1。

watermark incrementer 策略

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

Watermark 递增程序策略会将池填充到每个请求的指定连接数。当您希望始终在池中保留指定数量的连接时,此策略很有用。

Expand
表 11.4. watermark 策略属性
Name描述

watermark

连接数的水位线级别

MinPoolSize decrementer 策略

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

MinPoolSize decrementer 策略会将池减少到每个请求的最小大小。当您要限制每个闲置超时请求后的连接数量时,此策略很有用。该池将以 First Out (FIFO)的方式运行。

大小减少器策略

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

Size decrementer 策略会减少每个空闲超时请求的指定连接数的池。

Expand
表 11.5. 大小策略属性
Name描述

Size

应该销毁的连接数量

当您要减少每个闲置超时请求的附加数量时,此策略很有用,因为池使用量会随时间减少。

该池将以 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 策略将删除每个空闲超时请求池中超时的所有连接。该池将以 First Out (FIFO)的方式运行。

watermark decrementer 策略

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

Watermark decrementer 策略会将池减少到每个空闲超时请求的指定连接数。当您希望始终在池中保留指定数量的连接时,此策略很有用。该池将以 First Out (FIFO)的方式运行。

Expand
表 11.6. watermark 策略属性
Name描述

watermark

连接数的水位线级别

11.14. 已列出追踪

可记录列表追踪以帮助查找 XAResource 实例列表期间发生的错误情况。启用跟踪后,jca 子系统会为每个池操作创建一个例外对象,以便在需要时生成准确的堆栈跟踪;但是,这会产生性能开销。

自 JBoss EAP 7.1 起,默认禁用ing tracing。您可以通过将 enlistment-trace 属性设置为 true,使用管理 CLI 为数据源启用包含跟踪记录。

为非 XA 数据源启用追踪

data-source --name=DATASOURCE_NAME --enlistment-trace=true
Copy to Clipboard Toggle word wrap

为 XA 数据源启用追踪

xa-data-source --name=XA_DATASOURCE_NAME --enlistment-trace=true
Copy to Clipboard Toggle word wrap

警告

启用列表追踪可能会导致性能影响。

11.15. 数据源配置示例

11.15.1. MySQL 数据源示例

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

示例:MySQL 数据源配置
<datasources>
  <datasource jndi-name="java:jboss/MySqlDS" pool-name="MySqlDS">
    <connection-url>jdbc:mysql://localhost:3306/jbossdb</connection-url>
    <driver>mysql</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="mysql" module="com.mysql">
      <driver-class>com.mysql.cj.jdbc.Driver</driver-class>
      <xa-datasource-class>com.mysql.cj.jdbc.MysqlXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Copy to Clipboard Toggle word wrap
示例:MySQL JDBC 驱动程序 module.xml 文件
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="com.mysql">
  <resources>
    <resource-root path="mysql-connector-j-8.0.33.jar"/>
  </resources>
  <dependencies>
    <module name="wildflyee.api"/>
    <module name="java.se"/>
    <module name="java.xml" export="true"/>
    <module name="java.xml.crypto" export="true"/>
    <module name="jdk.xml.dom" export="true"/>
    <module name="jakarta.transaction.api"/>
  </dependencies>
</module>
Copy to Clipboard Toggle word wrap
管理 CLI 命令示例

可以使用以下管理 CLI 命令来实现此示例配置:

  1. 添加 MySQL JDBC 驱动程序作为核心模块。

    module add --name=com.mysql --resources=/path/to/mysql-connector-j-8.0.33.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  2. 注册 MySQL JDBC 驱动程序。

    /subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-xa-datasource-class-name=com.mysql.cj.jdbc.MysqlXADataSource, driver-class-name=com.mysql.cj.jdbc.Driver)
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap

11.15.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.cj.jdbc.Driver</driver-class>
      <xa-datasource-class>com.mysql.cj.jdbc.MysqlXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Copy to Clipboard Toggle word wrap
示例:MySQL JDBC 驱动程序 module.xml 文件
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="com.mysql">
  <resources>
    <resource-root path="mysql-connector-j-8.0.33.jar"/>
  </resources>
  <dependencies>
    <module name="wildflyee.api"/>
    <module name="java.se"/>
    <module name="java.xml" export="true"/>
    <module name="java.xml.crypto" export="true"/>
    <module name="jdk.xml.dom" export="true"/>
    <module name="jakarta.transaction.api"/>
  </dependencies>
</module>
Copy to Clipboard Toggle word wrap
管理 CLI 命令示例

可以使用以下管理 CLI 命令来实现此示例配置:

  1. 添加 MySQL JDBC 驱动程序作为核心模块。

    module add --name=com.mysql --resources=/path/to/mysql-connector-j-8.0.33.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  2. 注册 MySQL JDBC 驱动程序。

    /subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-xa-datasource-class-name=com.mysql.cj.jdbc.MysqlXADataSource, driver-class-name=com.mysql.cj.jdbc.Driver)
    Copy to Clipboard Toggle word wrap
  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"}
    Copy to Clipboard Toggle word wrap

11.15.3. PostgreSQL 数据源示例

这是包含连接信息、基本安全性和验证选项的 PostgreSQL 数据源配置示例。

示例:PostgreSQL 数据源配置
<datasources>
  <datasource jndi-name="java:jboss/PostgresDS" pool-name="PostgresDS">
    <connection-url>jdbc:postgresql://localhost:5432/postgresdb</connection-url>
    <driver>postgresql</driver>
    <security>
        <user-name>admin</user-name>
        <password>admin</password>
    </security>
    <validation>
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
        <validate-on-match>true</validate-on-match>
        <background-validation>false</background-validation>
        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="postgresql" module="com.postgresql">
        <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Copy to Clipboard Toggle word wrap
示例:PostgreSQL JDBC driver module.xml 文件
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="com.postgresql">
  <resources>
    <resource-root path="postgresql-42.x.y.jar"/>
  </resources>
  <dependencies>
    <module name="wildflyee.api"/>
    <module name="java.se"/>
    <module name="java.xml" export="true"/>
    <module name="java.xml.crypto" export="true"/>
    <module name="jdk.xml.dom" export="true"/>
    <module name="jakarta.transaction.api"/>
  </dependencies>
</module>
Copy to Clipboard Toggle word wrap

在上例中,请确保将 42.x.y 替换为您的驱动程序版本号。

管理 CLI 命令示例

您可以使用以下 CLI 命令将 PostgreSQL JDBC 驱动程序和 PostgreSQL 数据源添加到 JDBC API:

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

    module add --name=com.postgresql --resources=/path/to/postgresql-42.x.y.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
    Copy to Clipboard Toggle word wrap

    在上例中,请确保将 42.x.y 替换为您的驱动程序版本号。

    重要

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

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

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

  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)
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap

11.15.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>
Copy to Clipboard Toggle word wrap
示例:PostgreSQL JDBC driver module.xml 文件
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="com.postgresql">
  <resources>
    <resource-root path="postgresql-42.x.y.jar"/>
  </resources>
  <dependencies>
    <module name="wildflyee.api"/>
    <module name="java.se"/>
    <module name="java.xml" export="true"/>
    <module name="java.xml.crypto" export="true"/>
    <module name="jdk.xml.dom" export="true"/>
    <module name="jakarta.transaction.api"/>
  </dependencies>
</module>
Copy to Clipboard Toggle word wrap

在上例中,请确保将 42.x.y 替换为您的驱动程序版本号。

管理 CLI 命令示例

您可以使用以下 CLI 命令将 PostgreSQL JDBC 驱动程序和 PostgreSQL 数据源添加到 JDBC API:

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

    module add --name=com.postgresql --resources=/path/to/postgresql-42.x.y.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
    Copy to Clipboard Toggle word wrap

    在上例中,请确保将 42.x.y 替换为您的驱动程序版本号。

    重要

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

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

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

  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)
    Copy to Clipboard Toggle word wrap
  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"}
    Copy to Clipboard Toggle word wrap

11.15.5. Oracle 数据源示例

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

示例:Oracle 数据源配置
<datasources>
  <datasource jndi-name="java:jboss/OracleDS" pool-name="OracleDS">
    <connection-url>jdbc:oracle:thin:@localhost:1521:XE</connection-url>
    <driver>oracle</driver>
    <security>
        <user-name>admin</user-name>
        <password>admin</password>
    </security>
    <validation>
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
        <validate-on-match>true</validate-on-match>
        <background-validation>false</background-validation>
        <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>
Copy to Clipboard Toggle word wrap
示例:Oracle JDBC 驱动程序 module.xml 文件
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="com.oracle">
    <resources>
        <resource-root path="ojdbc7.jar"/>
    </resources>
    <dependencies>
      <module name="wildflyee.api"/>
      <module name="java.se"/>
      <module name="java.xml" export="true"/>
      <module name="java.xml.crypto" export="true"/>
      <module name="jdk.xml.dom" export="true"/>
      <module name="jakarta.transaction.api"/>
    </dependencies>
</module>
Copy to Clipboard Toggle word wrap
管理 CLI 命令示例

可以使用以下管理 CLI 命令来实现此示例配置:

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

    module add --name=com.oracle --resources=/path/to/ojdbc7.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  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)
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap

11.15.6. Oracle XA 数据源示例

重要

必须对访问 Oracle XA 数据源的用户应用以下设置,才能使 XA 恢复正确运行。值 user 是从 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 用户;

这是带有 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>
      <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>
Copy to Clipboard Toggle word wrap
示例:Oracle JDBC 驱动程序 module.xml 文件
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="com.oracle">
    <resources>
        <resource-root path="ojdbc7.jar"/>
    </resources>
    <dependencies>
      <module name="wildflyee.api"/>
      <module name="java.se"/>
      <module name="java.xml" export="true"/>
      <module name="java.xml.crypto" export="true"/>
      <module name="jdk.xml.dom" export="true"/>
      <module name="jakarta.transaction.api"/>
    </dependencies>
</module>
Copy to Clipboard Toggle word wrap
管理 CLI 命令示例

可以使用以下管理 CLI 命令来实现此示例配置:

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

    module add --name=com.oracle --resources=/path/to/ojdbc7.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  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)
    Copy to Clipboard Toggle word wrap
  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 --same-rm-override=false --xa-datasource-properties={"URL"=>"jdbc:oracle:thin:@oracleHostName:1521:orcl"}
    Copy to Clipboard Toggle word wrap

11.15.7. Oracle RAC 数据源示例

这是带有连接信息、基本安全性和验证选项的实时应用程序集群(RAC)数据源配置示例。

示例:Oracle RAC 数据源配置

<datasources>
  <datasource jndi-name="java:jboss/OracleDS" pool-name="OracleDS">
    <connection-url>jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=host1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=1521))</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>
        <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>
Copy to Clipboard Toggle word wrap

示例:Oracle JDBC 驱动程序 module.xml 文件

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="com.oracle">
    <resources>
        <resource-root path="ojdbc7.jar"/>
    </resources>
    <dependencies>
      <module name="wildflyee.api"/>
      <module name="java.se"/>
      <module name="java.xml" export="true"/>
      <module name="java.xml.crypto" export="true"/>
      <module name="jdk.xml.dom" export="true"/>
      <module name="jakarta.transaction.api"/>
    </dependencies>
</module>
Copy to Clipboard Toggle word wrap

管理 CLI 命令示例

要实现此示例配置,请使用以下管理 CLI 命令:

  1. 将 Oracle JDBC 驱动程序添加为核心模块:

    module add --name=com.oracle --resources=/path/to/ojdbc7.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
    Copy to Clipboard Toggle word wrap
  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)
    Copy to Clipboard Toggle word wrap
  3. 添加 Oracle RAC 数据源:

    data-source add --name=OracleDS --jndi-name=java:jboss/OracleDS --driver-name=oracle --connection-url="jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=host1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=1521))" --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
    Copy to Clipboard Toggle word wrap

11.15.8. Oracle RAC XA 数据源示例

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

示例:Oracle RAC XA 数据源配置

<datasources>
  <xa-datasource jndi-name="java:jboss/OracleXADS" pool-name="OracleXADS">
    <xa-datasource-property name="URL">
      jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=host1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=1521))
    </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>
      <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>
Copy to Clipboard Toggle word wrap

示例:Oracle JDBC 驱动程序 module.xml 文件

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="com.oracle">
    <resources>
        <resource-root path="ojdbc7.jar"/>
    </resources>
    <dependencies>
      <module name="wildflyee.api"/>
      <module name="java.se"/>
      <module name="java.xml" export="true"/>
      <module name="java.xml.crypto" export="true"/>
      <module name="jdk.xml.dom" export="true"/>
      <module name="jakarta.transaction.api"/>
    </dependencies>
</module>
Copy to Clipboard Toggle word wrap

管理 CLI 命令示例

要实现此示例配置,请使用以下管理 CLI 命令:

  1. 将 Oracle JDBC 驱动程序添加为核心模块:

    module add --name=com.oracle --resources=/path/to/ojdbc7.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
    Copy to Clipboard Toggle word wrap
  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)
    Copy to Clipboard Toggle word wrap
  3. 添加 Oracle RAC 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 --same-rm-override=false --xa-datasource-properties={"URL"=>"jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=host1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=1521))"}
    Copy to Clipboard Toggle word wrap

11.15.9. Microsoft SQL 服务器数据源示例

这是带有连接信息、基本安全性和验证选项的 Microsoft SQL Server 数据源配置示例。

示例:Microsoft SQL 服务器数据源配置
<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>
Copy to Clipboard Toggle word wrap
示例:Microsoft SQL server JDBC driver module.xml 文件
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="com.microsoft">
  <resources>
    <resource-root path="sqljdbc42.jar"/>
  </resources>
  <dependencies>
    <module name="wildflyee.api"/>
    <module name="java.se"/>
    <module name="java.xml" export="true"/>
    <module name="java.xml.crypto" export="true"/>
    <module name="jdk.xml.dom" export="true"/>
    <module name="jakarta.transaction.api"/>
    <module name="jakarta.xml.bind.api"/>
  </dependencies>
</module>
Copy to Clipboard Toggle word wrap
管理 CLI 命令示例

可以使用以下管理 CLI 命令来实现此示例配置:

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

    module add --name=com.microsoft --resources=/path/to/sqljdbc42.jar --dependencies=java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api,jakarta.xml.bind.api,wildflyee.api,java.se
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  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)
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap

11.15.10. Microsoft SQL 服务器 XA 数据源示例

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

示例:Microsoft SQL 服务器 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>
Copy to Clipboard Toggle word wrap
示例:Microsoft SQL Server JDBC Driver module.xml 文件
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="com.microsoft">
  <resources>
    <resource-root path="sqljdbc42.jar"/>
  </resources>
  <dependencies>
    <module name="wildflyee.api"/>
    <module name="java.se"/>
    <module name="java.xml" export="true"/>
    <module name="java.xml.crypto" export="true"/>
    <module name="jdk.xml.dom" export="true"/>
    <module name="jakarta.transaction.api"/>
    <module name="jakarta.xml.bind.api"/>
  </dependencies>
</module>
Copy to Clipboard Toggle word wrap
管理 CLI 命令示例

可以使用以下管理 CLI 命令来实现此示例配置:

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

    module add --name=com.microsoft --resources=/path/to/sqljdbc42.jar --dependencies=java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api,jakarta.xml.bind.api,wildflyee.api,java.se
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  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)
    Copy to Clipboard Toggle word wrap
  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"}
    Copy to Clipboard Toggle word wrap

11.15.11. 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>
      <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>
Copy to Clipboard Toggle word wrap
示例:IBM DB2 JDBC driver module.xml 文件
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="com.ibm">
  <resources>
    <resource-root path="db2jcc4.jar"/>
  </resources>
  <dependencies>
    <module name="wildflyee.api"/>
    <module name="java.se"/>
    <module name="java.xml" export="true"/>
    <module name="java.xml.crypto" export="true"/>
    <module name="jdk.xml.dom" export="true"/>
    <module name="jakarta.transaction.api"/>
  </dependencies>
</module>
Copy to Clipboard Toggle word wrap
管理 CLI 命令示例

可以使用以下管理 CLI 命令来实现此示例配置:

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

    module add --name=com.ibm --resources=/path/to/db2jcc4.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  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)
    Copy to Clipboard Toggle word wrap
  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 --min-pool-size=0 --max-pool-size=50
    Copy to Clipboard Toggle word wrap

11.15.12. 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>
      <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>
Copy to Clipboard Toggle word wrap
示例:IBM DB2 JDBC driver module.xml 文件
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="com.ibm">
  <resources>
    <resource-root path="db2jcc4.jar"/>
  </resources>
  <dependencies>
    <module name="wildflyee.api"/>
    <module name="java.se"/>
    <module name="java.xml" export="true"/>
    <module name="java.xml.crypto" export="true"/>
    <module name="jdk.xml.dom" export="true"/>
    <module name="jakarta.transaction.api"/>
  </dependencies>
</module>
Copy to Clipboard Toggle word wrap
管理 CLI 命令示例

可以使用以下管理 CLI 命令来实现此示例配置:

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

    module add --name=com.ibm --resources=/path/to/db2jcc4.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  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)
    Copy to Clipboard Toggle word wrap
  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 --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"}
    Copy to Clipboard Toggle word wrap

11.15.13. Sybase 数据源示例

这是包含连接信息、基本安全性和验证选项的 Sybase 数据源配置示例。

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

可以使用以下管理 CLI 命令来实现此示例配置:

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

    module add --name=com.sybase --resources=/path/to/jconn4.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  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)
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap

11.15.14. Sybase XA 数据源示例

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

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

可以使用以下管理 CLI 命令来实现此示例配置:

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

    module add --name=com.sybase --resources=/path/to/jconn4.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  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)
    Copy to Clipboard Toggle word wrap
  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"}
    Copy to Clipboard Toggle word wrap

11.15.15. 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>
Copy to Clipboard Toggle word wrap
示例:MariaDB JDBC 驱动程序 module.xml 文件
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="org.mariadb">
  <resources>
    <resource-root path="mariadb-java-client-3.3.0.jar"/>
  </resources>
  <dependencies>
    <module name="wildflyee.api"/>
    <module name="java.se"/>
    <module name="java.xml" export="true"/>
    <module name="java.xml.crypto" export="true"/>
    <module name="jdk.xml.dom" export="true"/>
    <module name="org.slf4j"/>
    <module name="jakarta.transaction.api"/>
  </dependencies>
</module>
Copy to Clipboard Toggle word wrap
管理 CLI 命令示例

可以使用以下管理 CLI 命令来实现此示例配置:

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

    module add --name=org.mariadb --resources=/path/to/mariadb-java-client-3.3.0.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api,org.slf4j
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  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)
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap

11.15.16. 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>
Copy to Clipboard Toggle word wrap
示例:MariaDB JDBC 驱动程序 module.xml 文件
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.9" name="org.mariadb">
  <resources>
    <resource-root path="mariadb-java-client-3.3.0.jar"/>
  </resources>
  <dependencies>
    <module name="wildflyee.api"/>
    <module name="java.se"/>
    <module name="java.xml" export="true"/>
    <module name="java.xml.crypto" export="true"/>
    <module name="jdk.xml.dom" export="true"/>
    <module name="org.slf4j"/>
    <module name="jakarta.transaction.api"/>
  </dependencies>
</module>
Copy to Clipboard Toggle word wrap
管理 CLI 命令示例

可以使用以下管理 CLI 命令来实现此示例配置:

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

    module add --name=org.mariadb --resources=/path/to/mariadb-java-client-3.3.0.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api,org.slf4j
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  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)
    Copy to Clipboard Toggle word wrap
  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"}
    Copy to Clipboard Toggle word wrap

11.15.17. MariaDB Galera 集群数据源示例

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

警告

MariaDB Galera 集群 不支持 XA 事务。

示例:MariaDB Galera 集群数据源配置
<datasources>
  <datasource jndi-name="java:jboss/MariaDBGaleraClusterDS" pool-name="MariaDBGaleraClusterDS">
    <connection-url>jdbc:mariadb://192.168.1.1:3306,192.168.1.2: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>
Copy to Clipboard Toggle word wrap
示例:MariaDB JDBC 驱动程序 module.xml 文件
<?xml version='1.0' encoding='UTF-8'?>
<module xmlns="urn:jboss:module:1.9" name="org.mariadb">
  <resources>
    <resource-root path="mariadb-java-client-3.3.0.jar"/>
  </resources>
  <dependencies>
    <module name="wildflyee.api"/>
    <module name="java.se"/>
    <module name="java.xml" export="true"/>
    <module name="java.xml.crypto" export="true"/>
    <module name="jdk.xml.dom" export="true"/>
    <module name="org.slf4j"/>
    <module name="jakarta.transaction.api"/>
  </dependencies>
</module>
Copy to Clipboard Toggle word wrap
管理 CLI 命令示例

可以使用以下管理 CLI 命令来实现此示例配置:

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

    module add --name=org.mariadb --resources=/path/to/mariadb-java-client-3.3.0.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api,org.slf4j
    Copy to Clipboard Toggle word wrap
    重要

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

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

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

  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)
    Copy to Clipboard Toggle word wrap
  3. 添加 MariaDB Galera 集群 数据源。

    data-source add --name=MariaDBGaleraClusterDS --jndi-name=java:jboss/MariaDBGaleraClusterDS --driver-name=mariadb --connection-url=jdbc:mariadb://192.168.1.1:3306,192.168.1.2: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
    Copy to Clipboard Toggle word wrap

第 12 章 配置 transactions 子系统

12.1. 配置 transactions 子系统

当您管理处理财务交易、订单管理或其他关键工作流的企业应用时,您需要确保可靠的操作和数据一致性。JBoss EAP 中的 transactions 子系统可让您完全控制 Transaction Manager ™,允许您配置超时值、启用事务日志记录和收集统计信息。如果您的应用程序在多个系统和事务传播中运行,则至少需要启用 JBoss Remoting 或 JTS 之一。

JBoss EAP 使用 Narayana 事务管理器来有效地处理事务。它支持行业标准协议,如 Jakarta Transactions、JTS 和 Web 服务交易。无论您更新数据库、发送消息还是协调分布式服务,transaction 子系统都能确保一致性、可靠性和弹性。

注意

请注意,此链接将您定向到 JBoss EAP 7.4 的管理交易指南。我们目前正在为 Red Hat JBoss Enterprise Application Platform 8.0 更新文档。新文档完成后,将更新此链接。

第 13 章 ORB 配置

本章介绍了配置对象请求代理(ORB)以支持 Java 事务服务(JTS)的信息,并确保通过 JBoss EAP 中的 SSL/TLS 的安全通信。

13.1. 了解常见对象请求代理架构(CORBA)

通用对象请求代理架构(CORBA)是一种标准,它允许应用程序和服务通过称为 Object Request Broker (ORB)的组件跨不同的编程语言和平台互连。JBoss EAP 通过 Open JDK ORB 组件提供 ORB 实例。

ORB 在内部用于 JTS 事务,也可供您自己的应用使用。

注意

Object Transaction Service (OTS)是一个跨平台服务,组成了 CORBA 的一部分。OTS 规格由对象管理组维护。JTS 是构建事务管理器的规格,JTS 基于 OTS 规格设计。

13.2. 使用管理 CLI 和管理控制台为 JTS 配置 ORB

本节提供了在 JBoss EAP 中使用管理 CLI 和管理控制台为 Java 事务服务(JTS)配置对象请求代理(ORB)的步骤。配置 ORB 可确保分布式环境的强大的事务能力。

先决条件

  • 您已安装了 JBoss EAP。
  • 您可以使用管理特权访问管理 CLI 和管理控制台。
流程

您可以在独立或域模式中使用这个步骤。如果您决定使用独立模式,请不要使用 profile=full 前缀,并使用 standalone-full.xml 配置。

  1. 启用安全拦截器

    使用管理 CLI,执行以下命令将 security 属性设置为 identity

    /profile=full/subsystem=iiop-openjdk:write-attribute(name=security,value=identity)
    Copy to Clipboard Toggle word wrap

    或者,使用管理控制台:

    • 导航到 Configuration 选项卡。
    • 选择 SubsystemsIIOP (OpenJDK)View
    • Edit,根据需要修改属性,然后点 Save
  2. 在 IIOP 子系统中启用事务

    要为 JTS 启用 ORB,请使用 CLI 将 transactions 属性设置为 full

    /profile=full/subsystem=iiop-openjdk:write-attribute(name=transactions,value=full)
    Copy to Clipboard Toggle word wrap

    在管理控制台中:

    • 导航到 SubsystemsIIOP (OpenJDK)View
    • Edit,根据需要修改属性,然后点 Save
  3. 在 Transactions 子系统中启用 JTS

    使用 CLI,将 jts 属性设置为 true

    /profile=full/subsystem=transactions:write-attribute(name=jts,value=true)
    Copy to Clipboard Toggle word wrap

    在管理控制台中:

    • 导航到 SubsystemsTransactionsView
    • Edit,根据需要修改属性,然后点 Save
  4. 重启服务器

    需要完全重启服务器才能激活 JTS,因为简单重新加载不足。

验证

  • 通过读取属性设置来使用 CLI 验证配置:

    /profile=full/subsystem=iiop-openjdk:read-resource
    Copy to Clipboard Toggle word wrap
  • 或者,在服务器重启后检查管理控制台中更新的属性。

13.3. 配置 IIOP 以使用 SSL/TLS

您可以将 iiop-openjdk 子系统配置为使用 SSL/TLS 进行客户端和服务器间的安全通信。以下步骤概述了如何为 IIOP 子系统配置 SSL/TLS。

先决条件

  • 您已安装了 JBoss EAP。
  • 您可以使用管理权限访问管理 CLI 或管理控制台。

流程

  1. 创建 server-ssl-context

    /subsystem=elytron/server-ssl-context=<server-ssl-context_name>:add(key-manager=<key-manager_name>, protocols=<list_of_protocols>)
    Copy to Clipboard Toggle word wrap

    有关创建 server-ssl-context 的工作示例,请参阅最新的 JBoss EAP 安全指南:在 JBoss EAP 中配置 SSL/TLS 指南

    要将 SSL/TLS 与 iiop-openjdk 子系统搭配使用,您需要定义一个 server-ssl-context。在将 SSL/TLS 连接作为服务器时,JBoss EAP 使用 server-ssl-context 提供的配置。您可以在 JBoss EAP 指南中的 配置 SSL/TLS 指南中的 找到有关 server-ssl-context 属性的更多信息。

  2. 创建 client-ssl-context。例如:

    /subsystem=elytron/client-ssl-context=exampleCSC:add(key-manager=applicationKM, protocols=["TLSv1.2"])
    Copy to Clipboard Toggle word wrap

    要将 SSL/TLS 与 iiop-openjdk 子系统搭配使用,您需要定义一个 client-ssl-context。在将 SSL/TLS 连接作为客户端时,JBoss EAP 使用 client-ssl-context 提供的配置。您可以在 How to Configure Server Security 指南中的 using a client-ssl-context 中创建一个 client-ssl-context 来创建 client-ssl-context 的详情。

    注意

    请注意,此链接会将您定向到 JBoss EAP 7.4 的 JBoss EAP 安全指南。我们目前正在为 Red Hat JBoss Enterprise Application Platform 8.0 更新文档。新文档完成后,将更新此链接。

  3. iiop-openjdk 子系统配置为使用 client-ssl-contextserver-ssl-context

    示例:设置 client-ssl-contextserver-ssl-context

    batch
    
    /subsystem=iiop-openjdk:write-attribute(name=client-ssl-context,value=iiopClientSSC)
    
    /subsystem=iiop-openjdk:write-attribute(name=server-ssl-context,value=iiopServerSSC)
    
    run-batch
    
    reload
    Copy to Clipboard Toggle word wrap

  4. 配置与 iiop-openjdk 子系统的连接。

    您可以通过调整以下属性来指示在连接和从 iiop-openjdk 子系统时是否需要 SSL/TLS 连接:

    • 要在 iiop-openjdk 子系统中启用对 SSL 的支持,请将 support-ssl 设置为 true。默认值为 false
    • 要要求从 iiop-openjdk 子系统进行 SSL/TLS 连接,请将 client-requires-ssl 设置为 true。默认值为 false
    • 要要求 SSL/TLS 连接到 iiop-openjdk 子系统,请将 server-requires-ssl 设置为 true。默认值为 false。请注意,将其设置为 true 将阻止尝试连接到非 SSL IIOP 套接字。
    • 要调整 socket-binding,请将 ssl-socket-binding 设置为所需的绑定。默认为 iiop-ssl

    示例:根据需要设置到 IIOP 的 SSL/TLS 连接

    /subsystem=iiop-openjdk:write-attribute(name=support-ssl,value=true)
    
    /subsystem=iiop-openjdk:write-attribute(name=client-requires-ssl,value=true)
    
    /subsystem=iiop-openjdk:write-attribute(name=server-requires-ssl,value=true)
    
    /subsystem=iiop-openjdk:write-attribute(name=ssl-socket-binding,value=iiop-ssl)
    
    reload
    Copy to Clipboard Toggle word wrap

第 14 章 Jakarta Connectors 管理

14.1. 关于 Jakarta 连接器

Jakarta Connectors 为 Jakarta EE 系统定义了一个标准架构,以便与外部异构企业信息系统(EIS)交互。EIS 示例包括企业资源规划(ERP)系统、大型机事务处理(TP)、数据库和消息传递系统。资源适配器 是实现 Jakarta Connectors 架构的组件。

Jakarta Connectors 1.7 提供了用于管理的功能:

  • 连接
  • Transactions
  • 安全性
  • 生命周期
  • 工作实例
  • 事务 inflow
  • 消息 inflow

14.2. 关于资源适配器

资源适配器是一个可部署的 Jakarta EE 组件,它使用 Jakarta Connectors 规格提供 Jakarta EE 应用程序与企业信息系统(EIS)之间的通信。EIS 供应商通常提供资源适配器,以便轻松将其产品与 Jakarta EE 应用集成。

企业信息系统可以是组织内的任何其他软件系统。示例包括企业资源规划(ERP)系统、数据库系统、电子邮件服务器和专有消息传递系统。

资源适配器打包在 Resource Adapter Archive (RAR)文件中,该文件可以部署到 JBoss EAP。RAR 文件也可以包含在企业存档(EAR)部署中。

资源适配器本身在 resource-adapters 子系统中定义,后者由 IronJacamar 项目提供。

14.3. 配置 jca 子系统

jca 子系统控制 Jakarta Connectors 容器和资源适配器部署的一般设置。您可以使用管理控制台或管理 CLI 配置 jca 子系统。

要配置的主要 jca 子系统元素有:

14.3.1. 管理控制台中的 JCA 子系统设置

您可以从管理控制台配置 jca 子系统,方法是导航到 ConfigurationSubsystemsJCA 并点 View。然后,选择适当的标签页:

  • 配置

    包含缓存的连接管理器、存档验证和 bean 验证的设置。打开适当的选项卡并单击 Edit 链接,以修改这些设置。

  • Bootstrap 上下文

    包含配置的 bootstrap 上下文列表。可以添加新的 bootstrap 上下文对象,并进行配置。每个 bootstrap 上下文都必须分配一个工作管理器。

  • WorkManager

    包含配置的工作管理器列表。可以在此处添加、删除新的工作管理器及其线程池。每个工作管理器都可以有一个简短运行的线程池和可选的长时间运行的线程池。

可以通过在所选工作管理器上 点击线程池 来配置线程池属性。

14.3.2. 管理 CLI 中的 JCA 子系统设置

您可以按照此流程中的步骤,使用管理 CLI 配置 jca 子系统。

流程

  1. 使用管理 CLI 配置 jca 子系统:
/subsystem=jca
Copy to Clipboard Toggle word wrap
  1. 在受管域中,您必须在命令前加上:

    /profile=PROFILE_NAME
    Copy to Clipboard Toggle word wrap
注意

以下部分中的表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/wildfly-jca_5_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能不同。

14.3.3. 归档验证

这决定了是否在部署单元上执行存档验证。下表描述了您可以为归档验证设置的属性。

Expand
表 14.1. 归档验证属性
属性默认值描述

enabled

true

指定是否启用归档验证。

fail-on-error

true

指定归档验证错误报告是否失败。

fail-on-warn

false

指定归档验证警告报告是否失败。

如果没有指定归档验证,它将被视为存在,并且 enabled 属性默认为 true

在部署过程中的错误消息示例

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
Copy to Clipboard Toggle word wrap

14.3.4. Bean 验证

Bean 验证决定是否执行 bean 验证。有关规格的详情,请查看 Jakarta Bean 验证规格

Expand
表 14.2. Bean 验证属性
属性默认值描述

enabled

true

指定是否启用了 bean 验证。

如果未指定 bean 验证,它将被视为存在,并且 enabled 属性默认为 true

14.3.5. 工作管理器

工作管理器管理 Jakarta Connectors 子系统中的工作实例。有两种工作管理器:

  • 默认工作管理器

    默认工作管理器及其线程池。

  • 自定义工作管理器

    自定义工作管理器定义及其线程池。

Expand
表 14.3. 工作管理器属性
属性描述

名称

指定工作管理器的名称。

Elytron-enabled

为工作管理器启用 Elytron 安全性。

工作管理器还具有以下子元素:

Expand
表 14.4. 工作管理器子元素
子元素描述

short-running-threads

标准工作实例的线程池.每个工作管理器都有一个简短运行的线程池。

long-running-threads

Jakarta Connectors 1.7 工作实例的线程池,设置 LONG_RUNNING 提示。每个工作管理器都可以有一个可选长时间运行的线程池。

下表描述了您可以为工作管理器线程池设置的属性。

Expand
表 14.5. 线程池属性
属性描述

allow-core-timeout

确定核心线程是否可以超时的布尔值设置。默认值为 false

core-threads

核心线程池大小。这必须等于或小于最大线程池大小。

handoff-executor

在无法接受某个任务时,将任务委托给 的 executor。如果未指定,则无法接受的任务将被静默丢弃。

keepalive-time

指定池线程在正常工作后应保留的时间。

max-threads

最大线程池大小。

名称

指定线程池的名称。

queue-length

最大队列长度。

thread-factory

对线程工厂的引用。

14.3.6. 分布式工作管理器

分布式工作管理器(分布式工作管理器)实例可以在另一个工作管理器实例上重新排期工作。

以下示例管理 CLI 命令配置分布式工作管理器。请注意,您必须使用提供高可用性功能的配置,如 standalone-ha.xmlstandalone-full-ha.xml 配置文件。

示例:配置分布式工作管理器

batch
/subsystem=jca/distributed-workmanager=myDistWorkMgr:add(name=myDistWorkMgr)
/subsystem=jca/distributed-workmanager=myDistWorkMgr/short-running-threads=myDistWorkMgr:add(queue-length=10,max-threads=10)
/subsystem=jca/bootstrap-context=myCustomContext:add(name=myCustomContext,workmanager=myDistWorkMgr)
run-batch
Copy to Clipboard Toggle word wrap

注意

short-running-threads 元素的名称必须与 distributed-workmanager 元素的名称相同。

下表描述了您可以为分布式工作管理器配置的属性。

Expand
表 14.6. 分布式工作管理器属性
属性描述

Elytron-enabled

为工作管理器启用 Elytron 安全性。

名称

分布式工作管理器的名称。

policy

策略决定何时重新分发工作实例。允许的值是:

  • NEVER - Never 将工作实例分发到另一节点。
  • ALWAYS - Always 将工作实例分发到另一节点。
  • WATERMARK - 根据当前节点可用的可用 worker 线程数量,将工作实例分配给另一个节点。

policy-options

策略的键/值对选项列表。如果您使用 WATERMARK 策略,您可以使用 水位线 策略选项来指定应分发的可用线程数量。例如:

/subsystem=jca/distributed-workmanager=myDistWorkMgr:write-attribute(name=policy-options,value={watermark=3})
Copy to Clipboard Toggle word wrap

selector

选择器决定网络中的哪些节点重新分发工作实例。允许的值是:

  • FIRST_AVAILABLE - 选择列表中的第一个可用节点。
  • PING_TIME - 选择具有最低 ping 时间的节点。
  • MAX_FREE_THREADS - 选择具有最高可用 worker 线程数的节点。

selector-options

选择器的键/值对选项列表。

分布式工作管理器还具有以下子元素:

Expand
表 14.7. 分布式工作管理器子元素
子元素描述

long-running-threads

设置 LONG_RUNNING 提示的工作实例的线程池。每个分布式工作管理器都可以有长期运行的线程池。

short-running-threads

标准工作实例的线程池。每个分布式工作管理器都必须有一个简短运行的线程池。

14.3.7. Bootstrap 上下文

这用于定义自定义 bootstrap 上下文。下表描述了您可以为 bootstrap 上下文设置的属性。

Expand
表 14.8. Bootstrap 上下文属性
属性描述

名称

指定 bootstrap 上下文的名称。

WorkManager

指定用于此上下文的工作管理器的名称。

14.3.8. 缓存连接管理器

缓存的连接管理器用于调试连接并支持事务中连接的延迟列表,跟踪应用程序是否被应用程序正确使用并释放。下表描述了您可以为缓存的连接管理器设置的属性。

Expand
表 14.9. 缓存的连接管理器属性
属性默认值描述

debug

false

失败时输出警告,以显式关闭连接。

错误

false

在失败时抛出异常以显式关闭连接。

ignore-unknown-connections

false

指定不会缓存未知连接。

install

false

启用或禁用缓存的连接管理器 valve 和 interceptor。

14.3.9. 使用管理 CLI 部署资源适配器

使用管理 CLI 部署资源适配器。

先决条件

  • 访问管理 CLI。

流程

  1. 将资源适配器部署到独立服务器:

       ----
       deploy /path/to/resource-adapter.rar
       ----
    Copy to Clipboard Toggle word wrap
  2. 将资源适配器部署到受管域中的所有服务器组:

       ----
       deploy /path/to/resource-adapter.rar --all-server-groups
       ----
    Copy to Clipboard Toggle word wrap

14.3.10. 使用管理控制台部署资源适配器

使用管理控制台部署资源适配器。

先决条件

  • 访问管理控制台。

流程

  1. 登录到管理控制台。
  2. 前往 Deployments 选项卡。
  3. Add (+)按钮。

    • 在受管域中,您将首先需要选择 内容存储库
  4. 选择 Upload Deployment 选项。
  5. 浏览到资源适配器归档并点 Next
  6. 验证上传,然后单击 完成
  7. 在受管域中,将部署部署到适当的服务器组并启用部署

14.3.11. 使用部署扫描程序部署资源适配器

使用单机服务器中的部署扫描程序部署资源适配器。

先决条件

  • 访问服务器的文件系统。

流程

  • 要手动将资源适配器部署到单机服务器,请将资源适配器存档复制到服务器部署目录中,如 EAP_HOME/standalone/deployments/。这将由部署扫描程序提取和部署。
注意

此选项不适用于受管域。您必须使用管理控制台或管理 CLI 将资源适配器部署到服务器组中。

14.4. 配置资源适配器

您可以使用管理界面配置资源适配器。以下示例演示了如何使用管理 CLI 配置资源适配器。有关支持的属性和其他重要信息,请参阅您的资源适配器厂商文档。

14.4.1. 添加资源适配器配置

使用管理 CLI 添加资源适配器配置。

先决条件

  • 访问管理 CLI。

流程

  1. 添加资源适配器配置:

    /subsystem=resource-adapters/resource-adapter=eis.rar:add(archive=eis.rar, transaction-support=XATransaction)
    Copy to Clipboard Toggle word wrap

14.4.2. 配置资源适配器设置

资源适配器设置管理应用服务器和外部系统之间的连接;配置它们以优化集成和性能。

先决条件

  • 添加了资源适配器配置。
  • 您可以访问管理 CLI。

流程

  1. 配置 config-properties

    • 添加 服务器配置 属性:

           ----
           /subsystem=resource-adapters/resource-adapter=eis.rar/config-properties=server:add(value=localhost)
           ----
      Copy to Clipboard Toggle word wrap
    • 添加端口 配置属性:

           ----
           /subsystem=resource-adapters/resource-adapter=eis.rar/config-properties=port:add(value=9000)
           ----
      Copy to Clipboard Toggle word wrap
  2. 配置 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)
           ----
      Copy to Clipboard Toggle word wrap
    • 配置 admin 对象配置属性:

           ----
           /subsystem=resource-adapters/resource-adapter=eis.rar/admin-objects=aoName/config-properties=threshold:add(value=10)
           ----
      Copy to Clipboard Toggle word wrap
  3. 配置 connection-definitions

    • 为受管连接工厂添加连接定义:

           ----
           /subsystem=resource-adapters/resource-adapter=eis.rar/connection-definitions=cfName:add(class-name=com.acme.eis.ra.EISManagedConnectionFactory, jndi-name=java:/eis/AcmeConnectionFactory)
           ----
      Copy to Clipboard Toggle word wrap
    • 配置受管连接工厂配置属性:

           ----
           /subsystem=resource-adapters/resource-adapter=eis.rar/connection-definitions=cfName/config-properties=name:add(value=Acme Inc)
           ----
      Copy to Clipboard Toggle word wrap
    • 配置是否记录包括的 trace:

      • 通过将 enlistment-trace 属性设置为 true 来启用 Enlistment trace 的记录:

             ----
             /subsystem=resource-adapters/resource-adapter=eis.rar/connection-definitions=cfName:write-attribute(name=enlistment-trace,value=true)
             ----
        Copy to Clipboard Toggle word wrap
        警告

        启用列表跟踪会导致在事务列表期间跟踪错误,但会给性能产生影响。

14.4.3. 激活资源适配器

配置资源适配器后激活资源适配器。

先决条件

  • 已配置了资源适配器。
  • 访问管理 CLI。

流程

  • 激活资源适配器:

    ----
    /subsystem=resource-adapters/resource-adapter=eis.rar:activate
    ----
    Copy to Clipboard Toggle word wrap
注意

您还可以为资源适配器定义容量策略。如需了解更多详细信息,请参阅 Capacity Policies 部分。

14.5. 配置资源适配器以使用 Elytron 子系统

IronJacamar 中的资源适配器涉及服务器与资源适配器之间的两种类型的通信:

  • 一个类型是服务器打开资源适配器连接时。这可以由容器管理的登录服务保护,这需要在打开连接时将带有主体和凭证的 JAAS 主题传播到资源适配器。此登录服务可以委派给 Elytron。
  • 当资源适配器在向工作管理器提交工作或向同一 JBoss EAP 实例中的端点交付信息时,会建立安全信息。这个机制被称为安全流(security inflow)。

14.5.1. 使用 Elytron 管理的 Sign-On

为了使用 Elytron 实现容器管理的符号,则 elytron-enabled 属性需要设为 true。这会导致所有与资源适配器的连接由 Elytron 保护。

/subsystem=resource-adapters/resource-adapter=<RAR_NAME>/connection-definitions=<FACTORY_NAME>:write-attribute(name=elytron-enabled,value=true)
Copy to Clipboard Toggle word wrap

可以在 resource-adapters 子系统中将 elytron-enabled 属性设置为 true,使用管理 CLI 配置 elytron-enabled 属性。默认情况下,此属性设置为 false

authentication-context 属性定义将用于执行登录的 Elytron 身份验证上下文的名称。

Elytron authentication-context 属性可以包含一个或多个 authentication-configuration 元素,其中包含您要使用的凭证。

如果没有设置 authentication-context 属性,JBoss EAP 将使用当前的 authentication-context,这是打开连接的调用器代码使用的 authentication-context。

示例:创建 authentication-configuration

/subsystem=elytron/authentication-configuration=exampleAuthConfig:add(authentication-name=sa,credential-reference={clear-text=sa})
Copy to Clipboard Toggle word wrap

示例:使用上述配置创建 authentication-context

/subsystem=elytron/authentication-context=exampleAuthContext:add(match-rules=[{authentication-configuration=exampleAuthConfig}])
Copy to Clipboard Toggle word wrap

14.5.2. 使用 Elytron 的安全流

安全流(security inflow)使资源适配器能够在将工作提交到工作管理器或向同一 JBoss EAP 实例中的端点交付消息时建立安全信息。这允许在使用 Elytron 执行前对自己进行身份验证。如果身份验证成功,则会在生成的身份验证上下文中执行提交的工作。如果失败,则工作执行将被拒绝。

要启用 Elytron security inflow,请在配置资源适配器的工作管理器时设置 wm-elytron-security-domain 属性。

注意
  • 当资源适配器工作管理器配置为使用 Elytron 安全域时,wm-elytron-security-domain 则引用的工作管理器应将 elytron-enabled 属性设置为 true
/subsystem=jca/workmanager=customWM:add(name=customWM, elytron-enabled=true)
Copy to Clipboard Toggle word wrap
  • 如果使用 wm-security-domain 属性而不是 wm-elytron-security-domain 属性,则流中的安全由旧的 security 子系统执行。

在下面的 jca 子系统配置示例中,我们可以看到名为 ra-with-elytron-security-domain 的资源适配器的配置。此资源适配器将工作管理器安全性配置为使用 Elytron 安全域的 wm-realm

<subsystem xmlns="urn:jboss:domain:jca:5.0">
    <archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/>
    <bean-validation enabled="true"/>
    <default-workmanager>
        <short-running-threads>
            <core-threads count="50"/>
            <queue-length count="50"/>
            <max-threads count="50"/>
            <keepalive-time time="10" unit="seconds"/>
        </short-running-threads>
        <long-running-threads>
            <core-threads count="50"/>
            <queue-length count="50"/>
            <max-threads count="50"/>
            <keepalive-time time="10" unit="seconds"/>
        </long-running-threads>
    </default-workmanager>
    <workmanager name="customWM">
        <elytron-enabled>true</elytron-enabled>
        <short-running-threads>
            <core-threads count="20"/>
            <queue-length count="20"/>
            <max-threads count="20"/>
        </short-running-threads>
    </workmanager>
    <bootstrap-contexts>
        <bootstrap-context name="customContext" workmanager="customWM"/>
    </bootstrap-contexts>
    <cached-connection-manager/>
</subsystem>
Copy to Clipboard Toggle word wrap

然后,使用 resource-adapter 子系统中的 boostrap 上下文来引用工作管理器。

<subsystem xmlns="urn:jboss:domain:resource-adapters:5.0">
    <resource-adapters>
        <resource-adapter id="ra-with-elytron-security-domain">
            <archive>
                ra-with-elytron-security-domain.rar
            </archive>
            <bootstrap-context>customContext</bootstrap-context>
            <transaction-support>NoTransaction</transaction-support>
            <workmanager>
                <security>
                    <elytron-security-domain>wm-realm</elytron-security-domain>
                    <default-principal>wm-default-principal</default-principal>
                    <default-groups>
                        <group>
                            wm-default-group
                        </group>
                    </default-groups>
                </security>
            </workmanager>
        </resource-adapter>
    </resource-adapters>
</subsystem>
Copy to Clipboard Toggle word wrap

示例:安全域的配置

/subsystem=elytron/properties-realm=wm-properties-realm:add(users-properties={path=/security-dir/users.properties, plain-text=true}, groups-properties={path=/security-dir/groups.properties})

/subsystem=elytron/simple-role-decoder=wm-role-decoder:add(attribute=groups)

/subsystem=elytron/constant-permission-mapper=wm-permission-mapper:add(permissions=[{class-name="org.wildfly.security.auth.permission.LoginPermission"}])

/subsystem=elytron/security-domain=wm-realm:add(default-realm=wm-properties-realm, permission-mapper=wm-permission-mapper, realms=[{role-decoder=wm-role-decoder, realm=wm-properties-realm}])
Copy to Clipboard Toggle word wrap

Work 类负责在指定域下为 Elytron 进行身份验证提供凭证。为此,它必须实现 jakarta.resource.spi.work.WorkContextProvider

public interface WorkContextProvider {
   /**
    * Gets an instance of <code>WorkContexts</code> that needs to be used
    * by the <code>WorkManager</code> to set up the execution context while
    * executing a <code>Work</code> instance.
    *
    * @return an <code>List</code> of <code>WorkContext</code> instances.
    */
   List<WorkContext> getWorkContexts();
}
Copy to Clipboard Toggle word wrap

此界面允许 Work Context 使用 WorkContext 配置要在其上执行工作的上下文的一些方面。这些方面之一就是安全性 inflow。为此,List<WorkContext> getWorkContexts 方法必须提供 jakarta.resource.spi.work.SecurityContext。此上下文将使用 jakarta.security.auth.callback.Callback 对象,如 Jakarta Authentication 所定义。

示例:使用上下文创建回调

public class ExampleWork implements Work, WorkContextProvider {

    private final String username;
    private final String role;

    public MyWork(TestBean bean, String username, String role) {
        this.principals = null;
        this.roles = null;
        this.bean = bean;
        this.username = username;
        this.role = role;
    }

    public List<WorkContext> getWorkContexts() {
        List<WorkContext> l = new ArrayList<>(1);
        l.add(new MySecurityContext(username, role));
        return l;
    }

    public void run() {
        ...
    }

    public void release() {
        ...
    }

    public class ExampleSecurityContext extends SecurityContext {

        public void setupSecurityContext(CallbackHandler handler, Subject executionSubject, Subject serviceSubject) {
            try {
                List<jakarta.security.auth.callback.Callback> cbs = new ArrayList<>();
                cbs.add(new CallerPrincipalCallback(executionSubject, new SimplePrincipal(username)));
                cbs.add(new GroupPrincipalCallback(executionSubject, new String[]{role}));
                handler.handle(cbs.toArray(new jakarta.security.auth.callback.Callback[cbs.size()]));
            } catch (Throwable t) {
                throw new RuntimeException(t);
            }
        }
    }
Copy to Clipboard Toggle word wrap

在上例中,ExampleWork 实现 WorkContextProvider 接口来提供 ExampleSecurityContext。该上下文将创建提供在工作执行时由 Elytron 验证的安全信息所需的回调。

14.6. 配置受管连接池

JBoss EAP 提供了 ManagedConnectionPool 接口的三种实现:

  • org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedQueueConnectionPool :这是 JBoss EAP 7 中的默认连接池,并提供最佳开箱即用的性能。
  • org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool :这是之前 JBoss EAP 版本中的默认连接池。
  • org.jboss.jca.core.connectionmanager.pool.mcp.LeakDumperManagedConnectionPool :此连接池仅用于调试目的,并在关闭或池被清除时报告任何泄漏。

先决条件

  • 访问管理 CLI。

流程

  1. 为数据源设置受管连接池实现:

       ----
       /subsystem=datasources/data-source=DATA_SOURCE:write-attribute(name=mcp,value=MCP_CLASS)
       ----
    Copy to Clipboard Toggle word wrap
  2. 为资源适配器设置受管连接池实现:

       ----
       /subsystem=resource-adapters/resource-adapter=RESOURCE_ADAPTER/connection-definitions=CONNECTION_DEFINITION:write-attribute(name=mcp,value=MCP_CLASS)
       ----
    Copy to Clipboard Toggle word wrap
  3. 为消息传递服务器设置受管连接池实施:

       ----
       /subsystem=messaging-activemq/server=SERVER/pooled-connection-factory=CONNECTION_FACTORY:write-attribute(name=managed-connection-pool,value=MCP_CLASS)
       ----
    Copy to Clipboard Toggle word wrap

14.7. 查看连接统计信息

/deployment=NAME.rar 子树中读取已定义连接的统计信息。这可让您访问任何 RAR 的统计信息,即使它没有在 standalone.xmldomain.xml 配置中定义。

先决条件

  • 访问管理 CLI。

流程

  • 运行以下命令来读取连接统计信息:

       ----
       /deployment=NAME.rar/subsystem=resource-adapters/statistics=statistics/connection-definitions=java\:\/testMe:read-resource(include-runtime=true)
       ----
    Copy to Clipboard Toggle word wrap
注意

确保指定 include-runtime=true 参数,因为所有统计数据都是仅运行时的信息。

14.8. 清空资源适配器连接

您可以使用以下管理 CLI 命令清除资源适配器连接。

注意

在受管域中,您必须在这些命令前加上 /host=HOST_NAME/server=SERVER_NAME/

先决条件

  • 访问管理 CLI。

流程

  • 刷新池中的所有连接:

       ----
       /subsystem=resource-adapters/resource-adapter=RESOURCE_ADAPTER/connection-definitions=CONNECTION_DEFINITION:flush-all-connection-in-pool
       ----
    Copy to Clipboard Toggle word wrap
  • 安全地清除池中的所有连接:

       ----
       /subsystem=resource-adapters/resource-adapter=RESOURCE_ADAPTER/connection-definitions=CONNECTION_DEFINITION:flush-gracefully-connection-in-pool
       ----
    Copy to Clipboard Toggle word wrap
    The server will wait until connections become idle before flushing them.
    Copy to Clipboard Toggle word wrap
  • 刷新池中的所有闲置连接:

       ----
       /subsystem=resource-adapters/resource-adapter=RESOURCE_ADAPTER/connection-definitions=CONNECTION_DEFINITION:flush-idle-connection-in-pool
       ----
    Copy to Clipboard Toggle word wrap
  • 刷新池中的所有无效连接:

       ----
       /subsystem=resource-adapters/resource-adapter=RESOURCE_ADAPTER/connection-definitions=CONNECTION_DEFINITION:flush-invalid-connection-in-pool
       ----
    Copy to Clipboard Toggle word wrap
    The server will flush all connections that it determines to be invalid.
    Copy to Clipboard Toggle word wrap
注意

这些过程不是连续的。

本章重点介绍配置 Undertow Web 服务器,即 JBoss EAP 中嵌入的默认服务器。在这里,您将找到有关为安全通信启用 SSL/TLS 的详细信息,利用 HTTP/2 来提高性能,并微调服务器设置以与您的操作要求保持一致。

15.1. Undertow 子系统概述

在 JBoss EAP 8.0 中,Undertow 子系统充当应用服务器中的 Web 层。它提供核心 Web 服务器和 servlet 容器功能,支持 Jakarta Servlet 6.0 规格、websocket 和 HTTP 升级等高级功能。Undertow 也可以充当具有 mod_cluster 支持的高性能反向代理,为处理 Web 流量带来更高的可扩展性、效率和灵活性。

undertow 子系统允许您配置 Web 服务器和 servlet 容器设置。它实施 Jakarta Servlet 6.0 规范 和 websocket。它还支持 HTTP 升级,并在 servlet 部署中使用高性能非阻塞处理程序。undertow 子系统也能够充当支持 mod_cluster 的高性能反向代理。

在 undertow 子系统中,需要配置五个主要组件:

  • 缓冲缓存
  • 服务器
  • Servlet 容器
  • 处理程序(handler)
  • 过滤器
注意

虽然 JBoss EAP 提供了为每个组件更新配置的功能,但默认配置适用于大多数用例,并提供合理的性能设置。

默认 undertow 子系统配置
<subsystem xmlns="{UndertowSubsystemNamespace}" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
    <buffer-cache name="default"/>
    <server name="default-server">
        <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
        <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
        <host name="default-host" alias="localhost">
            <location name="/" handler="welcome-content"/>
            <http-invoker security-realm="ApplicationRealm"/>
        </host>
    </server>
    <servlet-container name="default">
        <jsp-config/>
        <websockets/>
    </servlet-container>
    <handlers>
        <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
    </handlers>
</subsystem>
Copy to Clipboard Toggle word wrap
重要

undertow 子系统还依赖于 io 子系统来提供 XNIO worker 和 buffer 池。io 子系统是单独配置的,提供默认配置,它可在大多数情形中提供最佳性能。

15.1.1. 将 Elytron 与 undertow 子系统搭配使用

部署 Web 应用时,将识别该应用所需的安全域的名称。这将来自部署内部,或者如果部署没有安全域,则将假定 undertow 子系统中定义的 default-security-domain。默认情况下,default-security-domainApplicationDomain。为确保从应用所需的安全域名称正确映射到适当的 Elytron 配置,可以将 application-security-domain 资源添加到 undertow 子系统。

示例:添加一个映射。

/subsystem=undertow/application-security-domain=ApplicationDomain:add(security-domain=ApplicationDomain)
Copy to Clipboard Toggle word wrap

如果结果为:

<subsystem xmlns="{UndertowSubsystemNamespace}" ... default-security-domain="other">
...
    <application-security-domains>
        <application-security-domain name="ApplicationDomain" security-domain="ApplicationDomain"/>
    </application-security-domains>
...
</subsystem>
Copy to Clipboard Toggle word wrap

注意
  • 如果此刻部署了部署,则应用安全域映射应重新加载应用服务器才能使应用安全域映射生效。
  • 在当前的 Web 服务中,为保护 Web 服务端点和 Elytron 安全域名指定的安全域的名称必须相同。

这个简单形式适合部署使用 Servlet 规范中定义的标准 HTTP 机制,如 BASICCLIENT_CERTDIGESTFORM。在这里,身份验证将针对 ApplicationDomain 安全域执行。此形式也适用于应用程序不使用任何身份验证机制,而是使用编程身份验证,或者试图获取与部署关联的 SecurityDomain,并直接使用它。

示例:映射的高级形式:

/subsystem=undertow/application-security-domain=MyAppSecurity:add(http-authentication-factory=application-http-authentication)
Copy to Clipboard Toggle word wrap

如果结果为:

<subsystem xmlns="{UndertowSubsystemNamespace}" ... default-security-domain="other">
...
    <application-security-domains>
        <application-security-domain name="MyAppSecurity" http-authentication-factory="application-http-authentication"/>
    </application-security-domains>
...
</subsystem>
Copy to Clipboard Toggle word wrap

在这种配置形式中,而不是引用安全域,而是引用 http-authentication-factory。这是用于获取身份验证机制实例并依次与安全域关联的工厂。

在使用自定义 HTTP 身份验证机制时,您应该引用 http-authentication-factory 属性,或者必须为主体转换器、凭证工厂和机制域等机制定义额外的配置。使用 Servlet 规格中描述的机制以外的机制时,最好使用 http-authentication-factory 属性。

当使用高级映射形式时,可以使用另一个配置选项 override-deployment-config。引用的 http-authentication-factory 可以返回一组完整的身份验证机制。默认情况下,会过滤这些,使其仅与应用程序请求的机制匹配。如果此选项设为 true,则工厂提供的机制将覆盖应用请求的机制。

application-security-domain 资源还有一个额外的选项 enable-jacc。如果设为 true,则会为与这个映射匹配的任何部署启用 Java 授权合同。

15.1.1.1. 运行时信息

如果使用了 应用程序-security-domain 映射,重复检查部署是否按预期匹配会很有用。如果资源使用 include-runtime=true 读取,与映射关联的部署也会如下所示:

/subsystem=undertow/application-security-domain=MyAppSecurity:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "enable-jacc" => false,
        "http-authentication-factory" => undefined,
        "override-deployment-config" => false,
        "referencing-deployments" => ["simple-webapp.war"],
        "security-domain" => "ApplicationDomain",
        "setting" => undefined
    }
}
Copy to Clipboard Toggle word wrap

在此输出中,reference-deployments 属性显示部署 simple-webapp.war 已使用映射进行部署。

15.1.2. 配置缓冲区缓存

此流程指导您在 JBoss EAP 中配置缓冲区缓存,这有助于缓存静态资源以提高性能。不同的部署可以使用不同的缓存大小来优化资源管理。使用的空间总量乘以每个区域的缓冲区数量乘以区域的最大数量。缓冲区缓存的默认大小为 10MB。

注意

JBoss EAP 默认提供单一缓存。

<subsystem xmlns="{UndertowSubsystemNamespace}" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
    <buffer-cache name="default"/>
    ...
</subsystem>
Copy to Clipboard Toggle word wrap

先决条件

  • 确保已安装 JBoss EAP,并且具有管理 CLI 的管理访问权限。

流程

  1. 更新现有缓冲区缓存:

    • 修改缓冲区大小属性:

      /subsystem=undertow/buffer-cache=default/:write-attribute(name=buffer-size,value=2048)
      Copy to Clipboard Toggle word wrap
      reload
      Copy to Clipboard Toggle word wrap
  2. 创建新缓冲缓存:

    • 添加新缓冲缓存:

      /subsystem=undertow/buffer-cache=new-buffer:add
      Copy to Clipboard Toggle word wrap
  3. 删除缓冲区缓存:

    • 删除现有的缓冲区缓存:

      /subsystem=undertow/buffer-cache=new-buffer:remove
      Copy to Clipboard Toggle word wrap
      reload
      Copy to Clipboard Toggle word wrap

15.1.3. 配置字节缓冲池

Undertow 字节缓冲池用于分配池化 NIO ByteBuffer 实例。所有监听器都有一个字节缓冲区池,您可以为每个监听程序使用不同的缓冲池和 worker。字节缓冲区池可以在不同的服务器实例之间共享。

这些缓冲区用于 IO 操作,缓冲区大小会对应用程序性能有很大影响。对于大多数服务器,理想的大小为 16k。

先决条件

  • 确保已安装 JBoss EAP,并且具有管理 CLI 的管理访问权限。

流程

  1. 更新现有目标缓冲区池.

    • 修改缓冲区大小属性:

      /subsystem=undertow/byte-buffer-pool=myByteBufferPool:write-attribute(name=buffer-size,value=1024)
      Copy to Clipboard Toggle word wrap
      reload
      Copy to Clipboard Toggle word wrap
  2. 创建一个新的字节缓冲池.

    • 添加新的字节缓冲池:

      /subsystem=undertow/byte-buffer-pool=newByteBufferPool:add
      Copy to Clipboard Toggle word wrap
  3. 删除目标缓冲池.

    • 删除现有的字节缓冲池:

      /subsystem=undertow/byte-buffer-pool=newByteBufferPool:remove
      Copy to Clipboard Toggle word wrap
      reload
      Copy to Clipboard Toggle word wrap

验证

  • 通过检查管理控制台中的 buffer pool 设置来验证更改。

其他资源

15.1.4. 了解 undertow 中的服务器配置

服务器代表 Undertow 实例,它由几个元素组成:

  • 主机
  • http-listener
  • https-listener
  • ajp-listener

host 元素提供虚拟主机配置,而三个监听器向 Undertow 实例提供该类型的连接。

服务器的默认行为是在服务器启动时排队请求。您可以使用主机上的 queue-requests-on-start 属性来更改此默认行为。如果此属性设为 true (默认),则到达服务器启动时的请求将保持,直到服务器就绪为止。如果此属性设为 false,则在服务器完全启动前到达的请求将使用默认响应代码拒绝。

无论属性值如何,请求处理都不会启动,直到服务器完全启动为止。

您可以使用管理控制台配置 queue-requests-on-start 属性,方法是导航到 ConfigurationSubsystemsWeb (Undertow)Server,选择服务器,点 View,然后选择 Hosts 选项卡。对于受管域,您必须指定要配置的配置集。

注意

可以配置多个服务器,允许完全隔离部署和服务器。这在某些情况下(如多租户环境)非常有用。

JBoss EAP 默认提供服务器:

15.1.5. 默认 undertow 子系统配置

此参考提供了 Undertow 子系统的默认配置。

<subsystem xmlns="{UndertowSubsystemNamespace}" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
    <buffer-cache name="default"/>
    <server name="default-server">
        <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
        <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
        <host name="default-host" alias="localhost">
            <location name="/" handler="welcome-content"/>
            <http-invoker security-realm="ApplicationRealm"/>
        </host>
    </server>
    ...
</subsystem>
Copy to Clipboard Toggle word wrap

15.1.6. 使用管理 CLI 配置服务器

此流程解释了如何使用管理 CLI 管理 Undertow 子系统中的服务器。您可以根据需要更新现有服务器、创建新服务器或删除服务器。

注意

您还可以使用管理控制台配置服务器,方法是导航到 ConfigurationSubsystemsWeb (Undertow)Server

先决条件

  • 您可以访问管理 CLI。
  • 有修改服务器配置的权限。

流程

  1. 更新现有服务器

    /subsystem=undertow/server=default-server:write-attribute(name=default-host,value=default-host)
    Copy to Clipboard Toggle word wrap
    reload
    Copy to Clipboard Toggle word wrap
  2. 创建新服务器

    /subsystem=undertow/server=new-server:add
    Copy to Clipboard Toggle word wrap
    reload
    Copy to Clipboard Toggle word wrap
  3. 删除服务器

    /subsystem=undertow/server=new-server:remove
    Copy to Clipboard Toggle word wrap
    reload
    Copy to Clipboard Toggle word wrap

15.1.7. 访问日志

您可以在您定义的每个主机上配置访问日志记录。

有两个访问日志记录选项可用:标准访问日志记录和控制台访问日志。

请注意,访问日志记录所需的额外处理可能会影响系统性能。

15.1.7.1. 标准访问日志记录

标准访问日志记录将日志条目写入日志文件。

默认情况下,日志文件存储在 standalone/log/access_log.log 目录中。

要启用标准访问日志记录,请将 access-log 设置添加到您要捕获访问日志数据的主机。以下 CLI 命令演示了默认 JBoss EAP 服务器中的默认主机上的配置:

/subsystem=undertow/server=default-server/host=default-host/setting=access-log:add
Copy to Clipboard Toggle word wrap
注意

您必须在启用标准访问日志记录后重新载入服务器。

默认情况下,访问日志记录包括以下数据:

  • 远程主机名
  • 远程逻辑用户名(始终 -)
  • 已验证的远程用户
  • 请求的日期和时间,采用通用日志格式
  • 请求的第一行
  • 响应的 HTTP 状态代码
  • 发送的字节数,不包括 HTTP 标头

这组数据被定义为通用模式。另外,还可使用另一个模式。除了以通用模式记录的数据外,组合模式还包括传入标头中的 referer 和 user 代理。

您可以使用 pattern 属性更改记录的数据。以下 CLI 命令演示了更新 pattern 属性以使用 combined 模式:

/subsystem=undertow/server=default-server/host=default-host/setting=access-log:write-attribute(name=pattern,value="combined"
Copy to Clipboard Toggle word wrap
注意

在更新 pattern 属性后,您必须重新加载服务器。

Expand
表 15.1. 可用模式
pattern描述

%a

远程 IP 地址

%A

本地 IP 地址

%b

发送字节数,不包括 HTTP 标头,如果没有发送任何字节

%B

发送的字节数,不包括 HTTP 标头

%H

远程主机名

%H

请求协议

%l

来自 identd 的远程逻辑用户名(始终是 return -; 包括 Apache 访问日志兼容性)

%m

请求方法

%p

本地端口

%q

查询字符串(不包括 ? 字符)

%R

请求的第一行

%s

响应的 HTTP 状态代码

%t

日期和时间,通用日志格式

%u

已验证的远程用户

%U

请求的 URL 路径

%v

本地服务器名称

%D

处理请求的时间(以毫秒为单位)

%T

处理请求的时间(以秒为单位)

%I

当前 Request thread name (稍后可以与堆栈追踪进行比较)

Common

%H %l %u %t "%r" %s %b

组合

%H %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}"

您还可以从 Cookie、传入标头和响应标头或会话写入信息。语法在 Apache 语法后建模:

  • 用于传入标头的 %{I,xxx}
  • %{O,xxx} 用于传出响应标头
  • 特定 Cookie 的 %{c,xxx}
  • %{R,xxx},其中 xxxServletRequest中的属性
  • %{s,xxx},其中 xxxHttpSession中的属性

此日志提供了其他配置选项。如需更多信息,请参阅附录中的"access-log 属性"。

15.1.7.2. 控制台访问日志

控制台访问日志记录根据 JSON 数据将数据写入 stdout 结构化。

每个访问日志记录都是一行数据。您可以通过日志聚合系统捕获此数据以进行处理。

要配置控制台访问日志记录,请将 console-access-log 设置添加到您要捕获访问日志数据的主机。以下 CLI 命令演示了默认 JBoss EAP 服务器中的默认主机上的配置:

/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:add
Copy to Clipboard Toggle word wrap

默认情况下,控制台访问日志记录包括以下数据:

Expand
表 15.2. 默认控制台访问日志数据
日志数据字段名称描述

eventSource

请求中的事件源

hostName

处理请求的 JBoss EAP 主机

bytesSent

对请求发送的 JBoss EAP 服务器的字节数

dateTime

JBoss EAP 服务器处理请求的日期和时间

remoteHost

请求源自的计算机的 IP 地址

remoteUser

与远程请求关联的用户名

requestLine

已提交的请求

responseCode

JBoss EAP 服务器返回的 HTTP 响应代码

默认属性始终包含在日志输出中。您可以使用 attributes 属性更改默认日志数据的标签,在某些情况下可以更改数据配置。您还可以使用 attributes 属性在输出中添加额外的日志数据。

Expand
表 15.3. 可用的控制台访问日志数据
日志数据字段名称描述格式

authentication-type

用于验证与请求关联的用户的身份验证类型。默认标签: authenticationType 使用 key 选项更改此属性的标签。

authentication-type{} authentication-type={key="authType"}

bytes-sent

请求返回的字节数,不包括 HTTP 标头。默认标签: bytesSent 使用 key 选项更改此属性的标签。

bytes-sent={} bytes-sent={key="sent-bytes"}

date-time

接收和处理请求的日期和时间。默认 label: dateTime 使用 key 选项更改此属性的标签。使用 date-format 定义用于格式化 date-time 记录的模式。模式必须是 Java SimpleDateFormatter 模式。使用 time-zone 选项指定在定义了 date-format 选项时,用来格式化日期和时间数据的时区。这个值必须是有效的 java.util.TimeZone。

date-time={key="<keyname>", date-format="<date-time format>"} date-time={key="@timestamp", date-format="yyyy-MM-dd'T'HH:mm:ssSSS"}

host-and-port

请求查询的主机和端口。默认标签:hostAndPort 使用 key 选项更改此属性的标签。

host-and-port{} host-and-port={key="port-host"}

local-ip

本地连接的 IP 地址。使用 key 选项更改此属性的标签。默认标签:localIp 使用 key 选项更改此属性的标签。

local-ip{} local-ip{key=”localIP”}

local-port

本地连接的端口。默认标签:localPort 使用 key 选项更改此属性的标签。

local-port{} local-port{key=”LocalPort”}

local-server-name

处理请求的本地服务器的名称。默认标签:localServerName 使用 key 选项更改此属性的标签。

local-server-name {} local-server-name {key=LocalServerName}

path-parameter

请求中包含的一个或多个路径或 URI 参数。name 属性是一个以逗号分隔的名称列表,用于解析交换值。使用 key-prefix 属性使密钥是唯一的。如果指定了 key-prefix,前缀会添加到输出中每个 path 参数的名称中。

path-parameter{names={store,section}} path-parameter{names={store,section}, key-prefix="my-"}

predicate

predicate 上下文的名称。name 属性是一个以逗号分隔的名称列表,用于解析交换值。使用 key-prefix 属性使密钥是唯一的。如果指定了 key-prefix,前缀会添加到输出中每个 path 参数的名称中。

predicate{names={store,section}} predicate{names={store,section}, key-prefix="my-"}

query-parameter

请求中包含的一个或多个查询参数。name 属性是一个以逗号分隔的名称列表,用于解析交换值。使用 key-prefix 属性使密钥是唯一的。如果指定了 key-prefix,前缀会添加到输出中每个 path 参数的名称中。

query-parameter{names={store,section}} query-parameter{names={store,section}, key-prefix="my-"}

query-string

请求的查询字符串。默认 label: queryString 使用 key 选项更改此属性的标签。使用 include-question-mark 属性来指定查询字符串应包含问号。默认情况下,不包括问号。

query-string{} query-string{key=”QueryString”, include-question-mark=”true”}

relative-path

请求的相对路径。默认标签: relativePath 使用 key 选项更改此属性的标签。

relative-path{} relative-path{key="RelativePath"}

remote-host

远程主机名。默认标签:remoteHost 使用 key 选项更改此属性的标签。

remote-host{} remote-host{key=”RemoteHost”}

remote-ip

远程 IP 地址。默认标签:remoteIp 使用 key 选项更改此属性的标签。使用 obfuscated 属性来模糊处理输出日志记录中的 IP 地址。默认值为 false。

remote-ip{} remote-ip{key=”RemoteIP”, obfuscated=”true”}

remote-user

已验证的远程用户。默认标签:remoteUser 使用密钥选项来更改此属性的标签。

remote-user{} remote-user{key="RemoteUser"}

request-header

请求标头的名称。结构化数据的键是标头的名称;值是命名标头的值。name 属性是一个以逗号分隔的名称列表,用于解析交换值。使用 key-prefix 属性使密钥是唯一的。如果指定了 key-prefix,前缀会添加到日志输出中的请求标头名称中。

request-header{names={store,section}} request-header{names={store,section}, key-prefix="my-"}

请求标头

请求行。默认标签:requestLine 使用 key 选项更改此属性的标签。

request-line{} request-line{key="Request-Line"}

request-method

请求方法。默认 label: requestMethod 使用 key 选项更改此属性的标签。

request-method{} request-method{key="RequestMethod"}

request-path

请求的相对路径。默认 label: requestPath 使用 key 选项更改此属性的标签。

request-path{} request-path{key="RequestPath"}

request-protocol

请求的协议。默认标签: requestProtocol 使用 key 选项更改此属性的标签。

request-protocol{} request-protocol{key=”RequestProtocol”}

request-scheme

请求的 URI 方案。默认标签: requestScheme 使用 key 选项更改此属性的标签。

request-scheme{} request-scheme{key=”RequestScheme”}

request-url

原始请求 URI。如果由客户端指定,包括主机名、协议等。默认 label: requestUrl 使用 key 选项更改此属性的标签。

request-url{} request-url{key="RequestURL"}

resolved-path

解析的路径。默认 Label: resolvedPath 使用 key 选项更改此属性的标签。

resolved-path{} resolved-path{key=”ResolvedPath”}

response-code

响应代码。默认标签: responseCode 使用 key 选项更改此属性的标签。

response-code{} response-code{key=”ResponseCode”}

response-header

响应标头的名称。结构化数据的键是标头的名称;值是命名标头的值。name 属性是一个以逗号分隔的名称列表,用于解析交换值。使用 key-prefix 属性使密钥是唯一的。如果指定了 key-prefix,前缀会添加到日志输出中的请求标头名称中。

response-header{names={store,section}} response-header{names={store,section}, key-prefix="my-"}

response-reason-phrase

响应代码的文本原因。默认标签: responseReasonPhrase 使用 key 选项更改此属性的标签。

response-reason-phrase{} response-reason-phrase{key=”ResponseReasonPhrase”}

response-time

处理请求的时间。默认 label: responseTime 使用 key 选项更改此属性的标签。默认时间单位是 MILLISECONDS。可用时间单元包括:* NANOSECONDS * MICROSECONDS * MILLISECONDS * SECONDS

response-time{} response-time{key="ResponseTime", time-unit=SECONDS}

secure-exchange

指明交换是否安全。默认标签: secureExchange 使用 key 选项更改此属性的标签。

secure-exchange{} secure-exchange{key=”SecureExchange”}

ssl-cipher

请求的 SSL 密码。默认标签:sslCipher 使用 key 选项更改此属性的标签。

ssl-cipher{} ssl-cipher{key="SSLCipher"}

ssl-client-cert

请求的 SSL 客户端证书。默认标签:sslClientCert 使用 key 选项更改此属性的标签。

ssl-client-cert{} ssl-client-cert{key=”SSLClientCert”}

ssl-session-id

请求的 SSL 会话 ID。默认标签:sslSessionId 使用 key 选项更改此属性的标签。

ssl-session-id{} stored-response

存储的请求响应。默认标签: storedResponse 使用 key 选项来更改此属性的标签。

stored-response{} stored-response{key=”StoredResponse”}

thread-name

当前线程的线程名称。默认 label: threadName 使用 key 选项更改此属性的标签。

thread-name{} thread-name{key="ThreadName"}

transport-protocol

您可以使用 metadata 属性配置额外的任意数据,以包含在访问日志记录中。metadata 属性的值是一组 key:value 对,用于定义要在访问日志记录中包含的数据。对中的值可以是管理模型表达式。当服务器启动或重新加载时,管理模型表达式会被解析。键值对用逗号分开。

以下 CLI 命令演示了复杂的控制台日志配置示例,包括额外的日志数据、日志数据自定义和其他元数据:

/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:add(metadata={"@version"="1", "qualifiedHostName"=${jboss.qualified.host.name:unknown}}, attributes={bytes-sent={}, date-time={key="@timestamp", date-format="yyyy-MM-dd'T'HH:mm:ssSSS"}, remote-host={}, request-line={}, response-header={key-prefix="responseHeader", names=["Content-Type"]}, response-code={}, remote-user={}})
Copy to Clipboard Toggle word wrap

生成的访问日志记录类似以下额外 JSON 数据(请注意:以下示例输出被格式化为可读性);实际记录中,所有数据都将作为一行输出:

{
    "eventSource":"web-access",
    "hostName":"default-host",
    "@version":"1",
    "qualifiedHostName":"localhost.localdomain",
    "bytesSent":1504,
    "@timestamp":"2019-05-02T11:57:37123",
    "remoteHost":"127.0.0.1",
    "remoteUser":null,
    "requestLine":"GET / HTTP/2.0",
    "responseCode":200,
    "responseHeaderContent-Type":"text/html"
}
Copy to Clipboard Toggle word wrap

以下命令演示了在激活控制台访问日志后对日志数据的更新:

/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:write-attribute(name=attributes,value={bytes-sent={}, date-time={key="@timestamp", date-format="yyyy-MM-dd'T'HH:mm:ssSSS"}, remote-host={}, request-line={}, response-header={key-prefix="responseHeader", names=["Content-Type"]}, response-code={}, remote-user={}})
Copy to Clipboard Toggle word wrap

以下命令演示了在激活控制台访问日志后对自定义元数据的更新:

/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:write-attribute(name=metadata,value={"@version"="1", "qualifiedHostName"=${jboss.qualified.host.name:unknown}})
Copy to Clipboard Toggle word wrap

15.2. 配置 servlet 容器

servlet 容器提供所有 servlet、JavaServer Pages Jakarta Server Pages 和 WebSocket 相关的配置,包括与会话相关的设置。虽然大多数服务器只需要一个 servlet 容器,但可以通过添加额外的 servlet-container 元素来配置多个 servlet 容器。通过具有多个 servlet 容器,可以将多个部署部署到不同虚拟主机上的同一上下文路径。

注意

servlet 容器提供的大部分配置可以被使用其 web.xml 文件部署的应用程序单独覆盖。

15.2.1. 默认的 undertow 子系统配置

JBoss EAP 默认提供一个 servlet 容器。此参考提供了 Undertow 子系统的默认配置,包括 servlet 容器。

<subsystem xmlns="{UndertowSubsystemNamespace}">
  <buffer-cache name="default"/>
  <server name="default-server">
    ...
  </server>
  <servlet-container name="default">
    <jsp-config/>
    <websockets/>
  </servlet-container>
  ...
</subsystem>
Copy to Clipboard Toggle word wrap

此流程解释了如何使用管理 CLI 和管理控制台管理 Undertow 子系统中的 servlet 容器。您可以根据需要更新现有的 servlet 容器、创建新容器或删除 servlet 容器。

先决条件

  • 您可以访问管理 CLI。
  • 您可以访问管理控制台。
  • 有修改服务器配置的权限。

使用管理控制台管理 Undertow 子系统中的 servlet 容器

您还可以使用管理控制台配置 servlet 容器,方法是导航到 ConfigurationSubsystemsWeb (Undertow)Servlet Container

使用管理 CLI 在 Undertow 子系统中管理 servlet 容器

以下示例演示了如何使用管理 CLI 配置 servlet 容器

流程

  1. 连接到管理 CLI:
  2. 运行以下命令以更新 servlet 容器的属性:

         ----
         /subsystem=undertow/servlet-container=default:write-attribute(name=ignore-flush,value=true)
         ----
    Copy to Clipboard Toggle word wrap
  3. 重新载入服务器以应用更改:+

         ----
         reload
         ----
    Copy to Clipboard Toggle word wrap

创建新的 servlet 容器

  1. 连接到管理 CLI:
  2. 运行以下命令以创建新的 servlet 容器:

         ----
         /subsystem=undertow/servlet-container=new-servlet-container:add
         ----
    Copy to Clipboard Toggle word wrap
  3. 重新载入服务器以应用更改:

         ----
         reload
         ----
    Copy to Clipboard Toggle word wrap

删除 servlet 容器

  1. 连接到管理 CLI。
  2. 运行以下命令以删除 servlet 容器:

         ----
         /subsystem=undertow/servlet-container=new-servlet-container:remove
         ----
    Copy to Clipboard Toggle word wrap
  3. 重新载入服务器以应用更改:

         ----
         reload
         ----
    Copy to Clipboard Toggle word wrap

15.3. 配置 servlet 扩展

servlet 扩展允许您 hook 到 servlet 部署过程中,并修改 servlet 部署的各个方面。如果您需要为部署添加额外的身份验证机制,或使用原生 Undertow 处理程序作为 servlet 部署的一部分,这非常有用。

要创建自定义 servlet 扩展,需要在部署中实施 io.undertow.servlet.ServletExtension 接口,然后将实施类的名称添加到部署中的 META-INF/services/io.undertow.servlet.ServletExtension 文件中。您还需要包含 ServletExtension 实施的编译类文件。当 Undertow 部署 servlet 时,它会从 部署 类加载程序加载所有服务,然后调用其 handleDeployment 方法。

将 Undertow DeploymentInfo 结构(包含部署的完整和可变描述)传递到此方法。您可以修改此结构以更改部署的任何方面。

DeploymentInfo 结构是嵌入式 API 使用的相同结构,因此 ServletExtension 在嵌入式模式中使用 Undertow 时具有相同的灵活性。

15.4. 配置处理程序

JBoss EAP 允许您配置两种类型的处理程序:

  • 文件处理程序
  • reverse-Proxy 处理程序

文件处理程序 提供静态文件。每一文件处理程序必须关联到虚拟主机中的位置。reverse-proxy 处理程序 允许 JBoss EAP 充当高性能反向代理。

JBoss EAP 默认提供文件处理程序。此参考提供了用于处理程序的 Undertow 子系统的默认配置。

<subsystem xmlns="{UndertowSubsystemNamespace}" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
    <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>
Copy to Clipboard Toggle word wrap

15.4.2. 使用管理 CLI 管理文件处理程序

此流程解释了如何使用管理 CLI 管理 Undertow 子系统中的文件处理程序。您可以根据需要更新现有文件处理程序、创建新处理程序或删除文件处理程序。

先决条件

  • 您可以访问管理 CLI。
  • 有修改服务器配置的权限。

流程

  • 更新现有文件处理程序

    1. 连接到管理 CLI。
    2. 运行以下命令以更新文件处理器的属性:

      ----
      /subsystem=undertow/configuration=handler/file=welcome-content:write-attribute(name=case-sensitive,value=true)
      ----
      Copy to Clipboard Toggle word wrap
    3. 重新载入服务器以应用更改:

      ----
      reload
      ----
      Copy to Clipboard Toggle word wrap
  • 创建新文件处理程序

    1. 连接到管理 CLI。
    2. 运行以下命令以创建新文件处理器:

      ----
      /subsystem=undertow/configuration=handler/file=new-file-handler:add(path="${jboss.home.dir}/welcome-content")
      ----
      Copy to Clipboard Toggle word wrap
      [WARNING]
      ====
      If you set a file handler's `path` directly to a file instead of a directory, any `location` elements that reference that file handler must not end with a forward slash (`/`). Otherwise, the server will return a `404 - Not Found` response.
      ====
      Copy to Clipboard Toggle word wrap
  • 删除文件处理程序

    1. 连接到管理 CLI。
    2. 运行以下命令以删除文件处理程序:

      ----
      /subsystem=undertow/configuration=handler/file=new-file-handler:remove
      ----
      Copy to Clipboard Toggle word wrap
    3. 重新载入服务器以应用更改:

      ----
      reload
      ----
      Copy to Clipboard Toggle word wrap

15.5. 配置过滤器

过滤器允许修改请求的某些方面,并可使用 predicates 来控制过滤器执行的时间。过滤器的一些常见用例包括设置标头或执行 GZIP 压缩。

注意

过滤器的功能等同于 JBoss EAP 6 中使用的全局 valve。

可以定义以下类型的过滤器:

  • custom-filter
  • error-page
  • expression-filter
  • gzip
  • mod-cluster
  • request-limit
  • response-header
  • rewrite

此流程解释了如何使用管理 CLI 和管理控制台管理 Undertow 子系统中的过滤器。您可以根据需要更新现有过滤器、创建新过滤器或删除过滤器。

先决条件

  • 您可以访问管理 CLI。
  • 您可以访问管理控制台。
  • 有修改服务器配置的权限。

使用管理控制台管理文件处理程序

您可以使用管理控制台配置过滤器,方法是导航到 ConfigurationSubsystemsWeb (Undertow)Filters

使用管理 CLI 管理文件处理程序

以下流程演示了如何使用管理 CLI 配置过滤器

流程

  • 更新现有过滤器

    1. 连接到管理 CLI。
    2. 运行以下命令以更新过滤器的属性:

      ----
      /subsystem=undertow/configuration=filter/response-header=myHeader:write-attribute(name=header-value,value="JBoss-EAP")
      ----
      Copy to Clipboard Toggle word wrap
    3. 重新载入服务器以应用更改:

      ----
      reload
      ----
      Copy to Clipboard Toggle word wrap
  • 创建新过滤器

    1. 连接到管理 CLI。
    2. 运行以下命令以创建新过滤器:

      ----
      /subsystem=undertow/configuration=filter/response-header=new-response-header:add(header-name=new-response-header,header-value="My Value")
      ----
      Copy to Clipboard Toggle word wrap
  • 删除过滤器

    1. 连接到管理 CLI。
    2. 运行以下命令以删除过滤器:

      ----
      /subsystem=undertow/configuration=filter/response-header=new-response-header:remove
      ----
      Copy to Clipboard Toggle word wrap
    3. 重新载入服务器以应用更改:

      ----
      reload
      ----
      Copy to Clipboard Toggle word wrap
15.5.1.1. 配置 buffer-request 处理程序

来自客户端或浏览器的请求由两个部分组成:标头和正文。在典型的情形中,标头和正文发送到 JBoss EAP,两者之间没有任何延迟。但是,如果标头首先发送,然后在几秒钟后发送正文,则会延迟发送完整的请求。此方案在 JBoss EAP 中创建线程,以显示 等待 执行完整请求。

使用 buffer-request 处理程序可以更正发送标头和请求的正文导致的延迟。buffer-request 处理程序尝试在将非阻塞 IO 线程分配给 worker 线程前消耗来自非阻塞 IO 线程的请求。当没有添加 buffer-request 处理程序时,到 worker 线程的线程分配直接发生。但是,当添加 buffer-request 处理程序时,处理程序会在将其分配给 worker 线程前,使用 IO 线程以非阻塞方式缓冲的数据量。

您可以使用以下管理 CLI 命令配置 buffer-request 处理程序:

先决条件

  • 您可以访问管理 CLI。
  • 有修改服务器配置的权限。

流程

  1. 运行以下命令来添加 buffer-request 处理程序:

       ----
       /subsystem=undertow/configuration=filter/expression-filter=buf:add(expression="buffer-request(buffers=1)")
       ----
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,将处理程序附加到您的服务器和主机:

       ----
       /subsystem=undertow/server=default-server/host=default-host/filter-ref=buf:add
       ----
    Copy to Clipboard Toggle word wrap
  3. 计算缓冲区请求大小:

    `Total_size = num_buffers {MultiplicationSign} buffer_size`
    Copy to Clipboard Toggle word wrap
    Where:
    Copy to Clipboard Toggle word wrap
    • total_size 是在请求分配给 worker 线程前缓冲的数据大小。
    • num_ buffers 是缓冲区数量,由处理程序上的 buffer 参数设置(在本示例中,它被设置为 1)。
    • buffer_size 是每个缓冲区的大小,在 io 子系统中设置(每个请求默认为 16KB)。

      警告

      避免配置非常大的缓冲区请求,或者您可能内存不足。

  4. 重新载入服务器以应用更改:

       ----
       reload
       ----
    Copy to Clipboard Toggle word wrap
15.5.1.2. 了解 SameSite 属性

使用 SameSite 属性在同一站点内定义 Cookie 的可访问性。此属性有助于防止跨站点请求伪造攻击,因为浏览器不会通过跨站点请求发送 Cookie。

您可以使用 undertow 子系统中的 SameSite CookieHandler 为 Cookie 配置 SameSite 属性。使用这个配置,您不需要更改应用程序代码。

15.5.1.3. SameSiteCookieHandler parameters

下表详细介绍了 SameSiteCookieHandler 的参数:

Expand
表 15.4. SameSiteCookieHandler parameters
参数名称存在描述

add-secure-for-none

选填

SameSite 属性模式为 None 时,向 Cookie 添加 Secure 属性。默认值为 true

case-sensitive

选填

指明 cookie-pattern 是否区分大小写。默认值为 true

cookie-pattern

选填

接受 Cookie 名称的正则表达式模式。如果没有指定,则属性 SameSite=<specified-mode&gt; 会添加到所有 Cookie 中。

enable-client-checker

选填

验证客户端应用程序是否与 SameSite=None 属性不兼容。默认值为 true

如果您使用此默认值,并将 SameSite 属性模式设置为 None 以外的值,则参数会忽略验证。

为了防止与不兼容的客户端出现问题,此参数跳过将 SameSite 属性模式设置为 None,且无效。对于来自兼容客户端的请求,该参数会如预期应用 SameSite 属性模式 None

模式

必需

指定 SameSite 属性模式,它可以设置为 Strict、LexNone

为了提高安全性,为了防止跨站点请求伪造攻击,一些浏览器将默认的 SameSite 属性模式设置为 Lax。如需更多信息,请参阅附加资源部分

SameSiteCookieHandler 将属性 SameSite=<specified-mode > 添加到 Cookie,在未指定 cookie-pattern 时与 Cookie-pattern 匹配。cookie-pattern 根据在 区分大小写 时设置的值匹配。

在配置 SameSite 属性前,请考虑以下点:

  • 检查您的应用,以识别 Cookie 是否需要 SameSite 属性,以及是否需要保护这些 Cookie。
  • 对于所有 Cookie,将 SameSite 属性模式设置为 None 可能会导致应用程序更易受攻击。

此流程解释了如何使用 expression-filter 在服务器中配置 SameSiteCookieHandler

先决条件

  • 您可以访问管理 CLI。
  • 有修改服务器配置的权限。

流程

  1. 使用 SameSiteCookieHandler 创建一个新的 expression-filter

    ----
    /subsystem=undertow/configuration=filter/expression-filter=addSameSiteLax:add(expression="path-prefix('/mypathprefix') -> samesite-cookie(Lax)")
    ----
    Copy to Clipboard Toggle word wrap
  2. undertow Web 服务器中启用 expression-filter:

    ----
    /subsystem=undertow/server=default-server/host=default-host/filter-ref=addSameSiteLax:add
    ----
    Copy to Clipboard Toggle word wrap
15.5.1.5. 使用配置文件配置 SameSiteCookieHandler

此流程解释了如何通过添加 undertow-handlers.conf 文件,在应用中配置 SameSiteCookieHandler

先决条件

  • 访问应用程序的源代码。
  • 修改应用程序文件的权限。

流程

  1. undertow-handlers.conf 文件添加到您的 WAR 的 WEB-INF 目录中。
  2. undertow-handlers.conf 文件中,使用特定的 SameSiteCookieHandler 参数添加以下命令:

    ----
    samesite-cookie(mode=<mode>)
    ----
    Copy to Clipboard Toggle word wrap
    Replace `<mode>` with one of the valid values: `Strict`, `Lax`, or `None`.
    Copy to Clipboard Toggle word wrap
    You can also configure other `SameSiteCookieHandler` parameters, such as `cookie-pattern`, `case-sensitive`, `enable-client-checker`, or `add-secure-for-none`.
    Copy to Clipboard Toggle word wrap
  3. 保存文件并重新部署应用程序(如有必要)。

15.6. 配置默认欢迎 Web 应用

JBoss EAP 包含一个默认的 Welcome 应用,默认显示在端口 8080 上的根上下文中。

Undertow 中预先配置了提供欢迎内容的默认服务器。

默认的 Undertow 子系统配置
<subsystem xmlns="{UndertowSubsystemNamespace}" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
    ...
    <server name="default-server">
        <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
        <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
        <host name="default-host" alias="localhost">
            <location name="/" handler="welcome-content"/>
            <http-invoker security-realm="ApplicationRealm"/>
        </host>
    </server>
    ...
    <handlers>
        <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
    </handlers>
</subsystem>
Copy to Clipboard Toggle word wrap

默认服务器 default-server 配置了默认主机 default-host。默认主机被配置为使用 < location> 元素处理对服务器根 的请求,以及 welcome-content 文件处理程序。welcome-content 处理程序在 path 属性中指定的位置上提供内容。

此默认 Welcome 应用可以替换为您自己的 Web 应用。这可以通过以下两种方式之一进行配置:

您还可以 禁用欢迎内容

15.6.1. 更改 welcome-content 文件处理程序

此流程解释了如何更改 welcome-content 文件处理程序,以指向您自己的 Web 应用。

先决条件

  • 您可以访问管理 CLI。
  • 有修改服务器配置的权限。

流程

  1. 修改现有 welcome-content 文件处理器的路径以指向您的新内容:

       ----
       /subsystem=undertow/configuration=handler/file=welcome-content:write-attribute(name=path,value="/path/to/your/content")
       ----
    Copy to Clipboard Toggle word wrap

    另外,您可以创建一个新的文件处理程序,供服务器的 root 使用:

       ----
       /subsystem=undertow/configuration=handler/file=NEW_FILE_HANDLER:add(path="/path/to/your/content")
       /subsystem=undertow/server=default-server/host=default-host/location=\/:write-attribute(name=handler,value=NEW_FILE_HANDLER)
       ----
    Copy to Clipboard Toggle word wrap
  2. 重新载入服务器以使更改生效:

       ----
       reload
       ----
    Copy to Clipboard Toggle word wrap

15.6.2. 更改 default-web-module

此流程解释了如何通过更改 default-web-module 将部署的 Web 应用程序映射到服务器的 root。

先决条件

  • 您可以访问管理 CLI。
  • 有修改服务器配置的权限。

流程

  1. 将部署的 Web 应用映射到服务器的 root。

       ----
       /subsystem=undertow/server=default-server/host=default-host:write-attribute(name=default-web-module,value=your-application.war)
       ----
    Copy to Clipboard Toggle word wrap
  2. 重新载入服务器以使更改生效:
   ----
   reload
   ----
Copy to Clipboard Toggle word wrap

15.6.3. 禁用默认的欢迎 Web 应用程序

此流程解释了如何通过删除根上下文 的位置 条目来禁用默认的欢迎 Web 应用程序。

先决条件

  • 您可以访问管理 CLI。
  • 有修改服务器配置的权限。

流程

  1. 删除 default-host 的位置 条目 /

       ----
       /subsystem=undertow/server=default-server/host=default-host/location=\/:remove
       ----
    Copy to Clipboard Toggle word wrap
  2. 重新载入服务器以使更改生效:

       ----
       reload
       ----
    Copy to Clipboard Toggle word wrap

15.7. 配置 HTTP 会话超时

HTTP 会话超时定义声明 HTTP 会话无效所需的不活跃时间周期。例如,当用户访问部署到 JBoss EAP 的应用时,将创建一个 HTTP 会话。如果该用户然后在 HTTP 会话超时期限过后尝试再次访问应用程序,则原始 HTTP 会话将无效,用户会被强制创建新 HTTP 会话。这可能导致丢失未有持久性的数据,或者要求用户重新验证。

HTTP 会话超时通常在应用程序的 web.xml 文件中配置。但是,也可以在 JBoss EAP 中指定默认的 HTTP 会话超时。服务器超时值将适用于所有部署的应用程序,除非被应用程序的 web.xml 文件覆盖。

服务器值在 undertow 子系统的 servlet-container 部分中的 default-session-timeout 属性中指定。default-session-timeout 的值在分钟中指定,默认值为 30

先决条件

  • 您可以访问管理 CLI。
  • 有修改服务器配置的权限。

流程

  1. 连接到管理 CLI。
  2. 设置 default-session-timeout 值。

    Run the following command to set the `default-session-timeout` value to `60` minutes:
    ----
    /subsystem=undertow/servlet-container=default:write-attribute(name=default-session-timeout, value=60)
    ----
    Copy to Clipboard Toggle word wrap
  3. 重新加载服务器,使更改生效。

    ----
    reload
    ----
    Copy to Clipboard Toggle word wrap

15.8. 配置仅限 HTTP 的会话管理 Cookie

会话管理 Cookie 可以由 HTTP API 和非 HTTP API (如 JavaScript)访问。JBoss EAP 提供了将 HttpOnly 标头作为 Set-Cookie 响应标头的一部分发送到客户端(通常是浏览器)。在支持的浏览器中,启用此标头告诉浏览器阻止通过非 HTTP API 访问会话管理 Cookie。将会话管理 Cookie 限制为 HTTP API 有助于通过跨站点脚本攻击缓解会话 Cookie 威胁。要启用此行为,http-only 属性应设为 true

重要

使用 HttpOnly 标头实际上不会阻止跨站点脚本攻击;它只是通知浏览器。浏览器还必须支持 HttpOnly 才能使此行为生效。

重要

使用 http-only 属性仅将限制应用到会话管理 Cookie,而不应用到其他浏览器 Cookie。

http-only 属性在 undertow 子系统中的两个位置设置:

  • 在 servlet 容器中,作为会话 Cookie 设置。
  • 在服务器的 host 部分中,作为单点登录属性。

15.8.2. 为主机单点登录配置 http-only

此流程解释了如何在 undertow 子系统中为主机单点登录配置 http-only 属性。

先决条件

  • 您可以访问管理 CLI。
  • 有修改服务器配置的权限。

流程

  1. 将单点登录设置添加到主机。

    Run the following command:
    Copy to Clipboard Toggle word wrap
    ----
    /subsystem=undertow/server=default-server/host=default-host/setting=single-sign-on:add
    ----
    Copy to Clipboard Toggle word wrap
  2. http-only 属性设置为 true

    Run the following command:
    Copy to Clipboard Toggle word wrap
    ----
    /subsystem=undertow/server=default-server/host=default-host/setting=single-sign-on:write-attribute(name=http-only,value=true)
    ----
    Copy to Clipboard Toggle word wrap
  3. 重新加载服务器,使更改生效。

    ----
    reload
    ----
    Copy to Clipboard Toggle word wrap

15.9. 了解 undertow 中的 HTTP/2

Undertow 允许使用 HTTP/2 标准,通过同一 TCP 连接压缩标头和多个流来减少延迟。它还为服务器提供在请求资源前将资源推送到客户端的功能,从而加快页面负载。

请注意,HTTP/2 仅适用于也支持 HTTP/2 标准的客户端和服务器。

重要

大多数现代浏览器通过安全 TLS 连接(称为 h2)强制使用 HTTP/2,并且可能不支持通过普通 HTTP (称为 h2 c)的 HTTP/2。仍可将 JBoss EAP 配置为使用 HTTP/2 和 h2c,而无需使用 HTTPS,并且仅使用 HTTP 升级为普通 HTTP。在这种情况下,您可以在 HTTP 监听器中启用 HTTP/2 :

/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=enable-http2,value=true)
Copy to Clipboard Toggle word wrap

15.9.1. 在 Undertow 中配置 HTTP/2

此流程解释了如何通过配置 HTTPS 侦听器在 Undertow 中启用 HTTP/2。

先决条件

  • 您可以访问管理 CLI。
  • 有修改服务器配置的权限。

流程

  1. 在 HTTPS 监听器上启用 HTTP/2:

       ----
       /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=enable-http2,value=true)
       ----
    Copy to Clipboard Toggle word wrap
  2. 重新载入服务器以应用更改:

       ----
       reload
       ----
    Copy to Clipboard Toggle word wrap
注意

要将 HTTP/2 与 elytron 子系统搭配使用,您需要确保 Undertow 的 https-listener 中配置的 ssl-context 配置为 modifiable。这可以通过将适当 server-ssl-contextwrap 属性设置为 false 来实现。默认情况下,wrap 属性设为 false。Undertow 在关于 ALPN 的 ssl-context 中进行修改时需要这样做。如果提供的 ssl-context 不可写入,则无法使用 ALPN,且连接会返回 HTTP/1.1。

15.9.2. 使用 HTTP/2 时支持 ALPN

当通过安全 TLS 连接使用 HTTP/2 时,需要一个支持 Application-Layer Protocol Negotiation (ALPN) TLS 协议扩展的 TLS 堆栈。获取此堆栈因已安装的 JDK 而异。

  • 从 Java 9 开始,JDK 支持 ALPN 原生;但是,使用 OpenSSL 供应商中的 ALPN TLS 协议扩展支持时,在使用 Java 9 或更高版本时,也应该提高性能。

有关安装 OpenSSL 以获取 ALPN TLS 协议扩展支持的说明,请参考从 JBoss Core Services 安装 OpenSSL。Red Hat Enterprise Linux 8 支持标准系统 OpenSSL,且不需要额外的 OpenSSL。

安装 OpenSSL 后,请按照 xref:"configure-jboss-eap-to-use-openssl_configuring-the-web-server-undertow-in-jboss-eap"[Configure JBoss EAP 使用 OpenSSL] 中的说明进行操作。

15.9.3. 验证 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

15.10. 了解 请求转储 处理程序

RequestDumping 处理程序 io.undertow.server.handlers.RequestDumpingHandler 记录了请求的详细信息,以及 JBoss EAP 中 Undertow 处理的对应响应对象。

重要

虽然此处理程序可用于调试,但它也可能记录敏感信息。在启用此处理程序时请注意这一点。

注意

RequestDumping 处理程序取代了 JBoss EAP 6 中的 RequestDumperValve

您可以在 JBoss EAP 或单个应用中的服务器级别上配置 RequestDumping 处理程序。

15.10.1. 在 服务器上配置请求转储 处理程序

此流程解释了如何使用表达式过滤器在服务器级别配置 RequestDumping 处理程序。

先决条件

  • 您可以访问管理 CLI。
  • 有修改服务器配置的权限。

流程

  1. 使用 RequestDumping 处理程序创建一个新表达式过滤器:

       ----
       /subsystem=undertow/configuration=filter/expression-filter=requestDumperExpression:add(expression="dump-request")
       ----
    Copy to Clipboard Toggle word wrap
  2. 在 Undertow Web 服务器中启用表达式过滤器:

       ----
       /subsystem=undertow/server=default-server/host=default-host/filter-ref=requestDumperExpression:add
       ----
    Copy to Clipboard Toggle word wrap
重要

当以这种方式将启用 RequestDumping 处理程序作为表达式过滤器时,会记录 Undertow Web 服务器处理的所有请求和相应的响应。

15.10.1.1. 为特定 URL 配置处理程序

除了记录所有请求外,您还可以使用 expression 过滤器来仅记录特定 URL 的请求和对应的响应。这可以通过表达式中的 predicate 来完成,如路径、 path -prefixpath-suffix。例如,如果要将所有请求和对应的响应记录到 /myApplication/test,您可以在创建表达式过滤器时使用表达式 "path (/myApplication/test)-> dump-request" 而不是表达式 " dump-request"。这只会将一个路径完全匹配的 /myApplication/test 定向到 RequestDumping 处理程序。

15.10.1.2. 在应用程序中配置请求转储处理程序

此流程解释了如何在单个应用程序中配置 RequestDumping 处理程序。这会将处理程序的范围限制为该特定应用。

流程

  1. 创建或编辑应用中的 WEB-INF/undertow-handlers.conf 文件。
  2. 要记录此应用的所有请求和对应的响应,请将以下行添加到 undertow-handlers.conf 中:

    ----
    dump-request
    ----
    Copy to Clipboard Toggle word wrap

    另外,要记录应用中特定 URL 的请求和响应,请在表达式中使用 predicate。

    Replace `/test` with the desired path relative to the application's context root.
    Copy to Clipboard Toggle word wrap
    [source]
    ----
    path(/test) -> dump-request
    ----
    Copy to Clipboard Toggle word wrap
    注意

    在应用的 WEB-INF/undertow-handlers.conf 中定义的表达式中使用 predicates,如 pathpath-prefixpath-suffix

    例如,如果应用程序的上下文 root 是 /myApplication,并且您使用表达式 路径(/test)→ dump-request,它会将请求 记录到 /myApplication/test

  3. 如果需要,请重新部署应用,以应用更改。

第 16 章 配置远程和连接

您可以配置 remoting 子系统,并管理 JBoss EAP 中的各种连接类型。这包括设置端点、连接器和出站连接,以促进服务器和应用程序之间的通信。您可以配置 HTTP 连接器、远程和本地出站连接,并探索额外的远程配置选项,为您提供在 JBoss EAP 中有效地管理远程和连接所需的工具。

16.1. 补救子系统配置

remoting 子系统为本地和远程服务配置入站和出站连接,以及这些连接的设置。

JBoss EAP remoting 子系统包括几个可配置的元素:

对于大多数用例,您可能需要配置 remoting 子系统。但是,如果应用程序使用自定义连接器,您必须配置它。作为远程客户端(如 Jakarta Enterprise Beans)的应用需要单独的配置来连接特定的连接器。

默认 补救 子系统配置如下:

<subsystem xmlns="urn:jboss:domain:remoting:4.0">
    <endpoint worker="default"/>
    <http-connector name="http-remoting-connector"
                    connector-ref="default"
                    sasl-authentication-factory="application-sasl-authentication"/>
</subsystem>
Copy to Clipboard Toggle word wrap

16.1.1. remoting 端点

remoting 端点使用由 io 子系统声明和配置的 XNIO worker。此 worker 有助于非阻塞 I/O 操作,增强远程连接的性能和可扩展性。

16.1.2. http-connector 配置元素

http-connector 元素是一个默认配置元素,它允许外部客户端使用 undertow 的 HTTP 升级功能连接到服务器。

使用这个配置,客户端首先使用 HTTP 协议与服务器建立连接,然后通过相同的连接切换到 远程协议。这使得客户端能够使用不同的协议连接同一端口,如 undertow 的默认端口 8080,从而减少服务器上的开放端口数量。

需要通过 HTTP 升级连接到服务器的客户端必须使用 remoting remote+http 协议进行未加密的连接,或使用 remoting remote+https 协议进行加密连接。

16.1.3. 出站连接

远程 子系统中的出站连接使应用能够与外部资源通信。

您可以指定三种不同类型的出站连接:

16.2. 配置端点

您可以在 JBoss EAP 中配置远程端点,以建立应用的连接。JBoss EAP 包括一个默认的端点配置,您可以使用管理 CLI 命令更新该配置。

作为 JBoss EAP 管理员或开发人员,您可能需要:

  • 配置端点设置来为专用服务或环境定制通信。例如,您可以调整身份验证和安全设置,将管理流量与常规应用程序流量分开。
  • 更新现有端点配置,以满足安全性或性能要求。例如,调整身份验证重试或超时等设置可以提高安全性,并确保不同负载下获得最佳性能。
重要

在 JBoss EAP 8.0 中,remoting 子系统中的端点配置使用 io 子系统中的 worker。此 worker 管理用于移动 操作 的线程池。

JBoss EAP 提供的默认 端点 配置如下:

<subsystem xmlns="urn:jboss:domain:remoting:4.0">
  <endpoint worker="default"/>
  ...
</subsystem>
Copy to Clipboard Toggle word wrap

先决条件

  • JBoss EAP 正在运行。

流程

  1. 使用以下命令更新现有端点配置:

    /subsystem=remoting:write-attribute(name=authentication-retries,value=2)
    Copy to Clipboard Toggle word wrap
  2. 使用以下命令重新载入服务器以应用更改:

    reload
    Copy to Clipboard Toggle word wrap

16.3. 配置 HTTP 连接器

您可以在 JBoss EAP 中配置 HTTP 连接器,以使用基于 HTTP 升级的补救协议建立连接。JBoss EAP 提供了默认的 HTTP 连接器配置,您可以使用管理 CLI 命令轻松更新、创建和删除。

作为 JBoss EAP 管理员或开发人员,您可能需要:

  • 创建新的 HTTP 连接器,以使用基于 HTTP 升级的远程协议建立远程通信。这实现了对 JBoss EAP 服务的安全且高效的远程访问。
  • 更新现有的 HTTP 连接器以优化性能、增强安全性或与特定网络配置集成。调整验证机制或连接超时等属性可提高可靠性,并确保遵守安全策略。
  • 删除不必要的 HTTP 连接器,以简化配置并降低安全风险。删除未使用的连接器有助于通过最大程度减少未经授权的访问而维护干净的安全环境。

JBoss EAP 提供的默认 http-connector 配置如下:

<subsystem xmlns="urn:jboss:domain:remoting:4.0">
    ...
    <http-connector name="http-remoting-connector"
                    connector-ref="default"
                    sasl-authentication-factory="application-sasl-authentication"/>
</subsystem>
Copy to Clipboard Toggle word wrap

默认情况下,此 HTTP 连接器连接到名为 default 的 HTTP 侦听器,该监听程序在 undertow 子系统中配置。

先决条件

  • JBoss EAP 正在运行。

流程

  1. 使用以下命令创建新 HTTP 连接器:

    /subsystem=remoting/http-connector=new-connector:add(connector-ref=new-connector-ref)
    Copy to Clipboard Toggle word wrap
    注意

    您必须使用唯一 connector-ref,它还没有被另一个连接器使用。connector-ref 必须指向 Undertow 中的新或未使用的连接器,或者您可以选择使用预定义的 https 连接器。

  2. 使用以下命令更新现有的 HTTP 连接器配置:

    /subsystem=remoting/http-connector=new-connector:write-attribute(name=connector-ref,value=new-connector-ref)
    Copy to Clipboard Toggle word wrap
  3. 使用以下命令重新载入服务器以应用更改:

    reload
    Copy to Clipboard Toggle word wrap
  4. 如果需要,使用以下命令删除 HTTP 连接器:

    /subsystem=remoting/http-connector=new-connector:remove
    Copy to Clipboard Toggle word wrap

16.4. 配置出站连接

您可以在 JBoss EAP 中配置出站连接,以建立由 URI 指定的通用远程出站连接。这可让您的应用程序与外部服务有效通信。

您可以使用管理 CLI 命令更新、创建和删除配置来轻松地管理这些连接。

作为 JBoss EAP 管理员或开发人员,您可能需要:

  • 创建新的出站连接,以与外部服务建立通信。这可实现无缝数据交换,并与远程系统集成。
  • 更新现有的出站连接,以提高性能、增强安全性或与网络配置保持一致。调整目标 URI 等属性可提高可靠性,并确保与系统要求兼容。
  • 删除不必要的出站连接,以简化配置并降低安全风险。删除未使用的连接有助于通过最大程度减少未经授权的访问而维护干净的安全环境。

先决条件

  • JBoss EAP 正在运行。

流程

  1. 使用以下命令创建新的出站连接:

    /subsystem=remoting/outbound-connection=new-outbound-connection:add(uri=http://example.com)
    Copy to Clipboard Toggle word wrap
  2. 使用以下命令更新现有的出站连接:

    /subsystem=remoting/outbound-connection=new-outbound-connection:write-attribute(name=uri,value=http://example.com)
    Copy to Clipboard Toggle word wrap
  3. 如果需要,使用以下命令删除出站连接:

    /subsystem=remoting/outbound-connection=new-outbound-connection:remove
    Copy to Clipboard Toggle word wrap
  4. 使用以下命令,重新载入服务器以在删除出站连接后应用更改:

    reload
    Copy to Clipboard Toggle word wrap

16.5. 配置远程出站连接

您可以使用协议、出站套接字绑定、用户名和安全域指定远程出站连接。协议可以是 远程http-remotinghttps-remoting。您可以使用管理 CLI 命令更新、创建和删除配置来轻松地管理这些连接。

作为 JBoss EAP 管理员或开发人员,您可能需要:

  • 创建新的远程出站连接,以启用与外部服务的安全通信。这样可确保应用程序可以使用指定的协议和身份验证方法与远程系统交互。
  • 更新现有的远程出站连接,以增强安全性、提高性能或与特定网络配置集成。调整属性,如出站套接字绑定或身份验证设置可确保稳定性并遵守安全策略。
  • 删除不必要的远程出站连接,以简化配置并降低安全风险。删除未使用的连接有助于通过最大程度减少未经授权的访问而维护干净的安全环境。

先决条件

  • JBoss EAP 正在运行。

流程

  1. 使用以下命令创建新的远程出站连接:

    /subsystem=remoting/remote-outbound-connection=new-remote-outbound-connection:add(outbound-socket-binding-ref=outbound-socket-binding)
    Copy to Clipboard Toggle word wrap
    注意

    在执行这些命令前,请确保在您的配置中定义了 outbound-socket-binding。如需更多信息,请参阅出站套接字绑定

  2. 使用以下命令更新现有远程出站连接:

    /subsystem=remoting/remote-outbound-connection=new-remote-outbound-connection:write-attribute(name=outbound-socket-binding-ref,value=outbound-socket-binding)
    Copy to Clipboard Toggle word wrap
  3. 如果需要,您可以使用以下命令删除远程出站连接:

    /subsystem=remoting/remote-outbound-connection=new-remote-outbound-connection:remove
    Copy to Clipboard Toggle word wrap

16.6. 配置本地出站连接

您可以使用出站套接字绑定将本地出站连接指定为 与本地 协议的出站连接。您可以使用管理 CLI 命令更新、创建和删除配置来轻松地管理这些连接。

作为 JBoss EAP 管理员或开发人员,您可能需要:

  • 创建新的本地出站连接,以启用同一服务器实例内安全有效的通信。这有助于简化内部交互,而无需外部网络。
  • 更新现有的本地出站连接,以提高性能、修改套接字绑定或与特定配置保持一致。调整出站套接字绑定等属性可确保稳定性和兼容性。
  • 删除不必要的本地出站连接,以简化配置并降低安全风险。删除未使用的连接有助于通过最大程度减少未经授权的访问而维护干净的安全环境。

先决条件

  • JBoss EAP 正在运行。

流程

  1. 使用以下命令创建新的本地出站连接:

    /subsystem=remoting/local-outbound-connection=new-local-outbound-connection:add(outbound-socket-binding-ref=outbound-socket-binding)
    Copy to Clipboard Toggle word wrap
    注意

    在执行这些命令前,请确保在您的配置中定义了 outbound-socket-binding。更多信息,

  2. 使用以下命令更新现有的本地出站连接:

    /subsystem=remoting/local-outbound-connection=new-local-outbound-connection:write-attribute(name=outbound-socket-binding-ref,value=outbound-socket-binding)
    Copy to Clipboard Toggle word wrap
  3. 如果需要,您可以使用以下命令删除本地出站连接:

    /subsystem=remoting/local-outbound-connection=new-local-outbound-connection:remove
    Copy to Clipboard Toggle word wrap

16.7. 其他补救配置

remoting 子系统外配置有几个远程元素。

作为 JBoss EAP 管理员或开发人员,您可能需要:

  • 为远程配置 IO worker,以提高性能和管理远程任务。确保 worker 在 IO 子系统中定义。
  • 修改网络接口设置,使其与所需的公共、管理或不安全接口保持一致。配置正确的接口可确保正确连接。
  • 调整 remoting 子系统的套接字绑定,以指定适当的端口,并保持与网络和安全策略的兼容性。
  • 使用 STARTTLS 启用安全传输,以保护远程通信。确保您的配置会验证安全连接以防止安全风险,如中间人攻击。

    IO worker

    使用以下命令,为 remoting 设置 IO 工作程序。在运行这个命令前,请确保 worker 在 IO 子系统中定义:

    /subsystem=remoting:write-attribute(name=worker, value=WORKER_NAME)
    Copy to Clipboard Toggle word wrap
    网络接口

    remoting 子系统使用的网络接口是 public 接口。其他子系统也使用此接口,因此在修改时请谨慎。

    <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>
    Copy to Clipboard Toggle word wrap

    在受管域中,在 host.xml 文件中为每个主机定义 公共接口

    套接字绑定
    remoting 子系统的默认套接字绑定到端口 8080。
    安全传输配置
    远程传输使用 STARTTLS 建立安全连接,如 HTTPS 或 Secure Servlet (如果客户端请求)。相同的套接字绑定或网络端口用于安全和不安全的连接,因此不需要额外的服务器端配置。根据需要,客户端请求安全或不安全的传输。使用远程的 JBoss EAP 组件(如 Jakarta Enterprise Beans、ORB 和 Jakarta 消息传递提供程序)默认请求安全接口。
警告

STARTTLS 的工作原理是,如果客户端请求安全连接,否则默认为不安全的连接。它本质上容易受到中间漏洞的影响,攻击者会截获客户端的请求并进行修改以请求不安全的连接。如果没有接收安全连接,则必须将客户端写入正确失败,除非未安全的连接是适当的回退。

第 17 章 配置 IO 子系统

您可以在 JBoss EAP 中配置 io 子系统,以增强系统性能并支持应用操作。通过管理 XNIO 工作程序和缓冲区池,您可以确保 Undertow 和 Remoting 等子系统的最佳功能。正确调整这些组件可能会在应用程序中实现高效的数据处理和响应性

17.1. IO 子系统配置

io 子系统定义由其他子系统使用的 XNIO workerbuffer 池,如 Undertow 和 Remoting。

这些 worker 和缓冲池使用以下 CLI 命令在 io 子系统中定义:

/subsystem=io/worker=*
/subsystem=io/buffer-pool=*
Copy to Clipboard Toggle word wrap

此配置代表了 io 子系统的默认设置。要查看 io 子系统的默认配置,请运行以下 CLI 命令:

/subsystem=io/:read-resource(recursive=true)
Copy to Clipboard Toggle word wrap

17.2. 配置 worker

您可以在 JBoss EAP 中配置 worker,以有效地管理 IO 任务和 worker 线程。worker 充当 XNIO worker 实例,为 Java NIO API 和支持 SSL 提供抽象层。

worker 负责管理 IO 操作、协调任务并确保有效地处理发送和接收数据的请求。这些任务由 IO 线程池中维护的一组线程处理。

默认情况下,JBoss EAP 包括一个名为 default 的单一工作程序。如果需要,您可以定义额外的 worker。在创建多个 worker 时,请注意每个额外的 worker 会导致单独的 IO 线程池,这会影响资源利用率。

如果没有为 worker 指定线程大小,JBoss EAP 根据可用 CPU 内核数计算默认值。配置选项如下:

  • io-threads :指定要为 worker 创建的 IO 线程数量。如果没有指定,则默认为 cpuCount * 2
  • task-max-threads :指定 worker 任务线程池的最大线程数。如果没有指定,则默认值将计算为 cpuCount * 16

您可以通过管理 CLI 命令管理 worker 来更新、创建和删除配置。

先决条件

  • JBoss EAP 正在运行。

流程

  1. 使用以下命令更新现有 worker:

    /subsystem=io/worker=default:write-attribute(name=io-threads,value=10)
    Copy to Clipboard Toggle word wrap
  2. 使用以下命令重新载入服务器以应用更改:

    reload
    Copy to Clipboard Toggle word wrap
  3. 使用以下命令创建新 worker:

    /subsystem=io/worker=newWorker:add
    Copy to Clipboard Toggle word wrap
  4. 如果需要,您可以使用以下命令删除 worker:

    /subsystem=io/worker=newWorker:remove
    Copy to Clipboard Toggle word wrap
  5. 使用以下命令重新载入服务器以应用更改:

    reload
    Copy to Clipboard Toggle word wrap

17.3. 配置缓冲区池

您可以在 JBoss EAP 中配置缓冲区池,以管理池的 NIO 缓冲区实例,该实例在应用性能中发挥关键作用。您可以更新现有的缓冲区池,创建新池,并删除不再需要它们来优化系统效率。

注意

IO 缓冲池已弃用,但在当前发行版本中保留默认配置。缓冲区池是池化的 NIO 缓冲区实例。更改缓冲区大小会显著影响应用程序性能。对于大多数服务器,理想的缓冲区大小为 16k。如需更多信息,请参阅 JBoss EAP 配置指南中的配置字节缓冲区池 部分。如需更多信息,请参阅 Add lightweight global buffer pool API; 弃用 heavier API,它描述了早期缓冲区池 API 的弃用,并使用 Undertow 子系统缓冲区池进行替换。

先决条件

  • JBoss EAP 正在运行。

流程

  1. 使用以下命令更新现有缓冲池:

    /subsystem=io/buffer-pool=default:write-attribute(name=direct-buffers,value=true)
    Copy to Clipboard Toggle word wrap
  2. 使用以下命令重新载入服务器以应用更改:

    reload
    Copy to Clipboard Toggle word wrap
  3. 使用以下命令创建新缓冲池:

    /subsystem=io/buffer-pool=newBuffer:add
    Copy to Clipboard Toggle word wrap
  4. 如果需要,您可以使用以下命令删除缓冲池:

    /subsystem=io/buffer-pool=newBuffer:remove
    Copy to Clipboard Toggle word wrap
  5. 使用以下命令重新载入服务器以应用更改:

    reload
    Copy to Clipboard Toggle word wrap

17.4. IO 子系统性能调优

您可以优化和监控 io 子系统的性能,以确保有效的资源管理和响应性。常规监控有助于识别潜在问题,然后再对系统性能造成影响。

17.5. 配置一个 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)
Copy to Clipboard Toggle word wrap
reload
Copy to Clipboard Toggle word wrap
创建新 worker

要创建新 worker,请执行以下操作:

/subsystem=io/worker=newWorker:add
Copy to Clipboard Toggle word wrap
删除 Worker

删除 worker:

/subsystem=io/worker=newWorker:remove
Copy to Clipboard Toggle word wrap
reload
Copy to Clipboard Toggle word wrap

有关可用于配置 worker 的属性的完整列表,请参阅 IO 子系统属性 部分。

17.6. 配置缓冲池

注意

IO 缓冲池已弃用,但它们仍设置为当前版本中的默认设置。缓冲区池是池化的 NIO 缓冲区实例。更改缓冲区大小对应用程序性能有很大影响。对于大多数服务器,理想的缓冲区大小通常为 16k。有关配置 Undertow 字节缓冲区池的更多信息,请参阅 JBoss EAP 配置指南中的 Configuring Byte Buffer Pools 部分。

更新现有缓冲池

更新现有缓冲池:

/subsystem=io/buffer-pool=default:write-attribute(name=direct-buffers,value=true)
Copy to Clipboard Toggle word wrap
reload
Copy to Clipboard Toggle word wrap
创建缓冲池

要创建新缓冲池,请执行以下操作:

/subsystem=io/buffer-pool=newBuffer:add
Copy to Clipboard Toggle word wrap
删除缓冲池

删除缓冲池:

/subsystem=io/buffer-pool=newBuffer:remove
Copy to Clipboard Toggle word wrap
reload
Copy to Clipboard Toggle word wrap

有关可用于配置缓冲区池的属性的完整列表,请参阅 IO 子系统属性 部分。

17.7. 调整 IO 子系统

有关监控 io 子系统性能并优化性能的提示,请参阅 JBoss EAP 性能调优的 IO 子系统调优 部分。

第 18 章 JBoss EAP 中的 Web 服务配置

JBoss EAP 可让您使用管理控制台或管理 CLI 通过 webservices 子系统配置部署 Web 服务的行为。此配置适用于 Jakarta Web 服务(JAX-WS)端点,允许您为 Web 服务设置公布的端点地址、处理程序链和运行时统计信息集合。

第 19 章 Jakarta Server Faces 配置

jsf 子系统支持在同一 JBoss EAP 服务器实例上安装多个 Jakarta Server Faces 实施。您可以安装实施 Jakarta Server Faces 4.0 规格或更新的 Sun Mojarra 或 Apache MyFaces 版本。功能包只能用于安装 Apache MyFaces 实施。

注意

只支持 JBoss EAP 中包含的 Jakarta Server Faces 实施。

19.1. 安装 Jakarta Server Faces 实施

JBoss EAP 支持使用 JBoss EAP 安装管理器(以功能包的形式提供这些功能)来支持置备带有必要的功能的服务器。

先决条件

  • 您已安装了 JBoss EAP。

流程

  1. 使用以下内容创建 myfaces-manifest.yaml 文件:

    schemaVersion: "1.0.0"
    name: "MyFaces manifest"
    id: "myfaces"
    streams:
      - groupId: "org.apache.myfaces.core"
        artifactId: "myfaces-api"
        version: "4.0.2"
      - groupId: "org.apache.myfaces.core"
        artifactId: "myfaces-impl"
        version: "4.0.2"
    Copy to Clipboard Toggle word wrap
  2. 使用以下命令添加 MyFaces 清单:

    $JBOSS_HOME/bin/jboss-eap-installation-manager.sh channel add \
      --channel-name=myfaces \
      --manifest=myfaces-manifest.yaml \
      --repositories=https://repo1.maven.org/maven2/
    Copy to Clipboard Toggle word wrap
  3. 使用以下命令,将 MyFaces Maven 清单部署到本地 Maven 存储库:

    mvn deploy:deploy-file -Dfile=myfaces-manifest.yaml \
      -DgroupId=org.apache.myfaces.channel -DartifactId=myfaces \
      -Dclassifier=manifest -Dpackaging=yaml -Dversion=4.0.2 \
      -Durl=file://$HOME/.m2/repository
    Copy to Clipboard Toggle word wrap
  4. 使用以下命令,使用 MyFaces 功能软件包置备服务器:

    $JBOSS_HOME/bin/jboss-eap-installation-manager.sh fp add \
      --fpl=org.jboss.eap:eap-myfaces-feature-pack \
      --layers=myfaces
    Copy to Clipboard Toggle word wrap
  5. 启动服务器。

验证

  • 使用以下 CLI 命令,验证新的 Jakarta Server Faces 实施是否已成功安装:

    [standalone@localhost:9990 /] /subsystem=jsf:list-active-jsf-impls()
    Copy to Clipboard Toggle word wrap

19.2. 更改默认的 Jakarta Server Faces 实现

multi-Jakarta Server Faces 功能包括 jsf 子系统中的 default-jsf-impl-slot 属性,它允许您更改默认的 Jakarta Server Faces 实施。

先决条件

  • 您在服务器上安装了多个 Jakarta Server Faces 实施。

流程

  1. 使用 write-attribute 命令将 default-jsf-impl-slot 属性的值设置为活跃的 Jakarta Server Faces 实现之一:

    /subsystem=jsf:write-attribute(name=default-jsf-impl-slot,value=JSF_IMPLEMENTATION)
    Copy to Clipboard Toggle word wrap

    JSF_IMPLEMENTATION 替换为您要设置为默认的 Jakarta Server Faces 实施的名称。

  2. 重启 JBoss EAP 服务器以使更改生效。

    reload
    Copy to Clipboard Toggle word wrap

验证

  • 使用以下命令识别可用的 Jakarta Server Faces 实现:

    /subsystem=jsf:read-attribute(name=default-jsf-impl-slot)
    Copy to Clipboard Toggle word wrap
    预期输出
    {
        "outcome" => "success",
        "result" => "myfaces"
    }
    Copy to Clipboard Toggle word wrap

要将 Jakarta Server Faces 应用配置为使用默认值以外的 Jakarta Server Faces 实施,请将 org.jboss.jbossfaces. JSF_CONFIG_NAME 上下文参数添加到 web.xml 文件中。此参数指示 jsf 子系统在部署应用程序时应用指定的 Jakarta Server Faces 实施。

例如,如果您要在应用程序中使用 MyFaces 4.0.0,请在 web.xml 文件中包含以下 context 参数:

<context-param>
    <param-name>org.jboss.jbossfaces.JSF_CONFIG_NAME</param-name>
    <param-value>myfaces-4.0.0</param-value>
</context-param>
Copy to Clipboard Toggle word wrap

如果 Jakarta Server Faces 应用不包括此上下文参数,则 'jsf' 子系统将使用默认的 Jakarta Server Faces 实施。

19.4. 不允许 DOCTYPE 声明

您可以将 jsf 子系统配置为禁止在 Jakarta Server Faces 部署中进行 DOCTYPE 声明。此设置可防止使用外部实体来提高安全性。

先决条件

  • 您有管理 CLI 访问权限来配置 jsf 子系统。

流程

  1. 使用以下命令,禁止在所有 Jakarta Server Faces 部署中进行 DOCTYPE 声明:

    /subsystem=jsf:write-attribute(name=disallow-doctype-decl, value=true)
    Copy to Clipboard Toggle word wrap
  2. 重启 JBoss EAP 服务器以使更改生效:

    reload
    Copy to Clipboard Toggle word wrap
  3. 要允许特定 Jakarta Server Faces 部署的 DOCTYPE 声明,请使用以下配置将 com.sun.faces.disallowDoctypeDecl context 参数添加到部署的 web.xml 文件中:

    <context-param>
        <param-name>com.sun.faces.disallowDoctypeDecl</param-name>
        <param-value>false</param-value>
    </context-param>
    Copy to Clipboard Toggle word wrap

第 20 章 配置批处理应用程序

JBoss EAP 8.0 支持 Jakarta Batch。您可以配置一个环境,以运行批处理应用,并使用 batch-jberet 子系统管理批处理作业。

有关开发批处理应用的信息,请参阅 JBoss EAP 开发指南中的 Jakarta 批处理应用程序开发

20.1. 配置批处理作业

您可以使用 batch-jberet 子系统来配置批处理作业的设置,该子系统基于 JBeret 实施。

默认的 batch-jberet 子系统配置定义内存中作业存储库和默认线程池设置。

<subsystem xmlns="{BatchSubsystemNamespace}">
    <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>
Copy to Clipboard Toggle word wrap

默认情况下,在服务器暂停期间停止的任何批处理作业都将在服务器恢复时重新启动。您可以将 restart-jobs-on-resume 属性设置为 false,以将作业保留为 STOPPED 状态。

/subsystem=batch-jberet:write-attribute(name=restart-jobs-on-resume,value=false)
Copy to Clipboard Toggle word wrap

您还可以配置批处理 作业存储库和线程池 的设置。

20.1.1. 配置批处理作业存储库

本节介绍如何配置内存中和 JDBC 作业存储库,以使用管理 CLI 存储批处理作业信息。您还可以使用管理控制台配置作业存储库,方法是导航到 ConfigurationSubsystemsBatch (JBeret),点 View,然后从左侧菜单中选择 In MemoryJDBC

添加内存中作业存储库

您可以添加将批处理作业信息存储在内存中的作业存储库。

/subsystem=batch-jberet/in-memory-job-repository=REPOSITORY_NAME:add
Copy to Clipboard Toggle word wrap
添加 JDBC 作业存储库

您可以添加将批处理作业信息存储在数据库中的作业存储库。您必须指定用于连接数据库的数据源的名称。

/subsystem=batch-jberet/jdbc-job-repository=REPOSITORY_NAME:add(data-source=DATASOURCE)
Copy to Clipboard Toggle word wrap

有关数据源的更多信息,请参阅关于 JBoss EAP 数据源

设置默认作业存储库

您可以将内存中或 JDBC 作业存储库设置为批处理应用的默认作业存储库。

/subsystem=batch-jberet:write-attribute(name=default-job-repository,value=REPOSITORY_NAME)
Copy to Clipboard Toggle word wrap

这需要重新加载服务器。

reload
Copy to Clipboard Toggle word wrap

20.1.2. 配置批处理线程池

本节介绍如何使用管理 CLI 配置用于批处理作业的线程池和线程工厂。您还可以使用管理控制台配置线程池和线程工厂,方法是导航到 ConfigurationSubsystemsBatch (JBeret),点 View,然后从左侧菜单中选择 Thread FactoryThread Pool

配置线程池

添加线程池时,您必须指定 max-threads,它应始终大于 3,因为保留两个线程,以确保分区作业可以按预期执行。

流程

  1. 添加线程池。

    /subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:add(max-threads=10)
    Copy to Clipboard Toggle word wrap
  2. 如果需要,设置 keepalive-time 值。

    /subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:write-attribute(name=keepalive-time,value={time=60,unit=SECONDS})
    Copy to Clipboard Toggle word wrap
使用线程工厂

流程

  1. 添加线程工厂。

    /subsystem=batch-jberet/thread-factory=THREAD_FACTORY_NAME:add
    Copy to Clipboard Toggle word wrap
  2. 为线程工厂配置所需的属性。

    • group-name - 为此线程工厂创建的线程组的名称。
    • priority - 创建的线程优先级。
    • thread-name-pattern - 用于为线程创建名称的模板。可使用以下模式:

      • %% - 百分比符号
      • % T-factory 线程序列号
      • %g - 全局线程序列号
      • %f - 工厂序列号
      • %I - 线程 ID
  3. 将线程工厂分配给线程池。

    /subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:write-attribute(name=thread-factory,value=THREAD_FACTORY_NAME)
    Copy to Clipboard Toggle word wrap

    这需要重新加载服务器。

    reload
    Copy to Clipboard Toggle word wrap
设置默认线程池

您可以将不同的线程池设置为默认线程池。

/subsystem=batch-jberet:write-attribute(name=default-thread-pool,value=THREAD_POOL_NAME)
Copy to Clipboard Toggle word wrap

这需要重新加载服务器。

reload
Copy to Clipboard Toggle word wrap
查看线程池统计信息

您可以使用 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"
    }
}
Copy to Clipboard Toggle word wrap

您还可以使用管理控制台,从 Runtime 选项卡导航到 Batch 子系统来查看批处理线程池的运行时信息。

20.2. 管理批处理作业

用于部署的 batch-jberet 子系统资源允许您启动、停止、重新启动和查看批处理作业的执行详细信息。批处理作业可以通过管理 CLI 或管理控制台 进行管理。???

从管理 CLI 管理批处理作业
重启批处理作业

您可以通过提供其执行 ID 以及重启批处理作业时要使用的任何属性来重启处于 STOPPEDFAILED 状态的作业。

/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:restart-job(execution-id=EXECUTION_ID,properties={PROPERTY=VALUE})
Copy to Clipboard Toggle word wrap

执行 ID 必须是作业实例的最新执行。

启动批处理作业

您可以通过提供作业 XML 文件以及启动批处理作业时要使用的任何属性来启动批处理作业。

/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:start-job(job-xml-name=JOB_XML_NAME,properties={PROPERTY=VALUE})
Copy to Clipboard Toggle word wrap
停止批处理作业

您可以通过提供其执行 ID 来停止正在运行的批处理作业。

/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:stop-job(execution-id=EXECUTION_ID)
Copy to Clipboard Toggle word wrap
查看批处理作业执行详情

您可以查看批处理作业执行的详细信息。您必须在 read-resource 操作中使用 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"
            }
        }
    }}}
}
Copy to Clipboard Toggle word wrap
从管理控制台管理批处理作业

要从管理控制台管理批处理作业,请导航到 Runtime 选项卡,选择服务器,选择 Batch (JBeret),然后从列表中选择作业。

启动批处理作业

通过选择作业并从下拉菜单中选择 Start 来启动批处理作业的新执行。

20.3. 配置批处理作业的安全性

您可以将 batch-jberet 子系统配置为使用 Elytron 安全域运行批处理作业。这允许同一安全身份安全暂停并恢复批处理作业。例如,创建一个安全的 RESTful 端点,以使用 batch-jberet 子系统启动批处理作业。如果 RESTful 端点和 batch-jberet 子系统使用相同的安全域进行保护,或者 batch-jberet 安全域信任 RESTful 端点的安全域,则以这种方式启动的批处理作业可能会安全地暂停并使用相同的安全身份恢复。

使用以下管理 CLI 命令更新 security-domain 属性,以配置批处理作业的安全性。

/subsystem=batch-jberet:write-attribute(name=security-domain, value=ExampleDomain)

reload
Copy to Clipboard Toggle word wrap
注意

批处理作业需要 org.wildfly.extension.batch.jberet.deployment.BatchPermission 权限。它提供 启动stoprestart、bandon 以及与 jakarta.batch.operations.JobOperator 一致 的读取权限default-permission-mapper 映射器提供 org.wildfly.extension.batch.jberet.deployment.BatchPermission 权限。

第 21 章 配置 naming 子系统

21.1. 关于 naming 子系统

naming 子系统为 JBoss EAP 提供 JNDI 实施。您可以将此子系统配置为绑定 全局 JNDI 命名空间中的条目。您还可以将其配置为 激活或停用远程 JNDI 接口

以下是使用指定的所有元素和属性的 naming 子系统 XML 配置示例:

<subsystem xmlns="{NamingSubsystemNamespace}">
    <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="jakarta.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>
Copy to Clipboard Toggle word wrap

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)
Copy to Clipboard Toggle word wrap

生成的 XML 配置

<subsystem xmlns="{NamingSubsystemNamespace}">
    <bindings>
        <simple name="java:global/simple-integer-binding" value="100" type="int"/>
    </bindings>
    <remote-naming/>
</subsystem>
Copy to Clipboard Toggle word wrap

使用以下命令删除绑定。

/subsystem=naming/binding=java\:global\/simple-integer-binding:remove
Copy to Clipboard Toggle word wrap
绑定对象工厂

object-factory XML 配置元素绑定 jakarta.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])
Copy to Clipboard Toggle word wrap

生成的 XML 配置

<subsystem xmlns="{NamingSubsystemNamespace}">
    <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>
Copy to Clipboard Toggle word wrap

使用以下命令删除绑定。

/subsystem=naming/binding=java\:global\/foo\/bar\/factory:remove
Copy to Clipboard Toggle word wrap
绑定外部上下文

外部 JNDI 上下文(如 LDAP 上下文)的联邦可以使用 external-context XML 配置元素来实现。

  • name 属性是必需的,指定条目的目标 JNDI 名称。
  • class 属性是必需的,并指示用于创建联邦上下文的 Java 初始命名上下文类型。请注意,此类类型必须具有一个带有单个环境映射参数的构造器。
  • 可选的模块属性指定 JBoss 模块 ID,其中可以从中加载外部 JNDI 上下文所需的任何类。
  • 可选的 cache 属性默认为 false,指示是否应缓存外部上下文实例。
  • 可选的 environment 子元素可用于提供查找外部上下文所需的自定义环境。

以下是创建外部上下文绑定的管理 CLI 命令示例:

/subsystem=naming/binding=java\:global\/federation\/ldap\/example:add(binding-type=external-context, cache=true, class=jakarta.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])
Copy to Clipboard Toggle word wrap

生成的 XML 配置

<subsystem xmlns="{NamingSubsystemNamespace}">
  <bindings>
    <external-context name="java:global/federation/ldap/example" module="org.jboss.as.naming" class="jakarta.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>
Copy to Clipboard Toggle word wrap

使用以下命令删除绑定:

/subsystem=naming/binding=java\:global\/federation\/ldap\/example:remove
Copy to Clipboard Toggle word wrap
注意

资源查找没有正确地实现 lookup (Name) 方法的 JNDI 供应商可能会导致 "jakarta.naming.InvalidNameException: Only support CompoundName name" 错误。

您可以通过指定外部上下文环境而不是添加以下属性来使用 lookup (String) 方法来解决这个问题,但这可能会导致性能下降。

<property name="org.jboss.as.naming.lookup.by.string" value="true"/>
Copy to Clipboard Toggle word wrap
绑定查找别名

lookup 元素允许您将现有条目绑定到额外的名称或别名。

  • name 属性是必需的,指定条目的目标 JNDI 名称。
  • lookup 属性是必需的,并指明源 JNDI 名称。

以下是将现有条目绑定到别名的管理 CLI 命令示例:

/subsystem=naming/binding=java\:global\/new-alias-name:add(binding-type=lookup, lookup=java\:global\/original-name)
Copy to Clipboard Toggle word wrap

生成的 XML 配置

<lookup name="java:global/new-alias-name" lookup="java:global/original-name" />
Copy to Clipboard Toggle word wrap

使用以下命令删除绑定:

/subsystem=naming/binding=java\:global\/c:remove
Copy to Clipboard Toggle word wrap

21.3. 动态更改 JNDI 绑定

JBoss EAP 7.1 引入了动态更改 JNDI 绑定的功能,而不强制服务器重新加载或重新启动。如果因为版本更新、测试要求或应用程序功能更新而动态重新配置网络服务端点,此功能很有用。

若要更新 JNDI 绑定,可使用 rebind 操作rebind 操作使用与 add 操作相同的参数。此命令适用于所有绑定类型,但 external-context 绑定类型除外。外部上下文绑定需要额外的依赖项,这会影响 Modular Service Container (MSC)状态,因此无法在重启服务的情况下重启它们。

以下命令动态更改在 Configuring Simple Bindings 示例中定义的 JNDI 绑定。

/subsystem=naming/binding=java\:global\/simple-integer-binding:rebind(binding-type=simple, type=int, value=200)
Copy to Clipboard Toggle word wrap

有关如何在 naming 子系统中配置全局绑定的更多信息,请参阅配置全局绑定

21.4. 配置远程 JNDI 接口

远程 JNDI 接口允许客户端在远程 JBoss EAP 实例中查找条目。naming 子系统可以配置为停用或激活此接口,默认是激活的。远程 JNDI 接口使用 < remote-naming > 元素进行配置。

使用以下管理 CLI 命令,激活或重新激活远程 JNDI 接口:

/subsystem=naming/service=remote-naming:add
Copy to Clipboard Toggle word wrap

使用以下管理 CLI 命令,停用远程 JNDI 接口:

/subsystem=naming/service=remote-naming:remove
Copy to Clipboard Toggle word wrap
注意

只有 java:jboss/exported 上下文中的条目只能通过远程 JNDI 访问。

第 22 章 配置高可用性

22.1. 高可用性简介

JBoss EAP 提供以下 高可用性服务,以保证所部署的 Jakarta EE 应用的可用性:

负载平衡
这允许服务通过将工作负载分散到多个服务器中来处理大量请求。即使出现大量请求,客户端也可以及时响应该服务。
故障切换
这允许客户端对服务具有不间断访问,即使在硬件或网络出现故障时也是如此。如果服务失败,另一个群集成员会接管客户端请求,以便它能够继续处理。

集群是一个 包括所有这些功能的术语。集群的成员可以配置为共享工作负载,称为负载平衡,并在另一个群集成员出现故障时获取客户端处理(称为故障转移)。

注意

务必要记住,选择 JBoss EAP 操作模式( 单机服务器或受管域 )与如何管理服务器有关。无论工作模式如何,都可在 JBoss EAP 中配置高可用性服务。

JBoss EAP 使用各种组件在多个不同级别上支持高可用性。其中一些运行时组件以及可实现高可用性的应用程序有:

  • 应用程序服务器的实例
  • Web 应用程序,与内部 JWS、Apache HTTP 服务器、Microsoft 1.0.0 或 Oracle iPlanet Web Server 一起使用
  • 有状态和无状态会话 Jakarta Enterprise Beans
  • 单点登录(SSO)机制
  • HTTP 会话
  • Java 消息服务服务和消息驱动的 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.xml 或单机服务器的 standalone-full-ha.xml 配置文件时,可以使用 jgroups 子系统。

JBoss EAP 预配置有两个 JGroups 堆栈:

udp
集群中的节点使用用户数据报协议(UDP)多播相互通信。这是默认的堆栈。
tcp
集群中的节点使用传输控制协议(TCP)相互通信。
注意

TCP 的开销更多,并且通常被视为比 UDP 慢,因为它处理错误检查、数据包排序和拥塞控制本身。JGroups 处理 UDP 的这些功能,而 TCP 保证了它们本身。当在不可靠或高拥塞网络上使用 JGroups 时,或者多播不可用时,TCP 是不错的选择。

您可以使用预配置的堆栈,或者自行定义以满足您的系统特定要求。有关可用协议及其属性的更多信息,请参阅以下部分。

22.2.2. 将默认的 JGroups 通道切换为使用 TCP

默认情况下,集群节点使用为 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>
Copy to Clipboard Toggle word wrap
22.2.2.1. 使用多播配置 TCP

有些网络只允许使用 TCP。

流程

  1. 使用以下管理 CLI 命令,将 ee 频道切换为使用预配置的 tcp 堆栈:

    /subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcp)
    Copy to Clipboard Toggle word wrap

    这个默认 tcp 堆栈使用 MPING 协议,它使用 IP 多播来发现初始集群成员资格。

22.2.2.2. 在没有多播的情况下配置 TCP

当安全策略不首选或允许多播时,您可以将默认协议堆栈更改为不使用 TCP。

流程

要在没有多播的情况下配置基于 TCP 的集群,请执行以下步骤:

  1. 要将 ee 频道切换为使用 JGroups 子系统中预先配置的 tcp 堆栈,请运行以下命令:

    <channel name="ee" stack="tcp" cluster="ejb"/>
    Copy to Clipboard Toggle word wrap
  2. 设置集群节点的名称:

    • 在独立配置模式中执行以下步骤之一:

      • 运行以下命令:

        <server xmlns="urn:jboss:domain:8.0" name="node_1">
        Copy to Clipboard Toggle word wrap
      • 在启动实例时,为系统属性 jboss.node.name 指定唯一名称。
    • 在域模式中,集群服务器列在服务器标签的 host netobserv.xml 文件中。默认配置指定以下服务器名称,如果需要,可以对其进行编辑。

      <servers>
          <server name="server-one" group="main-server-group"/>
          <server name="server-two" group="other-server-group">
              <socket-bindings port-offset="150"/>
          </server>
      </servers>
      Copy to Clipboard Toggle word wrap
  3. 选择以下协议之一来发现其他群集成员:

    • TCPGOSSIP :此协议使用外部 gosip 路由器服务来发现集群的成员。这要求配置和管理额外的进程,但允许各个 EAP 实例不列出其他群集成员。如果群集成员经常发生变化,此协议具有优势。如需了解更多详细信息,请参阅 TCPPING
    • TCPPING :此协议定义静态集群成员资格列表,并要求每个节点列出所有潜在的群集成员。当集群成员地址已知且经常更改时,这个协议是首选的。如需了解更多详细信息,请参阅 TCPGOSSIP

22.2.3. 配置 TCPPING

此流程创建新的 JGroups 堆栈,它使用 TCPPING 协议来定义静态集群成员资格列表。提供了一个基础脚本,它会创建一个 tcpping 堆栈,并设置默认的 ee 频道来使用此新堆栈。这个脚本中的管理 CLI 命令必须针对您的环境进行自定义,并将作为批处理进行处理。

流程

  1. 将以下脚本复制到文本编辑器,并将其保存到本地文件系统中。

    # Define the socket bindings
    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=jgroups-host-a:add(host=HOST_A,port=7600)
    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=jgroups-host-b:add(host=HOST_B,port=7600)
    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(socket-bindings=[jgroups-host-a,jgroups-host-b])
    /subsystem=jgroups/stack=tcpping/protocol=MERGE3:add
    /subsystem=jgroups/stack=tcpping/protocol=FD_SOCK:add
    /subsystem=jgroups/stack=tcpping/protocol=FD_ALL: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=FRAG3:add
    # Set tcpping as the stack for the ee channel
    /subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcpping)
    run-batch
    reload
    Copy to Clipboard Toggle word wrap

    请注意,定义的协议顺序很重要。您还可以通过将 add-index 值传递给 add 命令,在特定索引中插入协议。索引基于零,因此以下管理 CLI 命令会将 UNICAST3 协议添加为第七个协议。

    /subsystem=jgroups/stack=tcpping/protocol=UNICAST3:add(add-index=6)
    Copy to Clipboard Toggle word wrap
  2. 修改您的环境的脚本。

    • 如果您在受管域中运行,您必须在 /subsystem=jgroups 命令前使用 /profile=PROFILE_NAME 指定要更新的配置集。
    • 根据您的环境调整以下属性:

      • socket-bindings: 以逗号分隔的主机和端口组合列表,它们被视为众所周知,并可用于查找初始成员资格。有关定义套接字绑定 的更多信息,请参阅配置套接字绑定。
      • initial_hosts :主机和端口组合的逗号分隔列表,其语法是 HOST[PORT],它们被视为已知,并可用于查找初始成员资格,如 host1[1000],host2[2000]
      • port_range :此属性用于根据指定的值扩展 initial_hosts 端口范围。例如,如果您将 initial_hosts 设置为 host1[1000],host2[2000],并且 port_range 设为 1,则 initial_hosts 设置将展开到 host1[1000],host1[1001],host2[2000],host2[2001]。此属性只适用于 initial_hosts 属性。
  3. 通过将脚本文件 传递给管理 CLI,运行脚本。

    $ EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAME
    Copy to Clipboard Toggle word wrap

TCPPING 堆栈现在可用,TCP 用于网络通信。

22.2.3.1. 在独立模式中配置 TCPPING

此流程帮助您在独立模式中为集群应用程序配置 TCP 堆栈和节点。

流程

  1. 在 JGroups 子系统中将默认堆栈从 udp 更改为 tcp :

    <channel name="ee" stack="tcp" cluster="ejb"/>
    Copy to Clipboard Toggle word wrap
  2. 将 TCP 堆栈配置为使用 TCPPING 协议来代替默认的 MPING 协议。在以下代码中,initial_hosts 属性与集群中的所有节点列表相关联,7600 表示默认的 jgroups-tcp 端口,具体取决于您的配置和环境。

    <stack name="tcp">
      <transport type="TCP" socket-binding="jgroups-tcp"/>
      <protocol type="TCPPING">
        <property name="initial_hosts">192.168.1.5[7600],192.168.1.9[7600]</property>
        <property name="port_range">0</property>
      </protocol>
      <protocol type="MERGE3"/>
      <protocol type="FD_SOCK" socket-binding="jgroups-tcp-fd"/>
      <protocol type="FD_ALL"/>
      <protocol type="VERIFY_SUSPECT"/>
      <protocol type="pbcast.NAKACK2"/>
      <protocol type="UNICAST3"/>
      <protocol type="pbcast.STABLE"/>
      <protocol type="pbcast.GMS"/>
      <protocol type="MFC"/>
      <protocol type="FRAG3"/>
    </stack>
    Copy to Clipboard Toggle word wrap
    注意

    initial_hosts 中设置的端口号 7600 必须与 jgroups-tcp socket-binding 定义中定义的端口号相同。如果将 port-offset 功能用于 socket-binding,则需要在 initial_hosts 中偏移后指定相同的值。

  3. 设置 private 接口的 IP 地址,供 JGroups 组件使用。IP 地址应与 initial_hosts 中指定的 IP 地址之一关联:

    <interface name="private">
      <inet-address value="${jboss.bind.address.private:192.168.1.5}"/>
    </interface>
    Copy to Clipboard Toggle word wrap
  4. 重复上述步骤,以配置集群中的其他节点。配置节点时,启动每个节点并部署一个集群应用。

验证

  • 您可以检查日志以验证节点是否已启动并在运行:

    INFO  [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (thread-2,ee,node_1) ISPN000094: Received new cluster view for channel server: [node_1|1] (2) [node_1, node_2]
    INFO  [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (thread-2,ee,node_1) ISPN000094: Received new cluster view for channel web: [node_1|1] (2) [node_1, node_2]
    Copy to Clipboard Toggle word wrap
22.2.3.2. 在域模式中配置 TCPPING

此流程帮助您在域模式中为集群应用程序配置 TCP 堆栈和节点。

流程

  1. 如果将同一配置集用于多个集群,请将系统属性值设置为 initial_hosts

    <protocol type="TCPPING">
      <property name="initial_hosts">${jboss.cluster.tcp.initial_hosts}</property>
    
    Set the system property at the `server-group` level:
    <server-groups>
      <server-group name="a-server-group" profile="ha">
      <socket-binding-group ref="ha-sockets"/>
      <system-properties>
        <property name="jboss.cluster.tcp.initial_hosts" value="192.168.1.5[7600],192.168.1.9[7600]" />
      </system-properties>
    Copy to Clipboard Toggle word wrap
  2. 在主机控制器的 XML 配置中设置私有接口的 IP 地址。专用接口的 IP 地址应当与 initial_hosts 中列出的 IP 地址之一关联。

    <interfaces>
        ....
      <interface name="private">
        <inet-address value="${jboss.bind.address.private:192.168.1.5}"/>
      </interface>
    </interfaces>
    Copy to Clipboard Toggle word wrap

验证

  • 您可以检查日志以验证节点是否已启动并在运行:

    INFO  [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (thread-2,ee,node_1) ISPN000094: Received new cluster view for channel server: [node_1|1] (2) [node_1, node_2]
    INFO  [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (thread-2,ee,node_1) ISPN000094: Received new cluster view for channel web: [node_1|1] (2) [node_1, node_2]
    Copy to Clipboard Toggle word wrap

22.2.4. 配置 TCPGOSSIP

此流程创建新的 JGroups 堆栈,它使用 TCPGOSSIP 协议使用外部 gosip 路由器来发现集群的成员。提供了一个基础脚本,它会创建一个 tcpgossip 堆栈,并设置默认的 ee 频道来使用此新堆栈。这个脚本中的管理 CLI 命令必须针对您的环境进行自定义,并将作为批处理进行处理。

流程

  1. 将以下脚本复制到文本编辑器,并将其保存到本地文件系统中。

    # Define the socket bindings
    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=jgroups-host-a:add(host=HOST_A,port=13001)
    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(socket-bindings=[jgroups-host-a])
    /subsystem=jgroups/stack=tcpgossip/protocol=MERGE3:add
    /subsystem=jgroups/stack=tcpgossip/protocol=FD_SOCK:add
    /subsystem=jgroups/stack=tcpgossip/protocol=FD_ALL: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=FRAG3:add
    # Set tcpgossip as the stack for the ee channel
    /subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcpgossip)
    run-batch
    reload
    Copy to Clipboard Toggle word wrap

    请注意,定义的协议顺序很重要。您还可以通过将 add-index 值传递给 add 命令,在特定索引中插入协议。索引基于零,因此以下管理 CLI 命令会将 UNICAST3 协议添加为第七个协议。

    /subsystem=jgroups/stack=tcpgossip/protocol=UNICAST3:add(add-index=6)
    Copy to Clipboard Toggle word wrap
  2. 修改您的环境的脚本。

    • 如果您在受管域中运行,您必须在 /subsystem=jgroups 命令前使用 /profile=PROFILE_NAME 指定要更新的配置集。
    • 根据您的环境调整以下属性:

      • socket-bindings: 以逗号分隔的主机和端口组合列表,它们被视为众所周知,并可用于查找初始成员资格。有关定义套接字绑定 的更多信息,请参阅配置套接字绑定。
      • initial_hosts :主机和端口组合的逗号分隔列表,其语法是 HOST[PORT],它们被视为已知,并可用于查找初始成员资格,如 host1[1000],host2[2000]
      • port_range :此属性用于根据指定的值扩展 initial_hosts 端口范围。例如,如果您将 initial_hosts 设置为 host1[1000],host2[2000],并且 port_range 设为 1,则 initial_hosts 设置将展开到 host1[1000],host1[1001],host2[2000],host2[2001]。此属性只适用于 initial_hosts 属性。
      • reconnect_interval :断开连接的 stub 尝试重新连接到 gosip 路由器的时间间隔(以毫秒为单位)。
      • sock_conn_timeout :套接字创建的最大时间。默认值为 1000 毫秒。
      • sock_read_timeout :读取时阻止的最长时间,以毫秒为单位。值 0 将无限期阻止。
  3. 通过将脚本文件 传递给管理 CLI,运行脚本。

    $ EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAME
    Copy to Clipboard Toggle word wrap

TCPGOSSIP 堆栈现在可用,TCP 用于网络通信。此堆栈配置为与 gossip 路由器搭配使用,以便 JGroups 集群成员能够找到其他群集成员。

22.2.5. 配置 JDBC_PING

您可以使用 JDBC_PING 协议来管理和发现集群中的成员资格。

JDBC_PING 使用 data-source 中指定的数据库来列出集群的成员。

流程

  1. 创建数据源以连接到您要用来管理集群成员资格的数据库。
  2. 将以下脚本复制到文本编辑器,并将其保存到本地文件系统中。

    batch
    # Add the JDBC_PING stack
    /subsystem=jgroups/stack=JDBC_PING:add
    /subsystem=jgroups/stack=JDBC_PING/transport=TCP:add(socket-binding=jgroups-tcp)
    /subsystem=jgroups/stack=JDBC_PING/protocol=JDBC_PING:add(data-source=ExampleDS)
    /subsystem=jgroups/stack=JDBC_PING/protocol=MERGE3:add
    /subsystem=jgroups/stack=JDBC_PING/protocol=FD_SOCK:add
    /subsystem=jgroups/stack=JDBC_PING/protocol=FD_ALL:add
    /subsystem=jgroups/stack=JDBC_PING/protocol=VERIFY_SUSPECT:add
    /subsystem=jgroups/stack=JDBC_PING/protocol=pbcast.NAKACK2:add
    /subsystem=jgroups/stack=JDBC_PING/protocol=UNICAST3:add
    /subsystem=jgroups/stack=JDBC_PING/protocol=pbcast.STABLE:add
    /subsystem=jgroups/stack=JDBC_PING/protocol=pbcast.GMS:add
    /subsystem=jgroups/stack=JDBC_PING/protocol=MFC:add
    /subsystem=jgroups/stack=JDBC_PING/protocol=FRAG3:add
    # Set JDBC_PING as the stack for the ee channel
    /subsystem=jgroups/channel=ee:write-attribute(name=stack,value=JDBC_PING)
    run-batch
    reload
    Copy to Clipboard Toggle word wrap
    注意

    定义的协议的顺序非常重要。您还可以通过将 add-index 值传递给 add 命令,在特定索引中插入协议。索引基于零,因此以下管理 CLI 命令会将 UNICAST3 协议添加为第七个协议。

    /subsystem=jgroups/stack=JDBC_PING/protocol=UNICAST3:add(add-index=6)
    Copy to Clipboard Toggle word wrap
  3. 修改您的环境的脚本。

    • 如果您在受管域中运行,您必须在 /subsystem=jgroups 命令前使用 /profile=PROFILE_NAME 指定要更新的配置集。
    • 将 'ExampleDS' 替换为在第 1 步中定义的 data-source 的名称。
  4. 通过将脚本文件 传递给管理 CLI,运行脚本。

    $ EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAME
    Copy to Clipboard Toggle word wrap

JDBC_PING 堆栈现在可用,TCP 用于网络通信。

22.2.6. 将 JGroups 绑定到网络接口

默认情况下,JGroups 仅绑定到 私有 网络接口,该接口指向默认配置中的 localhost。为安全起见,JGroups 不会绑定到 JBoss EAP 启动期间指定的 -b 参数定义的网络接口,因为集群流量不应在公共网络接口上公开。

有关如何配置网络接口的详情,请参考本指南中的 网络和端口配置 章节。

重要

为安全起见,JGroups 应该只绑定到一个非公共网络接口。出于性能考虑,我们还建议 JGroups 流量的网络接口应该是专用虚拟局域网(VLAN)的一部分。

22.2.7. 保护集群

为了安全地运行集群,需要注意几个问题:

  • 防止未授权节点加入集群。这可以通过 需要身份验证 来解决。
  • 防止非成员与群集成员通信。这可以通过加密消息 来解决
22.2.7.1. 配置身份验证

JGroups 身份验证由 AUTH 协议执行。其目的是确保只有经过身份验证的节点才能加入集群。

在适用的服务器配置文件中,使用适当的属性设置添加 AUTH 协议。AUTH 协议应在 pbcast.GMS 协议之前立即配置。

以下示例演示了使用带有不同形式的授权令牌的 AUTH

带有简单令牌的 AUTH
...
<protocol type="pbcast.STABLE"/>
<auth-protocol type="AUTH">
  <plain-token>
    <shared-secret-reference clear-text="my_password"/>
  </plain-token>
</auth-protocol>
<protocol type="pbcast.GMS"/>
...
Copy to Clipboard Toggle word wrap
带有摘要算法令牌的 AUTH

这个格式可用于任何摘要算法,如 MD5 或 SHA-2。JBoss EAP 8.0 中的默认摘要算法是 SHA-256,JVM 需要强大的摘要算法。许多 JVM 将额外实施 SHA-512。

...
<protocol type="pbcast.STABLE"/>
<auth-protocol type="AUTH">
  <digest-token algorithm="SHA-512">
    <shared-secret-reference clear-text="my_password"/>
  </digest-token>
</auth-protocol>
<protocol type="pbcast.GMS"/>
...
Copy to Clipboard Toggle word wrap
带有 X509 令牌的 AUTH

本例在 elytron 子系统中创建新的密钥存储,并在 JGroups AUTH 配置中引用它。

  1. 创建密钥存储:

    $ keytool -genkeypair -alias jgroups_key -keypass my_password -storepass my_password -storetype jks -keystore jgroups.keystore -keyalg RSA
    Copy to Clipboard Toggle word wrap
  2. 使用管理 CLI 将密钥存储添加到 elytron 子系统:

    /subsystem=elytron/key-store=jgroups-token-store:add(type=jks,path=/path/to/jgroups.keystore,credential-reference={clear-text=my_password}, required=true)
    Copy to Clipboard Toggle word wrap
  3. 在 JGroups 堆栈定义中,将 AUTH 配置为使用密钥存储:

    ...
    <protocol type="pbcast.STABLE"/>
    <auth-protocol type="AUTH">
      <cipher-token algorithm="RSA" key-alias="jgroups_key" key-store="jgroups-token-store">
        <shared-secret-reference clear-text="my_password"/>
        <key-credential-reference clear-text="my_password"/>
      </cipher-token>
    </auth-protocol>
    <protocol type="pbcast.GMS"/>
    ...
    Copy to Clipboard Toggle word wrap
22.2.7.2. 配置加密

要加密消息,JGroups 使用由集群成员共享的 secret 密钥。发送者使用共享 secret 密钥加密消息,并且接收器使用相同的 secret 密钥解密消息。使用对称加密 (使用 SYM_ENCRYPT 协议配置),节点使用共享密钥存储来检索机密密钥。通过 非对称加密 (使用 ASYM_ENCRYPT 协议进行配置),节点会在使用 AUTH 进行身份验证后从集群的协调器检索机密密钥。

使用对称加密

要使用 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
    Copy to Clipboard Toggle word wrap

    这将生成一个 defaultStore.keystore 文件,它将在 JGroups 配置中引用该文件。

  2. 生成密钥存储后,会使用以下两种方法之一在 SYM_PROTOCOL 中定义。

注意

使用 SYM_ENCRYPT 时配置 AUTH 是可选的。

通过直接引用密钥存储来使用对称加密
  1. jgroups 子系统中配置 SYM_ENCRYPT 协议。

    在适用的服务器配置文件中,使用适当的属性设置添加 SYM_ENCRYPT 协议。此协议将引用之前创建的密钥存储。SYM_ENCRYPT 协议应在 pbcast.NAKACK2 协议之前立即配置。

    <subsystem xmlns="{JgroupsSubsystemNamespace}">
      <stacks>
        <stack name="udp">
          <transport type="UDP" socket-binding="jgroups-udp"/>
          <protocol type="PING"/>
          <protocol type="MERGE3"/>
          <protocol type="FD_SOCK"/>
          <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="FRAG3"/>
        </stack>
      </stacks>
    </subsystem>
    Copy to Clipboard Toggle word wrap
使用 elytron 的对称加密
  1. 使用管理 CLI,在 elytron 子系统中创建一个密钥存储,该密钥存储引用 使用对称加密 中创建的 defaultStore.keystore

    /subsystem=elytron/key-store=jgroups-keystore:add(path=/path/to/defaultStore.keystore,credential-reference={clear-text=PASSWORD},type=JCEKS)
    Copy to Clipboard Toggle word wrap
  2. 使用适当的属性设置,在 jgroups 子系统中添加 SYM_ENCRYPT 协议。SYM_ENCRYPT 协议应在 pbcast.NAKACK2 协议之前立即配置,如以下配置中所示:

    <subsystem xmlns="{JgroupsSubsystemNamespace}">
      <stacks>
        <stack name="udp">
          <transport type="UDP" socket-binding="jgroups-udp"/>
          <protocol type="PING"/>
          <protocol type="MERGE3"/>
          <protocol type="FD_SOCK"/>
          <protocol type="FD_ALL"/>
          <protocol type="VERIFY_SUSPECT"/>
          <encrypt-protocol type="SYM_ENCRYPT" key-alias="mykey" key-store="jgroups-keystore">
            <key-credential-reference clear-text="PASSWORD"/>
            <property name="provider">SunJCE</property>
            <property name="encrypt_entire_message">true</property>
          </encrypt-protocol>
          <protocol type="pbcast.NAKACK2"/>
          <protocol type="UNICAST3"/>
          <protocol type="pbcast.STABLE"/>
          <protocol type="pbcast.GMS"/>
          <protocol type="UFC"/>
          <protocol type="MFC"/>
          <protocol type="FRAG3"/>
        </stack>
      </stacks>
    </subsystem>
    Copy to Clipboard Toggle word wrap
    注意

    上例使用明文密码;但是,还可以定义凭据存储来定义配置文件外的密码。有关配置此存储的更多信息,请参阅如何配置服务器安全 指南中的 凭证存储 部分。

使用非对称加密

要使用 ASYM_ENCRYPT,必须定义 AUTH 协议。有关在 jgroups 子系统中配置 AUTH 协议的说明,请参阅 配置身份验证 部分。

ASYM_ENCRYPT 使用两种方法之一进行配置。

通过生成 secret 密钥来使用非对称加密
  1. jgroups 子系统中配置 ASYM_ENCRYPT 协议。

    在适用的服务器配置文件中,使用适当的属性设置添加 ASYM_ENCRYPT 协议。ASYM_ENCRYPT 协议应在 pbcast.NAKACK2 协议之前立即配置,如以下配置中所示:

    <subsystem xmlns="{JgroupsSubsystemNamespace}">
      <stacks>
        <stack name="udp">
          <transport type="UDP" socket-binding="jgroups-udp"/>
          <protocol type="PING"/>
          <protocol type="MERGE3"/>
          <protocol type="FD_SOCK"/>
          <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="FRAG3"/>
        </stack>
      </stacks>
    </subsystem>
    Copy to Clipboard Toggle word wrap
在 elytron 中使用非对称加密
  1. 创建密钥存储以包含密钥对。以下命令使用 mykey 条目创建密钥存储:

    $ keytool -genkeypair -alias mykey -keyalg RSA -keysize 1024 -keystore defaultKeystore.keystore -dname "CN=localhost" -keypass secret -storepass secret
    Copy to Clipboard Toggle word wrap
  2. 使用管理 CLI,在 elytron 子系统中创建一个引用 defaultStore.keystore 的密钥存储。

    /subsystem=elytron/key-store=jgroups-keystore:add(path=/path/to/defaultStore.keystore,credential-reference={clear-text=PASSWORD},type=JCEKS)
    Copy to Clipboard Toggle word wrap
  3. 使用适当的属性设置,在 jgroups 子系统中添加 ASYM_ENCRYPT 协议。ASYM_ENCRYPT 协议应在 pbcast.NAKACK2 协议之前立即配置,如以下配置中所示:

    <subsystem xmlns="{JgroupsSubsystemNamespace}">
      <stacks>
        <stack name="udp">
          <transport type="UDP" socket-binding="jgroups-udp"/>
          <protocol type="PING"/>
          <protocol type="MERGE3"/>
          <protocol type="FD_SOCK"/>
          <protocol type="FD_ALL"/>
          <protocol type="VERIFY_SUSPECT"/>
          <encrypt-protocol type="ASYM_ENCRYPT" key-alias="mykey" key-store="jgroups-keystore">
            <key-credential-reference clear-text="secret" />
            <property name="encrypt_entire_message">true</property>
          </encrypt-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="FRAG3"/>
        </stack>
      </stacks>
    </subsystem>
    Copy to Clipboard Toggle word wrap
    注意

    上例使用明文密码;但是,还可以定义凭据存储来定义配置文件外的密码。有关配置此存储的更多信息,请参阅如何配置服务器安全 指南中的 凭证存储 部分。

22.2.8. 配置 JGroups 线程池

jgroups 子系统包含 默认的内部oobtimer 线程池。这些池可以针对任何 JGroups 堆栈配置,不会影响本地节点上配置的 bean 或其他池。JGroup 线程池用于支持集群通信。

下表列出了您可以为每个线程池配置的属性,以及每个线程池的默认值。

Expand
线程池名称描述keepalive-timemax-threadsmin-threadsqueue-length

default

此池用于处理未标记为带外的传入消息。

60000L

300

20

100

internal

此池用于处理 EAP 维护所需的内部进程。

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)
Copy to Clipboard Toggle word wrap

以下是管理 CLI 命令的一个示例,可在 udp 堆栈 的默认 线程池中将 max-threads 值设置为 500

/subsystem=jgroups/stack=udp/transport=UDP/thread-pool=default:write-attribute(name="max-threads", value="500")
Copy to Clipboard Toggle word wrap

22.2.9. 配置 JGroups 发送和接收缓冲区

解决缓冲区大小警告

默认情况下,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)
Copy to Clipboard Toggle word wrap

要解决这个问题,请参考您的操作系统文档来了解如何增加缓冲区大小。对于 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
Copy to Clipboard Toggle word wrap

修改 /etc/sysctl.conf 后,运行 sysctl -p 以使更改生效。

配置 JGroups 缓冲区大小

您可以通过在 UDP 和 TCP JGroups 堆栈上设置以下传输属性来配置 JBoss EAP 使用的 JGroups 缓冲区大小。

UDP 堆栈
  • ucast_recv_buf_size
  • ucast_send_buf_size
  • mcast_recv_buf_size
  • mcast_send_buf_size
TCP 堆栈
  • recv_buf_size
  • send_buf_size

JGroups 缓冲区大小可以使用管理控制台或管理 CLI 来配置。

通过以下语法,通过管理 CLI 设置 JGroups 缓冲区 size 属性:

/subsystem=jgroups/stack=STACK_NAME/transport=TRANSPORT/property=PROPERTY_NAME:add(value=BUFFER_SIZE)
Copy to Clipboard Toggle word wrap

以下是将 tcp 堆栈上的 recv_buf_size 属性设置为 20000000 的管理 CLI 命令。

/subsystem=jgroups/stack=tcp/transport=TRANSPORT/property=recv_buf_size:add(value=20000000)
Copy to Clipboard Toggle word wrap

也可以使用管理控制台,从 Configuration 选项卡导航到 JGroups 子系统,单击 View,选择 Stack 选项卡,选择适当的堆栈,单击 Transport,再编辑 Properties 字段来配置 JGroups 缓冲区大小。

22.2.10. 调整 JGroups 子系统

有关监控并优化 jgroups 子系统性能的提示,请参阅 JBoss EAP 性能调优的 JGroups 子系统调优 部分。

22.2.11. JGroups 故障排除

22.2.11.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
Copy to Clipboard Toggle word wrap

然后,在另一个终端窗口中,启动 McastSenderTest

$ java -cp EAP_HOME/bin/client/jboss-client.jar org.jgroups.tests.McastSenderTest -mcast_addr 230.11.11.11 -port 5555
Copy to Clipboard Toggle word wrap

如果要绑定到特定网络接口卡(NIC),请使用 -bind_addr YOUR_BIND_ADDRESS,其中 YOUR_BIND_ADDRESS 是您要绑定到的 NIC 的 IP 地址。在发送者和接收器中使用此参数。

当您在 McastSenderTest 终端窗口中键入时,您应该在 McastReceiverTest 窗口中看到输出。如果没有,请尝试以下步骤。

  • 通过在 sender 命令中添加 -ttl VALUE 来增加多播数据包的时间。此测试程序使用的默认值是 32VALUE 不得大于 255
  • 如果机器有多个接口,请确定您使用正确的接口。
  • 联系系统管理员,以确保多播可以在您选择的接口上正常工作。

一旦您知道,多播可以在集群中的每个机器上正常工作,您可以重复上述测试来测试网络,将发送者放在一台机器上,将发件人放在另一台机器上。

22.2.11.2. 在失败检测中缺少心跳的原因

有时,故障检测(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 将无法处理任何其他消息,包括心跳(包括心跳)。因此,B 将不会收到心跳确认,并且会怀疑 C。

22.3. Infinispan

22.3.1. 关于 Infinispan

Infinispan 是一个 Java 数据网格平台,它为管理缓存的数据提供 Jakarta Persistence 2.2兼容缓存接口。

有关 Infinispan 功能和配置选项的更多信息,请参阅 Infinispan 文档

infinispan 子系统为 JBoss EAP 提供缓存支持。它允许您为命名缓存容器和缓存配置和查看运行时指标。

当使用提供高可用性功能的配置时,如受管域中的 hafull-ha 配置文件,或 standalone-ha.xmlstandalone-full-ha.xml 配置文件,infinispan 将提供缓存、状态复制和状态分发支持。在非高可用性配置中,infinispan 子系统提供本地缓存支持。

重要

Infinispan 是 JBoss EAP 8.0 中的公共模块。您可以使用 infinispan 子系统来创建和使用新的 cache-containers 或缓存。另外,应用程序支持使用 Infinispan API。

22.3.2. 缓存容器

缓存容器是子系统使用的缓存的存储库。每个缓存容器都定义了要使用的默认缓存。

JBoss EAP 8.0 定义以下默认的 Infinispan 缓存容器:

  • 服务器 用于单例缓存
  • Web 会话集群的 Web
  • 用于 有状态会话 Bean 集群的 EJB
  • Hibernate 用于实体缓存

示例:默认的 Infinispan 配置

<subsystem xmlns="{InfinispanSubsystemNamespace}">
  <cache-container name="server" aliases="singleton cluster" default-cache="default" module="org.wildfly.clustering.server">
    <transport lock-timeout="60000"/>
    <replicated-cache name="default">
      <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">
      <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">
      <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">
      <object-memory size="1000"/>
      <expiration max-idle="100000"/>
    </local-cache>
    <invalidation-cache name="entity">
      <transaction mode="NON_XA"/>
      <object-memory size="1000"/>
      <expiration max-idle="100000"/>
    </invalidation-cache>
    <replicated-cache name="timestamps" mode="ASYNC"/>
  </cache-container>
</subsystem>
Copy to Clipboard Toggle word wrap

请注意每个缓存容器中定义的默认缓存。例如,web 缓存容器将 dist 分布式缓存定义为默认值。因此,在集群 Web 会话时将使用 dist 缓存。

如需有关更改默认缓存和添加额外的缓存的信息,请参阅配置 缓存容器

22.3.2.1. 配置缓存容器

缓存容器和缓存属性可以使用管理控制台或管理 CLI 配置。

警告

您应该避免更改缓存或缓存容器名称,因为配置中的其他组件可能会引用它们。

22.3.2.1.1. 使用管理控制台配置缓存

从管理控制台中的 Configuration 选项卡导航到 Infinispan 子系统后,即可配置缓存和缓存容器。在受管域中,确保选择要配置的适当配置文件。

  • 添加缓存容器。

    单击 Cache Container 标题旁边的 Add (+)按钮,选择 Add Cache Container,并输入新缓存容器的设置。

  • 更新缓存容器设置。

    选择适当的缓存容器,然后单击 查看。根据需要配置缓存容器设置。

  • 更新缓存容器传输设置。

    选择适当的缓存容器,然后单击 查看。选择 Transport 选项卡,并根据需要配置缓存容器传输设置。

  • 配置缓存。

    选择适当的缓存容器,然后单击 查看。在适当的缓存选项卡中,例如 复制缓存,您可以添加、更新和删除缓存。

22.3.2.1.2. 使用管理 CLI 配置缓存

您可以使用管理 CLI 配置缓存和缓存容器。在受管域中,您必须在这些命令前使用 /profile=PROFILE_NAME 指定要更新的配置集。

  • 添加缓存容器。

    /subsystem=infinispan/cache-container=CACHE_CONTAINER:add
    Copy to Clipboard Toggle word wrap
  • 添加复制的缓存。

    /subsystem=infinispan/cache-container=CACHE_CONTAINER/replicated-cache=CACHE:add(mode=MODE)
    Copy to Clipboard Toggle word wrap
  • 为缓存容器设置默认缓存。

    /subsystem=infinispan/cache-container=CACHE_CONTAINER:write-attribute(name=default-cache,value=CACHE)
    Copy to Clipboard Toggle word wrap
  • 为复制缓存配置批处理。

    /subsystem=infinispan/cache-container=CACHE_CONTAINER/replicated-cache=CACHE/component=transaction:write-attribute(name=mode,value=BATCH)
    Copy to Clipboard Toggle word wrap

    这会生成以下服务器配置:

    <cache-container name="web" default-cache="concurrent" module="org.wildfly.clustering.web.infinispan">
      ...
      <distributed-cache name="concurrent">
          <file-store/>
      </distributed-cache>
    </cache-container>
    Copy to Clipboard Toggle word wrap

您可以在 ejb3 子系统中使用缓存容器,如下所述:

  • 为了支持传递 Jakarta Enterprise Beans 会话 Bean,您可以使用 infinispan 子系统中定义的 ejb 缓存容器来存储会话。
  • 对于连接到服务器上集群部署的远程 Jakarta Enterprise Beans 客户端,您必须为这些客户端提供集群拓扑信息,以便在它们交互的节点失败时故障转移到集群中的其他节点。

您可以使用 @Resource 注释,将 Infinispan 子系统中的 Infinispan 资源从 Infinispan 子系统注入到应用中。以下示例显示了使用 @Resource 注释将缓存注入 Jakarta EE 应用:

@Resource(lookup = "java:jboss/infinispan/cache/foo/bar")
private org.infinispan.Cache<Integer, Object> cache;
Copy to Clipboard Toggle word wrap

在上例中,foo 是缓存容器的名称,bar 是要注入的缓存的名称。

EAP 管理注入资源的生命周期,这意味着您的应用不需要管理这些资源,如缓存或缓存管理器。

注意

在手动创建任何资源时,应用会管理这些资源,而不是 EAP。

以下示例演示了如何将 Infinispan 子系统中的不同资源注入到应用中。

注入默认缓存的示例

要将缓存容器的默认缓存从 Infinispan 子系统注入应用程序中,请使用以下命令:

@Resource(lookup = "java:jboss/infinispan/cache/foo/default")
Copy to Clipboard Toggle word wrap

注入嵌入式缓存管理器的示例

要注入嵌入的缓存管理器,以允许您的应用程序创建新的缓存配置和缓存,请使用以下命令:

@Resource(lookup = "java:jboss/infinispan/container/foo")
private org.infinispan.manager.EmbeddedCacheManager manager;
Copy to Clipboard Toggle word wrap

注入缓存配置示例

Infinispan 子系统中定义的任何缓存配置都不会始终安装或可用,除非应用程序明确依赖于这些缓存配置。要将 Infinispan 子系统的缓存配置注入到应用程序中,请使用 @Resource 注释。

  • 以下示例使用 @Resource 注释来注入 foo 容器的缓存配置:

    @Resource(lookup = "java:jboss/infinispan/configuration/foo/bar")
    private org.infinispan.config.Configuration config;
    Copy to Clipboard Toggle word wrap
  • 以下示例使用 @Resource 注释来注入 foo 容器的默认缓存配置:

    @Resource(lookup = "java:jboss/infinispan/configuration/foo/default")
    private org.infinispan.config.Configuration config;
    Copy to Clipboard Toggle word wrap
22.3.2.1.5. Hibernate 缓存容器中的驱除功能

hibernate 缓存容器的驱除功能从内存中删除缓存条目。此功能有助于减少子系统上的内存负载。

size 属性设置缓存条目在开始驱除前存储的最大缓存条目数。

示例:驱除功能

  <cache-container name="hibernate" default-cache="local-query" module="org.hibernate.infinispan">
    <transport lock-timeout="60000"/>
    <local-cache name="local-query">
      <object-memory size="1000"/>
      <expiration max-idle="100000"/>
Copy to Clipboard Toggle word wrap

请注意,驱除只在内存中发生。缓存存储包含被驱除的缓存条目,以防止永久丢失信息。有关驱除功能的更多信息,请参阅 Infinispan 用户指南中的 驱除和数据 容器部分。

22.3.2.1.6. Hibernate 缓存容器中的过期功能

hibernate 缓存容器的过期功能是一个集群操作;因此,在使用集群缓存时,将从所有群集成员中删除过期的缓存条目。如需更多信息,请参阅 Infinispan 用户指南中的 Expiration 部分。

22.3.3. 集群模式

可以使用 Infinispan 在 JBoss EAP 中通过两种不同的方式配置集群。应用程序的最佳方法将取决于您的要求。对每个模式的可用性、一致性、可靠性和可扩展性之间存在利弊。在选择集群模式前,您必须确定网络最重要的功能,并平衡这些要求。

缓存模式
复制
复制模式会自动检测并在集群中添加新实例。对这些实例所做的更改将复制到集群中的所有节点。复制模式通常最适合在小集群中,因为需要通过网络复制的信息量。Infinispan 可以配置为使用 UDP 多播,这可将网络流量拥塞到位。
分发

分发模式允许 Infinispan 线性扩展集群。分发模式使用一致的哈希算法来确定应放置新节点的位置。要保留的信息数量或所有者是可配置的。副本数量保持、数据持久性和性能之间有一个权衡。保留更多副本,对性能有更大的影响,但不太可能在服务器失败时丢失数据。哈希算法还可通过查找条目而无多播或存储元数据来减少网络流量。

当集群大小超过 6-8 节点时,您应该考虑将分发模式用作缓存策略。使用分发模式时,数据仅分布到集群中的节点子集,而不是所有节点。

22.3.3.1. 配置缓存模式

您可以使用管理 CLI 更改默认缓存。

注意

本节介绍配置 Web 会话缓存的说明,默认是分发模式。可轻松调整步骤和管理 CLI 命令,以应用到其他缓存容器。

进入复制缓存模式

Web 会话缓存的默认 JBoss EAP 8.0 配置不包括重新复制缓存。必须首先添加此缓存。

注意

以下管理 CLI 命令适用于单机服务器。在受管域中运行时,您必须在 /subsystem=infinispan 命令前使用 /profile=PROFILE_NAME 指定要更新的配置集。

  1. 添加 repl 复制缓存并将其设置为默认缓存。

    batch
    /subsystem=infinispan/cache-container=web/replicated-cache=repl:add()
    /subsystem=infinispan/cache-container=web/replicated-cache=repl/component=transaction:add(mode=BATCH)
    /subsystem=infinispan/cache-container=web/replicated-cache=repl/component=locking:add(isolation=REPEATABLE_READ)
    /subsystem=infinispan/cache-container=web/replicated-cache=repl/store=file:add
    /subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=repl)
    run-batch
    Copy to Clipboard Toggle word wrap
  2. 重新加载服务器。

    reload
    Copy to Clipboard Toggle word wrap
更改到分发缓存模式

Web 会话缓存的默认 JBoss EAP 8.0 配置已包含发行版的分发缓存。

注意

以下管理 CLI 命令适用于单机服务器。在受管域中运行时,您必须在 /subsystem=infinispan 命令前使用 /profile=PROFILE_NAME 指定要更新的配置集。

  1. 将默认缓存更改为 dist 分发缓存。

    /subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=dist)
    Copy to Clipboard Toggle word wrap
  2. 设置分发缓存的所有者数。以下命令设置 5 所有者。默认值为 2

    /subsystem=infinispan/cache-container=web/distributed-cache=dist:write-attribute(name=owners,value=5)
    Copy to Clipboard Toggle word wrap
  3. 重新加载服务器。

    reload
    Copy to Clipboard Toggle word wrap
22.3.3.2. 缓存策略性能

使用 SYNC 缓存策略时,复制成本很容易测量,并直接看到,因为请求在复制完成前不会完成。

虽然 ASYNC 缓存策略应该比 SYNC 缓存策略的响应时间较低,但这只在正确的条件下是 true。ASYNC 缓存策略更难以测量,但当请求之间的持续时间足够长后,它可以比 SYNC 策略提供更好的性能。这是因为复制成本不会立即在响应时间中看到。

如果对同一会话的请求速度太快,则对前一个请求的复制成本会转移到后续请求的前面,因为它必须等待来自上一请求的复制完成。对于在收到响应后立即发送后续请求的快速触发请求,ASYNC 缓存策略将比 SYNC 缓存策略执行更糟糕的情况。因此,同一会话的请求之间有一个阈值,因为 SYNC 缓存策略实际上比 ASYNC 缓存策略更好地执行。在实际使用中,通常不会接收对同一会话的请求。通常,请求之间有几秒或更长时间。在这种情况下,ASYNC 缓存策略是可以接受的默认策略,提供最快的响应时间。

22.3.4. 州传输

State transfer 既是基本的数据网格和集群缓存功能。如果没有状态传输,则当节点添加到集群中或从集群中移除时,数据将会丢失。

State transfer 调整缓存的内部状态,以响应缓存成员资格的更改。当节点加入或离开集群时,当两个或者多个集群分区合并或之后,或这些事件的任意组合后,此更改会自动发生。新启动缓存的初始状态转移最昂贵,因为新缓存必须根据缓存的模式接收最大状态量,如下所述。

timeout 属性可用于控制新启动缓存等待接收其状态的时长。如果 timeout 属性为正数,则缓存将等待接收其所有初始状态,然后再提供给服务请求。如果状态转移没有在指定时间内完成,则默认值为 240000 毫秒,则缓存会抛出错误并取消启动。如果 timeout 设为 0, 则缓存会立即可用,它将在后台操作期间接收其初始状态。在初始状态传输完成前,任何尚未接收缓存的缓存条目请求都将从远程节点获取。

可以使用以下命令将 timeout 属性设置为 0。

/subsystem=infinispan/cache-container=server/CACHE_TYPE=CACHE/component=state-transfer:write-attribute(name=timeout,value=0)
Copy to Clipboard Toggle word wrap

状态传输行为由缓存的模式决定。

  • 在复制模式中,加入缓存的新节点从现有节点接收整个缓存状态。当节点离开集群时,没有状态传输。
  • 在分发模式中,新节点只从现有节点接收状态的一部分,现有节点删除其状态,以便让每个密钥 的所有者 副本保留在缓存中,由一致的哈希决定。当节点离开集群时,分发缓存需要为该节点上存储的密钥进行额外的副本,以便每个密钥的所有者都仍然存在。
  • 在无效模式下,初始状态转移与复制模式类似,节点的唯一差别无法保证具有相同的状态。当节点离开集群时,没有状态传输。

默认情况下,状态传输传输内存和持久状态,但它们可以在配置中禁用。当禁用状态传输时,必须配置 ClusterLoader,否则节点将成为密钥的所有者或备份所有者,而无需将数据加载到其缓存中。另外,如果状态转移在分发模式下被禁用,则密钥偶尔会小于缓存中的 所有者 副本。

22.3.5. 配置 Infinispan 线程池

infinispan 子系统包含 async-operations,expiration,listener,persistence,remote-command,state-transfer, 和 transport 线程池。可以为任何 Infinispan 缓存容器配置这些池。

下表列出了您可以为 infinispan 子系统中的每个线程池配置的属性,以及每个线程池的默认值。

Expand
线程池名称keepalive-timemax-threadsmin-threadsqueue-length

async-operations

60000L

25

25

1000

过期

60000L

1

N/A

N/A

listener

60000L

1

1

100000

持久性

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)
Copy to Clipboard Toggle word wrap

以下是在 服务器 缓存容器 的持久性 线程池中将 max-threads 值设置为 10 的示例。

/subsystem=infinispan/cache-container=server/thread-pool=persistence:write-attribute(name="max-threads", value="10")
Copy to Clipboard Toggle word wrap

22.3.6. Infinispan statistics

对于监控目的,可以启用 Infinispan 缓存和缓存容器的运行时统计信息。出于性能的原因,默认情况下不启用统计集合。

可以为每个缓存容器、缓存或两者启用统计数据集合。每个缓存的 statistics 选项会覆盖缓存容器的选项。为缓存容器启用或禁用统计信息集合将导致该容器中的所有缓存继承设置,除非它们明确指定自己的设置。

22.3.6.1. 启用 Infinispan 统计
警告

启用 Infinispan 统计数据可能会对 infinispan 子系统的性能造成负面影响。只有在需要时才应启用统计数据。

您可以使用管理控制台或管理 CLI 启用或禁用 Infinispan 统计的集合。从管理控制台,从 Configuration 选项卡中导航到 Infinispan 子系统,选择适当的缓存或缓存容器,然后编辑 Statistics Enabled 属性。使用以下命令,通过管理 CLI 启用统计信息。

为缓存容器启用统计数据集合。需要重新加载服务器。

/subsystem=infinispan/cache-container=CACHE_CONTAINER:write-attribute(name=statistics-enabled,value=true)
Copy to Clipboard Toggle word wrap

为缓存启用统计数据集合。需要重新加载服务器。

/subsystem=infinispan/cache-container=CACHE_CONTAINER/CACHE_TYPE=CACHE:write-attribute(name=statistics-enabled,value=true)
Copy to Clipboard Toggle word wrap
注意

您可以使用以下命令来取消定义缓存的 statistics-enabled 属性,以便它继承其缓存容器的 statistics-enabled 属性的设置。

/subsystem=infinispan/cache-container=CACHE_CONTAINER/CACHE_TYPE=CACHE:undefine-attribute(name=statistics-enabled)
Copy to Clipboard Toggle word wrap

22.3.7. Infinispan 分区处理

Infinispan 集群 由存储数据的多个节点构建。为防止在多个节点失败时数据丢失,Infinispan 会在多个节点上复制相同的数据。这种级别的数据冗余是使用 owners 属性配置的。只要同时减少配置的节点数量,Infinispan 将具有可用数据的副本。

但是,当节点从集群中消失时,可能会出现潜在的灾难性情况:

脑裂

这会在两个或者多个分区(或子集群)中分割集群,它们独立运行。在这些情况下,多个客户端从不同分区读取和写入,可以看到同一缓存条目的不同版本,而对于许多应用程序来说都有问题。

注意

有可能减少脑裂发生的可能性,如冗余网络或 IP 绑定 ;但是,它们只会减少问题发生的时间窗口。

按顺序导致多个节点崩溃
如果多个节点(特别是所有者数)在快速序列中崩溃,并且 Infinispan 没有时间在崩溃之间正确重新平衡其状态,则结果是部分数据丢失。

目的是避免因为出现脑裂或多个节点崩溃而给用户造成错误数据的情况。

22.3.7.1. 脑裂

在脑裂情形中,每个网络分区将安装自己的 JGroups 视图,从而将节点从其他分区中删除。我们没有直接的方法来确定集群是否被分成两个或者多个分区,因为分区相互不知道。相反,我们假定当一个或多个节点从 JGroups 集群消失而不发送显式离开消息时,我们假定集群已被分割。

禁用分区处理后,每个这样的分区将继续作为独立集群运行。每个分区可能只看到数据的一部分,每个分区都可能会在缓存中写入冲突更新。

启用分区处理后,如果我们检测到分割,每个分区都不会立即启动重新平衡,而是首先检查它是否应该进入降级模式:

  • 如果至少有一个片段丢失了所有所有者,这意味着自上次重新平衡起,至少指定的拥有者数至少保留下来,则分区进入降级状态。
  • 如果分区不包含 最新稳定拓扑 中的简单大多数节点(floor (numNodes/2)+ 1),则分区还会进入 degraded 模式。
  • 否则,分区会保持正常运行,并启动重新平衡。

每次重新平衡操作结束时都会更新 stable 拓扑,协调器决定不需要另一个重新平衡。这些规则确保,一个分区最多处于可用模式,另一个分区进入 degraded 模式。

当分区处于降级模式时,它只允许访问拥有的密钥:

  • 在此分区的节点上具有所有副本的条目的请求(读取和写入)会被遵守。
  • 对部分或全部已消失的节点拥有的请求将被拒绝,并显示 AvailabilityException

这样可保证分区无法为同一密钥写入不同的值(缓存是一致的),而且一个分区无法读取已在其他分区中更新的键(没有过时的数据)。

注意

两个分区可以启动隔离,只要它们没有合并,它们可以读取和写入不一致的数据。以后,我们可能会允许自定义可用性策略(例如,检查某个节点是集群的一部分,或者检查外部机器是否可以访问)可以处理这种情况。

22.3.7.2. 配置分区处理

默认禁用分区处理。当您启用分区处理时,有两个可配置的属性:

Expand
属性

when-split

"DENY_READ_WRITES", "ALLOW_READS", "ALLOW_READ_WRITES"

merge-policy

"NONE", "PREFERRED_ALWAYS", "PREFERRED_NON_NULL", "REMOVE_ALL"

配置 when-split,以确定在检测到网络分区时缓存的读写行为。

配置 merge-policy,以确定合并两个网络分区时冲突解析策略策略。

CLI 命令示例:

/subsystem=infinispan/cache-container=web/distributed-cache=dist/component=partition-handling:write-attribute(name=when-split, value=DENY_READ_WRITES)
Copy to Clipboard Toggle word wrap

22.3.7.3. 配置远程缓存容器

您必须为受管域中的每个服务器组配置远程缓存。您可以使用 statistics-enabled 属性为给定 remote-cache-container 和关联的运行时缓存启用一组指标。

22.3.7.3.1. 创建远程缓存容器

受管域中的每个服务器组都需要唯一的远程缓存。缓存可以属于同一数据网格。因此,用户必须通过为服务器组定义套接字绑定并将套接字绑定与远程缓存容器关联,为每个服务器组配置远程缓存。

流程

  1. 定义 socket-binding,根据需要为集群中的每个远程 Red Hat Data Grid 实例重复该命令。

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=SOCKET_BINDING:add(host=HOSTNAME,port=PORT)
    Copy to Clipboard Toggle word wrap
  2. 定义 remote-cache-container,以引用新创建的套接字绑定。

    batch
    /subsystem=infinispan/remote-cache-container=CACHE_CONTAINER:add(default-remote-cluster=data-grid-cluster)
    /subsystem=infinispan/remote-cache-container=CACHE_CONTAINER/remote-cluster=data-grid-cluster:add(socket-bindings=[SOCKET_BINDING,SOCKET_BINDING_2,...])
    run-batch
    Copy to Clipboard Toggle word wrap
22.3.7.3.2. 为远程缓存容器启用统计信息

statistics-enabled 属性为给定的 remote-cache-container 和关联的运行时缓存启用一组指标。

  • 对于名为 "foo" 的 remote-cache-container,使用以下操作启用统计信息:
/subsystem=infinispan/remote-cache-container=foo:write-attribute(name=statistics-enabled, value=true)
Copy to Clipboard Toggle word wrap
  • 对于 remote-cache-container "foo",在运行时可以看到以下指标:
/subsystem=infinispan/remote-cache-container=foo:read-attribute(name=connections)
/subsystem=infinispan/remote-cache-container=foo:read-attribute(name=active-connections)
/subsystem=infinispan/remote-cache-container=foo:read-attribute(name=idle-connections)
Copy to Clipboard Toggle word wrap
  • 有关这些指标的描述,请为 remote-cache-container 执行 read-resource-description 操作:
/subsystem=infinispan/remote-cache-container=foo:read-resource-description
Copy to Clipboard Toggle word wrap
  • 以下指标特定于所选部署使用的远程缓存:
/subsystem=infinispan/remote-cache-container=foo/remote-cache=bar.war:read-resource(include-runtime=true, recursive=true)
{
    "average-read-time" : 1,
    "average-remove-time" : 0,
    "average-write-time" : 2,
    "hits" : 9,
    "misses" : 0,
    "near-cache-hits" : 7,
    "near-cache-invalidations" : 8,
    "near-cache-misses" : 9,
    "near-cache-size" : 1,
    "removes" : 0,
    "time-since-reset" : 82344,
    "writes" : 8
}
Copy to Clipboard Toggle word wrap
  • 有关这些指标的描述,请为远程缓存执行 read-resource-description 操作:
/subsystem=infinispan/remote-cache-container=foo/remote-cache=bar.war:read-resource-description
Copy to Clipboard Toggle word wrap
  • 其中一些指标计算了值(example、average condition),另一些则被处理,如 hits 和 misses。以下操作可重置常规指标:
/subsystem=infinispan/remote-cache-container=foo/remote-cache=bar.war:reset-statistics()
Copy to Clipboard Toggle word wrap

22.3.8. Red Hat Data Grid 外部 HTTP 会话

注意

您需要 Red Hat Data Grid 订阅才能使用此功能。

Red Hat Data Grid 可用作 JBoss EAP 中特定应用程序数据的外部缓存容器,如 HTTP 会话。这允许独立于应用程序扩展数据层,并启用不同的 JBoss EAP 集群(可能位于各种域中),以访问来自同一 Red Hat Data Grid 集群的数据。此外,其他应用程序还可与 Red Hat Data Grid 提供的缓存进行接口。

以下示例演示了如何外部化 HTTP 会话。它适用于 JBoss EAP 和受管域的独立实例。

  1. 创建 remote-cache-container。如需更多信息,请参阅配置远程缓存容器
  2. 配置 HotRod 存储。HotRod 存储为 JBoss EAP 服务器创建的每个缓存使用一个专用远程缓存。通常,JBoss EAP 服务器上会使用一个失效缓存,如以下 CLI 脚本所示。

    注意

    需要在 Red Hat Data Grid 服务器上手动配置远程缓存。推荐的缓存配置是事务分布模式缓存,它带有 pesimistic locking。缓存名称必须与部署文件名对应,如 test.war

    配置远程缓存容器后,可以配置 hotrod 存储来替换任何现有存储。以下 CLI 脚本演示了与不验证缓存结合使用时用于卸载会话的典型用例。

    batch
    /subsystem=infinispan/cache-container=web/invalidation-cache=CACHE_NAME:add()
    /subsystem=infinispan/cache-container=web/invalidation-cache=CACHE_NAME/store=hotrod:add(remote-cache-container=CACHE_CONTAINER,fetch-state=false,purge=false,passivation=false,shared=true)
    /subsystem=infinispan/cache-container=web/invalidation-cache=CACHE_NAME/component=transaction:add(mode=BATCH)
    /subsystem=infinispan/cache-container=web/invalidation-cache=CACHE_NAME/component=locking:add(isolation=REPEATABLE_READ)
    /subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=CACHE_NAME)
    run-batch
    Copy to Clipboard Toggle word wrap

    该脚本配置一个新的无效缓存。然后,会话数据在缓存中维护,以提高性能并写入存储,以实现弹性。

    HotRod 客户端可以使用 @Resource 注释直接注入 Jakarta EE 应用。在以下示例中,@Resource 注释会在类路径中查找配置属性,它位于 hotrod-client.properties 文件中。

    @Resource(lookup = "java:jboss/infinispan/remote-container/web-sessions")
    private org.infinispan.client.hotrod.RemoteCacheContainer client;
    Copy to Clipboard Toggle word wrap

    示例: hotrod-client.properties 文件

    infinispan.client.hotrod.transport_factory = org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory
    infinispan.client.hotrod.server_list = 127.0.0.1:11222
    infinispan.client.hotrod.marshaller = org.infinispan.commons.marshall.jboss.GenericJBossMarshaller
    infinispan.client.hotrod.async_executor_factory = org.infinispan.client.hotrod.impl.async.DefaultAsyncExecutorFactory
    infinispan.client.hotrod.default_executor_factory.pool_size = 1
    infinispan.client.hotrod.default_executor_factory.queue_size = 10000
    infinispan.client.hotrod.hash_function_impl.1 = org.infinispan.client.hotrod.impl.consistenthash.ConsistentHashV1
    infinispan.client.hotrod.tcp_no_delay = true
    infinispan.client.hotrod.ping_on_startup = true
    infinispan.client.hotrod.request_balancing_strategy = org.infinispan.client.hotrod.impl.transport.tcp.RoundRobinBalancingStrategy
    infinispan.client.hotrod.key_size_estimate = 64
    infinispan.client.hotrod.value_size_estimate = 512
    infinispan.client.hotrod.force_return_values = false
    
    ## below is connection pooling config
    
    maxActive=-1
    maxTotal = -1
    maxIdle = -1
    whenExhaustedAction = 1
    timeBetweenEvictionRunsMillis=120000
    minEvictableIdleTimeMillis=300000
    testWhileIdle = true
    minIdle = 1
    Copy to Clipboard Toggle word wrap

保护远程缓存容器

可以使用 SSL 保护与远程 Red Hat Data Grid 实例的通信。这可以通过在 JBoss EAP 实例上配置 remote-cache-container 并调整 Red Hat Data Grid 实例上的 hotrod 连接器以使用活跃的安全域来实现。

  1. 在 JBoss EAP 中创建 client-ssl-context。有关创建 client-ssl-context 的更多信息,包括生成其他 elytron 组件,请参阅如何为 JBoss EAP 配置服务器安全性中的 使用 client-ssl-context

    /subsystem=elytron/client-ssl-context=CLIENT_SSL_CONTEXT:add(key-manager=KEY_MANAGER,trust-manager=TRUST_MANAGER)
    Copy to Clipboard Toggle word wrap
  2. 将远程缓存容器配置为使用客户端 SSL 上下文。

    /subsystem=infinispan/remote-cache-container=CACHE_CONTAINER/component=security:write-attribute(name=ssl-context,value=CLIENT_SSL_CONTEXT)
    Copy to Clipboard Toggle word wrap
  3. 保护远程 Red Hat Data Grid 实例,根据需要对每个实例重复此操作。

    1. client-ssl-context 中使用的密钥存储复制到远程 Red Hat Data Grid 实例。
    2. 配置 ApplicationRealm 以使用此密钥存储。

      /core-service=management/security-realm=ApplicationRealm/server-identity=ssl:add(keystore-path="KEYSTORE_NAME",keystore-relative-to="jboss.server.config.dir",keystore-password="KEYSTORE_PASSWORD")
      Copy to Clipboard Toggle word wrap
    3. 调整 hotrod 连接器以指向此安全域。

      /subsystem=datagrid-infinispan-endpoint/hotrod-connector=hotrod-connector/encryption=ENCRYPTION:add(require-ssl-client-auth=false,security-realm="ApplicationRealm")
      Copy to Clipboard Toggle word wrap
    4. 重新加载远程 Red Hat Data Grid 实例。

      reload
      Copy to Clipboard Toggle word wrap
注意

您需要 Red Hat Data Grid 订阅才能使用此功能。

此处的说明代表了旧的外部化会话方法。JBoss EAP 7.2 引入了基于与 elytron 子系统集成的 HotRod 协议的自定义优化的缓存存储。建议您使用新的 热插拔 存储,如 红帽 Data Grid 的外部 HTTP 会话 中所述。

注意

对于每个 distributable 应用,必须创建一个全新的缓存。它可以在现有缓存容器中创建,如 web

对 HTTP 会话外部化:

  1. 通过将网络信息添加到 socket-binding-group 来定义远程 Red Hat Data Grid 服务器的位置。

    示例:添加远程套接字绑定

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-rhdg-server1:add(host=RHDGHostName1, port=11222)
    
    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-rhdg-server2:add(host=RHDGHostName2, port=11222)
    Copy to Clipboard Toggle word wrap

    生成的 XML

    <socket-binding-group name="standard-sockets" ... >
      ...
      <outbound-socket-binding name="remote-rhdg-server1">
        <remote-destination host="RHDGHostName1" port="11222"/>
      </outbound-socket-binding>
      <outbound-socket-binding name="remote-rhdg-server2">
        <remote-destination host="RHDGHostName2" port="11222"/>
      </outbound-socket-binding>
    </socket-binding-group>
    Copy to Clipboard Toggle word wrap

    注意

    您需要为每个 Red Hat Data Grid 服务器配置远程套接字绑定。

  2. 确保远程缓存容器在 JBoss EAP 的 infinispan 子系统中定义;在 remote-store 元素的 cache 属性下,定义了远程 Red Hat Data Grid 服务器上的缓存名称。

    如果您在受管域中运行,请在这些命令前加上 /profile=PROFILE_NAME

    示例:添加远程缓存容器

    /subsystem=infinispan/cache-container=web/invalidation-cache=rhdg:add(mode=SYNC)
    
    /subsystem=infinispan/cache-container=web/invalidation-cache=rhdg/component=locking:write-attribute(name=isolation,value=REPEATABLE_READ)
    
    /subsystem=infinispan/cache-container=web/invalidation-cache=rhdg/component=transaction:write-attribute(name=mode,value=BATCH)
    
    /subsystem=infinispan/cache-container=web/invalidation-cache=rhdg/store=remote:add(remote-servers=["remote-rhdg-server1","remote-rhdg-server2"], cache=default, socket-timeout=60000, passivation=false, purge=false, shared=true)
    Copy to Clipboard Toggle word wrap

    生成的 XML

    <subsystem xmlns="{InfinispanSubsystemNamespace}">
      ...
      <cache-container name="web" default-cache="dist" module="org.wildfly.clustering.web.infinispan" statistics-enabled="true">
        <transport lock-timeout="60000"/>
        <invalidation-cache name="rhdg" mode="SYNC">
          <locking isolation="REPEATABLE_READ"/>
          <transaction mode="BATCH"/>
          <remote-store cache="default" socket-timeout="60000" remote-servers="remote-rhdg-server1 remote-rhdg-server2" passivation="false" purge="false" shared="true"/>
        </invalidation-cache>
        ...
      </cache-container>
    </subsystem>
    Copy to Clipboard Toggle word wrap

22.4. 将 JBoss EAP 配置为前端负载均衡器

您可以配置 JBoss EAP 和 undertow 子系统,以充当前端负载平衡器,将请求代理到后端 JBoss EAP 服务器。由于 Undertow 使用异步 IO,因此负责连接的 IO 线程是请求中涉及的唯一线程。相同的线程也用于连接到后端服务器。

您可以使用以下协议:

  • HTTP 通过纯文本(http),支持 HTTP/1 和 HTTP/2 (h2c)
  • HTTP 通过安全连接(https),支持 HTTP/1 和 HTTP/2 (h2)
  • ajp (ajp)

您可以定义 静态负载均衡器 并指定配置中的后端主机,或者使用 mod_cluster 前端 动态更新主机。

您可以使用内置的 mod_cluster 前端负载平衡器来负载平衡其他 JBoss EAP 实例。

此流程假设您在受管域中运行,并已配置了以下内容:

  • 用作负载平衡器的 JBoss EAP 服务器。

    • 此服务器使用 load-balancer 配置文件,它绑定到 load-balancer-sockets 套接字绑定组。

      注意

      load-balancer 配置集已预先配置了套接字绑定 mod-cluster Undertow 过滤器,并在默认主机中引用到过滤器,以便将此服务器用作前端负载平衡器。* 两个 JBoss EAP 服务器,它们充当后端服务器。** 这些服务器在集群中运行,并使用 ha 配置集,该配置文件绑定到 ha-sockets 套接字绑定组。:要部署到后端服务器的 distributable 应用程序。

配置 mod_cluster 前端负载均衡器

以下步骤对受管域中的服务器进行负载平衡,但可以对其进行调整以应用到一组单机服务器。确保更新 management CLI 命令值以适合您的环境。

流程

  1. 设置 mod_cluster 公告安全密钥。

    添加 advertise 安全密钥可让负载均衡器和服务器在发现过程中进行身份验证。

    使用以下管理 CLI 命令设置 mod_cluster 公告安全密钥。

    /profile=ha/subsystem=modcluster/proxy=default:write-attribute(name=advertise-security-key, value=mypassword)
    Copy to Clipboard Toggle word wrap
  2. 更新 mod_cluster 负载平衡器的安全密钥。

    使用以下管理 CLI 命令,为 mod_cluster 过滤器设置安全密钥:

    /profile=load-balancer/subsystem=undertow/configuration=filter/mod-cluster=load-balancer:write-attribute(name=security-key,value=mypassword)
    Copy to Clipboard Toggle word wrap
重要

建议仅向内部网络公开 mod_cluster 使用的管理和公告套接字绑定,而不是公共 IP 地址。

负载平衡器 JBoss EAP 服务器现在可以对两个后端 JBoss EAP 服务器进行负载平衡。

多个 mod_cluster 配置

mod_cluster 子系统支持多个命名代理配置,允许向反向代理注册非默认 undertow 服务器。此外,这允许单个应用服务器节点注册到不同的代理服务器组。

以下示例将 ajp-listener、服务器和主机添加到 undertow 服务器。它还添加了一个新的 mod_cluster 配置,它使用广播机制注册主机。

/socket-binding-group=standard-sockets/socket-binding=ajp-other:add(port=8010)
/subsystem=undertow/server=other-server:add
/subsystem=undertow/server=other-server/ajp-listener=ajp-other:add(socket-binding=ajp-other)
/subsystem=undertow/server=other-server/host=other-host:add(default-web-module=root-other.war)
/subsystem=undertow/server=other-server/host=other-host
/location=other:add(handler=welcome-content)
/subsystem=undertow/server=other-server/host=other-host:write-attribute(name=alias,value=[localhost]))

/socket-binding-group=standard-sockets/socket-binding=modcluster-other:add(multicast-address=224.0.1.106,multicast-port=23364)
/subsystem=modcluster/proxy=other:add(advertise-socket=modcluster-other,balancer=other-balancer,connector=ajp-other)

reload
Copy to Clipboard Toggle word wrap

22.4.2. 在负载均衡器中启用等级的会话关联性

您必须在负载均衡器中启用等级的会话关联性,才能具有多个会话关联性,在 distributable-web 子系统中排序路由。有关 distributable-web 子系统和不同的关联性选项的更多信息,请参阅 JBoss EAP 开发指南中的 distributable-web 子系统配置

分隔节点路由的默认分隔符为 如果要不同的值,您可以配置 关联性 资源的 delimiter 属性。

流程

  1. 为负载均衡器启用等级的会话关联性:

    /subsystem=undertow/configuration=filter/mod-cluster=load-balancer/affinity=ranked:add
    Copy to Clipboard Toggle word wrap
  2. 可选:配置 关联性 资源的 delimiter 属性:

    /subsystem=undertow/configuration=filter/mod-cluster=load-balancer/affinity=ranked:write-attribute(name=delimiter,value=':')
    Copy to Clipboard Toggle word wrap

22.4.3. 将 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
    Copy to Clipboard Toggle word wrap
  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)
    Copy to Clipboard Toggle word wrap
  3. 将每个远程主机添加到反向代理处理器中:

    /subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host1:add(outbound-socket-binding=remote-host1, scheme=ajp, instance-id=myroute1, path=/test)
    
    /subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host2:add(outbound-socket-binding=remote-host2, scheme=ajp, instance-id=myroute2, path=/test)
    Copy to Clipboard Toggle word wrap
  4. 添加反向代理位置:

    /subsystem=undertow/server=default-server/host=default-host/location=\/test:add(handler=my-handler)
    Copy to Clipboard Toggle word wrap

当访问 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 连接器概述

JBoss EAP 能够利用内置于外部 Web 服务器的负载平衡和集群机制,如 Apache HTTP 服务器、Microsoft play 和 Oracle iPlanet 以及 Undertow。JBoss EAP 使用连接器与 Web 服务器通信。这些连接器在 JBoss EAP 的 undertow 子系统中配置。

Web 服务器包括软件模块,用于控制 HTTP 请求路由到 JBoss EAP 节点的方式。这些模块各自因其工作方式和配置方式而异。模块配置为在多个 JBoss EAP 节点之间平衡工作负载,以便在故障事件或两者时将工作负载移到备用服务器。

JBoss EAP 支持多种不同的连接器。您选择的选项取决于使用的 Web 服务器以及您需要的功能。下表包括了与 JBoss EAP 兼容的各种 HTTP 连接器支持的配置和功能的比较。

有关使用 JBoss EAP 8.0 作为多平台负载平衡器的更多信息,请参阅使用 mod_cluster 将 Undertow 配置为负载平衡器

有关 HTTP 连接器支持的配置的最新信息,请参阅 JBoss EAP 支持的配置

Expand
表 22.1. HTTP 连接器支持的配置
连接器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

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

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

HTTP, HTTPS, AJP

ISAPI 连接器

Microsoft IIS

Microsoft Windows Server

AJP

NSAPI 连接器

Oracle iPlanet Web Server

 

AJP

Expand
表 22.2. HTTP 连接器功能
连接器支持粘性会话适应部署状态

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 不需要任何特殊配置来开始接受来自代理服务器的请求,只要配置了正确的协议处理程序,如 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)
    Copy to Clipboard Toggle word wrap

    在上例中,外部 Web 服务器将当前的 JBoss EAP 实例标识为 node1

  2. 将所需的监听程序添加到 Undertow。

    为了让外部 Web 服务器能够连接到 JBoss EAP,Undertow 需要侦听器。每个协议都需要其自身的监听程序,它绑定到套接字绑定。

    注意

    根据您的协议和端口配置,此步骤可能并不需要。HTTP 侦听器配置在所有默认的 JBoss EAP 配置中,如果您使用 hafull-ha 配置文件,则会配置 AJP 侦听器。

    您可以通过读取默认服务器配置来检查所需的监听程序是否已配置:

    /subsystem=undertow/server=default-server:read-resource
    Copy to Clipboard Toggle word wrap

    若要向 Undertow 添加侦听器,它必须具有套接字绑定。套接字绑定添加到服务器或服务器组使用的套接字绑定组中。以下管理 CLI 命令会向 standard-sockets 套接字绑定添加绑定到端口 8009ajp 套接字绑定。

    /socket-binding-group=standard-sockets/socket-binding=ajp:add(port=8009)
    Copy to Clipboard Toggle word wrap

    以下管理 CLI 命令利用 ajp 套接字绑定向 Undertow 添加 ajp 侦听器:

    /subsystem=undertow/server=default-server/ajp-listener=ajp:add(socket-binding=ajp)
    Copy to Clipboard Toggle word wrap

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 子系统属性

22.6.1. 在 Apache HTTP 服务器中配置 mod_cluster

安装 JBoss Core Services Apache HTTP Server 或使用 JWS 时,已包括 mod_cluster 模块,默认被加载。

注意

从版本 3.1.0 开始,Apache HTTP 服务器不再发布 JWS。

请参阅以下步骤来配置 mod_cluster 模块以适合您的环境。

注意

红帽客户还可以在红帽客户门户网站上使用 Load Balancer Configuration Tool,快速为 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>
Copy to Clipboard Toggle word wrap

Apache HTTP 服务器服务器配置为负载平衡器,并可与 JBoss EAP 上运行的 modcluster 子系统一起使用。您必须配置 mod_cluster worker 节点,使 JBoss EAP 知道 mod_cluster。

如果要禁用 mod_cluster 的广告并配置静态代理列表,请参阅 为 mod_cluster 禁用 广告。有关 Apache HTTP 服务器中的可用 mod_cluster 配置选项的更多信息,请参阅 Apache HTTP 服务器 mod_cluster 指令

有关配置 mod_cluster 的详情,请参阅 JWS HTTP Connectors 和 Load Balancing Guide 中的 Configure Load Balancing using Apache HTTP Server and mod_cluster 部分。

22.6.2. 为 mod_cluster 禁用广告

默认情况下,mod cluster 子系统的均衡器使用多播 UDP 将其可用性公告给后台工作程序。您可以禁用广告并使用代理列表,而是使用以下流程。

注意

以下流程中的管理 CLI 命令假设您在受管域中使用 full-ha 配置文件。如果您使用 full-ha 以外的配置文件,请在命令中使用适当的配置文件名称。如果您正在运行单机服务器,请完全删除 /profile=full-ha

  1. 修改 Apache HTTP 服务器配置。

    编辑 httpd.conf Apache HTTP 服务器配置文件。使用 EnableMCPMReceive 指令,对侦听 MCPM 请求的虚拟主机进行以下更新。

    1. 添加 指令来禁用服务器公告。

      ServerAdvertise 指令设置为 Off 以禁用服务器公告。

      ServerAdvertise Off
      Copy to Clipboard Toggle word wrap
    2. 禁用广播频率。

      如果您的配置指定了 AdvertiseFrequency 参数,请使用 # 字符注释掉它。

      # AdvertiseFrequency 5
      Copy to Clipboard Toggle word wrap
    3. 启用接收 MCPM 消息的功能。

      确保 EnableMCPMReceive 指令存在,以允许 web 服务器从 worker 节点接收 MCPM 信息。

      EnableMCPMReceive
      Copy to Clipboard Toggle word wrap
  2. 禁用 JBoss EAP modcluster 子系统中的广告。

    使用以下管理 CLI 命令禁用广告:

    /profile=full-ha/subsystem=modcluster/proxy=default:write-attribute(name=advertise,value=false)
    Copy to Clipboard Toggle word wrap
    重要

    确保继续执行下一步,以提供代理列表。如果代理列表为空,则不会禁用广告。

  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)
    Copy to Clipboard Toggle word wrap

    接下来,将代理添加到 mod_cluster 配置中。

    /profile=full-ha/subsystem=modcluster/proxy=default:list-add(name=proxies,value=proxy1)
    /profile=full-ha/subsystem=modcluster/proxy=default:list-add(name=proxies,value=proxy2)
    Copy to Clipboard Toggle word wrap

Apache HTTP 服务器均衡器不再向 worker 节点公告其存在,并且不再使用 UDP 多播。

22.6.3. 配置 mod_cluster worker 节点

mod_cluster 工作程序节点由 JBoss EAP 服务器组成。此服务器可以是单机服务器,也可以是受管域中的服务器组的一部分。一个单独的进程在 JBoss EAP 中运行,用于管理集群的所有 worker 节点。这称为受管域或单机服务器中的主设备。

受管域中的 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}")
    Copy to Clipboard Toggle word wrap

    重新加载服务器。

    reload
    Copy to Clipboard Toggle word wrap
  2. 配置主机名。

    为参与受管域的每个主机设置唯一的主机名。此名称在第二项之间必须是唯一的,并且将用于标识到集群的次要名称,因此请记录您使用的名称。

    1. 使用适当的 host.xml 配置文件启动 JBoss EAP 次要主机。

      $ EAP_HOME/bin/domain.sh --host-config=host-secondary.xml
      Copy to Clipboard Toggle word wrap
    2. 使用以下管理 CLI 命令设置唯一主机名:本例使用 secondary1 作为新主机名。

      /host=EXISTING_HOST_NAME:write-attribute(name=name,value=secondary1)
      Copy to Clipboard Toggle word wrap

      有关配置主机名的更多信息 ,请参阅配置主机的名称

  3. 配置每个主机以连接到域控制器。

    注意

    此步骤不适用于单机服务器。

    + 对于需要加入受管域的新建主机,您必须删除 local 元素,并添加指向域控制器的 remote element host 属性。

    + ..使用适当的 host.xml 配置文件启动 JBoss EAP 次要主机。

    +

    $ EAP_HOME/bin/domain.sh --host-config=host-secondary.xml
    Copy to Clipboard Toggle word wrap
    1. 使用以下管理 CLI 命令配置域控制器设置:

      /host=SECONDARY_HOST_NAME:write-remote-domain-controller(host=DOMAIN_CONTROLLER_IP_ADDRESS,port=${jboss.domain.primary.port:9990},security-realm="ManagementRealm")
      Copy to Clipboard Toggle word wrap

      这会修改 host-secondary.xml 文件中的 XML,如下所示:

      <domain-controller>
          <remote host="DOMAIN_CONTROLLER_IP_ADDRESS" port="${jboss.domain.primary.port:9990}" security-realm="ManagementRealm"/>
      </domain-controller>
      Copy to Clipboard Toggle word wrap

      如需更多信息,请参阅主机控制器配置

  4. 为每个次要主机配置身份验证。

    每个次要服务器都需要在域控制器的主或独立 master ManagementRealm 中创建的用户名和密码。在域控制器主或单机 master上,为每个主机运行 EAP_HOME/bin/add-user.sh 命令。为每个主机添加一个管理用户,其用户名与二级主机名匹配。

    务必在最后一个问题上回答 yes,要求"此新用户将用于一个 AS 进程来连接到另一个 AS 进程?",以便您提供 secret 值。

    示例: add-user.sh Script Output (trimmed)

    $ 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 : secondary1
    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 'secondary1' 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 secondary host controller connecting to the primary or for a Remoting connection for server to server {JEB} calls.
    yes/no? yes
    To represent the user add the following to the server-identities definition <secret value="SECRET_VALUE" />
    Copy to Clipboard Toggle word wrap

    复制此输出中提供的 Base64 编码的 secret 值,SECRET_VALUE 可以在下一步中使用。

    如需更多信息,请参阅 JBoss EAP 如何配置服务器安全 指南中的 主域控制器 部分。

  5. 修改次要主机的安全域,以使用新的身份验证。

    您可以通过在服务器配置中设置 secret 值、从凭证存储或 vault 获取密码,或者将密码作为系统属性传递来指定密码。

    • 使用管理 CLI 在服务器配置文件中指定 Base64 编码的密码值。

      使用以下管理 CLI 命令来指定 secret 值。务必将 SECRET_VALUE 替换为上一步中 add-user 输出返回的 secret 值。

      /host=SECONDARY_HOST_NAME/core-service=management/security-realm=ManagementRealm/server-identity=secret:add(value="SECRET_VALUE")
      Copy to Clipboard Toggle word wrap

      您需要重新加载服务器。--host 参数不适用于单机服务器。

      reload --host=HOST_NAME
      Copy to Clipboard Toggle word wrap

      如需更多信息,请参阅配置 二级控制器以使用 JBoss EAP 如何配置服务器安全 指南中的凭证 部分。

    • 配置主机,以从凭据存储中获取密码。

      如果您在凭证存储中存储了 secret 值,您可以使用以下命令将服务器 secret 设置为凭证存储中的值:

      /host=SECONDARY_HOST_NAME/core-service=management/security-realm=ManagementRealm/server-identity=secret:add(credential-reference={store=STORE_NAME,alias=ALIAS}
      Copy to Clipboard Toggle word wrap

      您需要重新加载服务器。--host 参数不适用于单机服务器。

      reload --host=HOST_NAME
      Copy to Clipboard Toggle word wrap

      如需更多信息,请参阅 JBoss EAP 如何配置服务器安全 指南中的 凭据存储 部分。

    • 配置主机,以从密码库获取密码。

      1. 使用 EAP_HOME/bin/vault.sh 脚本生成屏蔽的密码。它将以 VAULT::secret::password::VAULT_SECRET_VALUE 格式生成一个字符串,例如:

        VAULT::secret::password::ODVmYmJjNGMtZDU2ZC00YmNlLWE4ODMtZjQ1NWNmNDU4ZDc1TElORV9CUkVBS3ZhdWx0.
        Copy to Clipboard Toggle word wrap
        注意

        在密码库中创建密码时,必须以纯文本形式指定密码,而不是以 Base64 编码的。

      2. 使用以下管理 CLI 命令来指定 secret 值。务必将 VAULT_SECRET_VALUE 替换为上一步中生成的已屏蔽密码。

        /host=primary/core-service=management/security-realm=ManagementRealm/server-identity=secret:add(value="${VAULT::secret::password::VAULT_SECRET_VALUE}")
        Copy to Clipboard Toggle word wrap

        您需要重新加载服务器。--host 参数不适用于单机服务器。

        reload --host=HOST_NAME
        Copy to Clipboard Toggle word wrap

        如需更多信息,请参阅 JBoss EAP 如何配置服务器安全 指南中的 密码库 部分。

    • 将密码指定为系统属性。

      以下示例使用 server.identity.password 作为密码的系统属性名称。

      1. 在服务器配置文件中指定密码的系统属性。

        使用以下管理 CLI 命令,将 secret 身份配置为使用系统属性。

        /host=SECONDARY_HOST_NAME/core-service=management/security-realm=ManagementRealm/server-identity=secret:add(value="${server.identity.password}")
        Copy to Clipboard Toggle word wrap

        您需要重新加载服务器。--host 参数不适用于单机服务器。

        reload --host=primary
        Copy to Clipboard Toggle word wrap
      2. 在启动服务器时为系统属性设置密码。

        您可以通过将 server.identity.password 系统属性传递为命令行参数或属性文件来设置 server.identity.password 系统属性。

        1. 将 传递为纯文本命令行参数。

          启动服务器并传递 server.identity.password 属性。

          $ EAP_HOME/bin/domain.sh --host-config=host-secondary.xml -Dserver.identity.password=changeme
          Copy to Clipboard Toggle word wrap
          警告

          密码必须以纯文本形式输入,并对发出 ps -ef 命令的人员可见。

        2. 在属性文件中设置 属性。

          创建属性文件,并将键/值对添加到属性文件中,例如:

          server.identity.password=changeme
          Copy to Clipboard Toggle word wrap
          警告

          密码采用纯文本,将对有权访问此属性文件的任何人可见。

          + 使用命令行参数启动服务器。

          +

          $ EAP_HOME/bin/domain.sh --host-config=host-secondary.xml --properties=PATH_TO_PROPERTIES_FILE
          Copy to Clipboard Toggle word wrap
  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 参数必须在负载均衡器的 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
Copy to Clipboard Toggle word wrap

22.6.5. 在集群间迁移流量

使用 JBoss EAP 创建新集群后,您可以将流量从上一集群迁移到升级过程中的新集群。在此任务中,您将看到可用于迁移此流量的策略,且停机时间最小。

  • 新的集群设置。我们会调用此集群 ClusterNEW
  • 被冗余的旧集群设置。我们将调用此集群 ClusterOLD
集群的升级过程 - 负载平衡组
  1. 使用先决条件中描述的步骤设置您的新集群。
  2. ClusterNEWClusterOLD 中,确保配置选项 sticky-session 设置为 true 的默认设置。启用此选项意味着对任何集群中集群节点进行的所有新请求都将继续进入相应的集群节点。

    /profile=full-ha/subsystem=modcluster/proxy=default:write-attribute(name=sticky-session,value=true)
    Copy to Clipboard Toggle word wrap
  3. load-balancing-group 设置为 ClusterOLD,假设 ClusterOLD 中的所有集群节点都是 ClusterOLD 负载均衡组的成员。

    /profile=full-ha/subsystem=modcluster/proxy=default:write-attribute(name=load-balancing-group,value=ClusterOLD)
    Copy to Clipboard Toggle word wrap
  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]
    Copy to Clipboard Toggle word wrap
  5. 任何旧的活跃会话都位于 ClusterOLD 组中,任何新会话都会在 ClusterOLDCLusterNEW 组中创建。接下来,我们需要禁用整个 ClusterOLD 组,以便其集群节点可能会被删除,而不会造成当前活动的客户端会话的任何错误。

    mod_cluster-manager web 控制台中,单击 LBGroup ClusterOLDDisable Nodes 链接。

    此时,只有属于已建立的会话的请求才会路由到 ClusterOLD 负载平衡组的成员。所有新客户端的会话都会在 ClusterNEW 组中创建。当 ClusterOLD 组中没有活跃的会话时,就可以安全地删除其成员。

    注意

    使用 Stop Nodes 将命令负载均衡器停止将任何请求立即路由到这个域。这将强制故障转移到另一个负载平衡组,这将给客户端造成会话数据丢失,只要 ClusterNEWClusterOLD 之间没有会话复制。

默认负载平衡组

如果当前的 ClusterOLD 设置不包含任何负载平衡组设置,从 mod_cluster-manager 控制台上的 LBGroup: 找到,则仍然可以利用禁用 ClusterOLD 节点。在这种情况下,点每个 ClusterOLD 节点的 Disable Contexts。这些节点的上下文将被禁用,一旦没有活跃的会话就可以删除。新客户端的会话仅在启用了上下文的节点上创建,在此示例中假定为 ClusterNEW 成员。

使用管理 CLI

除了使用 mod_cluster-manager Web 控制台外,您还可以使用 JBoss EAP 管理 CLI 停止或禁用特定的上下文。

停止上下文

/host=primary/server=server-one/subsystem=modcluster:stop-context(context=/my-deployed-application-context, virtualhost=default-host, waittime=0)
Copy to Clipboard Toggle word wrap

停止将 waittime 设置为 0 的上下文,即没有超时,指示 balancer 停止立即将任何请求路由到它,这会强制切换到另一个可用上下文。

如果您使用 waittime 参数设置超时值,则不会在此上下文中创建新会话,但现有会话将继续定向到此节点,直到它们完成或指定的超时已过。waittime 参数默认为 10 秒。

禁用上下文

/host=primary/server=server-one/subsystem=modcluster:disable-context(context=/my-deployed-application-context, virtualhost=default-host)
Copy to Clipboard Toggle word wrap

禁用上下文会告知 balancer 应该在此上下文中不会创建新会话。

22.7. Apache mod_jk HTTP 连接器

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 Server 或使用 JWS 时,已包括 mod_jk 模块 mod_jk.so,但默认情况下不载入它。

注意

从版本 3.1.0 开始,Apache HTTP 服务器不再发布 JWS。

使用以下步骤在 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>
    Copy to Clipboard Toggle word wrap
    注意

    JkMount 指令指定哪个 URL Apache HTTP 服务器必须转发到 mod_jk 模块。根据指令的配置,mod_jk 将接收的 URL 发送到正确的 worker。要直接提供静态内容并只使用 Java 应用程序的负载均衡器,URL 路径必须是 /application configured。要将 mod_jk 用作负载平衡器,请使用值 configured,将所有 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
    Copy to Clipboard Toggle word wrap

    有关 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
      Copy to Clipboard Toggle word wrap
    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
      Copy to Clipboard Toggle word wrap

有关配置 mod_jk 的更多信息,请参阅 JWS HTTP 连接器和 负载均衡指南中的配置 Apache HTTP 服务器以加载 mod_jk 部分。

22.7.2. 配置 JBoss EAP 以与 mod_jk 通信

mod_jk HTTP 连接器具有单一组件,即 web 服务器载入的 mod_jk.so 模块。此模块接收客户端请求并将其转发到容器,本例中为 JBoss EAP。还必须将 JBoss EAP 配置为接受这些请求并将回复发回到 Web 服务器。

JBoss EAP undertow 子系统需要指定侦听器,才能接受来自的请求并将回复发回到外部 Web 服务器。由于 mod_jk 使用 AJP 协议,因此必须配置 AJP 侦听器。

如果您使用一个默认高可用性配置 hafull-ha,则已经配置了 AJP 侦听器。

具体步骤请参阅 接受来自外部 Web 服务器的请求

22.8. Apache mod_proxy HTTP 连接器

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 Server 或使用 JWS 时,已包括 mod_proxy 模块,默认会被加载。

注意

从版本 3.1.0 开始,Apache HTTP 服务器不再发布 JWS。

请参阅以下相应的部分来配置基本 负载平衡 或非 负载平衡 代理。这些步骤假定您已导航到 Apache HTTP 服务器的 httpd/ 目录,这将因您的平台而异。如需更多信息,请参阅 JBoss Core Services Apache HTTP Server 安装指南中的您的平台 的安装说明。这些步骤还假定已在 JBoss EAP undertow 子系统中配置了必要的 HTTP 侦听器。

注意

红帽客户还可以在红帽客户门户网站上使用 Load Balancer Configuration Tool 来快速为 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>
Copy to Clipboard Toggle word wrap
添加负载平衡代理
注意

默认 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>
Copy to Clipboard Toggle word wrap

以上示例都使用 HTTP 协议进行通讯。如果您加载适当的 mod_proxy 模块,您可以改为使用 AJP 或 HTTPS 协议。如需了解更多详细信息,请参阅 Apache mod_proxy 文档

启用粘性会话

粘性会话 表示,如果客户端请求最初发送到特定的 JBoss EAP worker,则将来的所有请求都将发送到同一工作程序,除非它不可用。这几乎总是推荐的行为。

要为 mod_proxy 启用粘性会话,请将 stickysession 参数添加到 ProxyPass 语句中。

ProxyPass / balancer://mycluster stickysession=JSESSIONID
Copy to Clipboard Toggle word wrap

您可以为 ProxyPass 语句指定额外的参数,如 lbmethodnofailover。有关可用参数的更多信息,请参阅 Apache mod_proxy 文档

22.8.2. 配置 JBoss EAP 与 mod_proxy 通信

JBoss EAP undertow 子系统需要指定侦听器,才能接受来自的请求并将回复发回到外部 Web 服务器。根据您要使用的协议,您可能需要配置侦听器。

JBoss EAP 默认配置中配置了 HTTP 侦听器。如果您使用一个默认高可用性配置 hafull-ha,则也预配置了 AJP 侦听器。

具体步骤请参阅 接受来自外部 Web 服务器的请求

22.9. Microsoft ISAPI 连接器

Internet Server API (ISAPI)是一组 API,用于为 Microsoft 的 Internet Information Services (IIS)等 Web 服务器编写 OLE Server 扩展和过滤器。isapi_redirect.dllmod_jk 的扩展,被调整到 ActiveDoc。isapi_redirect.dll 可让您将 JBoss EAP 实例配置为 worker 节点,并将 netobserv 配置为负载均衡器。

注意

如需有关 Windows Server 和 conditional 支持的配置的信息,请参阅 JBoss EAP 支持的配置。

22.9.1. 配置 Microsoft adapt 以使用 ISAPI 连接器

从红帽客户门户网站下载 ISAPI 连接器:

  1. 打开浏览器并登录到红帽客户门户网站 JBoss Software Downloads 页面
  2. Product 下拉菜单中选择 Web Connectors
  3. Version 下拉菜单中选择最新的 JBoss Core Services 版本。
  4. 在列表中找到 Red Hat JBoss Core Services ISAPI Connector,然后点 Download 链接。
  5. 提取存档,并将 sbin 目录的内容复制到您服务器上的位置。以下说明假定内容已复制到 C:\connectors\

使用 stap Manager (IIS 7)配置IS Redirector:

  1. StartRun,并输入 inetmgr 来打开 stap manager。
  2. 在左侧的树形视图窗格中,展开 async 7
  3. 双击 ISAPI 和 CGI 注册,以在新窗口中打开它。
  4. Actions 窗格中,单击 Add。此时会打开 Add ISAPI 或 CGI Restriction 窗口。
  5. 指定以下值:

    • ISAPI 或 CGI Path: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 原生 ISAPI 重定向过滤器

    • 在树形视图窗格中,展开 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 处理程序

    • 双击树形视图窗格中的 async 7 项。poweroff 7 Home Features View 将打开。
    • 双击处理程序 映射。此时会出现 处理程序映射功能 视图。
    • Group by combo 框中,选择 StateHandler 映射 显示在 Enabled 和 Disabled Groups 中。
    • 查找 ISAPI-dll。如果它位于 Disabled 组中,请右键单击它并选择 Edit Feature Permissions
    • 启用以下权限:

      • 脚本
      • 执行
    • OK 保存值,并关闭 Edit Feature Permissions 窗口。

Microsoft conditional 现在配置为使用 ISAPI 连接器。

此任务配置一组 JBoss EAP 服务器,以接受来自 ISAPI 连接器的请求。它不包括负载平衡或高可用性故障转移的配置。

此配置在 rust 服务器上完成,并假设您已将 JBoss EAP 配置为接受来自外部 Web 服务器 的请求。您还需要完全的管理员访问权限,并且需要对 ISAPI 连接器 进行了配置,以使用 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
    Copy to Clipboard Toggle word wrap

    如果您不想使用 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
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap
  5. 创建 rewrite.properties 文件。

    rewrite.properties 文件包含特定应用程序的简单 URL 重写规则。重写的路径使用 name-value 对来指定,如下例所示。将此文件放在 C:\connectors\ 目录中。

    #Simple example
    # Images are accessible under abc path
    /app-01/abc/=/app-01/images/
    Copy to Clipboard Toggle word wrap
  6. 使用 net stopnet start 命令重新启动您的 ActiveDoc 服务器。

    C:\> net stop was /Y
    C:\> net start w3svc
    Copy to Clipboard Toggle word wrap

stap 服务器被配置为根据应用特定的基础将客户端请求发送到您配置的特定 JBoss EAP 服务器。

此配置平衡您指定的 JBoss EAP 服务器的客户端请求。此配置在 rust 服务器上完成,并假设您已将 JBoss EAP 配置为接受来自外部 Web 服务器 的请求。您还需要完全的管理员访问权限,并且需要对 ISAPI 连接器 进行了配置,以使用 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
    Copy to Clipboard Toggle word wrap

    如果您不想使用 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
    Copy to Clipboard Toggle word wrap
  4. 创建 worker.properties 文件。

    worker.properties 文件包含 worker 标签和服务器实例之间的映射定义。此文件遵循用于 Apache mod_jk worker 属性配置 的同一文件的语法。

    以下是 workers.properties 文件示例。负载均衡器在文件末尾附近配置,组成 worker01worker02。这些工作程序名称必须与 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
    Copy to Clipboard Toggle word wrap

  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
    Copy to Clipboard Toggle word wrap

stap 服务器被配置为将客户端请求发送到 workers.properties 文件中引用的 JBoss EAP 服务器,将负载分散到 1:3 比率的服务器。此比率源自分配给每台服务器的负载平衡因素 lbfactor

22.10. Oracle NSAPI connector

Netscape Server API (NSAPI)是由 Oracle iPlanet Web Server (以前称为 Netscape Web Server)提供的 API,用于为服务器实施扩展。这些扩展称为服务器插件。NSAPI 连接器在 nsapi_redirector.so 中使用,它是调整到 Oracle iPlanet Web Server 的 mod_jk 的扩展。NSAPI 连接器允许您将 JBoss EAP 实例配置为使用 Oracle iPlanet Web Server 作为负载均衡器的 worker 节点。

注意

有关 Oracle iPlanet Web Server 支持的配置的信息,请参阅 JBoss EAP 支持的配置。

先决条件

  • JBoss EAP 在作为 worker 的每个服务器上安装和配置。

从红帽客户门户网站下载 NSAPI 连接器:

  1. 打开浏览器并登录到红帽客户门户网站 JBoss Software Downloads 页面
  2. Product 下拉菜单中选择 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/lib64/ 目录中。

设置 NSAPI Connector:

注意

在这些说明中,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 Jakarta Server Pages servlet -->
      <!--servlet-mapping>
       <servlet-name>jsp</servlet-name>
       <url-pattern>*.jsp</url-pattern>
      </servlet-mapping-->
      Copy to Clipboard Toggle word wrap

      保存并退出 文件。

  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"
    Copy to Clipboard Toggle word wrap

    以上配置适用于 32 位构架。

    保存并退出 文件。

  3. 配置 NSAPI 连接器。

    您可以为基本配置配置 NSAPI 连接器,但没有负载平衡配置。选择以下选项之一,之后您的配置将完成。

此任务配置 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>
    Copy to Clipboard Toggle word wrap
  2. 定义提供每个路径的 worker。

    继续编辑 IPLANET_CONFIG/obj.conf 文件。在您刚才编辑的部分的关闭标签后直接添加以下内容:</ Object&gt;。

    <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>
    Copy to Clipboard Toggle word wrap

    上面的示例将请求重定向到 URL 路径 /status 到名为 worker01 的 worker,并将 /nc/ 下的所有 URL 路径重定向到名为 worker02 的 worker。第三行表示分配给 jknsapi 对象的所有 URL 均与上一行不匹配的所有 URL 提供给 worker01

    保存并退出 文件。

  3. 定义 worker 及其属性。

    IPLANET_CONFIG/connectors/ 目录中创建一个名为 workers.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
    Copy to Clipboard Toggle word wrap

    worker.properties 文件使用与 Apache mod_jk 相同的语法。

    保存并退出 文件。

  4. 重启 iPlanet Web 服务器

    发出以下命令以重新启动 iPlanet Web 服务器。

    IPLANET_CONFIG/../bin/stopserv
    IPLANET_CONFIG/../bin/startserv
    Copy to Clipboard Toggle word wrap

iPlanet Web 服务器现在将客户端请求发送到您配置为 JBoss EAP 上的部署的 URL。

此任务配置 NSAPI 连接器,在负载平衡配置中将客户端请求发送到 JBoss EAP 服务器。

重要

在继续此任务前 ,您必须已配置了 NSAPI 连接器

为负载均衡配置 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"
    NameTrans fn="assign-name" from="/jkmanager/*" name="jknsapi"
    </Object>
    Copy to Clipboard Toggle word wrap
  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>
    Copy to Clipboard Toggle word wrap

    jksnapi 对象定义了用于服务 默认 对象中 name="jksnapi" 映射的每个路径的 worker 节点。与 /jkmanager wasm 匹配的 URL 外,所有内容都会被重定向到名为 router 的 worker。

  3. 定义 worker 及其属性。

    IPLANET_CONFIG/connector/ 中创建名为 workers.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
    Copy to Clipboard Toggle word wrap

    worker.properties 文件使用与 Apache mod_jk 相同的语法。

    保存并退出 文件。

  4. 重新启动 iPlanet Web Server 7.0。

    IPLANET_CONFIG/../bin/stopserv
    IPLANET_CONFIG/../bin/startserv
    Copy to Clipboard Toggle word wrap

iPlanet Web 服务器将您配置的 URL 模式重定向到负载平衡配置中 JBoss EAP 服务器。

第 23 章 优化 JBoss EAP 服务器配置

安装 JBoss EAP 服务器 并且创建了管理用户 后,红帽建议您优化服务器配置。

请确定您查阅 JBoss EAP 性能调整 指南中的信息,以了解有关如何优化服务器配置的信息,以避免在生产环境中部署应用程序时出现常见问题。常见的优化 包括设置 ulimits启用垃圾回收创建 Java 堆转储以及调整线程池大小

最好使您的 JBoss EAP 实例保持最新状态,以及最新的漏洞修复。如需更多信息,请参阅更新 Red Hat JBoss Enterprise Application Platform

附录 A. 参考资料

A.1. 服务器运行时参数

应用服务器启动脚本在运行时接受参数和交换机。这允许服务器在 standalone.xmldomain.xmlhost.xml 配置文件中定义的配置的替代配置下启动。

其他配置可能包括启动服务器,并设置替代套接字绑定或辅助配置。

可以通过在启动时传递帮助开关 -h--help 来访问可用的参数列表。

Expand
表 A.1. 运行时的参数
参数操作模式描述

--admin-only

独立模式

将服务器的运行类型设置为 ADMIN_ONLY。这将导致它打开管理接口并接受管理请求,但不能启动其他运行时服务或接受最终用户请求。请注意,建议您改为使用 --start-mode=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

--git-repo

独立模式

用于管理和持久服务器配置数据的 Git 存储库的位置。如果为本地存储则可以是 local;或是到远程存储库的 URL。

--git-branch

独立模式

Git 存储库中要使用的分支或标签名称。此参数应命名现有的分支或标签名称,因为如果不存在,则不会创建该分支或标签名称。如果使用标签名称,请将存储库置于分离的 HEAD 状态,这意味着以后的提交不会附加到任何分支。标签名称为只读,通常在多个节点之间复制配置时使用。

--git-auth

独立模式

指向 Elytron 配置文件的 URL,该文件包含连接远程 Git 存储库时要使用的凭据。如果您的远程 Git 存储库需要身份验证,则需要此参数。Elytron 不支持 SSH。因此,只支持使用没有密码的私钥进行默认的 SSH 身份验证。此参数不能与本地存储库一起使用。

-h, --help

独立,域

显示帮助消息并退出。

--host-config=<config>

要使用的主机配置文件的名称。默认值为 host.xml

--interprocess-hc-address=<address>

主机控制器应侦听进程控制器通信的地址。

--interprocess-hc-port=<port>

主机控制器应侦听进程控制器通信的端口。

--primary-address=<address>

将系统属性 jboss.domain.primary.address 设置为给定的值。在默认的次要主机控制器配置中,这用于配置主主机控制器的地址。

--primary-port=<port>

将系统属性 jboss.domain.primary.port 设置为给定的值。在默认的次要主机控制器配置中,这用于配置主主机控制器用于原生管理通信的端口。

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

--start-mode=<mode>

独立模式

设置服务器的启动模式。这个选项不能与 --admin-only 一起使用。有效值为:

  • normal: 服务器将正常启动。
  • admin-only:服务器将仅打开管理接口并接受管理请求,而不启动其他运行时服务或接受最终用户请求。
  • suspend:服务器将以暂停模式启动,并且在恢复之前不会服务请求。

-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 7 及更新的版本,RPM 服务配置文件使用 systemd 加载,因此不会扩展变量表达式。

Expand
表 A.2. RPM 配置文件
File描述

/etc/opt/rh/eap8/wildfly/eap8-standalone.conf

特定于 Red Hat Enterprise Linux 8 及更高版本上的独立 JBoss EAP 服务器的设置。

/etc/opt/rh/eap8/wildfly/eap8-domain.conf

特定于作为受管域在 Red Hat Enterprise Linux 8 及之后的版本上运行的 JBoss EAP 的设置。

A.3. RPM 服务配置属性

下表显示了 JBoss EAP RPM 服务的可用配置属性列表及其默认值。

注意

如果属性在 RPM 服务配置文件中具有相同的名称,如 /usr/lib/systemd/system/eap8-standalone.service:,在 JBoss EAP 启动配置文件中,以及 JBoss EAP 启动配置文件中(如EAP_HOME/bin/standalone.conf )中的值是 JBoss EAP 启动配置文件中的值。一个这样的属性是 JAVA_HOME

Expand
表 A.3. RPM 服务配置属性
属性描述

JAVA_HOME

安装 Java Runtime Environment 的目录。

默认值: /usr/lib/jvm/jre

JAVAPTH

安装 Java 可执行文件的路径。

默认值 :$JAVA_HOME/bin

WILDFLY_CONSOLE_LOG

CONSOLE 日志处理程序将重定向到的文件。

默认值:独立服务器的 /var/opt/rh/eap8/log/wildfly/standalone/console.log,或受管域的 /var/opt/rh/eap8/log/wildfly/domain/console.log

WILDFLY_SH

用于启动 JBoss EAP 服务器的脚本。

默认值 :用于单机服务器的 /opt/rh/eap8/root/usr/share/wildfly/bin/standalone.sh,或者受管域的 /opt/rh/eap8/root/usr/share/wildfly/bin/domain.sh

WILDFLY_SERVER_CONFIG

要使用的服务器配置文件。

此属性没有默认值。standalone.xmldomain.xml 可以在开始时指定。

WILDFLY_HOST_CONFIG

对于受管域,此属性允许用户指定主机配置文件,如 host.xml。它没有设置值作为默认值。

WILDFLY_MODULEPATH

JBoss EAP 模块目录的路径。

默认值: /opt/rh/eap8/root/usr/share/wildfly/modules

WILDFLY_BIND

设置 jboss.bind.address 系统属性,用于为公共接口配置绑定地址。如果没有指定值,则默认为 0.0.0.0

WILDFLY_OPTS

启动时包含的其他参数。例如:

-Dorg.wildfly.openssl.path=PATH_TO_OPENSSL_LIBS
Copy to Clipboard Toggle word wrap

A.4. JBoss EAP 子系统概述

下表简要介绍了 JBoss EAP 子系统。

Expand
表 A.4. JBoss EAP 子系统
JBoss EAP 子系统描述

batch-jberet

配置用于运行批处理应用的环境并管理批处理作业

bean-validation

配置 bean 验证以验证 Java 对象数据。

core-management

为服务器 生命周期事件注册监听程序,并跟踪 配置更改

datasources

创建并配置 数据源,并管理 JDBC 数据库驱动程序

deployment-scanner

配置 部署扫描程序 以监控要部署的应用程序的特定位置。

ee

在 Jakarta EE 平台中配置常见功能,如定义 全局模块、启用 基于描述符的属性替换,以及配置默认绑定。

ejb3

配置 Jakarta Enterprise Beans,包括会话和消息驱动的 Bean。

有关 ejb3 子系统的更多信息,请参阅 JBoss EAP 开发 Jakarta Enterprise Beans 应用

elytron

配置服务器和应用程序安全性。

有关 elytron 子系统的更多信息,请参阅 JBoss EAP 的 安全架构

iiop-openjdk

为 JTS 事务和其他 ORB 服务(包括安全性)配置通用对象请求代理架构(CORBA)服务。在 JBoss EAP 7 中,此功能包含在 jacorb 子系统中。

Infinispan

为 JBoss EAP 高可用性服务配置缓存功能。???

io

定义供其他子系统使用的 worker缓冲区池

jaxrs

启用 Jakarta RESTful Web 服务应用程序的部署和功能。

jca

配置 Jakarta Connectors 容器和资源适配器部署的一般设置。

jdr

启用收集诊断数据以帮助故障排除。JBoss EAP 订阅者可在请求支持时向红帽提供此信息。

jgroups

配置协议堆栈和 通信机制,使集群中的服务器如何互相通信。

jmx

配置远程 Jakarta 管理访问权限。

jpa

管理 Jakarta Persistence 2.2 容器管理要求,并允许您部署持久性单元定义、注解和描述符。

有关 jpa 子系统的更多信息,请参阅 JBoss EAP 开发指南

jsf

管理 Jakarta Server Faces 实施。

jsr77

提供 Jakarta EE 管理功能,由 Jakarta 管理规范 定义。

logging

通过日志类别的系统和 日志处理程序配置系统和应用程序级别日志日志???

mail

配置邮件服务器属性和自定义邮件传输,以创建邮件服务,允许部署到 JBoss EAP 的应用使用该服务发送邮件。

messaging-activemq

为 Artemis (集成消息传递提供商)配置 Java 消息服务目的地、连接工厂和其他设置。在 JBoss EAP 7 中,消息传递功能包含在 messaging 子系统中。

有关 messaging-activemq 子系统的更多信息,请参阅为 JBoss EAP 配置消息传递。 https://access.redhat.com/documentation/zh-cn/red_hat_jboss_enterprise_application_platform/7.4/html-single/configuring_messaging/

metrics

显示管理模型和 Java 虚拟机(JVM) MBeans 中的基本指标。JBoss EAP 不再包含 microprofile-smallrye-metrics 子系统,因此应用程序指标不再可用。

健康

公开 JBoss EAP 运行时的健康检查。JBoss EAP 不再包含 microprofile-smallrye-health 子系统,因此不再提供应用健康状态检查。

modcluster

配置服务器端 mod_cluster worker 节点

命名

将条目绑定到全局 JNDI 命名空间,并配置远程 JNDI 接口。

pojo

如 JBoss EAP 的早期版本支持,启用包含 JBoss Microcontainer 服务的应用程序部署。

remoting

discovery

发现子系统目前仅用于内部子系统;它是一个私有 API,不适用于公共使用。

request-controller

配置设置以正常 暂停和关闭服务器

resource-adapters

使用 Jakarta Connectors 规范,配置和维护用于 Jakarta EE 应用程序与企业信息系统(EIS)之间的通信的资源适配器。

rts

不支持 REST-AT 的实施。

Sarar

如 JBoss EAP 的早期版本支持,启用包含 MBean 服务的 SAR 存档部署。

安全

配置应用程序安全设置的传统方法。

有关 security 子系统的更多信息,请参阅 JBoss EAP 的 安全架构

security-manager

配置 Java 安全管理器使用的 Java 安全策略。

有关 security-manager 子系统的更多信息,请参阅如何为 JBoss EAP 配置服务器安全性

单例

定义单例策略来配置单例部署的行为或创建单例 MSC 服务。

有关 singleton 子系统的更多信息,请参阅 JBoss EAP 开发指南

Transactions

配置 Transaction Manager (TM)选项,如超时值、事务日志记录,以及使用 Java 事务服务(JTS)。有关 transaction 子系统的更多信息,请参阅 管理 JBoss EAP for JBoss EAP 的事务

undertow

配置 JBoss EAP 的 Web 服务器和 servlet 容器设置。在 JBoss EAP 7 中,此功能包含在 web 子系统中。

webservices

配置公布的端点地址和端点处理程序链,以及 Web 服务提供程序的主机名、端口和 WSDL 地址。

有关 webservices 子系统的更多信息,请参阅为 JBoss EAP 开发 Web 服务应用

weld

为 JBoss EAP 配置 Jakarta 上下文和依赖注入功能。

xts

A.5. add-user 工具参数

下表描述了适用于 add-user.shadd-user.bat 脚本的参数,它是将新用户添加到用于开箱即用身份验证的属性文件中的实用程序。

Expand
表 A.5. add-user 命令参数
命令行参数描述

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

用户名称。用户名只能以任何数字和顺序包含以下字符:

  • 字母数字字符(a-z、A-Z、0-9)
  • 短划线(-)、句点(.)、逗号(@)
  • 反斜杠(\)
  • 等号 (=)

-r, --realm <value>

用于保护管理接口的域名称。如果省略,默认值为 ManagementRealm

-s, --silent

运行对控制台不带输出的 add-user 脚本。

-e, --enable

启用用户。

-d, --disable

禁用用户。

-cw, --confirm-warning

以交互模式自动确认警告。

-h, --help

显示 add-user 脚本的使用信息。

-ds, --display-secret

以非交互模式打印机密值。

A.6. 管理审计日志记录属性

注意

这些表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/wildfly-config_5_0.xsd 的架构定义文件,以查看 XML 中出现的元素,因为管理模型可能会有所不同。

Expand
表 A.6. 管理审计日志记录:Logger 属性
属性描述

enabled

是否启用审计日志记录。

log-boot

是否应在服务器引导时记录操作。

log-read-only

是否应该记录不修改配置的操作或任何运行时服务。

Expand
表 A.7. 管理审计日志记录:日志格式器属性
属性描述

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 条目,其十进制值大于 32,则八进制中的 ASCII 代码。例如,新行变为 #012。如果为 true,这将覆盖 escape-new-line=false

escape-new-line

如果为 true,它将在八进制: #012 中使用 ASCII 代码转义所有新行。

include-date

是否在格式化的日志记录中包含日期。

Expand
表 A.8. 管理审计日志记录:File handler 属性
属性描述

disabled-due-to-failure

此处理程序是否已因为日志记录失败而被禁用(只读)。

failure-count

因为处理程序被初始化后的日志记录失败数量(只读)。

formatter

用于格式化日志消息的 JSON 格式。

max-failure-count

禁用此处理程序前的最大日志故障数。

path

审计日志文件的路径。

relative-to

之前命名的路径的名称,或系统提供的一个标准路径的名称。如果提供了 relative-to,则 path 属性的值将被视为相对于此属性指定的路径。

rotate-at-startup

旧日志文件是否应在服务器启动时轮转。

Expand
表 A.9. 管理审计日志记录: Syslog 处理程序属性
属性描述

app-name

要添加到 syslog 记录中的应用程序名称,如 RFC-5424 的 6.2.5 节中定义。如果未指定,则默认为产品的名称。

disabled-due-to-failure

此处理程序是否已因为日志记录失败而被禁用(只读)。

facility

用于 syslog 日志记录的工具,如 RFC-5424 的 6.2.1 节,以及 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. 接口属性

注意

此表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/wildfly-config_5_0.xsd 的架构定义文件,以查看 XML 中出现的元素,因为管理模型可能会有所不同。

Expand
表 A.10. 接口属性和值
interface 元素描述

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. 套接字绑定属性

注意

这些表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/wildfly-config_5_0.xsd 的架构定义文件,以查看 XML 中出现的元素,因为管理模型可能会有所不同。

下表显示了可以为三种套接字绑定中的每种类型配置的属性:

Expand
表 A.11. 入站套接字绑定(socket-binding)属性
属性描述

client-mappings

指定此套接字绑定的客户端映射。连接到此套接字的客户端应使用与所需的出站接口匹配的映射中指定的目标地址。这允许使用网络地址转换或绑定多个网络接口的高级网络拓扑。每个映射应当按照声明的顺序进行评估,第一个成功匹配项用于确定目的地。

fixed-port

即使将数值偏移应用到套接字组中的其他套接字,端口值是否应保持固定。

interface

套接字应绑定到的接口名称,或者对于多播套接字,则为它应侦听的接口。这应该是声明的接口之一。如果未定义,则将使用括起套接字绑定组中 default-interface 属性的值。

multicast-address

套接字应接收多播流量的多播地址。如果未指定,套接字将不会配置为接收多播。

multicast-port

套接字应接收多播流量的端口。如果配置了 multicast-address,则必须配置。

名称

套接字的名称。需要访问套接字配置信息的服务将使用此名称找到它。此属性是必需的。

port

套接字应绑定到的端口号。请注意,如果服务器应用 port-offset 以递增或减少所有端口值,则可以覆盖此值。

Expand
表 A.12. 远程出站套接字绑定 (remote-destination-outbound-socket-binding) 属性
属性描述

fixed-source-port

即使将数字偏移应用到套接字组中的其他出站套接字,端口值是否应保持固定。

host

此出站套接字将连接到的远程目标的主机名或 IP 地址。

port

出站套接字应连接到的远程目的地的端口号。

source-interface

用于出站套接字的源地址的接口名称。

source-port

用作出站套接字源端口的端口号。

Expand
表 A.13. 本地出站套接字绑定 (local-destination-outbound-socket-binding) 属性
属性描述

fixed-source-port

即使将数字偏移应用到套接字组中的其他出站套接字,端口值是否应保持固定。

socket-binding-ref

用于确定此出站套接字连接到的端口的本地套接字绑定名称。

source-interface

用于出站套接字的源地址的接口名称。

source-port

用作出站套接字源端口的端口号。

A.9. 默认套接字绑定组

下表显示了每个套接字绑定组的默认套接字绑定。

Expand
表 A.14. standard-sockets
套接字绑定port描述

ajp

8009

Apache JServ 协议。用于 HTTP 集群和负载平衡。

http

8080

部署 Web 应用的默认端口。

https

8443

部署的 Web 应用程序和客户端之间的 SSL 加密连接。

management-http

9990

用于与管理层的 HTTP 通信。

management-https

9993

用于与管理层通信的 HTTPS。

txn-recovery-environment

4712

Jakarta 交易恢复管理器。

txn-status-manager

4713

Jakarta Transactions / JTS 交易管理器。

Expand
表 A.15. ha-sockets
套接字绑定port多播端口描述

ajp

8009

 

Apache JServ 协议。用于 HTTP 集群和负载平衡。

http

8080

 

部署 Web 应用的默认端口。

https

8443

 

部署的 Web 应用程序和客户端之间的 SSL 加密连接。

jgroups-mping

 

45700

多播。用于发现 HA 集群中的初始成员资格。

jgroups-tcp

7600

 

使用 TCP 在 HA 集群中单播对等发现。

jgroups-udp

55200

45688

使用 UDP 在 HA 集群中进行多播对等发现。

management-http

9990

 

用于与管理层的 HTTP 通信。

management-https

9993

 

用于与管理层通信的 HTTPS。

modcluster

 

23364

用于 JBoss EAP 和 HTTP 负载平衡器之间通信的多播端口。

txn-recovery-environment

4712

 

Jakarta 交易恢复管理器。

txn-status-manager

4713

 

Jakarta Transactions / JTS 交易管理器。

Expand
表 A.16. full-sockets
套接字绑定port描述

ajp

8009

Apache JServ 协议。用于 HTTP 集群和负载平衡。

http

8080

部署 Web 应用的默认端口。

https

8443

部署的 Web 应用程序和客户端之间的 SSL 加密连接。

iiop

3528

用于 JTS 事务和其他 ORB 依赖服务的 CORBA 服务。

iiop-ssl

3529

SSL 加密的 CORBA 服务。

management-http

9990

用于与管理层的 HTTP 通信。

management-https

9993

用于与管理层通信的 HTTPS。

txn-recovery-environment

4712

Jakarta 交易恢复管理器。

txn-status-manager

4713

Jakarta Transactions / JTS 交易管理器。

Expand
表 A.17. full-ha-sockets
Nameport多播端口描述

ajp

8009

 

Apache JServ 协议。用于 HTTP 集群和负载平衡。

http

8080

 

部署 Web 应用的默认端口。

https

8443

 

部署的 Web 应用程序和客户端之间的 SSL 加密连接。

iiop

3528

 

用于 JTS 事务和其他 ORB 依赖服务的 CORBA 服务。

iiop-ssl

3529

 

SSL 加密的 CORBA 服务。

jgroups-mping

 

45700

多播。用于发现 HA 集群中的初始成员资格。

jgroups-tcp

7600

 

使用 TCP 在 HA 集群中单播对等发现。

jgroups-udp

55200

45688

使用 UDP 在 HA 集群中进行多播对等发现。

management-http

9990

 

用于与管理层的 HTTP 通信。

management-https

9993

 

用于与管理层通信的 HTTPS。

modcluster

 

23364

用于 JBoss EAP 和 HTTP 负载平衡器之间通信的多播端口。

txn-recovery-environment

4712

 

Jakarta 交易恢复管理器。

txn-status-manager

4713

 

Jakarta Transactions / JTS 交易管理器。

Expand
表 A.18. load-balancer-sockets
Nameport多播端口描述

http

8080

 

部署 Web 应用的默认端口。

https

8443

 

部署的 Web 应用程序和客户端之间的 SSL 加密连接。

management-http

9990

 

用于与管理层的 HTTP 通信。

management-https

9993

 

用于与管理层通信的 HTTPS。

mcmp-management

8090

 

用于传输生命周期事件的 Mod-Cluster Management 协议(MCMP)连接的端口。

modcluster

 

23364

用于 JBoss EAP 和 HTTP 负载平衡器之间通信的多播端口。

A.10. module 命令参数

以下参数可传递给 module add management CLI 命令:

Expand
表 A.19. module 命令参数
参数描述

--absolute-resources

使用这个参数指定要从 module.xml 文件引用的绝对文件系统路径的列表。指定的文件没有复制到模块目录中。

有关分隔符的详情,请参阅 --resource-delimiter

--allow-nonexistent-resources

使用此参数为 --resources 指定的不存在的资源创建空目录。如果存在不存在的资源且没有使用此参数,则module add 命令将失败。

--dependencies

使用此参数提供此模块依赖的逗号分隔的模块名称的列表。

--export-dependencies

使用此参数指定导出的依赖项。

module add --name=com.mysql --resources=/path/to/mysql-connector-j-8.0.33.jar --export-dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
Copy to Clipboard Toggle word wrap
注意

MySQL 驱动程序 JAR 名称 mysql-connector-j-8.0.33.jar 仅作为示例提供。有关经过测试的 MySQL 版本的详情,请参考 测试的数据库

--main-class

使用此参数指定声明模块主方法的完全限定类名称。

--module-root-dir

如果您定义了要使用的 外部 JBoss EAP 模块目录,而不是默认的 EAP_HOME /modules/ 目录,则使用此参数。

module add --module-root-dir=/path/to/my-external-modules/ --name=com.mysql --resources=/path/to/mysql-connector-j-8.0.33.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
Copy to Clipboard Toggle word wrap
注意

MySQL 驱动程序 JAR 名称 mysql-connector-j-8.0.33.jar 仅作为示例提供。有关经过测试的 MySQL 版本的详情,请参考 测试的数据库

--module-xml

使用此参数为此新模块提供 module.xml 的文件系统路径。此文件被复制到模块目录中。如果没有指定此参数,则会在模块目录中生成一个 module.xml 文件。

--name

使用此参数提供要添加的模块的名称。此参数是必需的。

--properties

使用此参数提供逗号分隔的定义模块属性的 PROPERTY_NAME=PROPERTY_VALUE 对的列表。

--resource-delimiter

使用此参数为提供给 --resourcesabsolute-resources 参数的资源列表设置用户定义的文件路径分隔符。如果没有设置,则文件路径分隔符是 Linux 的冒号(:) 和 Windows 的分号(;)。

--resources

使用此参数通过提供文件系统路径列表来指定此模块的资源。这些文件被复制到此模块目录中,并从其 module.xml 文件引用。如果您提供了目录的路径,则目录及其内容会被复制到模块目录中。不保留符号链接;链接的资源被复制到模块目录中。这个参数是必需的,除非提供了 --absolute-resources--module-xml

有关分隔符的详情,请参阅 --resource-delimiter

--slot

使用这个参数将模块添加到默认 main 插槽以外的插槽中。

module add --name=com.mysql --slot=8.0 --resources=/path/to/mysql-connector-j-8.0.33.jar --dependencies=wildflyee.api,java.se,java.xml,java.xml.crypto,jdk.xml.dom,jakarta.transaction.api
Copy to Clipboard Toggle word wrap
注意

MySQL 驱动程序 JAR 名称 mysql-connector-j-8.0.33.jar 仅作为示例提供。有关经过测试的 MySQL 版本的详情,请参考 测试的数据库

A.11. 部署扫描程序标志文件

部署扫描程序使用标记文件将应用的状态标记在 JBoss EAP 服务器实例的部署目录中。标志文件的名称与部署相同,文件后缀表示应用部署的状态。

例如,成功部署 test-application.war 将具有名为 test-application.war.deployed 的标记文件。

下表列出了可用的标记文件类型及其含义。

Expand
表 A.20. 标记文件类型
文件名后缀Origin描述

.deployed

system-generated

表示内容已经部署。如果删除了此文件,则会取消部署的内容。

.dodeploy

用户生成的

表示应部署或重新部署内容。

.failed

system-generated

表示部署失败。标志文件包含有关失败原因的信息。如果删除了标记文件,则内容将再次用于自动部署。

.isdeploying

system-generated

表示部署正在进行。此标志文件将在完成后删除。

.isundeploying

system-generated

通过删除 .deployed 文件触发,这表明内容正在取消部署。此标志文件将在完成后删除。

.pending

system-generated

表示部署扫描程序识别部署内容的需求,但问题目前正在阻止自动部署(例如,如果内容位于复制过程中)。此标记充当全局部署障碍,这意味着扫描程序不会在此标志文件存在时指示服务器部署或取消部署 任何内容

.skipdeploy

用户生成的

在存在时禁用应用的自动部署。可用作临时阻止大量内容的自动部署的方法,防止推送不完整的内容编辑的风险。可以与 zipped 内容一起使用,虽然扫描程序检测到对压缩内容进行中的更改并等待完成。

.undeployed

system-generated

表示内容已经取消部署。删除此标志文件不会影响内容重新部署。

A.12. 部署扫描程序属性

部署扫描程序包含以下可配置的属性:

注意

此表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/jboss-as-deployment-scanner_2_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能会存在差异。

Expand
表 A.21. 部署扫描器属性
Namedefault描述

auto-deploy-exploded

false

允许自动部署展开的内容,而无需 .dodeploy 标记文件。建议只针对基本的开发场景,以防止在开发人员或操作系统更改期间发生大量应用程序部署。

auto-deploy-xml

true

允许自动部署 XML 内容,而无需 .dodeploy 标记文件。

auto-deploy-zipped

true

允许在不需要 .dodeploy 标记文件的情况下自动部署 zipped 内容。

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.13. 受管域 JVM 配置属性

以下 Java 虚拟机(JVM)配置选项可以在主机、服务器组或服务器级别上为受管域设置:请注意,其中一些属性的有效值取决于您的 JVM。如需更多信息,请参阅您的 JDK 供应商文档。

注意

此表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/wildfly-config_20_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能会有所不同。

Expand
表 A.22. JVM 配置属性
属性描述

agent-lib

设置 the -agentlib java 选项的值,用于指定 Java 代理库。

agent-path

设置 the -agentpath java 选项的值,该选项指定 Java 代理路径。

debug-enabled

指定是否启用调试。此属性仅适用于服务器级别的 JVM 配置。

debug-options

指定启用调试时要使用的 JVM 选项。此属性仅适用于服务器级别的 JVM 配置。

env-classpath-ignored

指定是否忽略 CLASSPATH 环境变量。

环境变量

指定键/值对环境变量。

heap-size

设置 -Xms 选项的值,它指定 JVM 分配的初始堆大小。

java-agent

设置 -javaagent java 选项的值,用于指定 Java 代理。

java-home

设置 JAVA_HOME 变量的值。

jvm-options

指定所需的任何其他 JVM 选项。

launch-command

指定在用于启动服务器进程的 java 命令前前缀的操作系统级命令。例如,您可以使用 sudo 命令以另一个用户身份运行 Java 进程。

max-heap-size

设置 -Xmx 选项的值,它指定 JVM 分配的最大堆大小。

max-permgen-size

设置永久生成的最大大小。弃用: JVM 不再提供单独的永久生成空间。

module-options

设置在服务器引导过程中传递给 JBoss 模块的任何选项。请注意,如果在模块选项中定义 a -javaagent:,则 jboss-modules.jar 将自动添加为 Java 代理。

Permgen-size

设置初始永久生成大小。弃用: JVM 不再提供单独的永久生成空间。

stack-size

设置 the -Xss 选项的值,用于指定 JVM 堆栈大小。

type

指定使用中的 JVM 提供哪个供应商。可用选项包括 ORACLEIBMSUNOTHER

A.14. 邮件子系统属性

本参考提供了邮件 会话和以下 邮件服务器 类型的邮件 子系统中的属性详情:

注意

这些表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/wildfly-mail_3_0.xsd 的架构定义文件,以查看 XML 中出现的元素,因为管理模型可能不同。

A.14.1. 邮件会话属性

Expand
属性描述

debug

是否启用 Jakarta 邮件调试。

from

如果发送时未设置,则使用默认"from"地址。

JNDI-name

邮件会话应绑定到的 JNDI 名称。

A.14.2. IMAP 邮件服务器属性

Expand
属性描述

credential-reference

凭证存储中的凭据,以在服务器上进行身份验证。

outbound-socket-binding-ref

引用邮件服务器的出站套接字绑定。

password

要在服务器上进行身份验证的密码。

ssl

服务器是否需要 SSL。

tls

服务器是否需要 TLS。

username

服务器上用于身份验证的用户名。

A.14.3. POP3 邮件服务器属性

Expand
属性描述

credential-reference

凭证存储中的凭据,以在服务器上进行身份验证。

outbound-socket-binding-ref

引用邮件服务器的出站套接字绑定。

password

要在服务器上进行身份验证的密码。

ssl

服务器是否需要 SSL。

tls

服务器是否需要 TLS。

username

服务器上用于身份验证的用户名。

A.14.4. SMTP 邮件服务器属性

Expand
属性描述

credential-reference

凭证存储中的凭据,以在服务器上进行身份验证。

outbound-socket-binding-ref

引用邮件服务器的出站套接字绑定。

password

要在服务器上进行身份验证的密码。

ssl

服务器是否需要 SSL。

tls

服务器是否需要 TLS。

username

服务器上用于身份验证的用户名。

A.14.5. 自定义邮件服务器属性

Expand
属性描述

credential-reference

凭证存储中的凭据,以在服务器上进行身份验证。

outbound-socket-binding-ref

引用邮件服务器的出站套接字绑定。

password

要在服务器上进行身份验证的密码。

属性

此服务器的 Jakarta 邮件属性。

ssl

服务器是否需要 SSL。

tls

服务器是否需要 TLS。

username

服务器上用于身份验证的用户名。

A.15. 根日志记录器属性

注意

此表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/jboss-as-logging_3_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能存在不同。

Expand
表 A.23. 根日志记录器属性
属性描述

filter

定义一个简单的过滤器类型。已弃用,以 filter-spec 替代。

filter-spec

定义过滤器的表达式值。以下表达式定义了一个过滤器,它排除与模式匹配的日志条目: not (match ("WFLY decisions"))

handlers

根日志记录器使用的日志处理程序列表。

level

根日志记录器记录的最低日志消息级别。

注意

为根日志记录器指定的 filter-spec 不会被 其他处理程序继承。相反,必须为每个处理程序指定 filter-spec

A.16. 日志类别属性

注意

此表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/jboss-as-logging_6_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能存在不同。

Expand
表 A.24. 日志类别属性
属性描述

category

从中捕获日志消息的日志类别。

filter

定义一个简单的过滤器类型。已弃用,以 filter-spec 替代。

filter-spec

定义过滤器的表达式值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLY resolved"))

handlers

与日志记录器关联的日志处理程序列表。

level

日志类别记录的最小日志消息级别。

use-parent-handlers

如果设置为 true,则此类别除任何其他分配的处理程序外,还将使用根日志记录器的日志处理程序。

A.17. 日志处理程序属性

注意

这些表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/jboss-as-logging_6_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能存在不同。

Expand
表 A.25. 控制台日志处理程序属性
属性描述

Autoflush

如果设置为 true,则日志消息将在接收后立即发送到分配的文件。

enabled

如果设置为 true,则处理程序将启用并正常运行。如果设置为 false,则在处理日志消息时会忽略处理程序。

编码

用于输出的字符编码方案。

filter

定义一个简单的过滤器类型。已弃用,以 filter-spec 替代。

filter-spec

定义过滤器的表达式值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLY resolved"))

formatter

此日志处理程序使用的日志格式器。

level

日志处理程序记录的最小日志消息级别。

名称

日志处理程序的名称。已弃用,因为处理程序的地址包含名称。

named-formatter

处理程序使用的定义格式器的名称。

target

发送日志处理程序输出的系统输出流。可以是以下之一:

  • system.err: 日志处理程序输出进入系统错误流。
  • system.out: Log handler 输出进入标准输出流。
  • 控制台: Log hander 输出进入 {LinkJava8Api}/java/io/PrintWriter.html[java.io.PrintWriter] 类。
Expand
表 A.26. 文件日志处理程序属性
属性描述

附加

如果设置为 true,则此处理程序编写的所有消息都将附加到 文件(如果已存在)。如果设置为 false,则每次应用服务器启动时都会创建一个新文件。

Autoflush

如果设置为 true,则日志消息将在接收后立即发送到分配的文件。

enabled

如果设置为 true,则处理程序将启用并正常运行。如果设置为 false,则在处理日志消息时会忽略处理程序。

编码

用于输出的字符编码方案。

file

代表此日志处理程序输出要写入的文件的对象。它有两个配置属性,即 relative-topath

filter

定义一个简单的过滤器类型。已弃用,以 filter-spec 替代。

filter-spec

定义过滤器的表达式值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLY resolved"))

formatter

此日志处理程序使用的日志格式器。

level

日志处理程序记录的最小日志消息级别。

名称

日志处理程序的名称。已弃用,因为处理程序的地址包含名称。

named-formatter

处理程序使用的定义格式器的名称。

Expand
表 A.27. 定期日志处理程序属性
属性描述

附加

如果设置为 true,则此处理程序编写的所有消息都将附加到 文件(如果已存在)。如果设置为 false,则每次应用服务器启动时都会创建一个新文件。

Autoflush

如果设置为 true,则日志消息将在接收后立即发送到分配的文件。

enabled

如果设置为 true,则处理程序将启用并正常运行。如果设置为 false,则在处理日志消息时会忽略处理程序。

编码

用于输出的字符编码方案。

file

代表此日志处理程序输出要写入的文件的对象。它有两个配置属性,即 relative-topath

filter

定义一个简单的过滤器类型。已弃用,以 filter-spec 替代。

filter-spec

定义过滤器的表达式值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLY resolved"))

formatter

此日志处理程序使用的日志格式器。

level

日志处理程序记录的最小日志消息级别。

名称

日志处理程序的名称。已弃用,因为处理程序的地址包含名称。

named-formatter

处理程序使用的定义格式器的名称。

suffix

这个字符串包含在附加到轮转日志的后缀中。后缀 的格式是句点(.),后跟一个日期字符串,可以通过 SimpleDateFormat 类解析。

Expand
表 A.28. 大小日志处理程序属性
属性描述

附加

如果设置为 true,则此处理程序编写的所有消息都将附加到 文件(如果已存在)。如果设置为 false,则每次应用服务器启动时都会创建一个新文件。

Autoflush

如果设置为 true,则日志消息将在接收时立即发送到分配的文件。

enabled

如果设置为 true,则处理程序将启用并正常运行。如果设置为 false,则在处理日志消息时会忽略处理程序。

编码

用于输出的字符编码方案。

file

代表此日志处理程序输出要写入的文件的对象。它有两个配置属性,即 relative-topath

filter

定义一个简单的过滤器类型。已弃用,以 filter-spec 替代。

filter-spec

定义过滤器的表达式值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLY resolved"))

formatter

此日志处理程序使用的日志格式器。

level

日志处理程序记录的最小日志消息级别。

max-backup-index

保留的最大轮转日志数。当达到这个数字时,会重复使用最旧的日志。默认值为 1

如果使用 suffix 属性,轮转日志文件的后缀包含在轮转算法中。轮转日志文件时,名称以 名称+后缀 开头的最旧文件,剩余的轮转日志文件会递增,并且新轮转的日志文件指定了数字后缀 1

名称

日志处理程序的名称。已弃用,因为处理程序的地址包含名称。

named-formatter

处理程序使用的定义格式器的名称。

rotate-on-boot

如果设置为 true,则在服务器重启时创建一个新的日志文件。默认值为 false

rotate-size

日志文件在轮转前可以访问的最大大小。附加到数字的单个字符表示大小单位: b 表示字节,k 表示 KB,m 表示兆字节,g 表示千兆字节。例如: 50m 代表 50MB。

suffix

这个字符串包含在附加到轮转日志的后缀中。后缀 的格式是句点(.),后跟一个日期字符串,可以通过 SimpleDateFormat 类解析。

Expand
表 A.29. 定期大小日志处理程序属性
属性描述

附加

如果设置为 true,则此处理程序编写的所有消息都将附加到 文件(如果已存在)。如果设置为 false,则每次应用服务器启动时都会创建一个新文件。

Autoflush

如果设置为 true,则日志消息将在接收后立即发送到分配的文件。

enabled

如果设置为 true,则处理程序将启用并正常运行。如果设置为 false,则在处理日志消息时会忽略处理程序。

编码

用于输出的字符编码方案。

file

代表此日志处理程序输出要写入的文件的对象。它有两个配置属性,即 relative-topath

filter-spec

定义过滤器的表达式值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLY resolved"))

formatter

此日志处理程序使用的日志格式器。

level

日志处理程序记录的最小日志消息级别。

max-backup-index

保留的最大轮转日志数。当达到这个数字时,会重复使用最旧的日志。默认值为 1

如果使用 suffix 属性,轮转日志文件的后缀包含在轮转算法中。轮转日志文件时,名称以 名称+后缀 开头的最旧文件,剩余的轮转日志文件会递增,并且新轮转的日志文件指定了数字后缀 1

名称

日志处理程序的名称。已弃用,因为处理程序的地址包含名称。

named-formatter

处理程序使用的定义格式器的名称。

rotate-on-boot

如果设置为 true,则在服务器重启时创建一个新的日志文件。默认值为 false

rotate-size

日志文件在轮转前可以访问的最大大小。附加到数字的单个字符表示大小单位: b 表示字节,k 表示 KB,m 表示兆字节,g 表示千兆字节。例如: 50m 代表 50MB。

suffix

这个字符串包含在附加到轮转日志的后缀中。后缀 的格式是句点(.),后跟一个日期字符串,可以通过 SimpleDateFormat 类解析。

Expand
表 A.30. syslog 处理程序属性
属性描述

app-name

使用 RFC5424 格式格式化消息时使用的应用程序名称。默认情况下,应用名称为 java

enabled

如果设置为 true,则处理程序将启用并正常运行。如果设置为 false,则在处理日志消息时会忽略处理程序。

facility

由 RFC-5424 和 RFC-3164 定义的工具。

hostname

发送消息的主机的名称。例如,应用服务器在其中运行的主机的名称。

level

日志处理程序记录的最小日志消息级别。

port

syslog 服务器侦听的端口。

server-address

syslog 服务器的地址。

syslog-format

根据 RFC 规格格式化日志消息。

named-formatter

格式化 syslog 有效负载的消息。使用此属性,您可以根据需要自定义消息。

Expand
表 A.31. 套接字日志处理程序属性
属性描述

Autoflush

在每次写入后是否自动清空。

block-on-reconnect

如果设置为 true,写入方法会在尝试重新连接时阻止。只有在使用异步处理程序时,才建议将其设置为 true

enabled

如果设置为 true,则处理程序将启用并正常运行。如果设置为 false,则在处理日志消息时会忽略处理程序。

编码

此处理程序使用的字符编码

filter-spec

定义过滤器的表达式值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLY resolved"))

level

日志处理程序记录的最小日志消息级别。

named-formatter

处理程序使用的定义格式器的名称。

outbound-socket-binding-ref

对套接字连接的出站套接字绑定的引用。

protocol

套接字应与之通信的协议。允许的值有 TCPUDPSSL_TCP

ssl-context

对定义的 SSL 上下文的引用。这仅在 协议 设置为 SSL_TCP 时使用。

Expand
表 A.32. 自定义日志处理程序属性
属性描述

class

要使用的日志记录处理程序类。

enabled

如果设置为 true,则处理程序将启用并正常运行。如果设置为 false,则在处理日志消息时会忽略处理程序。

编码

用于输出的字符编码方案。

filter

定义一个简单的过滤器类型。已弃用,以 filter-spec 替代。

filter-spec

定义过滤器的表达式值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLY resolved"))

formatter

此日志处理程序使用的日志格式器。

level

日志处理程序记录的最小日志消息级别。

module

日志记录处理程序依赖的模块。

名称

日志处理程序的名称。已弃用,因为处理程序的地址包含名称。

named-formatter

处理程序使用的定义格式器的名称。

属性

用于日志记录处理程序的属性。

Expand
表 A.33. async 日志处理程序属性
属性描述

enabled

如果设置为 true,则处理程序将启用并正常运行。如果设置为 false,则在处理日志消息时会忽略处理程序。

filter

定义一个简单的过滤器类型。已弃用,以 filter-spec 替代。

filter-spec

定义过滤器的表达式值。以下表达式定义了一个与模式不匹配的过滤器: not (match ("WFLY resolved"))

level

日志处理程序记录的最小日志消息级别。

名称

日志处理程序的名称。已弃用,因为处理程序的地址包含名称。

overflow-action

此处理程序在超过其队列长度时如何响应。这可以设置为 BLOCKDISCARDBLOCK 使日志记录应用等待,直到队列中存在可用空间。这与非async 日志处理程序的行为相同。DISCARD 允许日志记录应用继续,但日志消息已被删除。

queue-length

在等待子处理程序响应时此处理程序持有的最大日志消息数。

subhandlers

此 async 处理程序传递其日志消息的日志处理程序列表。

A.18. 日志格式属性

Expand
表 A.34. Pattern Formatter 的格式 Characters
符号描述

%c

日志记录事件的类别。

%p

日志条目级别(INFO、DEBUG 等)。

%P

日志条目的本地化级别。

%d

当前日期/时间(yyyy-MM-dd HH:mm:s,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

消息诊断上下文.

%%

字面上百分比(%)字符(转义)。

Expand
表 A.35. JSON 日志格式属性
属性描述

date-format

date-time 格式模式。模式必须是有效的 java.time.format.DateTimeFormatter.ofPattern () 模式。默认模式是 ISO-8601 扩展偏移日期格式。

exception-output-type

指明日志消息的原因(如果有)被添加到 JSON 输出中。允许的值有:

  • 详细
  • 格式化
  • detailed-and- formatted

key-overrides

允许覆盖 JSON 属性的密钥名称。

meta-data

设置 JSON 格式中使用的元数据。

pretty-print

格式化时是否应使用用户用户打印。

print-details

应打印详细信息。详情包括源类名称、源文件名、源方法名称、源模块名称、源模块版本和源行号。

注意

打印详细信息可能会昂贵,因为值是从调用者检索的。

record-delimiter

用于指示记录结尾的值。如果设置为 null no delimiter,则会在记录结束时使用。默认值为行源。

zone-id

用于格式化日期和时间的区域 ID。如果未定义,则使用系统默认值。

Expand
表 A.36. XML 日志格式属性
属性描述

date-format

date-time 格式模式。模式必须是有效的 java.time.format.DateTimeFormatter.ofPattern () 模式。默认模式是 ISO-8601 扩展偏移日期格式。

exception-output-type

指明日志消息的原因(如果有)被添加到 XML 输出中。允许的值有:

  • 详细
  • 格式化
  • detailed-and- formatted

key-overrides

允许覆盖 XML 属性的密钥名称。

meta-data

设置以 XML 格式使用的 meta 数据。属性添加到每个日志消息中。

namespace-uri

如果 print-namespace 属性为 true,则设置每个记录使用的命名空间 URI。请注意,如果没有定义 namespace-uri,并且没有覆盖命名空间,无论 print-namespace 属性是否设置为 true。

pretty-print

格式化时是否应使用用户用户打印。

print-details

应打印详细信息。详情包括源类名称、源文件名、源方法名称、源模块名称、源模块版本和源行号。

注意

打印详细信息可能会昂贵,因为值是从调用者检索的。

record-delimiter

用于指示记录结尾的值。如果这是 null,则在记录的末尾不会使用分隔符。默认值为行源。

zone-id

用于格式化日期和时间的区域 ID。如果未定义,则使用系统默认值。

A.19. 数据源连接 URL

Expand
表 A.37. 数据源连接 URL
DataSource连接 URL

IBM DB2

jdbc:db2://SERVER_NAME:PORT/DATABASE_NAME

MariaDB

jdbc:mariadb://SERVER_NAME:PORT/DATABASE_NAME

MariaDB Galera 集群

jdbc:mariadb://SERVER_NAME:PORT,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.20. 数据源属性

注意

此表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/wildfly-datasources_5_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能不同。

Expand
表 A.38. 数据源属性
属性数据源类型描述

allocation-retry

非 XA, XA

在抛出异常前,应尝试分配连接的次数。默认值为 0, 因此在第一次失败时抛出异常。

allocation-retry-wait-millis

非 XA, XA

在重试分配连接之间等待的时间(以毫秒为单位)。默认值为 0 ms。

allow-multiple-users

非 XA, XA

无论多个用户是否将通过 getConnection (user, password) 方法访问数据源,以及此行为的内部池类型帐户。

authentication-context

非 XA, XA

Elytron 身份验证上下文,用于定义用于区分池中连接的 jakarta.security.auth.Subject

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 语句。从池获取受管连接时,可能会调用此情况。

可连接

非 XA, XA

启用 CMR,这意味着本地资源可以可靠地参与 XA 事务。

connection-listener-class

非 XA, XA

指定扩展 org.jboss.jca.adapters.jdbc.spi.listener.ConnectionListener 的类名称。此类侦听连接激活和传递,以便在连接返回到应用或池之前执行操作。指定类必须与一个模块中的 JDBC 驱动程序捆绑在一个模块中,如 安装 JDBC 驱动程序作为核心模块,或者在 单独的全局模块中,如 Define Global Modules 所示。

connection-listener-property

非 XA, XA

要注入到 connection-listener-class 中指定的类的属性。注入的属性符合 DELETE 约定。例如,如果您指定名为 foo 的属性,则连接监听程序类需要有一个方法 setFoo,它接受 String 作为参数。

connection-properties

仅限非 XA

传递给 Driver.connect (url, props) 方法的任意字符串 name/value 对连接属性。

connection-url

仅限非 XA

JDBC 驱动程序连接 URL。

credential-reference

非 XA, XA

从凭证存储中用于对数据源进行身份验证的凭证。

datasource-class

仅限非 XA

JDBC 数据源类的完全限定域名。

driver-class

仅限非 XA

JDBC 驱动程序类的完全限定域名。

driver-name

非 XA, XA

定义数据源应使用的 JDBC 驱动程序。它是与安装驱动程序名称匹配的符号名称。如果驱动程序部署为 JAR,则名称是部署的名称。

Elytron-enabled

非 XA, XA

启用 Elytron 安全来处理连接身份验证。如果没有指定上下文,要使用的 Elytron authentication-context 将是当前上下文。如需更多信息,请参阅 authentication-context

enabled

非 XA, XA

是否应启用数据源。

enlistment-trace

非 XA, XA

是否应该记录列出追踪。默认为 false

exception-sorter-class-name

非 XA, XA

org.jboss.jca.adapters.jdbc.ExceptionSorter 实例,提供了一种验证异常是否应该广播错误的方法。

exception-sorter-properties

非 XA, XA

异常分类器属性。

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

是否为 XA 连接启用交集。

JNDI-name

非 XA, XA

数据源的唯一 JNDI 名称。

jta

仅限非 XA

启用 Jakarta 交易集成。

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

连接池是否应该不包括在恢复中。

no-tx-separate-pool

仅 XA

是否为每个上下文创建单独的子池。一些 Oracle 数据源可能需要此功能,这可能不允许 XA 连接在 Jakarta 事务事务之间和外部使用。使用这个选项将导致池总大小达到 max-pool-size 的两倍,因为将创建两个实际池。

pad-xid

仅 XA

是否要用 Xid。

password

非 XA, XA

创建新连接时要使用的密码。

pool-fair

非 XA, XA

定义池是否应公平。此设置是 Semaphore 类的一部分,用于管理 Jakarta Connectors 中的连接池,在一些用例中不需要清理连接的顺序,这在一些用例中提供了性能优势。

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

重新身份验证插件实施的完全限定类名称,以重新验证物理连接。

reauth-plugin-properties

非 XA, XA

重新身份验证插件的属性。

recovery-authentication-context

仅 XA

Elytron 身份验证上下文,用于定义用于区分池中连接的 jakarta.security.auth.Subject

recovery-credential-reference

仅 XA

从凭证存储中用于对数据源进行身份验证的凭证。

recovery-elytron-enabled

仅 XA

启用 Elytron 安全来处理连接进行恢复的身份验证。如果没有指定 authentication-context,则使用 Elytron authentication-context 将是当前上下文。如需更多信息,请参阅 authentication-context

recovery-password

仅 XA

用于连接到恢复的资源的密码。

recovery-plugin-class-name

仅 XA

恢复插件实现的完全限定域名。

recovery-plugin-properties

仅 XA

恢复插件的属性。

recovery-security-domain

仅 XA

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

recovery-username

仅 XA

用于连接到恢复的资源的用户名。

same-rm-override

仅 XA

jakarta.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 流量记录到数据源。注意 logging 类别 jboss.jdbc.spy 也必须在 logging 子系统中设置为 log level 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

过时的连接检查程序属性。

启用统计

非 XA, XA

是否启用运行时统计信息。默认值为 false

track-statements

非 XA, XA

当连接返回到池时,是否要检查未关闭的声明,并将 语句返回到 prepared 语句缓存。如果为 false,则不会跟踪语句。有效值:

  • true: 声明和结果集会被跟踪,如果它们没有关闭,则会发出警告。
  • :将跟踪声明或结果集。
  • 现在,警告 :声明会被跟踪,但没有发出警告(默认)。

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

用于高可用性(HA)数据源的 connection-url 中的 URL 的分隔符。

url-property

仅 XA

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

是否将 XAResource 嵌套在 org.jboss.tm.XAResourceWrapper 实例中。

xa-datasource-class

仅 XA

jakarta.sql.XADataSource 实现类的完全限定名称。

xa-datasource-properties

仅 XA

XA 数据源属性的字符串名称/值对。

xa-resource-timeout

仅 XA

如果非零,则此值将传递到 XAResource.setTransactionTimeout 方法。

Expand
表 A.39. JDBC 驱动程序属性
属性数据源类型描述

datasource-class-info

非 XA, XA

数据源类和 jdbc-driverxa- datasource-class 的可用属性。datasource-classxa-datasource-class 属性定义实现 jakarta.sql.DataSourcejakarta.sql.XADataSource 类的完全限定类名称。定义类可以具有各种属性的设置。datasource-class-info 属性列出了可以为类设置的这些属性。

A.21. 数据源统计

本参考提供了 JBoss EAP 中数据源可用的统计信息的详细信息。统计数据分为以下类别:

A.21.1. 核心池统计信息

Expand
Name描述

ActiveCount

活跃连接的数量。每个连接都由应用程序使用,或者在池中可用。

AvailableCount

池中可用连接的数量。

AverageBlockingTime

阻塞池专用锁定的平均时间。这个值以毫秒为单位。

AverageCreationTime

创建连接所花费的平均时间。这个值以毫秒为单位。

AverageGetTime

获取连接的平均时间。这个值以毫秒为单位。

AveragePoolTime

连接在池中消耗的平均时间。这个值以毫秒为单位。

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.21.2. JDBC 统计

Expand
Name描述

PreparedStatementCacheAccessCount

访问声明缓存的次数。

PreparedStatementCacheAddCount

添加到声明缓存的语句数量。

PreparedStatementCacheCurrentSize

当前缓存在声明缓存中准备和可调用的声明数量。

PreparedStatementCacheDeleteCount

从缓存中丢弃的语句数量。

PreparedStatementCacheHitCount

从缓存中使用声明的次数。

PreparedStatementCacheMissCount

对缓存中语句无法满足声明请求的次数。

A.22. 事务管理器配置选项

本参考描述了 JBoss EAP 中事务管理的配置选项。

注意

属性名称与管理模型匹配(例如,使用管理 CLI 时)。请注意,一些属性在 XML 表示中可能会有所不同。如需了解更多详细信息,请参阅 EAP_HOME/docs/schema/wildfly-txn_5_0.xsd 的架构定义文件。

Expand
表 A.40. 事务子系统属性
属性描述

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 名称。数据源必须在 datasources 子系统中定义。

journal-store-enable-async-io

是否为日志存储启用 AsyncIO。默认值为 false。您必须重启服务器才能使更改生效。

JTS

是否使用 Java 交易服务(JTS)交易。默认为 false,表示 Jakarta 交易仅事务。

maximum-timeout

如果事务设置为 0 ( 无限超时),则使用这个值。默认为 31536000 秒(365 天)。

node-identifier

事务管理器的唯一标识符。如果多个事务管理器共享资源,或者 JTS-to-JTS 通信发生,则需要此项。如果未设置,您可以在服务器启动时看到警告。如果多个节点与同一资源管理器交互或共享对象存储,则必须对 Jakarta 交易具有唯一性。

object-store-path

事务管理器对象存储的相对或绝对文件系统路径。如果 object-store-relative-to 为空,这被视为绝对路径。

object-store-relative-to

在域模型中引用全局路径配置。默认为 jboss.server.data.dir,通常为单机服务器的 EAP_HOME/domain/data/EAP_HOME/standalone/data/。设置为空字符串,将 object-store-path 解释为绝对。

process-id-socket-binding

如果使用基于套接字的进程 ID,则套接字绑定的名称。如果 process-id-uuidtrue,则 未定义 ;否则,必须设置它。

process-id-socket-max-ports

对于基于套接字的标识符,这是在查找空闲端口前的最大套接字尝试次数。默认值为 10

process-id-uuid

设置为 true (默认)从进程 ID 派生唯一的事务标识符。如果为 false,则使用基于套接字的机制。另请参阅 process-id-socket-max-ports

recovery-listener

事务恢复进程是否侦听网络套接字。默认值为 false

socket-binding

如果 recovery-listenertrue,则事务定期恢复监听程序使用哪个套接字绑定。

启用统计

启用事务统计信息。默认值为 false

status-socket-binding

指定事务状态管理器的套接字绑定。此上下文中不支持。

use-hornetq-store

已弃用,使用 use-journal-store

use-jdbc-store

如果为 true,则使用 JDBC 存储来编写事务日志;如果为 false,则使用默认日志存储。

use-journal-store

启用 Apache ActiveMQ Artemis 日志存储,而不是基于文件的存储。默认禁用,但可提高 I/O 性能。如果涉及多个事务管理器,则不建议用于 JTS 事务。需要通过 shutdown 命令来重新启动服务器来应用更改。

Expand
表 A.41. 日志存储属性
属性描述

expose-all-logs

是否公开所有日志。默认为 false,表示只公开事务日志的子集。

type

指定日志存储的实施类型。默认为 默认

Expand
表 A.42. 提交标记的资源属性
属性描述

batch-size

此 CMR 资源的批处理大小。默认值为 100

immediate-cleanup

是否为此 CMR 资源执行立即清理。默认值为 true

JNDI-name

此 CMR 资源的 JNDI 名称。

名称

用于存储 XID 的表名称。默认为 xids

A.23. IIOP 子系统属性

A.23.1. IIOP 子系统简介

JBoss EAP 中的 IIOP 子系统支持 CORBA 兼容服务和 Java 应用之间的互操作性。它管理如何为远程调用处理安全连接、事务和身份传播,确保为分布式计算提供统一且灵活的环境。通过调整下面详述的属性,管理员可以微调 IIOP 配置,设置安全要求(如 SSL 和身份验证),以及控制事务管理行为。

注意

此表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/wildfly-iiop-openjdk_3_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能会有所不同。

Expand
表 A.43. IIOP 子系统属性
属性描述

add-component-via-interceptor

指明 IOR 拦截器是否应添加 SSL 组件。弃用

auth-method

身份验证方法。有效值为 noneusername_password

authentication-context

安全初始化程序设为 elytron 时使用的身份验证上下文名称。

caller-propagation

指明在 SAS 上下文中是否应传播调用者身份。有效值为 none支持的

client-requires

表示客户端 SSL 必需参数的值。有效值为 None,ServerAuth,ClientAuth, 和 MutualAuth已弃用:使用 client-requires-ssl 替代

client-requires-ssl

指明来自服务器的 IIOP 连接是否需要 SSL。

client-ssl-context

用于创建客户端 SSL 套接字的 SSL 上下文名称。

client-supports

表示客户端 SSL 支持参数的值。有效值为 None,ServerAuth,ClientAuth, 和 MutualAuth已弃用:使用 client-requires-ssl 替代

机密性

指明传输是否需要机密保护。有效值为 none支持的以及所需的已弃用:使用 server-requires-ssl 替代

detect-misordering

指明传输是否需要错误排序检测。有效值为 none支持的以及所需的已弃用:使用 server-requires-ssl 替代

detect-replay

指明传输是否需要重播检测。有效值为 none支持的以及所需的已弃用:使用 server-requires-ssl 替代

export-corbaloc

指明 root 上下文是否应导出为 corbaloc::address:port/NameService

giop-version

要使用的 GIOP 版本。

high-water-mark

TCP 连接缓存参数.每次连接数量超过这个值时,ORB 会尝试重新声明连接。重新声明的连接数量由 number-to-reclaim 属性指定。如果没有设置此属性,则使用 OpenJDK ORB 默认。

完整性

指明传输是否需要完整性保护。有效值为 none支持的以及所需的已弃用:使用 server-requires-ssl 替代

number-to-reclaim

TCP 连接缓存参数.每次连接数量超过 high-water-mark 属性时,ORB 会尝试回收连接。重新声明的连接数量由此属性指定。如果没有设置,则使用 OpenJDK ORB 默认。

persistent-server-id

服务器的持久 ID。持久对象引用在服务器的许多激活之间有效,它们利用此属性来识别它。因此,同一服务器的许多激活应该将此属性设置为相同的值,在同一主机上运行的不同服务器实例应具有不同的服务器 ID。

属性

通用键/值属性列表。

realm

身份验证服务域名。

required

指明是否需要身份验证。

root-context

命名服务根上下文。

安全

指明是否要安装安全拦截器。有效值为 clientidentityelytronnone

security-domain

包含用于建立 SSL 连接的密钥存储和信任存储的安全域的名称。

server-requires

表示服务器 SSL 所需的参数的值。有效值为 None,ServerAuth,ClientAuth, 和 MutualAuth已弃用:使用 server-requires-ssl 替代

server-requires-ssl

指明到服务器的 IIOP 连接是否需要 SSL。

server-ssl-context

用于创建服务器端 SSL 套接字的 SSL 上下文名称。

server-supports

表示服务器 SSL 支持参数的值。有效值为 None,ServerAuth,ClientAuth, 和 MutualAuth已弃用:使用 server-requires-ssl 替代

socket-binding

指定 ORB 端口的套接字绑定配置的名称。

ssl-socket-binding

指定 ORB SSL 端口的套接字绑定配置的名称。

support-ssl

指明是否支持 SSL。

Transactions

指明是否要安装事务拦截器。有效值为 fullspecnone。值 full 启用 JTS,而 spec 的值则启用拒绝传入事务上下文的非JTS spec 兼容模式。

trust-in-client

指明传输是否需要在客户端中建立信任。有效值为 none支持的以及所需的已弃用:使用 server-requires-ssl 替代

trust-in-target

指明传输是否需要在目标中建立信任。有效值为 none支持的已弃用:使用 server-requires-ssl 替代

A.24. 资源适配器属性

下表描述了资源适配器属性。

注意

这些表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/wildfly-resource-adapters_5_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能存在不同。

Expand
表 A.44. 主要属性
属性描述

archive

资源适配器归档。

beanvalidationgroups

应使用的 bean 验证组。

bootstrap-context

应该使用的 bootstrap 上下文的唯一名称。

config-properties

自定义定义的配置属性。

module

将从中加载资源适配器的模块。

启用统计

是否启用运行时统计信息。

transaction-support

资源适配器的事务支持级别。有效值为 NoTransactionLocalTransactionXATransaction

wm-elytron-security-domain

定义应使用的 Elytron 安全域的名称。

wm-security

打开这个资源适配器的 wm.security。如果为 false,则所有 wm-security fluentd 参数都会被忽略,即使是默认值。

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

用户映射列表。

注意

如果您的资源适配器使用 bootstrap-context 以及将 elytron-enabled 设置为 true 的工作管理器,则必须使用 wm-elytron-security-domain 属性而不是安全域规格的 wm-security-domain 属性。

Expand
表 A.45. admin-objects 属性
属性描述

class-name

管理对象的完全限定类名称。

enabled

指定是否应启用管理对象。

JNDI-name

管理对象的 JNDI 名称。

use-java-context

把它设置为 false 会将对象绑定到全局 JNDI。

Expand
表 A.46. connection-definitions 属性
属性描述

allocation-retry

表示在抛出异常前应尝试分配连接的次数。

allocation-retry-wait-millis

在重试分配连接之间等待的时间(以毫秒为单位)。

authentication-context

Elytron 身份验证上下文,用于定义用于区分池中连接的 jakarta.security.auth.Subject

authentication-context-and-application

表示应用程序提供的参数(如 getConnection (user,pw)Subject )用于区分池中的连接。在使用配置的 authentication-context 时,Elytron 在身份验证后提供这些参数。

background-validation

指定连接应在后台线程上进行验证,而不是在使用前进行验证。更改此值需要重启服务器。

background-validation-millis

后台验证将运行的时间(以毫秒为单位)。更改此值需要重启服务器。

blocking-timeout-wait-millis

在抛出异常前等待连接时的最大时间(以毫秒为单位)。请注意,这个块仅在等待锁定连接时抛出异常,如果创建新连接需要很长时间,则永远不会抛出异常。

capacity-decrementer-class

类定义池中减少连接的策略。

capacity-decrementer-properties

在类中注入的属性,以定义池中减少连接的策略。

capacity-incrementer-class

定义在池中递增连接的策略。

capacity-incrementer-properties

在类中注入的属性,定义用于递增池中连接的策略。

class-name

受管连接工厂或 admin 对象的完全限定类名称。

可连接

启用 CMR 使用。这个功能意味着本地资源可以可靠地参与 XA 事务。

Elytron-enabled

启用 Elytron 安全来处理连接身份验证。如果没有指定上下文,要使用的 Elytron authentication-context 将是当前上下文。如需更多信息,请参阅 authentication-context

enabled

指定是否应启用资源适配器。

Enlistment

指定资源适配器支持时使用 lazy enlistment。

enlistment-trace

指定 JBoss EAP/IronJacamar 是否应该记录追踪。默认为 false

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 不像在 Jakarta 交易交易外被使用的 XA 连接。要解决这个问题,您可以为不同的上下文创建单独的子池。

pad-xid

指定 Xid 是否应该被 padded。

pool-fair

指定池使用是否应公平。

pool-prefill

指定是否应预先填充池。更改此值需要重启服务器。

pool-use-strict-min

指定 min-pool-size 是否应该被视为 strict。

recovery-authentication-context

用于恢复的 Elytron 身份验证上下文。如果没有指定 authentication-context,则使用当前上下文。

recovery-credential-reference

从凭证存储中进行凭证,以便在恢复连接时进行身份验证。

recovery-elytron-enabled

表示将使用 Elytron 身份验证上下文恢复。默认值为 false

recovery-password

用于恢复的密码。

recovery-plugin-class-name

恢复插件实现的完全限定类名称。

recovery-plugin-properties

恢复插件的属性。

recovery-security-domain

用于恢复的安全域。

recovery-username

用于恢复的用户名。

same-rm-override

无条件设置 jakarta.transaction.xa.XAResource.isSameRM (XAResource) 返回 true 或 false。

security-application

表示应用程序提供的参数(如 getConnection (user, pw) )用于区分池中的连接。

security-domain

定义用于区分池中的连接的 jakarta.security.auth.Subject 的安全域。

security-domain-and-application

表示应用程序提供的参数(如 getConnection (user,pw)Subject )与安全域的,用于区分池中的连接。

sharable

启用 sharable 连接,允许启用 lazy 关联(如果支持)。

tracking

指定 IronJacamar 是否应该跟踪跨事务边界的连接句柄。

use-ccm

启用使用缓存的连接管理器。

use-fast-fail

当设置为 true 时,第一次尝试连接分配无效时会失败。当设置为 false 时,请一直尝试,直到池耗尽所有潜在的连接。

use-java-context

把它设置为 false 会将对象绑定到全局 JNDI。

validate-on-match

指定连接工厂试图与受管连接匹配时是否应该进行连接验证。这通常专用于使用后台验证。

wrap-xa-resource

指定 XAResource 实例是否应嵌套在 org.jboss.tm.XAResourceWrapper 实例中。

xa-resource-timeout

该值将传递到 XAResource.setTransactionTimeout (),以秒为单位。默认值为 0

A.25. 资源适配器统计

Expand
表 A.47. 资源适配器统计
Name描述

ActiveCount

活跃连接的数量。每个连接都由应用程序使用,或者在池中可用

AvailableCount

池中可用连接的数量。

AverageBlockingTime

阻塞池专用锁定的平均时间。该值以毫秒为单位。

AverageCreationTime

创建连接所花费的平均时间。该值以毫秒为单位。

CreatedCount

创建的连接数。

DestroyedCount

销毁的连接数量。

InUseCount

当前正在使用的连接数。

MaxCreationTime

创建连接所需的时间。该值以毫秒为单位。

MaxUsedCount

使用的最大连接数。

MaxWaitCount

同时等待连接的最大请求数。

MaxWaitTime

等待池专用锁定所花费的最长时间。

TimedOut

超时连接的数量。

TotalBlockingTime

等待池专用锁定的总时间。该值以毫秒为单位。

TotalCreationTime

创建连接的总时间。该值以毫秒为单位。

WaitCount

必须等待连接的请求数。

A.26. Undertow 子系统属性

本参考提供了关于红帽 JBoss Enterprise Application Platform 中 undertow 子系统不同元素的属性的详细信息。

注意

这些表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/wildfly-undertow_4_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能存在不同。

Expand
表 A.48. 主要 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。

obfuscate-session-route

true

instance-id 值是否在服务器路由过程中模糊处理。模糊处理的服务器路由不会在服务器重启后更改,除非 instance-id 值有变化。

启用统计

false

是否启用统计数据。

应用程序安全域属性

应用程序安全域属性具有以下结构:

application-security-domain 属性
Expand
表 A.49. application-security-domain 属性
属性default描述

enable-jacc

false

启用使用 Java 授权合同进行容器的授权。

enable-jaspi

true

为关联的部署启用 {JAAS}。

http-authentication-factory

 

供引用映射安全域的部署使用 HTTP 身份验证工厂。

integrated-jaspi

true

是否应使用 integrated-jaspi。当在 {JAAS} 身份验证过程中设置为 true 时,从部署引用的 SecurityDomain 加载身份。当设置为 false 时,会创建一个临时身份。

override-deployment-config

false

部署中的身份验证配置是否应被工厂覆盖。

referencing-deployments

 

当前引用此映射的部署。

security-domain

 

部署使用的 SecurityDomain

单点登录属性
Expand
表 A.50. 单点登录属性
属性default描述

client-ssl-context

 

引用用于保护反向通道注销连接的 SSL 上下文。

cookie-name

JSESSIONIDSSO

Cookie 的名称。

credential-reference

 

用于解密私钥条目的凭证引用。

domain

 

要使用的 Cookie 域。

仅 HTTP-only

false

设置 cookie httpOnly 属性。

key-alias

 

用于签名和验证反向通道注销连接的私钥条目的别名。

key-store

 

对包含私钥条目的密钥存储的引用。

path

/

Cookie 路径.

secure

false

设置 Cookie secure 属性。

缓冲区缓存属性
Expand
表 A.51. buffer-cache 属性
属性default描述

buffer-size

1024

缓冲区的大小。较小的缓冲区可以更有效地使用空间。

buffer-per-region

1024

每个区域的缓冲区数量。

max-regions

10

区域的最大数量。这会控制可用于缓存的最大内存量。

字节缓冲池属性
Expand
表 A.52. byte-buffer-pool 属性
属性default描述

buffer-size

 

每个缓冲区片段的大小(以字节为单位)。如果没有指定,则根据系统的可用 RAM 设置大小:

  • 512 字节小于 64 MB RAM
  • 64 MB - 128 MB 的 1024 字节(1 KB)
  • 16384 字节(16 KB),超过 128 MB RAM

有关此属性的性能调整建议,请参阅 JBoss EAP 性能调整中的 Configuring Buffer Pools

direct

 

指明此缓冲区是直接或堆池的布尔值。如果没有指定,则该值会根据系统的可用 RAM 设置:

  • 如果可用 RAM 为 < 64MB,则值设为 false
  • 如果可用 RAM 是 >= 64MB,则该值被设置为 true

请注意,直接池也具有对应的堆池。

leak-detection-percent

0

应该分配有泄漏检测器的缓冲百分比。

max-pool-size

 

要保留在池中的最大缓冲区数量。缓冲区仍会超过这个限制,但如果池已满,则不会保留缓冲区。

thread-local-cache-size

12

每线程缓存的大小。这是一个最大大小,如果线程实际分配缓冲区,缓存将使用智能大小来保留线程上的缓冲区。

Servlet 容器属性

servlet 容器组件具有以下结构:

Servlet-container 属性
Expand
表 A.53. Servlet-container 属性
属性default描述

allow-non-standard-wrappers

false

是否可以使用不扩展标准打包程序类的请求和响应打包程序。

default-buffer-cache

default

用于缓存静态资源的缓冲区缓存。

default-cookie-version

0

用于应用创建 Cookie 的默认 Cookie 版本。

default-encoding

 

用于所有部署的应用程序的默认编码。

default-session-timeout

30

容器中部署的所有应用的默认会话超时(以分钟为单位)。

directory-listing

 

如果应该为默认的 servlet 启用目录列表。

disable-caching-for-secured-pages

true

是否将标头设置为禁用安全页面的缓存。禁用这可能导致安全问题,因为敏感页面可能会被中间部分缓存。

disable-file-watch-service

false

如果设置为 true,则不会使用文件监视服务来监控展开的部署的更改。此属性覆盖 io.undertow.disable-file-system-watcher 系统属性。

disable-session-id-reuse

false

如果设置为 true,则永远不会重复使用未知的会话 ID,并生成新的会话 ID。如果设置为 false,则只有在另一个部署的会话管理器中存在会话 ID 时,才会重复使用会话 ID,以允许在同一服务器上的应用程序间共享相同的会话 ID。

eager-filter-initialization

false

是否在部署启动时调用过滤 init (),而不是在第一次请求时调用。

ignore-flush

false

忽略 servlet 输出流上的清除。在大多数情况下,这些只是因为其他任何原因而只有 hurt 的性能。

max-sessions

 

一次可以处于活跃状态的最大会话数。

active-authentication

true

是否使用主动身份验证。如果这是 true,如果存在凭据,则用户始终会被身份验证。

session-id-length

30

会话 ID 越长,更安全。这个值指定生成的会话 ID 的长度,以字节为单位。系统将生成的会话 ID 编码为 Base64 字符串,并以会话 ID Cookie 向客户端提供结果。因此,服务器会向客户端发送一个 Cookie 值,比最初生成的会话 ID 大约 33%。例如,会话 ID 长度为 30 会导致 Cookie 值长度为 40。

stack-trace-on-error

local-only

如果错误页面应该生成具有堆栈追踪的错误。值包括 none仅本地 值。

use-listener-encoding

false

使用监听程序上定义的编码。

MIME-mapping 属性
Expand
表 A.54. MIME-mapping 属性
属性default描述

value

 

此映射的 mime 类型。

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
Copy to Clipboard Toggle word wrap
Expand
表 A.55. crawler-session-management 属性
属性default描述

session-timeout

 

由 crawlers 拥有的会话的会话超时(以秒为单位)。

user-agents

 

用于与 crawler 的用户代理匹配的正则表达式。

JSP 属性
注意

在使用管理 CLI 管理 jsp 元素时,它位于 servlet-container 元素的 设置 下。例如:

/subsystem=undertow/servlet-container=default/setting=jsp:read-resource
Copy to Clipboard Toggle word wrap
Expand
表 A.56. JSP 属性
属性default描述

check-interval

0

使用后台线程检查 Jakarta Server Pages 更新间隔。这对使用文件系统通知 API 处理 Jakarta 服务器页面更改通知的大多数部署没有影响。这只有在文件监视服务被禁用时才会生效。

开发

false

启用开发模式,以便即时重新加载 Jakarta 服务器页面。

disabled

false

启用 Jakarta Server Pages 容器。

display-source-fragment

true

当发生运行时错误时,尝试显示对应的 Jakarta Server Pages 源片段。

dump-smap

false

将 SMAP 数据写入文件。

error-on-use-bean-invalid-class-attribute

false

在 useBean 中使用错误的类时启用错误。

generate-strings-as-char-arrays

false

将 String constants 生成为字符数组。

java-encoding

UTF8

指定用于 Java 源的编码。

keep-generated

true

保留生成的 servlet。

mapped-file

true

映射到 Jakarta 服务器页面源。

modification-test-interval

4

两次测试更新间隔的最小时间,以秒为单位。

optimize-scriptlets

false

如果 Jakarta Server Pages scriptlets 应该进行了优化,以删除字符串串联。

recompile-on-fail

false

在每个请求上重试失败的 Jakarta Server Pages 编译。

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 驱动方式广告 Jakarta Server Pages 引擎。

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
Copy to Clipboard Toggle word wrap
Expand
表 A.57. 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
Copy to Clipboard Toggle word wrap
Expand
表 A.58. session-cookie 属性
属性default描述

注释

 

Cookie 注释.

domain

 

Cookie 域.

仅 HTTP-only

 

Cookie 是否为 http-only。

max-age

 

Cookie 的最长期限。

名称

 

Cookie 的名称。

secure

 

Cookie 是否安全。

Websocket 属性
注意

在使用管理 CLI 管理 websocket 元素时,可在 servlet-container 元素的 设置 下提供。例如:

/subsystem=undertow/servlet-container=default/setting=websockets:read-resource
Copy to Clipboard Toggle word wrap
Expand
表 A.59. Websocket 属性
属性default描述

buffer-pool

default

用于 websocket 部署的缓冲池。

deflater-level

0

配置 DEFLATE 算法的压缩级别。

assign-to-worker

true

回调是否应分配给 worker 线程。如果这是 false,那么它们将在 IO 线程中运行,但必须更谨慎地执行阻止操作。

per-message-deflate

false

启用 websocket 每消息压缩扩展。

worker

default

用于 websocket 部署的 worker。

welcome-file 属性

定义 welcome 文件,没有选项。

过滤属性

这些组件可以在 /subsystem=undertow/configuration=filter 中找到。

custom-filter 过滤器
Expand
表 A.60. custom-filter 属性
属性default描述

class-name

 

HttpHandler 类名称.

module

 

可以从中加载 class 的模块名称。

parameters

 

过滤参数。

error-page Filters

错误页面

Expand
表 A.61. error-page 属性
属性default描述

code

 

错误页面代码。

path

 

错误页面路径。

expression-filter 过滤器

从 Undertow 表达式语言解析的过滤器。

Expand
表 A.62. expression-filter 属性
属性default描述

expression

 

定义过滤器的表达式。

module

 

用于加载过滤器定义的模块。

gzip 过滤器

定义 gzip 过滤器,且没有属性。

mod-cluster Filters

mod-cluster 过滤器组件具有以下结构:

Expand
表 A.63. mod-cluster 属性
属性default描述

advertise-frequency

10000

mod_cluster 在网络上公告自身的频率(以毫秒为单位)。

advertise-path

/

mod_cluster 在其中注册的路径。

advertise-protocol

http

使用的协议。

advertise-socket-binding

 

用于公告的多播组。

broken-node-timeout

60000

从表中移除有问题的节点前必须经过的时间长度。

cache-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 将正常使用。

failover-strategy

ENABLE_BALANCED

确定在会话具有关联性的节点不可用的情况下如何选择故障转移节点的属性。

health-check-interval

10000

健康检查 ping 到后端节点的频率。

http2-enable-push

true

是否为 HTTP/2 连接启用推送。

http2-header-table-size

4096

用于 HPACK 压缩的标头表的大小(以字节为单位)。这个内存量将为每个连接分配压缩。较大的值会使用更多内存,但可能会提供更好的压缩。

http2-initial-window-size

65535

流控制窗口大小(以字节为单位),用于控制客户端如何将数据发送到服务器的速度。

http2-max-concurrent-streams

 

在单个连接上可以处于活跃状态的 HTTP/2 流的最大数量。

http2-max-frame-size

16384

最大 HTTP/2 帧大小,以字节为单位。

http2-max-header-list-size

 

服务器准备接受的最大请求标头大小(以字节为单位)。

management-access-predicate

 

适用于传入请求的 predicate,以确定它们是否可以执行 mod 集群管理命令。通过限制对来自 management-socket-binding 的请求的管理,为提供的内容提供额外的安全性。

management-socket-binding

 

mod_cluster 管理端口的套接字绑定。使用 mod_cluster 两个 HTTP 侦听器时,应定义一个用于处理请求的公共 HTTP 侦听器,以及一个绑定到内部网络来处理 mod 集群命令的一个绑定。此套接字绑定应与内部监听程序对应,不应公开访问。

max-ajp-packet-size

8192

AJP 数据包的最大大小(以字节为单位)。增加这将允许 AJP 工作处理具有大量标头的请求和响应。这在负载均衡器和后端服务器之间必须相同。

max-request-time

-1

请求后端节点在被终止前可以花费的最长时间。

max-retries

1

如果请求失败,您可以尝试重试请求的次数。

注意

如果请求不被视为幂等,则只有在代理可以确定没有发送到后端服务器时,才会重试请求。

request-queue-size

10

如果连接池已满,则在请求被拒绝前,可以排队的请求数。

security-key

 

用于 mod_cluster 组的安全密钥。所有成员都必须使用相同的安全密钥。

security-realm

 

提供 SSL 配置的安全域。deprecated :使用 ssl-context 属性直接引用配置的 SSLContext。

ssl-context

 

对过滤器使用的 SSLContext 的引用。

use-alias

false

是否执行别名检查。

worker

default

用于发送公告通知的 XNIO worker。

Expand
表 A.64. 负载均衡器属性
属性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 属性

定义负载平衡组,没有选项。

Expand
表 A.65. 节点属性
属性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。

 

传送到节点的字节数。

Expand
表 A.66. 上下文属性
属性default描述

requests

 

针对此上下文的请求数。

status

 

此上下文的状态。

request-limit 过滤器
Expand
表 A.67. 请求限制属性
属性default描述

max-concurrent-requests

 

并发请求数上限。

queue-size

 

在队列开始被拒绝前到队列的请求数。

response-header Filters

响应标头过滤器允许您添加自定义标头。

Expand
表 A.68. response-header 属性
属性default描述

header-name

 

标头名称。

header-value

 

标头值。

重写过滤器
Expand
表 A.69. 重写属性
属性default描述

重定向

false

重定向是否完成,而不是重写。

target

 

定义目标的表达式。如果您要重定向到恒定目标,请在值后面放置单引号。

处理程序属性

这些组件可以在 /subsystem=undertow/configuration=handler 中找到。

文件属性
Expand
表 A.70. 文件属性
属性default描述

cache-buffer-size

1024

缓冲区的大小。

cache-buffers

1024

缓冲区数量。

case-sensitive

true

是否使用区分大小写的文件处理。请注意,如果底层文件系统不区分大小写,则设为 false 才起作用。

directory-listing

false

是否启用目录列表。

follow-symlink

false

是否启用以下符号链接:

path

 

文件处理程序将为其提供资源的文件系统的路径。

safe-symlink-paths

 

可以作为符号链接目标的路径。

将 WebDAV 用于静态资源

最初,JBoss EAP 使用 JBoss Web 子系统,WebDAV 可以通过 WebdavServlet 来托管静态资源,并启用用于访问和操作文件的额外 HTTP 方法。随着 Undertow 充当 JBoss EAP 8.0 中的集成 Web 层,子系统现在提供通过文件处理程序提供静态文件的机制。但是,它不包括 WebDAV 支持。如果您需要 WebDAV 功能,请考虑为您的 JBoss EAP 8.0 环境实施自定义 WebDAV servlet。

reverse-proxy 属性

reverse-proxy 处理程序组件具有以下结构:

Expand
表 A.71. reverse-proxy 属性
属性default描述

cache-connections-per-thread

5

无限期保留的连接数量。

connection-idle-timeout

60

连接在关闭前可以闲置的时间。当池大小接近配置的最小值(如 cached-connections-per-thread 配置)后,连接不会超时。

connections-per-thread

40

每个 IO 线程要维护到后端服务器的连接数量。

max-request-time

-1

代理请求在被终止前可以处于活跃状态的最长时间。默认值为 unlimited。

max-retries

1

如果请求失败,将发出尝试重试请求的次数。

注意

如果请求不被视为幂等,则只有在代理可以确定没有发送到后端服务器时,才会重试请求。

problem-server-retry

30

尝试重新连接关闭的服务器前等待的时间(以秒为单位)。

request-queue-size

10

如果连接池已满,则在请求被拒绝前,可以排队的请求数。

session-cookie-names

JSESSIONID

以逗号分隔的会话 Cookie 名称列表。通常,这将是 JSESSIONID。

Expand
表 A.72. 主机属性
属性default描述

enable-http2

false

如果为 true,则代理将尝试使用 HTTP/2 连接到后端。如果不支持,它将回退到 HTTP/1.1。

instance-id

 

将用来启用粘性会话的实例 ID 或 JVM 路由。

outbound-socket-binding

 

此主机的出站套接字绑定。

path

/

如果主机使用非根资源,则可选路径。

scheme

http

使用的方案类型。

security-realm

 

为与主机连接提供 SSL 配置的安全域。

ssl-context

 

引用此处理程序使用的 SSLContext。

服务器属性

服务器组件具有以下结构:

服务器属性
Expand
表 A.73. 服务器属性
属性default描述

default-host

default-host

服务器的默认虚拟主机。

servlet-container

default

服务器的默认 servlet 容器。

AJP-listener 属性
Expand
表 A.74. AJP-listener 属性
属性default描述

allow-encoded-slash

false

如果请求附带编码的字符,如 %2F,无论这些请求是否将被解码。

allow-equals-in-cookie-value

false

是否允许未转义的 Cookie 值中的字符。未加引号的 Cookie 值不能包含等号字符。如果值在等号前结束。Cookie 值的其余部分将被丢弃。

allow-unescaped-characters-in-url

false

是否允许 URL 中的未转义字符。如果设置为 true,则侦听器处理包含非转义、非 ASCII 字符的任何 URL。如果设置为 false,则侦听器会拒绝任何包含未转义的、非 ASCII 字符的 URL (带有 HTTP Bad Request 400 响应代码)。

always-set-keep-alive

true

Connection: keep-alive 标头会添加到响应中,即使规格不严格要求也是如此。

buffer-pipelined-data

false

是否缓冲管道请求。

buffer-pool

default

AJP 侦听器的缓冲区池。

decode-url

true

如果这是 true,则解析器将使用所选字符编码解码 URL 和查询参数,默认为 UTF-8。如果为 false,则不会解码它们。这将允许后续处理程序将它们解码为需要的任何 charset 中。

disallowed-methods

["TRACE"]

不允许的 HTTP 方法的逗号分隔列表。

enabled

true

如果启用了监听程序。deprecated: Enabled 属性可能会导致配置一致性强制出现问题。

max-ajp-packet-size

8192

AJP 数据包支持的最大大小。如果这被修改,则需要在负载均衡器和后端服务器上增加它。

max-buffered-request-size

16384

缓冲请求的最大大小,以字节为单位。通常不会缓冲请求,最常见的情况是在为 POST 请求执行 SSL 重新协商时,后的数据必须完全缓冲才能执行重新协商。

max-connections

 

并发连接的最大数量。如果在服务器配置中没有设置值,则并发连接数量的限制是 Integer.MAX_VALUE

max-cookies

200

将要解析的最大 Cookie 数量。这用于防止哈希漏洞。

max-header-size

1048576

HTTP 请求标头的最大大小(以字节为单位)。

max-headers

200

将要解析的最大标头数。这用于防止哈希漏洞。

max-parameters

1000

将要解析的最大参数数。这用于防止哈希漏洞。这适用于查询参数和 POST 数据,但不适用于累积数据。因此,您可能具有 max 参数 * 2 总计的参数。

max-post-size

10485760

接受后的最大大小

no-request-timeout

60000

在容器关闭前,连接可以闲置的时间长度(以毫秒为单位)。

read-timeout

 

以毫秒为单位配置套接字的读取超时。如果给定的时间在读取成功读取的情况下经过一段时间,则套接字的下一个读取将抛出 ReadTimeoutException

receive-buffer

 

接收缓冲区大小。

record-request-start-time

false

是否记录请求开始时间,以允许记录请求时间。这会对性能有小但可衡量的性能影响。

redirect-socket

 

如果此侦听器支持非 SSL 请求,并且收到一个匹配需要 SSL 传输的请求,是否自动将请求重定向到此处指定的套接字绑定端口。

request-parse-timeout

 

解析请求的最大时间(以毫秒为单位)。

resolve-peer-address

false

启用主机 DNS 查找。

scheme

 

侦听器方案可以是 HTTP 或 HTTPS。默认情况下,方案将从传入的 AJP 请求中获取。

secure

false

如果这是 true,则源自此侦听器的请求将标记为安全,即使请求不使用 HTTPS。

send-buffer

 

发送缓冲区大小。

socket-binding

 

AJP 侦听器的套接字绑定.

tcp-backlog

 

使用指定的积压配置服务器。

tcp-keep-alive

 

配置通道以独立于实施的方式发送 TCP keep-alive 消息。

url-charset

UTF-8

URL charset。

worker

default

侦听器的 XNIO worker。

write-timeout

 

以毫秒为单位为套接字配置写入超时。如果给定时间没有成功写入,则套接字的下一个写入将抛出 WriteTimeoutException

主机属性
Expand
表 A.75. 主机属性
属性default描述

alias

 

主机以逗号分隔的别名列表。

default-response-code

404

如果设置,则这是在服务器上不存在请求的上下文时发回的响应代码。

default-web-module

ROOT.war

默认 Web 模块.

disable-console-redirect

false

如果设置为 true,则不会为这个主机启用/console 重定向。

queue-requests-on-start

true

如果设置为 true,则应开始此主机的请求排队。如果设置为 false,则返回默认响应代码。

filter-ref 属性
Expand
表 A.76. filter-ref 属性
属性default描述

predicate

 

谓词提供了一种基于交换的 true/false 决策的简单方法。许多处理程序都要求有条件地应用它们,而 predicates 则提供指定条件的常规方法。

priority

1

定义过滤器顺序。较低数字指示服务器之前包含在处理程序链中,而不是同一上下文以上的其他数字。值范围为 1,表示将首先处理过滤器,再到 2147483647,导致过滤器被最后处理。

位置属性
Expand
表 A.77. 位置属性
属性default描述

handler

 

此位置的默认处理程序。

filter-ref 属性
Expand
表 A.78. filter-ref 属性
属性default描述

predicate

 

谓词提供了一种基于交换的 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
Copy to Clipboard Toggle word wrap
Expand
表 A.79. access-log 属性
属性default描述

目录

${jboss.server.log.dir}

用于保存日志的目录。

Extended

false

日志是否使用扩展日志文件格式。

pattern

Common

访问日志模式。有关此属性可用选项的详细信息,请参阅 JBoss EAP 开发指南中的 Provided Undertow Handlers

注意

如果将模式设置为打印处理请求的时间,还必须在适当的监听器上启用 record-request-start-time 属性;否则,在访问日志中不会正确记录时间。例如:

/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=record-request-start-time,value=true)
Copy to Clipboard Toggle word wrap

predicate

 

确定是否应记录请求的 predicate。

prefix

access_log。

日志文件名称的前缀。

relative-to

 

路径相对的目录。

rotate

true

是否每天轮转访问日志。

suffix

log

日志文件名称的后缀。

use-server-log

false

日志是否应写入服务器日志,而不是单独的文件。

worker

default

用于日志记录的 worker 名称。

console-access-log 属性
Expand
表 A.80. console-access-log 属性
属性default描述

属性

{remote-host={},remote-user={},date-time={},request-line={},response-code={},bytes-sent={}}

指定控制台访问日志输出中包含的日志数据,或指定默认数据的自定义。

include-host-name

false

指定是否在 JSON 结构化输出中包含主机名。如果设置为 true,则结构化数据中的键为 "hostName",则值是配置 console-access-log 的主机的名称。

metadata

 

指定要在控制台访问日志输出中包含的自定义元数据。

predicate

 

确定是否应记录请求的 predicate。

worker

default

用于日志记录的 worker 名称。

http-invoker 属性
Expand
表 A.81. http-invoker 属性
属性default描述

http-authentication-factory

 

用于身份验证的 HTTP 身份验证工厂。

path

wildfly-services

安装服务的路径。

security-realm

 

用于身份验证的旧安全域。

单点登录属性
注意

在使用管理 CLI 管理 单注册 元素时,它可在 host 元素的设置 下使用。例如:

/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
Copy to Clipboard Toggle word wrap
重要

默认情况下,在 JBoss EAP 8.0 中运行 ha 配置文件时,每个主机都维护自己的 Infinispan 缓存来存储会话和 SSO cookie 信息。此缓存基于 web 缓存容器的默认缓存。JBoss EAP 还管理所有主机中的身份验证详情传播,确保整个集群中的一致会话和单点登录数据。

Expand
表 A.82. 单点登录属性
属性default描述

cookie-name

JSESSIONIDSSO

Cookie 的名称。

domain

 

要使用的 Cookie 域。

仅 HTTP-only

false

设置 cookie httpOnly 属性。

path

/

Cookie 路径.

secure

false

设置 Cookie secure 属性。

http-listener 属性
Expand
表 A.83. http-listener 属性
属性default描述

allow-encoded-slash

false

如果请求附带编码的字符,如 %2F,无论这些请求是否将被解码。

allow-equals-in-cookie-value

false

是否允许未转义的 Cookie 值中的字符。未加引号的 Cookie 值不能包含等号字符。如果值在等号前结束。Cookie 值的其余部分将被丢弃。

allow-unescaped-characters-in-url

false

是否允许 URL 中的未转义字符。如果设置为 true,则侦听器处理包含非转义、非 ASCII 字符的任何 URL。如果设置为 false,则侦听器会拒绝任何包含未转义的、非 ASCII 字符的 URL (带有 HTTP Bad Request 400 响应代码)。

always-set-keep-alive

true

是否将 'Connection: keep-alive' 标头添加到响应中,即使规格不严格要求也是如此。

buffer-pipelined-data

false

是否缓冲管道请求。

buffer-pool

default

侦听器的缓冲池。

证书转发

false

是否应启用证书转发。如果启用此设置,则侦听器将从 SSL_CLIENT_CERT 属性获取证书。这只有在代理后才会启用,代理配置为始终设置这些标头。

decode-url

true

解析器将使用所选字符编码解码 URL 和查询参数,默认为 UTF-8。如果为 false,则不会解码它们。这将允许后续处理程序将它们解码为需要的任何 charset 中。

disallowed-methods

["TRACE"]

不允许的 HTTP 方法的逗号分隔列表。

enable-http2

false

是否为此监听器启用 HTTP/2 支持。

enabled

true

是否启用监听程序。deprecated: Enabled 属性可能会导致配置一致性强制出现问题。

http2-enable-push

true

是否为这个连接启用服务器推送。

http2-header-table-size

4096

用于 HPACK 压缩的标头表的大小(以字节为单位)。这个内存量将为每个连接分配压缩。较大的值会使用更多内存,但可能会提供更好的压缩。

http2-initial-window-size

65535

流控制窗口大小(以字节为单位),用于控制客户端如何将数据发送到服务器的速度。

http2-max-concurrent-streams

 

在单个连接上可以处于活跃状态的 HTTP/2 流的最大数量。

http2-max-frame-size

16384

最大 HTTP/2 帧大小,以字节为单位。

http2-max-header-list-size

 

服务器准备接受的最大请求标头大小。

max-buffered-request-size

16384

缓冲请求的最大大小(以字节为单位Request)通常不会被缓冲,最常见的情况是在为 POST 请求执行 SSL 重新协商时,并且后数据必须完全缓冲才能执行重新协商。

max-connections

 

并发连接的最大数量。如果在服务器配置中没有设置值,则并发连接数量的限制是 Integer.MAX_VALUE

max-cookies

200

将要解析的最大 Cookie 数量。这用于防止哈希漏洞。

max-header-size

1048576

HTTP 请求标头的最大大小(以字节为单位)。

max-headers

200

将要解析的最大标头数。这用于防止哈希漏洞。

max-parameters

1000

将要解析的最大参数数。这用于防止哈希漏洞。这适用于查询参数和 POST 数据,但不适用于累积数据。因此,您可能会有 max parameters * 2 total parameters).

max-post-size

10485760

将接受的发布的最大大小。

no-request-timeout

60000

在容器关闭前,连接可以闲置的时间长度(以毫秒为单位)。

proxy-address-forwarding

false

是否启用 x-forwarded-host 和类似的标头,并设置远程 IP 地址和主机名。

proxy-protocol

false

是否使用 PROXY 协议来传输连接信息。如果设置为 true,则侦听器使用 PROXY 协议版本 1,如 PROXY 协议版本 1 和 2 规格所定义。这个选项只能为支持同一协议的负载均衡器后面的监听程序启用。

read-timeout

 

以毫秒为单位配置套接字的读取超时。如果给定的时间在读取成功读取的情况下经过一段时间,则套接字的下一个读取将抛出 ReadTimeoutException

receive-buffer

 

接收缓冲区大小。

record-request-start-time

false

是否记录请求开始时间,以允许记录请求时间。这会对性能有小但可衡量的性能影响。

redirect-socket

 

如果此侦听器支持非 SSL 请求,并且收到一个匹配需要 SSL 传输的请求,是否自动将请求重定向到此处指定的套接字绑定端口。

request-parse-timeout

 

解析请求的最大时间(以毫秒为单位)。

require-host-http11

false

它需要所有 HTTP/1.1 请求才能具有 Host 标头。如果请求没有包括此标头,它将被拒绝,并显示 403 错误。

resolve-peer-address

false

启用主机 DNS 查找。

secure

false

如果这是 true,则源自此侦听器的请求将标记为安全,即使请求不使用 HTTPS。

send-buffer

 

发送缓冲区大小。

socket-binding

 

侦听器的套接字绑定

tcp-backlog

 

使用指定的积压配置服务器。

tcp-keep-alive

 

配置通道以独立于实施的方式发送 TCP keep-alive 消息。

url-charset

UTF-8

URL charset。

worker

default

侦听器的 XNIO worker。

write-timeout

 

以毫秒为单位为套接字配置写入超时。如果给定时间没有成功写入,则套接字的下一个写入将抛出 WriteTimeoutException

https-listener 属性
Expand
表 A.84. https-listener 属性
属性default描述

allow-encoded-slash

false

如果请求附带编码的字符,如 %2F,无论这些请求是否将被解码。

allow-equals-in-cookie-value

false

是否允许未转义的 Cookie 值中的字符。未加引号的 Cookie 值不能包含等号字符。如果值在等号前结束。Cookie 值的其余部分将被丢弃。

allow-unescaped-characters-in-url

false

是否允许 URL 中的未转义字符。如果设置为 true,则侦听器处理包含非转义、非 ASCII 字符的任何 URL。如果设置为 false,则侦听器会拒绝任何包含未转义的、非 ASCII 字符的 URL (带有 HTTP Bad Request 400 响应代码)。

always-set-keep-alive

true

Connection: keep-alive 标头会添加到响应中,即使规格不严格要求也是如此。

buffer-pipelined-data

false

是否缓冲管道请求。

buffer-pool

default

侦听器的缓冲池。

证书转发

false

是否应启用证书转发。如果启用此设置,则侦听器将从 SSL_CLIENT_CERT 属性获取证书。这只有在代理后才会启用,代理配置为始终设置这些标头。

decode-url

true

解析器将使用所选字符编码解码 URL 和查询参数,默认为 UTF-8。如果为 false,则不会解码它们。这将允许后续处理程序将它们解码为需要的任何 charset 中。

disallowed-methods

["TRACE"]

不允许的 HTTP 方法的逗号分隔列表。

enable-http2

false

为此监听程序启用 HTTP/2 支持。

enable-spdy

false

为此监听器启用 SPDY 支持。弃用:SPDY 已被 HTTP/2 替代。

enabled

true

如果启用了监听程序。deprecated: Enabled 属性可能会导致配置一致性强制出现问题。

enabled-cipher-suites

 

配置已启用的 SSL 密码。弃用:当引用 SSLContext 的位置,它应该使用支持的密码套件进行配置。

enabled-protocols

 

配置 SSL 协议。弃用:当引用 SSLContext 的位置,它应该使用支持的密码套件进行配置。

http2-enable-push

true

如果为此连接启用了服务器推送。

http2-header-table-size

4096

用于 HPACK 压缩的标头表的大小(以字节为单位)。这个内存量将为每个连接分配压缩。较大的值会使用更多内存,但可能会提供更好的压缩。

http2-initial-window-size

65535

流控制窗口大小(以字节为单位),用于控制客户端如何将数据发送到服务器的速度。

http2-max-concurrent-streams

 

在单个连接上可以处于活跃状态的 HTTP/2 流的最大数量。

http2-max-frame-size

16384

最大 HTTP/2 帧大小,以字节为单位。

http2-max-header-list-size

 

服务器准备接受的最大请求标头大小。

max-buffered-request-size

16384

缓冲请求的最大大小(以字节为单位Request)通常不会被缓冲,最常见的情况是在为 POST 请求执行 SSL 重新协商时,并且后数据必须完全缓冲才能执行重新协商。

max-connections

 

并发连接的最大数量。如果在服务器配置中没有设置值,则并发连接数量的限制是 Integer.MAX_VALUE

max-cookies

100

将要解析的最大 Cookie 数量。这用于防止哈希漏洞。

max-header-size

1048576

HTTP 请求标头的最大大小(以字节为单位)。

max-headers

200

将要解析的最大标头数。这用于防止哈希漏洞。

max-parameters

1000

将要解析的最大参数数。这用于防止哈希漏洞。这适用于查询参数和 POST 数据,但不适用于累积数据。因此,您可能具有 max 参数 * 2 总计的参数。

max-post-size

10485760

将接受的发布的最大大小。

no-request-timeout

60000

在容器关闭前,连接可以闲置的时间长度(以毫秒为单位)。

proxy-address-forwarding

false

启用处理 x-forwarded-host 标头和其他 x-forwardederializer 标头,并使用此标头信息来设置远程地址。这应该只在设置这些标头的可信代理后面使用,否则远程用户才能欺骗其 IP 地址。

proxy-protocol

false

是否使用 PROXY 协议来传输连接信息。如果设置为 true,则侦听器使用 PROXY 协议版本 1,如 PROXY 协议版本 1 和 2 规格所定义。这个选项只能为支持同一协议的负载均衡器后面的监听程序启用。

read-timeout

 

以毫秒为单位配置套接字的读取超时。如果给定的时间在读取成功读取的情况下经过一段时间,则套接字的下一个读取将抛出 ReadTimeoutException

receive-buffer

 

接收缓冲区大小。

record-request-start-time

false

是否记录请求开始时间,以允许记录请求时间。这会对性能有小但可衡量的性能影响。

request-parse-timeout

 

解析请求的最大时间(以毫秒为单位)。

require-host-http11

false

要求所有 HTTP/1.1 请求都具有 'Host' 标头。如果请求没有包括此标头,它将被拒绝,并带有 403。

resolve-peer-address

false

启用主机 DNS 查找。

secure

false

如果这是 true,则源自此侦听器的请求将标记为安全,即使请求不使用 HTTPS。

security-realm

 

侦听器的安全域。deprecated :使用 ssl-context 属性直接引用配置的 SSLContext。

send-buffer

 

发送缓冲区大小。

socket-binding

 

侦听器的套接字绑定。

ssl-context

 

引用此监听器使用的 SSLContext。

ssl-session-cache-size

 

活跃的 SSL 会话的最大数量。deprecated :现在可以在 Elytron 安全上下文上配置。

ssl-session-timeout

 

SSL 会话的超时时间(以秒为单位)。deprecated :现在可以在 Elytron 安全上下文上配置。

tcp-backlog

 

使用指定的积压配置服务器。

tcp-keep-alive

 

配置通道以独立于实施的方式发送 TCP keep-alive 消息。

url-charset

UTF-8

URL charset。

verify-client

NOT_REQUESTED

SSL 频道所需的 SSL 客户端身份验证模式。弃用:当 SSLContext 被引用时,应该直接为客户端验证所需的模式配置它。

worker

default

侦听器的 XNIO worker。

write-timeout

 

以毫秒为单位为套接字配置写入超时。如果给定时间没有成功写入,则套接字的下一个写入将抛出 WriteTimeoutException

A.27. Undertow 子系统统计信息

本参考提供了红帽 JBoss 企业应用平台中 undertow 子系统统计信息的各种元素的属性的详细信息。

Expand
表 A.85. AJP-listener 统计
Name描述

bytes-received

此侦听器接收的字节数。

bytes-sent

在此监听器上发送的字节数。

error-count

此侦听器发送的 500 个响应数。

max-processing-time

此监听器上请求所花费的最大处理时间。

processing-time

此侦听器传输的所有请求的总处理时间。

request-count

此侦听器提供的请求数。

Expand
表 A.86. http-listener Statistics
Name描述

bytes-received

此侦听器接收的字节数。

bytes-sent

在此监听器上发送的字节数。

error-count

此侦听器发送的 500 个响应数。

max-processing-time

此监听器上请求所花费的最大处理时间。

processing-time

此侦听器传输的所有请求的总处理时间。

request-count

此侦听器提供的请求数。

Expand
表 A.87. https-listener Statistics
Name描述

bytes-received

此侦听器接收的字节数。

bytes-sent

在此监听器上发送的字节数。

error-count

此侦听器发送的 500 个响应数。

max-processing-time

此监听器上请求所花费的最大处理时间。

processing-time

此侦听器传输的所有请求的总处理时间。

request-count

此侦听器提供的请求数。

A.28. HTTP 方法的默认行为

与之前的 JBoss EAP 版本中的 Web 子系统相比,JBoss EAP 8.0 中的 undertow 子系统具有 HTTP 方法的不同默认行为。下表概述了 JBoss EAP 8.0 中的默认行为。

Expand
表 A.88. HTTP 方法默认行为
HTTP 方法Jakarta Server Pages静态 HTML由文件处理程序的静态 HTML

GET

确定

确定

确定

POST

确定

NOT_ALLOWED

确定

HEAD

确定

确定

确定

PUT

NOT_ALLOWED

NOT_ALLOWED

NOT_ALLOWED

TRACE

NOT_ALLOWED

NOT_ALLOWED

NOT_ALLOWED

DELETE

NOT_ALLOWED

NOT_ALLOWED

NOT_ALLOWED

选项

NOT_ALLOWED

确定

NOT_ALLOWED

注意

对于 servlets,默认行为取决于其实施,但 TRACE 方法除外,其默认行为是 NOT_ALLOWED

A.29. 补救子系统属性

注意

这些表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/wildfly-remoting_4_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能会有所不同。

Expand
表 A.89. 远程属性
属性default描述

worker-read-threads

1

为 remoting worker 创建的读取线程数量。

worker-task-core-threads

4

remoting worker 任务线程池的核心线程数量。

worker-task-keepalive

60

保留非内核移动 worker 任务线程的毫秒数。

worker-task-limit

16384

在拒绝前允许的最大远程 worker 任务数量。

worker-task-max-threads

16

remoting worker 任务线程池的最大线程数。

worker-write-threads

1

为 remoting worker 创建的写入线程数量。

重要

remoting 元素的上述属性已弃用。这些属性现在应使用 io 子系统进行配置。

Expand
表 A.90. 端点属性
属性default描述

auth-realm

 

如果没有指定身份验证回调处理程序,则使用身份验证域。

authentication-retries

3

指定在关闭连接前允许客户端重试身份验证的次数。

authorize-id

 

SASL 授权 ID。如果没有指定身份验证回调处理程序且所选的 SASL 机制需要用户名,则用作身份验证用户名。

buffer-region-size

 

分配的缓冲区区域的大小。

heartbeat-interval

2147483647

连接 heartbeat 的时间间隔(以毫秒为单位)。如果连接在这个时间的出站方向中闲置,则会发送 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

remote

创建 SaslServerSaslClient 时,默认指定的协议是 远程的。此属性可用于覆盖此协议。

send-buffer-size

8192

此端点将通过连接传输的最大缓冲区的大小。

server-name

 

连接的服务器端将其名称传递到初始问候语中的客户端,默认情况下,名称会自动从连接的本地地址发现,也可以使用它覆盖。

transmit-window-size

131072

连接频道的最大窗口大小,以字节为单位。

worker

default

要使用的 worker

注意

在使用管理 CLI 更新 endpoint 元素时,它位于 remoting 元素的配置 下。例如: /subsystem=remoting/configuration=endpoint/

连接器属性

连接器组件具有以下结构:

Expand
表 A.91. 连接器属性
属性default描述

authentication-provider

 

authentication-provider 元素包含用于传入连接的身份验证提供程序的名称。

sasl-authentication-factory

 

引用 SASL 身份验证工厂来保护这个连接器。

sasl-protocol

remote

传递给用于身份验证的 SASL 机制的协议。

security-realm

 

用于此连接器身份验证的相关安全域。

server-name

 

在初始消息交换和基于 SASL 的身份验证中发送的服务器名称。

socket-binding

 

要连接的套接字绑定的名称(或名称)。

ssl-context

 

引用用于此连接器的 SSL 上下文。

Expand
表 A.92. 属性属性
属性default描述

value

 

属性值。

安全属性

安全 组件允许您为连接器配置安全性,但不包含直接配置属性。它可以使用其嵌套组件(如 sasl )进行配置。

Expand
表 A.93. SASL 属性
属性default描述

include-mechanisms

 

可选的 include-mechanisms 元素包含允许的 SASL 机制名称的白名单。不允许此列表中不存在任何机制。

qop

 

可选的嵌套 qop 元素包含以逗号分隔的质量值列表,以降序排列。

此列表的质量值是:

  • Auth: 只进行身份验证
  • auth-int :身份验证,以及完整性保护
  • auth-conf :身份验证,以及完整性保护和机密性保护

reuse-session

false

可选的 nested reuse-session 布尔值元素指定服务器是否应该尝试重复使用之前经过身份验证的会话信息。机制可能也可能不支持这种重复使用,其他因素也会阻止它。

server-auth

false

可选的嵌套 server-auth 布尔值元素指定服务器是否应该向客户端进行身份验证。并非所有机制都支持此设置。

强度

 

可选的嵌套 strength 元素包含以逗号分隔的密码强度值列表,以降序排列。

此列表的密码强度值有:

  • high

SASL-policy 属性

sasl-policy 组件允许您指定用于缩小可用机制集的可选策略,但不包含直接配置属性。它可以使用其嵌套组件(如 策略 )进行配置。

Expand
表 A.94. 策略属性
属性default描述

forward-secrecy

true

可选的嵌套的 forward-secrecy 元素包含一个布尔值,用于指定在会话之间实现转发保密的机制是否需要。forward secrecy 意味着进入一个会话不会自动提供信息来破坏将来的会话。

no-active

true

可选的嵌套的 no-active 元素包含一个布尔值,用于指定是否不允许使用活跃(非字典)攻击的机制。false 允许,true 为 deny。

no-anonymous

true

可选的嵌套 no-anonymous 元素包含一个布尔值,用于指定是否允许接受匿名登录的机制。false 允许,true 为 deny。

no-dictionary

true

可选的嵌套的 no-dictionary 元素包含一个布尔值,它指定了是否允许对被动字典攻击的机制。false 允许,true 为 deny。

no-plain-text

true

可选嵌套的 no-plain-text 元素包含一个布尔值,它指定是否不允许使用简单的普通被动攻击(例如 PLAIN)。false 允许,true 为 deny。

pass-credentials

true

可选的嵌套的 pass-credentials 元素包含一个布尔值,用于指定是否需要传递客户端凭证的机制。

HTTP Connector 属性

http-connector 组件具有以下结构:

Expand
表 A.95. http-connector 属性
属性default描述

authentication-provider

 

authentication-provider 元素包含用于传入连接的身份验证提供程序的名称。

connector-ref

 

undertow 子系统中要连接的连接器的名称(或名称)。

sasl-authentication-factory

 

引用 SASL 身份验证工厂来保护这个连接器。

sasl-protocol

remote

传递给用于身份验证的 SASL 机制的协议。

security-realm

 

用于此连接器身份验证的相关安全域。

server-name

 

在初始消息交换和基于 SASL 的身份验证中发送的服务器名称。

出站连接属性

outbound-connection 组件具有以下结构:

Expand
表 A.96. outbound-connection 属性
属性default描述

uri

 

出站连接的连接 URI。

Expand
表 A.97. 属性属性
属性default描述

value

 

属性值。

注意

以上 属性 与创建连接期间将使用的 XNIO 选项相关。

远程出站连接

remote-outbound-connection 组件具有以下结构:

Expand
表 A.98. remote-outbound-connection 属性
属性default描述

authentication-context

 

引用包含出站连接配置的身份验证上下文实例。

outbound-socket-binding-ref

 

用于确定连接的目的地地址和端口的 outbound-socket-binding 的名称。

protocol

http-remoting

用于远程连接的协议。默认为 http-remoting弃用:出站安全设置应迁移到 authentication-context 定义中。

security-realm

 

引用用于获取密码和 SSL 配置的安全域。弃用:出站安全设置应迁移到 authentication-context 定义中。

username

 

对远程服务器进行身份验证时使用的用户名。弃用:出站安全设置应迁移到 authentication-context 定义中。

本地出站连接属性

local-outbound-connection 组件具有以下结构:

Expand
表 A.99. local-outbound-connection 属性
属性default描述

outbound-socket-binding-ref

 

用于确定连接的目的地地址和端口的 outbound-socket-binding 的名称。

A.30. IO 子系统属性

注意

这些表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/wildfly-io_3_0.xsd 的架构定义文件,以查看 XML 中出现的元素,因为管理模型可能不同。

Expand
表 A.100. Worker 属性
属性default描述

io-threads

 

为 worker 创建的 I/O 线程数量。如果没有指定,线程数量被设置为 CPU 的数量。2。

stack-size

0

堆栈大小(以字节为单位)尝试用于 worker 线程。

task-keepalive

60000

保持非核心任务线程处于活动状态的毫秒数。

task-core-threads

2

核心任务线程池的线程数量。

task-max-threads

 

worker 任务线程池的最大线程数。如果没有指定,则线程的最大数量被设置为 CPU swig 16 的数量,使用 MaxFileDescriptorCount {JMX} 属性(如果设置)。

Expand
表 A.101. buffer-pool 属性
属性default描述
 

buffer-size

 

每个缓冲区片段的大小(以字节为单位)。如果没有指定,则根据系统的可用 RAM 设置大小:

  • 512 字节小于 64 MB RAM
  • 64 MB - 128 MB 的 1024 字节(1 KB)
  • 16384 字节(16 KB),超过 128 MB RAM

有关此属性的性能调整建议,请参阅 JBoss EAP 性能调整中的 Configuring Buffer Pools

buffer-per-slice

 

将较大的缓冲区分成多少分片或部分。与分配多个独立的缓冲区相比,这可能会提高内存效率。如果没有指定,则根据系统的可用 RAM 设置分片数量:

  • 10 用于小于 128 MB RAM
  • 20 用于超过 128 MB RAM

direct-buffers

 

缓冲区池是否使用直接缓冲区,这在很多情况下都会带有 NIO。请注意,有些平台不支持直接缓冲。

A.31. Jakarta Server Faces 模块模板

以下是安装 JBoss EAP 的不同 Jakarta Server Faces 版本时所需的各种 Jakarta Server Faces 模块的示例模板。如需了解完整说明 ,请参阅安装 Jakarta Server Faces 实施

示例: Mojarra Jakarta Server Faces Implementation JAR module.xml
注意

确保为模板中的以下可替换变量使用适当的值:

  • IMPL_NAME
  • VERSION
<module xmlns="urn:jboss:module:1.8" name="com.sun.jsf-impl:IMPL_NAME-VERSION">
    <properties>
        <property name="jboss.api" value="private"/>
    </properties>

    <dependencies>
        <module name="jakarta.faces.api:IMPL_NAME-VERSION"/>
        <module name="javaee.api"/>
        <module name="jakarta.servlet.jstl.api"/>
        <module name="org.apache.xerces" services="import"/>
        <module name="org.apache.xalan" services="import"/>
        <module name="org.jboss.weld.core"/>
        <module name="org.jboss.weld.spi"/>
        <module name="jakarta.xml.rpc.api"/>
        <module name="jakarta.rmi.api"/>
        <module name="org.omg.api"/>
    </dependencies>

    <resources>
        <resource-root path="impl-VERSION.jar"/>
    </resources>
</module>
Copy to Clipboard Toggle word wrap
示例:MyFaces Jakarta Server Faces Implementation JAR module.xml
注意

确保为模板中的以下可替换变量使用适当的值:

  • IMPL_NAME
  • VERSION
<module xmlns="urn:jboss:module:1.8" name="com.sun.jsf-impl:IMPL_NAME-VERSION">
    <properties>
        <property name="jboss.api" value="private"/>
    </properties>

    <dependencies>
        <module name="jakarta.faces.api:IMPL_NAME-VERSION">
            <imports>
                <include path="META-INF/**"/>
            </imports>
        </module>
        <module name="javaee.api"/>
        <module name="jakarta.servlet.jstl.api"/>
        <module name="org.apache.xerces" services="import"/>
        <module name="org.apache.xalan" services="import"/>

        <!-- extra dependencies for MyFaces -->
        <module name="org.apache.commons.collections"/>
        <module name="org.apache.commons.codec"/>
        <module name="org.apache.commons.beanutils"/>
        <module name="org.apache.commons.digester"/>

        <!-- extra dependencies for MyFaces 1.1
        <module name="org.apache.commons.logging"/>
        <module name="org.apache.commons.el"/>
        <module name="org.apache.commons.lang"/> -->
        <module name="jakarta.xml.rpc.api"/>
        <module name="jakarta.rmi.api"/>
        <module name="org.omg.api"/>
    </dependencies>

    <resources>
        <resource-root path="IMPL_NAME-impl-VERSION.jar"/>
    </resources>
</module>
Copy to Clipboard Toggle word wrap
示例: Mojarra Jakarta Server Faces API JAR module.xml
注意

确保为模板中的以下可替换变量使用适当的值:

  • IMPL_NAME
  • VERSION
<module xmlns="urn:jboss:module:1.8" name="jakarta.faces.api:IMPL_NAME-VERSION">
    <dependencies>
        <module name="com.sun.jsf-impl:IMPL_NAME-VERSION"/>
        <module name="jakarta.enterprise.api" export="true"/>
        <module name="jakarta.servlet.api" export="true"/>
        <module name="jakarta.servlet.jsp.api" export="true"/>
        <module name="jakarta.servlet.jstl.api" export="true"/>
        <module name="jakarta.validation.api" export="true"/>
        <module name="org.glassfish.jakarta.el" export="true"/>
        <module name="jakarta.api"/>
        <module name="jakarta.websocket.api"/>
    </dependencies>

    <resources>
        <resource-root path="jsf-api-VERSION.jar"/>
    </resources>
</module>
Copy to Clipboard Toggle word wrap
示例:MyFaces Jakarta Server Faces API JAR module.xml
注意

确保为模板中的以下可替换变量使用适当的值:

  • IMPL_NAME
  • VERSION
<module xmlns="urn:jboss:module:1.8" name="jakarta.faces.api:IMPL_NAME-VERSION">
    <dependencies>
        <module name="jakarta.enterprise.api" export="true"/>
        <module name="jakarta.servlet.api" export="true"/>
        <module name="jakarta.servlet.jsp.api" export="true"/>
        <module name="jakarta.servlet.jstl.api" export="true"/>
        <module name="jakarta.validation.api" export="true"/>
        <module name="org.glassfish.jakarta.el" export="true"/>
        <module name="jakarta.api"/>

        <!-- extra dependencies for MyFaces 1.1
        <module name="org.apache.commons.logging"/>
        <module name="org.apache.commons.el"/>
        <module name="org.apache.commons.lang"/> -->
    </dependencies>

    <resources>
        <resource-root path="myfaces-api-VERSION.jar"/>
    </resources>
</module>
Copy to Clipboard Toggle word wrap
示例: Mojarra Jakarta Server Faces Injection JAR module.xml
注意

确保为模板中的以下可替换变量使用适当的值:

  • IMPL_NAME
  • VERSION
  • INJECTION_VERSION
  • WELD_VERSION
<module xmlns="urn:jboss:module:1.8" name="org.jboss.as.jsf-injection:IMPL_NAME-VERSION">
    <properties>
        <property name="jboss.api" value="private"/>
    </properties>

    <resources>
        <resource-root path="wildfly-jsf-injection-INJECTION_VERSION.jar"/>
        <resource-root path="weld-core-jsf-WELD_VERSION.jar"/>
    </resources>

    <dependencies>
        <module name="com.sun.jsf-impl:IMPL_NAME-VERSION"/>
        <module name="java.naming"/>
        <module name="java.desktop"/>
        <module name="org.jboss.as.jsf"/>
        <module name="org.jboss.as.web-common"/>
        <module name="jakarta.servlet.api"/>
        <module name="org.jboss.as.ee"/>
        <module name="org.jboss.as.jsf"/>
        <module name="jakarta.enterprise.api"/>
        <module name="org.jboss.logging"/>
        <module name="org.jboss.weld.core"/>
        <module name="org.jboss.weld.api"/>

        <module name="jakarta.faces.api:IMPL_NAME-VERSION"/>
    </dependencies>
</module>
Copy to Clipboard Toggle word wrap
示例:MyFaces Jakarta Server Faces Injection JAR module.xml
注意

确保为模板中的以下可替换变量使用适当的值:

  • IMPL_NAME
  • VERSION
  • INJECTION_VERSION
  • WELD_VERSION
<module xmlns="urn:jboss:module:1.8" name="org.jboss.as.jsf-injection:IMPL_NAME-VERSION">
    <properties>
        <property name="jboss.api" value="private"/>
    </properties>

    <resources>
        <resource-root path="wildfly-jsf-injection-INJECTION_VERSION.jar"/>
        <resource-root path="weld-jsf-WELD_VERSION.jar"/>
    </resources>

    <dependencies>
        <module name="com.sun.jsf-impl:IMPL_NAME-VERSION"/>
        <module name="jakarta.api"/>
        <module name="org.jboss.as.web-common"/>
        <module name="jakarta.servlet.api"/>
        <module name="org.jboss.as.jsf"/>
        <module name="org.jboss.as.ee"/>
        <module name="org.jboss.as.jsf"/>
        <module name="jakarta.enterprise.api"/>
        <module name="org.jboss.logging"/>
        <module name="org.jboss.weld.core"/>
        <module name="org.jboss.weld.api"/>
        <module name="org.wildfly.security.elytron"/>

        <module name="jakarta.faces.api:IMPL_NAME-VERSION"/>
    </dependencies>
</module>
Copy to Clipboard Toggle word wrap
示例:MyFaces commons-digester JAR module.xml
注意

务必为模板中的 VERSION 可替换变量使用适当的值。

<module xmlns="urn:jboss:module:1.5" name="org.apache.commons.digester">
    <properties>
        <property name="jboss.api" value="private"/>
    </properties>

    <resources>
        <resource-root path="commons-digester-VERSION.jar"/>
    </resources>

    <dependencies>
        <module name="jakarta.api"/>
        <module name="org.apache.commons.collections"/>
        <module name="org.apache.commons.logging"/>
        <module name="org.apache.commons.beanutils"/>
    </dependencies>
</module>
Copy to Clipboard Toggle word wrap

A.32. JGroups 子系统属性

下表是 jgroups 子系统不同元素的属性。

注意

这些表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/jboss-as-jgroups_5_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能存在不同。

Expand
表 A.102. 主要的 jgroups 属性
属性default描述

default-channel

ee

默认的 JGroups 通道。

default-stack

 

默认的 JGroups 协议堆栈。

频道属性

channel 元素具有以下结构:

频道属性
Expand
表 A.103. 频道属性
属性default描述

cluster

 

JGroups 通道的集群名称。如果未定义,则使用频道的名称。

module

org.wildfly.clustering.server

要从中加载频道服务的模块。

queue

 

JGroups 通道的协议堆栈。

启用统计

false

是否启用统计数据。

stats-enabled

false

是否启用统计数据。deprecated :改为使用 statistics-enabled 属性

堆栈属性

stack 元素具有以下结构:

堆栈属性
Expand
表 A.104. 堆栈属性
属性default描述

启用统计

false

指明堆栈中的所有协议是否将收集统计数据。

协议属性

有关常用协议的列表,请参见 JGroups 协议 部分。

Expand
表 A.105. 协议属性
属性default描述

module

org.jgroups

用于解析协议类型的模块。

属性

 

此协议的属性。

启用统计

false

指明此协议是否将收集统计信息,覆盖堆栈配置。

转发属性
Expand
表 A.106. 转发属性
属性default描述

module

org.jgroups

用于解析协议类型的模块。

属性

 

此协议的属性。

站点(site)

 

本地站点的名称。

启用统计

false

指明此协议是否将收集统计信息,覆盖堆栈配置。

远程站点属性

Expand
表 A.107. 远程站点属性
属性default描述

channel

 

用于与此远程站点通信的桥接频道名称。

cluster

 

到此远程站点的桥接频道的集群名称。弃用:使用明确定义的 频道

queue

 

用于从中创建网桥到此远程站点的堆栈。弃用:使用明确定义的 频道

传输属性
Expand
表 A.108. 传输属性
属性default描述

default-executor

 

线程池执行器来处理进入的信息。已弃用:配置预定义的 默认 线程池

diagnostics-socket-binding

 

此协议层的诊断套接字绑定规格,用于指定用于通信的 IP 接口和端口。

机器

 

此节点的机器或主机标识符。由 Infinispan 的拓扑感知一致哈希使用。

module

org.jgroups

用于解析协议类型的模块。

OOB-executor

 

线程池执行器来处理进入外带消息。弃用:改为配置预定义的 oob 线程池

属性

 

此传输的属性。

rack

 

rack,如此节点的服务器机架标识符。由 Infinispan 的拓扑感知一致哈希使用。

shared

false

如果为 true,则底层传输由使用此堆栈的所有频道共享。弃用:配置频道的 分叉,而不是

站点(site)

 

站点,如数据中心、此节点的标识符。由 Infinispan 的拓扑感知一致哈希使用。

socket-binding

 

此协议层的套接字绑定规范,用于指定用于通信的 IP 接口和端口。

启用统计

false

指明此协议是否将收集统计信息,覆盖堆栈配置。

thread-factory

 

用于处理异步传输特定任务的线程工厂。已弃用:配置预定义的 内部 线程池

timer-executor

 

线程池执行器来处理与协议相关的时间任务。已弃用:配置预定义的 计时器 线程池

thread-pool 属性

Expand
表 A.109. thread-pool 属性
属性default描述

keepalive-time

5000L

池线程应在闲置时保持运行的时间长度。如果没有指定,则线程将运行,直到 executor 关闭为止。

max-threads

4

最大线程池大小。

min-threads

2

核心线程池大小,它小于 max-threads。如果未定义,核心线程池大小与 max-threads 相同。

queue-length

500

队列长度。

A.33. JGroups 协议

Expand
协议协议类型描述

ASYM_ENCRYPT

Encryption

使用存储在集群的协调者中的 secret 密钥来加密群集成员之间的消息。

AUTH

身份验证

为群集成员提供一层身份验证。

azure.AZURE_PING

Discovery(发现)

支持使用 Microsoft Azure 的 blob 存储进行节点发现。

FD_ALL

故障检测

基于简单的心跳协议提供故障检测。

FD_SOCK

故障检测

根据群集成员之间创建的 TCP 套接字环提供故障检测。

JDBC_PING

Discovery(发现)

使用共享数据库来发现群集成员,其中成员写入其地址。

MERGE3

合并

在集群分割时,将子集群合并在一起。

MFC

流控制

在发送者和所有群集成员之间提供多播流控制。

MPING

Discovery(发现)

发现具有 IP 多播的群集成员。

pbcast.GMS

Group Membership

处理组成员资格,包括加入集群的新成员,现有成员保留请求,为崩溃成员保留 SUSPECT 消息。

pbcast.NAKACK2

消息传输

确保消息可靠性和顺序,确保按发送者发送的顺序接收由其中一个发送方发送的所有消息。

pbcast.STABLE

消息稳定性

删除所有成员可见的消息。

PING

Discovery(发现)

成员的初始发现,支持动态发现群集成员。

SASL

身份验证

使用 SASL 机制为群集成员提供一层身份验证。

SYM_ENCRYPT

Encryption

使用共享密钥存储来加密群集成员之间的消息。

S3_PING

Discovery(发现)

使用 Amazon S3 发现初始成员。

TCPGOSSIP

Discovery(发现)

使用外部 gossip 路由器发现群集成员。

TCPPING

Discovery(发现)

包含组成集群的群集成员地址的静态列表。

UFC

流控制

在发送者和所有群集成员之间提供单播流控制

UNICAST3

消息传输

确保单播消息的消息可靠性和顺序,确保按发送者的顺序接收由一发送者发送的所有消息。

VERIFY_SUSPECT

故障检测

验证怀疑成员是否已被 ping 最后一个时间在驱除它之前被 ping 结束。

通用协议属性

所有协议都可以访问以下属性:

Expand
表 A.110. 协议属性
属性default描述

module

org.jgroups

用于解析协议类型的模块。

属性

 

此协议的属性。

启用统计

false

是否启用统计数据。

身份验证协议

身份验证协议用于执行身份验证,主要负责确保只有经过身份验证的用户可以加入集群。这些协议位于 GMS 协议下方,以便他们可以侦听加入群集的请求。

AUTH 属性

虽然 AUTH 协议不包含额外的属性,但它必须有一个令牌定义为子元素。

注意

在定义此协议时,会使用 auth-protocol 元素,而不是 protocol 元素。

令牌类型

当使用 Elytron 提高安全性时,建议使用以下身份验证令牌之一。这些身份验证令牌有意设计用于 Elytron,可能不会用于旧的安全配置。

Expand
表 A.111. Elytron 令牌类型
令牌描述

cipher-token

转换共享 secret 的身份验证令牌。RSA 是用于转换的默认算法。

digest-token

转换共享 secret 的身份验证令牌。SHA-256 是用于转换的默认算法。

plain-token

没有额外转换为共享 secret 的身份验证令牌。

以下身份验证令牌从 JGroups 继承,并有权在需要身份验证的任何配置中使用。

Expand
表 A.112. JGroups 令牌类型
令牌描述

MD5Token

使用 MD5 或 SHA 哈希加密共享 secret 的身份验证令牌。MD5 是用于加密的默认算法。

SimpleToken

没有额外转换为共享 secret 的身份验证令牌。此令牌不区分大小写,在决定字符串是否匹配时不考虑。

X509Token

使用 X509 证书加密共享 secret 的身份验证令牌。

SASL 属性
Expand
表 A.113. SASL 属性
属性default描述

client_callback_handler

 

节点充当客户端时使用的 CallbackHandler 的类名称。

client_name

 

节点充当客户端时使用的名称。如果使用 JAAS 登录模块,此名称也会用于获取主题。

client_password

 

节点充当客户端时使用的密码。如果使用 JAAS 登录模块,也使用此密码来获取主题。

login_module_name

 

用作创建 SASL 客户端和服务器的主题的 JAAS 登录模块名称。此属性仅需要某些 mech 值,如 GSSAPI。

mech

 

SASL 身份验证机制的名称。此名称可以是本地 SASL 提供程序支持的任何机制,并且 JDK 提供 CRAM-MD5DIGEST-MD5GSSAPINTLM

sasl_props

 

定义的属性

server_callback_handler

 

节点充当服务器时使用的 CallbackHandler 的类名称。

server_name

 

完全限定服务器名称。

timeout

5000

等待响应挑战的毫秒数。

发现协议

以下协议用于查找集群的初始成员资格,然后可用于确定当前的协调器。发现协议列表如下。

AZURE_PING 属性
Expand
表 A.114. AZURE_PING 属性
属性default描述

container

 

用于 PING 数据的 blob 容器的名称。这必须是有效的 DNS 名称。

storage_access_key

 

存储帐户的 secret 访问密钥。

storage_account_name

 

包含 blob 容器的 Microsoft Azure 存储帐户的名称。

JDBC_PING 属性
Expand
表 A.115. JDBC_PING 属性
属性default描述

data-source

 

数据源引用,改为使用 connection 和 JNDI 查找属性。

注意

在定义 JDBC_PING 协议时,使用 jdbc-protocol 元素而不是 protocol 元素。

S3_PING 属性
Expand
表 A.116. S3_PING 属性
属性default描述

access_key

 

用于访问 S3 存储桶的 Amazon S3 访问密钥。

主机

s3.amazonaws.com

S3 Web 服务的目的地。

位置

 

要使用的 Amazon S3 存储桶的名称。bucket 必须存在并使用唯一名称。

pre_signed_delete_url

 

用于 DELETE 操作的预签名 URL。

port

  • 443 如果 use_ssltrue
  • 80,如果 use_sslfalse

Web 服务侦听的端口。

pre_signed_put_url

 

用于 PUT 操作的预签名 URL。

prefix

 

如果设置了,并且设置了 位置,请将存储桶名称定义为 PREFIX-LOCATION。如果设置,并且该存储桶不存在于指定的 PREFIX-LOCATION 中,则存储桶名称将变为 PREFIX,后跟一个随机 UUID。

secret_access_key

 

用于访问 S3 存储桶的 Amazon S3 secret 访问密钥。

use_ssl

true

决定在联系主机和端口组合时使用 SSL。

TCPGOSSIP 属性
Expand
表 A.117. TCPGOSSIP 属性
属性default描述

socket-binding

 

此协议层的套接字绑定规格。deprecated: 使用 socket-bindings 替代。

socket-bindings

 

此协议的出站套接字绑定。

注意

在定义 TCPGOSSIP 协议时,会使用 socket-discovery-protocol 元素而不是 protocol 元素。

TCPPING 属性
Expand
表 A.118. TCPPING 属性
属性default描述

socket-binding

 

此协议层的套接字绑定规格。deprecated: 使用 socket-bindings 替代。

socket-bindings

 

此协议的出站套接字绑定。

注意

在定义 TCPPING 协议时,会使用 socket-discovery-protocol 元素,而不是 protocol 元素。

加密协议

以下协议用于保护通信堆栈:加密基于集群的所有成员的共享 secret 密钥。使用 SYM_ENCRYPT 或公钥交换(使用 A SYM_ENCRYPT )时,此密钥可以从共享密钥存储获取。在定义以下协议时,生成的 XML 中会创建一个 encrypt-protocol 元素。

注意

如果使用 ASYM_ENCRYPT,则同一堆栈必须定义有 AUTH 协议。使用 SYM_ENCRYPTAUTH 协议是可选的。

ASYM_ENCRYPT 属性
Expand
表 A.119. ASYM_ENCRYPT 属性
属性default描述

key-alias

 

指定密钥存储中的加密密钥别名。

key-credential-reference

 

从密钥存储获取加密密钥所需的凭据。

key-store

 

对包含加密密钥的密钥存储的引用。

SYM_ENCRYPT 属性
Expand
表 A.120. SYM_ENCRYPT 属性
属性default描述

key-alias

 

指定密钥存储中的加密密钥别名。

key-credential-reference

 

从密钥存储获取加密密钥所需的凭据。

key-store

 

对包含加密密钥的密钥存储的引用。

失败检测协议

以下协议用于探测集群的成员,以确定它们是否仍处于活动状态。这些协议没有超出通用属性的任何其他属性。

  • FD_ALL
  • FD_SOCK
  • VERIFY_SUSPECT
流控制协议

以下协议负责流控制,或将消息发件人率调整为最慢的接收器的过程。如果发送者以比接收方快的速度发送消息,则接收方将按队列或丢弃消息,从而导致重新传输。这些协议没有超出通用属性的任何其他属性。

  • MFC - 多播流控制
  • UFC - 单播流控制
组成员协议

直播.GMS 协议负责加入群集的新成员、离开集群的现有成员,以及怀疑崩溃的成员。此协议没有超出通用属性的任何其他属性。

合并协议

如果集群被分割,MERGE3 协议负责将子集群合并在一起。虽然此协议负责将群集成员合并回一起,但这不会合并集群的状态。应用负责处理回调以合并状态。此协议没有超出通用属性的任何其他属性。

消息稳定性

pbcast.STABLE 协议负责垃圾回收集群所有成员可见的消息。此协议启动包含给定成员的消息号的稳定消息,称为摘要。当集群的所有成员收到其他摘要后,可能会从重新传输表中删除消息。此协议没有超出通用属性的任何其他属性。

可靠的消息传输

以下协议为发送到集群中的所有节点的消息提供可靠的消息交付和 FIFO 属性。可靠的发送意味着发送者不会丢失任何消息,因为所有消息都会被编号,并在未收到序列号时发送重新传输请求。这些协议没有超出通用属性的任何其他属性。

  • pbcast.NAKACK2
  • pbcast.UNICAST3
弃用的协议

以下协议已弃用,已被仅包含类名称的协议替代。例如,协议名称将是 ASYM_ENCRYPT,而不是指定 org.jgroups.protocols.ASYM_ENCRYPT

  • org.jgroups.protocols.ASYM_ENCRYPT
  • org.jgroups.protocols.AUTH
  • org.jgroups.protocols.JDBC_PING
  • org.jgroups.protocols.SYM_ENCRYPT
  • org.jgroups.protocols.TCPGOSSIP
  • org.jgroups.protocols.TCPPING

A.34. Apache HTTP Server mod_cluster 指令

mod_cluster 连接器是基于 Apache HTTP 服务器的负载平衡器。它使用通信通道将来自 Apache HTTP 服务器的请求转发到一组应用服务器节点。以下指令可以设置为配置 mod_cluster。

注意

不需要使用 ProxyPass 指令,因为 mod_cluster 会自动配置必须转发到 Apache HTTP 服务器的 URL。

Expand
表 A.121. mod_cluster 指令
指令描述

CreateBalancers

定义如何在 Apache HTTP 服务器 VirtualHosts 中创建负载均衡器。这允许诸如: ProxyPass /balancer://mycluster1/ 的指令。

  • 0 :创建 Apache HTTP 服务器中定义的所有 VirtualHosts
  • 1: 不要创建 balancer (至少需要一个 ProxyPassProxyMatch 来定义负载均衡器名称)
  • 2: 仅创建主服务器 (默认)

UseAlias

检查别名是否与服务器名称对应。

  • 0 :忽略别名 (默认)
  • 1: 检查别名

LBstatusRecalTime

负载平衡逻辑重新计算节点状态的时间间隔(以秒为单位)。

默认: 5 秒

WaitBeforeRemove

httpd 忘记删除节点前的时间(以秒为单位)。

默认:10 秒

ProxyPassMatch/ProxyPass

ProxyPassMatch 和 ProxyPass 是 mod_proxy 指令,使用 ! 而不是后端 URL 时,防止路径中的 reverse-proxy。这用于允许 Apache HTTP 服务器提供静态内容。例如: ProxyPassMatch ^(/ message\.gif)$ !这个示例允许 Apache HTTP 服务器直接提供 .gif 文件。

 
注意

由于 JBoss EAP 8.0 中会话的性能优化,不支持配置 hot-standby 节点。

mod_manager

在所有情况下,mod_manager 指令的上下文都是 VirtualHost,除非另有提及。服务器配置 上下文意味着 指令必须在 VirtualHost 配置之外。如果没有,则会显示错误消息,并且 Apache HTTP 服务器不会启动。

Expand
表 A.122. mod_manager 指令
指令描述

EnableMCPMReceive

允许 VirtualHost 从节点接收 MCPM。在 Apache HTTP 服务器配置中包含 EnableMCPMReceive,以允许 mod_cluster 正常工作。将它保存在配置广告的 VirtualHost 中。

 

MemManagerFile

mod_manager 用来存储配置的基础名称,为共享内存或锁定的文件生成密钥。这必须是绝对路径名;如果需要,将创建目录。建议这些文件放置在本地驱动器中,而不是 NFS 共享。上下文:服务器配置

$server_root/logs/

Maxcontext

mod_cluster 支持的最大上下文数。上下文:服务器配置

默认: 100

Maxnode

mod_cluster 支持的最大节点数。上下文:服务器配置

默认 :20

Maxhost

mod_cluster 支持的最大主机数量或别名。它还包括最大负载均衡器数量。上下文:服务器配置

默认 :20

Maxsessionid

存储在 mod_cluster-manager 处理程序中的活跃会话数。当 mod_cluster 在 5 分钟内从会话接收任何信息时,会话处于不活跃状态。上下文:服务器配置.此字段仅用于演示和调试目的。

0 :逻辑不会被激活。

MaxMCMPMaxMessSize

来自其他 Max 指令的最大 MCMP 消息大小

从其他 Max 指令计算。最少: 1024

ManagerBalancerName

当 JBoss EAP 实例不提供负载均衡器名称时,要使用的平衡名称。

mycluster

PersistSlots

告知 mod_slotmem 在文件中持久保留节点、别名和上下文。上下文:服务器配置

CheckNonce

使用 mod_cluster-manager 处理程序,切换 非ce 的检查。

on/off Default: on - Nonce checked

AllowDisplay

mod_cluster-manager 主页面上切换额外的显示。

on/off Default: off - 仅会显示版本

AllowCmd

允许使用 mod_cluster-manager URL 的命令。

on/off 默认: on - 允许的命令

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>
Copy to Clipboard Toggle word wrap

on/off 默认值:off

注意

访问 httpd.conf 中定义的位置时:

  • Transfer :对发送到后端服务器的 POST 数据相对应。
  • 连接 :与请求 mod_cluster 状态页面时处理的请求数相对应。
  • Num_sessions:Corresponds 变为 active 会话 mod_cluster 报告的数量(在过去 5 分钟内有请求)。当 Maxsessionid 为零且仅用于演示和调试目的时,此字段不会显示。

A.35. modcluster 子系统属性

modcluster 子系统具有以下结构:

load-provider=dynamic 资源允许您配置因素,如 CPU、会话、堆、内存和权重来确定负载均衡行为。

load-provider=simple 资源仅允许将静态常量设置为 factor 属性。当用户不需要动态或复杂的规则来负载平衡传入的 HTTP 请求时,这可帮助。

注意

这些表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/jboss-as-mod-cluster_3_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能会有所不同。

Expand
表 A.123. 代理配置选项
属性default描述

advertise

true

是否启用基于多播的广告机制。

advertise-security-key

 

它是 httpd 实例和侦听 httpd 实例的 JBoss EAP 服务器之间的共享机密。

advertise-socket

 

要注册的反向代理上的负载均衡器名称。

auto-enable-contexts

true

如果设置为 false,则上下文将在反向代理中注册为 disabled。您可以使用 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 中清空数据包前等待的时间。max 值为 2,147,483,647

listener

 

将注册到反向代理的 Undertow 侦听器的名称。

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 应用取消部署前不要排空会话。

load-provider=simple

 

如果没有动态加载提供程序,要使用的负载提供程序。它为每个群集成员分配 1 的负载因子,并在不应用负载平衡算法的情况下平均分发工作。

smax

-1

httpd 中软最大闲置连接数。

socket-timeout

20

在超时前,等待 httpd 代理到 MCMP 命令的响应的秒数,并将代理标记为错误。

ssl-context

 

对 mod_cluster 使用的 SSLContext 的引用。

status-interval

10

从应用服务器发送到反向代理的 STATUS 消息的秒数。允许的值介于 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 中等待可用工作程序处理请求的超时。允许的值介于 -12,147,483,647 之间。

Expand
表 A.124. load-provider=dynamic Configuration Options
属性default描述

decay

2

标语。

history

9

历史记录。

initial-load

0

节点报告的初始负载。有效范围为 0-1000 表示最大负载。

此属性有助于逐渐增加新加入节点的负载值,以避免在加入集群时过载。

您可以通过将值设置为 -1 来禁用此行为。禁用后,节点会报告负载值 100,表示它在加入集群时没有负载。

Expand
表 A.125. custom-load-metric Attribute Options
属性default描述

capacity

1.0

指标的容量。

class

 

自定义指标的类名称。

属性

 

指标的属性。

weight

1

指标的权重。

Expand
表 A.126. Load-metric Attribute Options
属性default描述

capacity

1.0

指标的容量。

属性

 

指标的属性。

type

 

指标的类型。有效值为 cpu,mem,heap,sessions,receive-traffic,send-traffic, requests ,requests, 或 busyness.

weight

1

指标的权重。

Expand
表 A.127. SSL 属性选项
属性default描述

ca-certificate-file

 

证书颁发机构。

ca-revocation-url

 

证书颁发机构撤销列表。

certificate-key-file

${user.home}/.keystore

证书的密钥文件。

cipher-suite

 

允许的密码套件。

key-alias

 

密钥别名。

password

changeit

密码.

protocol

TLS

启用的 SSL 协议。

A.36. 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 设置。您可以在负载均衡器设置本身中覆盖模板。

Expand
表 A.128. 全局属性
属性Description

worker.list

以逗号分隔的 worker 名称列表,它们将供 mod_jk 使用。

Expand
表 A.129. 强制指令
属性Description

type

worker 的类型。默认类型是 ajp13。其他可能的值有 ajp14lbstatus。有关这些指令的详情请参考 Apache Tomcat Connectors 参考,网址为 https://tomcat.apache.org/connectors-doc/reference/workers.html

Expand
表 A.130. 负载均衡指令
属性Description

balance_workers

指定负载均衡器必须管理的 worker 节点。您可以多次将指令用于同一负载均衡器。它由以逗号分隔的 worker 节点名称列表组成。

sticky_session

指定来自同一会话的请求始终路由到同一 worker。默认值为 1,表示启用了粘性会话。要禁用粘性会话,请将其设为 0。除非所有请求真正无状态,否则通常应启用粘性会话。

Expand
表 A.131. 连接指令
属性Description

主机

后端服务器的主机名或 IP 地址。后端服务器必须支持 ajp 协议堆栈。默认值为 localhost

port

侦听定义的协议请求的后端服务器实例的端口号。默认值为 8009,这是 AJP13 worker 的默认侦听端口。AJP14 worker 的默认值为 8011

ping_mode

针对网络状态探测连接的条件。该探测使用空的 AJP13 数据包进行 CPing,并且需要 CPong 响应。使用指令标志组合指定条件。标志不会用逗号或任何空格分开。ping_mode 可以是 C、P、I 和 A 的任意组合。

  • C - 连接.在连接到服务器后,探测一次连接。使用 connect_timeout 的值指定超时。否则,会使用 ping_timeout 的值。
  • P - 后期.在将每个请求发送到服务器之前探测连接。使用 prepost_timeout 指令指定超时。否则,会使用 ping_timeout 的值。
  • i - 间隔.以 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
Copy to Clipboard Toggle word wrap

Apache mod_jk 的更多配置详情不在本文档的讨论范围之内,并可在 Apache 文档中找到

A.37. 安全管理器子系统属性

security-manager 子系统本身没有可配置的属性,但它有一个具有可配置属性的子资源: deployment-permissions=default

注意

此表中的属性名称会在管理模型中出现时列出,例如使用管理 CLI 时。请参阅位于 EAP_HOME/docs/schema/wildfly-security-manager_1_0.xsd 的 schema 定义文件,以查看 XML 中出现的元素,因为管理模型可能会有所不同。

Expand
表 A.132. deployment-permissions 配置选项
属性描述

maximum-permissions

可授予部署或 JAR 的最大权限集。

minimum-permissions

要授予部署或 JAR 的最小权限集。

A.38. 从 JBoss Core Services 安装 OpenSSL

JBoss Core Services OpenSSL 文件可以从 ZIPRPM 发行版安装。根据您的安装方法,按照以下步骤操作。

注意

在 Red Hat Enterprise Linux 8 中,支持标准系统 OpenSSL,因此不再需要从 JBoss Core Services 安装 OpenSSL。

使用 JBoss Core Services OpenSSL ZIP 文件发布
注意

ZIP 存档中的 libs/ 目录的路径是 jbcs-openssl-VERSION/openssl/lib (64) Linux 和 jbcs-openssl-VERSION/openssl/bin

  1. 从与您的操作系统和架构相关的 Software Downloads 页面下载 OpenSSL 软件包。
  2. 将下载的 ZIP 文件提取到安装目录中。
  3. 通知 JBoss EAP,在哪里查找 OpenSSL libaries。

    您可以使用以下任一方法进行此操作。在以下每个命令中,请务必将 JBCS_OPENSSL_PATH 替换为 JBoss Core Services OpenSSL 库的路径,例如 /opt/rh/jbcs-httpd24/root/usr/lib64

    • 您可以使用以下参数将 OpenSSL 路径添加到 standalone.confdomain.conf 配置文件中的 JAVA_OPTS 变量。

      JAVA_OPTS="$JAVA_OPTS -Dorg.wildfly.openssl.path=JBCS_OPENSSL_PATH
      Copy to Clipboard Toggle word wrap
    • 您可以使用以下管理 CLI 命令定义指定 OpenSSL 路径的系统属性。

      /system-property=org.wildfly.openssl.path:add(value=JBCS_OPENSSL_PATH)
      Copy to Clipboard Toggle word wrap
      重要

      无论您使用什么方法,都必须执行服务器重启才能使 JAVA_OPTS 值或系统属性生效。服务器重新加载并不够。

使用 JBoss Core Services OpenSSL RPM 分发
  1. 确定系统已注册到 JBoss Core Services 频道:

    1. 为您的操作系统版本和架构确定 JBoss Core Services CDN 存储库名称:

      • RHEL 6: jb-coreservices-1-for-rhel-6-server-rpms
      • RHEL 7: jb-coreservices-1-for-rhel-7-server-rpms
    2. 在系统中启用存储库:

      # subscription-manager repos --enable REPO_NAME
      Copy to Clipboard Toggle word wrap
    3. 确保看到以下信息:

      Repository REPO_NAME is enabled for this system.
      Copy to Clipboard Toggle word wrap
  2. 从此频道安装 OpenSSL:

    # yum install jbcs-httpd24-openssl
    Copy to Clipboard Toggle word wrap
  3. 安装完成后,JBCS OpenSSL 库将在 /opt/rh/jbcs-httpd24/root/usr/lib64 中提供,或者仅为 x86 架构上的 /opt/rh/jbcs-httpd24/root/usr/lib
  4. 通知 JBoss EAP,在哪里查找 OpenSSL libaries。

    您可以使用以下任一方法进行此操作。在以下每个命令中,请务必将 JBCS_OPENSSL_PATH 替换为 JBoss Core Services OpenSSL 库的路径,例如 /opt/rh/jbcs-httpd24/root/usr/lib64

    • 您可以为服务配置文件中的 eap7-standaloneeap7-domain 设置更新 WILDFLY_OPTS 变量。

      WILDFLY_OPTS="$WILDFLY_OPTS -Dorg.wildfly.openssl.path=JBCS_OPENSSL_PATH"
      Copy to Clipboard Toggle word wrap
    • 您可以使用以下管理 CLI 命令定义指定 OpenSSL 路径的系统属性。

      /system-property=org.wildfly.openssl.path:add(value=JBCS_OPENSSL_PATH)
      Copy to Clipboard Toggle word wrap
      重要

      无论您使用什么方法,都必须执行服务器重启来使 WILDFLY_OPTS 值或系统属性生效。服务器重新加载并不够。

A.39. 配置 JBoss EAP 以使用 OpenSSL

您可以将 JBoss EAP 配置为使用 OpenSSL 的方法有多种:

  • 您可以重新配置 elytron 子系统,以提供 OpenSSL 优先级,以便在所有情况下都使用它。

    注意

    虽然 OpenSSL 安装在 elytron 子系统中,但它不是默认的 TLS 供应商。

    /subsystem=elytron:write-attribute(name=initial-providers, value=combined-providers)
    /subsystem=elytron:undefine-attribute(name=final-providers)
    
    reload
    Copy to Clipboard Toggle word wrap
  • elytron 子系统中,OpenSSL 供应商也可以在 ssl-context 资源中指定。这样,可以逐个情况选择 OpenSSL 协议,而不是使用默认优先级。

    要创建 ssl-context 资源并使用基于 Elytron 的 SSL/TLS 配置中的 OpenSSL 库,请使用以下命令。

    /subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=localhost-manager, trust-manager=ca-manager, provider-name=openssl)
    
    reload
    Copy to Clipboard Toggle word wrap
  • 在旧的 security 子系统 SSL/TLS 配置中使用 OpenSSL 库:

    /core-service=management/security-realm=ApplicationRealm/server-identity=ssl:write-attribute(name=protocol,value=openssl.TLSv1.2)
    
    reload
    Copy to Clipboard Toggle word wrap

    可以使用的不同 OpenSSL 协议有:

    • openssl.TLS
    • openssl.TLSv1
    • openssl.TLSv1.1
    • openssl.TLSv1.2

JBoss EAP 将自动尝试搜索系统上的 OpenSSL 库并使用它们。您还可以在 JBoss EAP 启动过程中使用 org.wildfly.openssl.path 属性指定自定义 OpenSSL 库位置。仅支持 JBoss Core Services 提供的 OpenSSL 库版本 1.0.2 或更高版本。

如果正确载入 OpenSSL,您将在 JBoss EAP 启动过程中在 server.log 中看到一条消息,如下所示:

15:37:59,814 INFO [org.wildfly.openssl.SSL] (MSC service thread 1-7) WFOPENSSL0002 OpenSSL Version OpenSSL 1.0.2k-fips 23 Mar 2017
Copy to Clipboard Toggle word wrap

A.40. 验证时间方法比较

您可以比较 validate-on-matchbackground-validation 方法的不同方面,以确定适合配置数据库连接验证的方法。

下表包括验证时间方法的比较列表:

Expand
表 A.133. 验证时间方法的比较列表

比较方面

validate-on-match 方法

background-validation 方法

可靠性

使用每个数据库连接前, validate-on-match 方法立即验证。这意味着,执行验证来测试从池中签出供应用使用的连接。

background-validation 方法不太可靠,因为连接可能会在定期后台验证和验证连接相关的时间之间失败。

当后台验证方法频繁运行时,仅针对池中的那些连接执行验证,这些验证不会被应用保留给使用。这也意味着不会执行任何验证来测试从池中签出的连接以供使用。

性能取决于系统、网络性能以及任何连接问题的时间和范围

在使用 validate-on-match 请求连接时,保持闲置长时间的系统用户更有可能看到短暂或更长的延迟。

具有效率更高验证机制的系统用户,如 JDBC 4 验证机制,在使用 validate-on-match 时可能会注意到较少的延迟。如果系统很少闲置且连接不太可能超时,则这是 true。

在影响池中大多数或所有连接的大量中断后,使用 validate-on-match 配置的数据源用户更有可能在获取连接时遇到延迟。这是因为,在用户等待连接时,损坏的连接会被迭代验证和被驱除。

在使用 background-validation 请求连接时,保持闲置长时间的系统用户不太可能看到短暂或更长的延迟。

具有效率更高验证机制的系统用户(如 JDBC 4 验证机制)在使用 background-validation 时可能会注意到较少的延迟。如果系统很少闲置且连接不太可能超时,则这是 true。

在影响池中大多数或所有连接的大量中断后,配置了 后台验证 的数据源用户更有可能遇到需要多次返回并重新尝试的连接。

容错的编码

如果出现任何错误,应用程序逻辑在使用 validate-on-match 时仍然保持不变,因为即使应用从池中获取连接,连接也可能是外部终止。

使用 validate-on-match 时,损坏的连接不太可能存在。这是因为 validate-on-match 会在使用前立即对连接执行验证。

如果出现任何错误,应用程序逻辑在使用 background-validation 时保持不变,因为即使应用从池中获取了连接,连接可以在任何点上终止。

使用 后台验证时,损坏的连接可能会存在

A.41. 受管域参考

您可以使用以下资源配置作为受管域运行的 JBoss EAP。

服务器属性和子资源

服务器需要以下属性和子资源:

  • Name : 服务器的名称
  • :来自域模型的服务器组名称。

服务器包括以下可选属性:

  • Auto-start :主机控制器启动时是否应启动此服务器。
  • socket-binding-default-interface :此服务器的套接字绑定组默认接口。
  • socket-binding-group :此服务器所属的套接字绑定组。
  • socket-binding-port-offset :将偏移添加到此服务器的套接字绑定组给出的端口值中。
  • update-auto-start-with-server-status :使用服务器的状态更新 auto-start 属性。

服务器组包括以下子资源:

  • Interface : 完全指定的命名网络接口列表,可用于服务器。
  • JVM :此服务器的 JVM 设置。如果未声明,则设置将从父服务器组或主机继承。
  • Path: 指定文件系统路径的列表。
  • SSL : 当服务器实例连接回其主机控制器时,用于 SSL/TLS 配置。
  • system-property :此服务器上要设置的系统属性列表。
服务器组属性和子资源

服务器组需要以下子资源:

  • Name :服务器组名称。
  • Profile: 服务器组配置文件名称。
  • socket-binding-group :用于组中的服务器的默认套接字绑定组。这可以基于每个服务器覆盖。

服务器组包括以下可选属性:

  • graceful-startup :在服务器完全启动前,安全地启动服务器、排队或完全拒绝传入的请求。默认情况下为 true
  • management-subsystem-endpoint :将 设置为 true,使属于服务器组的服务器使用其 remoting 子系统中的端点重新连接到主机控制器。必须存在 remoting 子系统才能正常工作。
  • socket-binding-default-interface :此服务器的套接字绑定组默认接口。
  • socket-binding-port-offset :将默认偏移添加到套接字绑定组给出的端口值。

服务器组包括以下子资源:

  • deployment-overlay :此服务器组中定义的部署覆盖和部署之间的链接。
  • Deployment :要部署到组中的服务器上的部署内容。
  • JVM :组中所有服务器的默认 JVM 设置。主机控制器将这些设置与 host.xml 中提供的任何其他配置合并,以派生用于启动服务器的 JVM 的设置。
  • system-property :组中要设置的系统属性。





更新于 2025-05-30

法律通告

Copyright © 2025 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.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat