14.2. 事务管理


14.2.1. 浏览和管理事务

管理 CLI 支持浏览和操作事务记录的功能。此功能由 JBoss EAP 的 TM 和管理 API 之间的交互提供。

TM 将每个待处理的事务和参与者有关的信息存储在名为对象存储的持久性存储中。管理 API 将对象存储作为名为 log-store 的资源公开。探测 操作读取事务日志,并为每个记录创建一个节点路径。每当您需要刷新 日志存储 时,您可以手动调用 探测 操作。正常情况下,事务日志会显示并快速消失。

刷新日志存储

以下命令刷新服务器组的日志存储,该存储在受管域中使用配置集 默认。对于单机服务器,请从命令中删除 profile=default

/profile=default/subsystem=transactions/log-store=log-store:probe
查看所有准备的交易

要查看所有准备的事务,首先刷新日志存储(请参阅 刷新日志存储),然后运行以下命令,该命令类似于文件系统 ls 命令。

ls /profile=default/subsystem=transactions/log-store=log-store/transactions

或者

/host=master/server=server-one/subsystem=transactions/log-store=log-store:read-children-names(child-type=transactions)

显示每个事务及其唯一标识符。单个操作可以针对单个事务运行(请参阅 管理事务)。

14.2.1.1. 管理交易

查看事务的属性

要查看有关事务的信息,如 JNDI 名称、EIS 产品名称和版本或其状态,请使用 read-resource 操作。

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:read-resource
查看 Transaction Participant 的详情

每个事务日志包含一个子元素,称为 参与者。使用此元素的 read-resource 操作来查看参与事务的详细信息。参与者通过其 JNDI 名称来标识。

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=java\:\/JmsXA:read-resource

结果可能类似如下:

{
   "outcome" => "success",
   "result" => {
       "eis-product-name" => "ActiveMQ",
       "eis-product-version" => "2.0",
       "jndi-name" => "java:/JmsXA",
       "status" => "HEURISTIC",
       "type" => "/StateManager/AbstractRecord/XAResourceRecord"
   }
}

此处显示的结果状态为 HEURISTIC 状态,并有资格恢复。如需了解更多详细信息,请参阅恢复 Transaction Participant。

在特殊情况下,可以在对象存储中创建孤立记录,即 XAResourceRecords,其日志中没有任何对应的事务记录。例如,XA 资源准备,但在 TM 记录前崩溃,对域管理 API 无法访问。要访问此类记录,您需要将管理选项 expose-all-logs 设置为 true。这个选项没有保存在管理模型中,并在服务器重启时恢复到 false

/profile=default/subsystem=transactions/log-store=log-store:write-attribute(name=expose-all-logs, value=true)

您可以使用这个备用命令,以聚合的形式显示事务的参与 ID。

/host=master/server=server-one/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:read-children-names(child-type=participants)
删除事务

每个事务日志 都支持 删除操作,以删除代表事务的事务日志。

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:delete

这也会删除所有交易中的参与者。

恢复 Transaction Participant

每个事务参与者均支持使用恢复操作 进行恢复

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=2:recover

如果事务参与者的状态为 HEURISTIC,则恢复操作会将状态 切换为 PREPARE,并要求定期恢复过程重新提交。

如果提交成功,则会从事务日志中删除参与者。您可以通过在 log-store 上运行 探测 操作并检查是否不再列出参与者来验证这一点。如果这是最后一个参与者,该事务也会被删除。

刷新 Transaction Participant 的状态

如果事务需要恢复,您可以在尝试恢复前使用 refresh 操作来确保它仍然需要恢复。

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=2:refresh

14.2.2. 查看事务统计

如果启用了事务管理器统计信息,您可以查看事务管理器所处理事务的统计信息。有关如何启用事务管理器统计信息的详情,请参阅配置 Transaction Manager

您可以使用管理控制台或管理 CLI 查看统计信息。在管理控制台中,可以通过从 Runtime 选项卡导航到 Transactions 子系统来事务统计信息。在管理 CLI 中,您可以使用 include-runtime=trueread-resource 操作来查看统计信息。例如:

/subsystem=transactions:read-resource(include-runtime=true)

下表显示了每个可用的统计数据及其描述。

Expand
表 14.2. Transactions 子系统统计
统计描述

number-of-transactions

此服务器上事务管理器处理的事务总数。

number-of-committed-transactions

此服务器上事务管理器处理的已提交事务数量。

number-of-aborted-transactions

此服务器上事务管理器处理的中止事务数量。

number-of-timed-out-transactions

此服务器上事务管理器处理的超时事务数量。超时的事务数量也计算为中止的事务数。

number-of-heuristics

处于 heuristic 状态的事务数量。

number-of-inflight-transactions

已开始但还没有终止的事务数。

Number-of-application-rollbacks

其故障来源是一个应用程序的失败事务数量。

number-of-resource-rollbacks

其故障来源是一个资源的失败事务数量。

14.2.3. 事务对象存储

事务需要位置来存储对象。对象存储的一个选项是 JDBC 数据源。如果性能是特定问题,则 JDBC 对象存储可能比文件系统或 ActiveMQ 日志对象存储慢。

重要

如果 transaction 子系统配置为使用 Apache ActiveMQ Artemis 日志作为 事务 日志的存储类型,则不允许使用同一目录来存储日志。应用服务器实例无法共享同一位置,每个位置都必须为其配置唯一的位置。

注意

丢失事务对象存储可能会导致数据一致性。因此,对象存储需要放在 安全 驱动器上。

使用 JDBC 数据源作为事务对象存储

按照以下步骤,使用 JDBC 数据源作为事务对象存储。

  1. 创建数据源,如 TransDS。具体步骤请参阅创建 非 XA 数据源。请注意,数据源的 JDBC 驱动程序必须作为 核心模块安装,而不是作为 JAR 部署,才能使对象存储正常工作。
  2. 将数据源的 jta 属性设置为 false

    /subsystem=datasources/data-source=TransDS:write-attribute(name=jta, value=false)
  3. jdbc-store-datasource 属性设置为要使用的数据源的 JNDI 名称,如 java:jboss/datasources/TransDS

    /subsystem=transactions:write-attribute(name=jdbc-store-datasource, value=java:jboss/datasources/TransDS)
  4. use-jdbc-store 属性设置为 true

    /subsystem=transactions:write-attribute(name=use-jdbc-store, value=true)
  5. 重启 JBoss EAP 服务器以使更改生效。
事务 JDBC 存储属性

下表标识了与 JDBC 对象存储相关的所有可用属性:

Expand
表 14.3. 事务 JDBC 存储属性
属性描述

use-jdbc-store

把它设置为 true,为事务启用 JDBC 存储。

jdbc-store-datasource

用于存储的 JDBC 数据源的 JNDI 名称。

jdbc-action-store-drop-table

是否在启动时丢弃和重新创建操作存储表。默认值为 false

jdbc-action-store-table-prefix

操作存储表名称的前缀。

jdbc-communication-store-drop-table

是否在启动时丢弃和重新创建通信存储表。默认值为 false

jdbc-communication-store-table-prefix

通信存储表名称的前缀。

jdbc-state-store-drop-table

是否在启动时丢弃和重新创建状态存储表。默认值为 false

jdbc-state-store-table-prefix

状态存储表名称的前缀。

使用 ActiveMQ Journal 对象存储

按照以下步骤,使用 ActiveMQ 日志对象存储。

  1. use-journal-store 属性设置为 true

    /subsystem=transactions:write-attribute(name=use-journal-store,value=true)
  2. 重启 JBoss EAP 服务器以使更改生效。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部