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=true 到 read-resource 操作来查看统计信息。例如:
/subsystem=transactions:read-resource(include-runtime=true)
下表显示了每个可用的统计数据及其描述。
| 统计 | 描述 |
|---|---|
| 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 数据源作为事务对象存储。
-
创建数据源,如
TransDS。具体步骤请参阅创建 非 XA 数据源。请注意,数据源的 JDBC 驱动程序必须作为 核心模块安装,而不是作为 JAR 部署,才能使对象存储正常工作。 将数据源的
jta属性设置为false。/subsystem=datasources/data-source=TransDS:write-attribute(name=jta, value=false)将
jdbc-store-datasource属性设置为要使用的数据源的 JNDI 名称,如java:jboss/datasources/TransDS。/subsystem=transactions:write-attribute(name=jdbc-store-datasource, value=java:jboss/datasources/TransDS)将
use-jdbc-store属性设置为true。/subsystem=transactions:write-attribute(name=use-jdbc-store, value=true)- 重启 JBoss EAP 服务器以使更改生效。
事务 JDBC 存储属性
下表标识了与 JDBC 对象存储相关的所有可用属性:
| 属性 | 描述 |
|---|---|
| use-jdbc-store |
把它设置为 |
| jdbc-store-datasource | 用于存储的 JDBC 数据源的 JNDI 名称。 |
| jdbc-action-store-drop-table |
是否在启动时丢弃和重新创建操作存储表。默认值为 |
| jdbc-action-store-table-prefix | 操作存储表名称的前缀。 |
| jdbc-communication-store-drop-table |
是否在启动时丢弃和重新创建通信存储表。默认值为 |
| jdbc-communication-store-table-prefix | 通信存储表名称的前缀。 |
| jdbc-state-store-drop-table |
是否在启动时丢弃和重新创建状态存储表。默认值为 |
| jdbc-state-store-table-prefix | 状态存储表名称的前缀。 |
使用 ActiveMQ Journal 对象存储
按照以下步骤,使用 ActiveMQ 日志对象存储。
将
use-journal-store属性设置为true。/subsystem=transactions:write-attribute(name=use-journal-store,value=true)- 重启 JBoss EAP 服务器以使更改生效。