第 21 章 事务子系统
21.1. 事务子系统的配置
21.1.1. 事务配置概述
下面的过程展示了如何配置 JBoss EAP 6 的事务子系统。
21.1.2. 配置事务管理者
default
之外的配置集,您可能需要修改下面的步骤和命令。
命令示例注记
- 在管理控制台里,第一次登录时会自动选择
default
配置集。如果您想改动到其他配置集,请选择其他配置集。类似地,请在 CLI 命令示例里替换default
配置集。 - 如果您使用的是独立服务器,则只存在一个配置集。请忽略选择配置集的说明。在 CLI 命令示例里,请删除
/profile=default
部分。
注意
transactions
。它默认是启用的,对于许多其他子系统的正常运行,它也是必需的,所以不太可能禁用它。
要使用基于 Web 的管理控制台配置 TM,请从管理控制台屏幕的顶部选择 Configuration 标签页。如果您使用受管域,您可以在左上角的 Profile 选择框里选择正确的配置集。展开 Container 菜单并选择 Transactions。
在管理 CLI 里,您可以使用一系列命令来配置事务管理者。对于使用 default
的受管域,这些命令都以 /profile=default/subsystem=transactions/
开始,而对于独立服务器则使用 /subsystem=transactions
。
重要
选项 | 描述 | CLI 命令 |
---|---|---|
Enable Statistics
|
是否启用事务统计。这些统计可以在管理控制台的 Runtime 标签页里的 Subsystem Metrics 部分查看。
| /profile=default/subsystem=transactions/:write-attribute(name=enable-statistics,value=true)
|
Default Timeout
|
默认的事务超时时间。默认值是
300 秒。您可以在程序里对每个事务覆盖这个值。
| /profile=default/subsystem=transactions/:write-attribute(name=default-timeout,value=300)
|
Object Store Path
|
TM 对象库存储数据的相对或绝对文件系统路径。默认是相对于
object-store-relative-to 参数的路径。
| /profile=default/subsystem=transactions/:write-attribute(name=object-store-path,value=tx-object-store)
|
Object Store Path Relative To
|
引用域模型里的全局路径配置。默认值是 JBoss EAP 6 的数据目录,即
jboss.server.data.dir 属性的值。对于受管域,默认是 EAP_HOME/domain/data/ ,而对于独立服务器是 EAP_HOME/standalone/data/ 。对象库的 object-store-path TM 属性是相对于这个路径的值。
| /profile=default/subsystem=transactions/:write-attribute(name=object-store-relative-to,value=jboss.server.data.dir)
|
Socket Binding
|
当使用基于套接字的机制时,指定事务管理者进行恢复和生成事务标识符时使用的套接字绑定的名称。关于生成唯一标识符的更多信息,请参考
process-id-socket-max-ports 。您可以在管理控制台的 Server 标签页上为每个服务器组指定套接字绑定。
| /profile=default/subsystem=transactions/:write-attribute(name=socket-binding,value=txn-recovery-environment)
|
Recovery Listener
|
事务恢复进程是否应该侦听网络接口。默认值为
false 。
| /profile=default/subsystem=transactions/:write-attribute(name=recovery-listener,value=false)
|
选项 | 描述 | CLI 命令 |
---|---|---|
jts
|
是否使用 Java Transaction Service (JTS) 事务。默认值为
false ,表示只使用 JTA 事务。
| /profile=default/subsystem=transactions/:write-attribute(name=jts,value=false)
|
node-identifier
|
事务管理者的节点标识符。这个选项在下列情况下是必需的:
node-identifier 都必须是唯一的,因为它要求在恢复期间强制数据的一致性。对于 JTA 来说 node-identifier 也必须是唯一的,因为多个节点可能和系统的资源管理者交互或分享事务对象库。
| /profile=default/subsystem=transactions/:write-attribute(name=node-identifier,value=1)
|
process-id-socket-max-ports
|
事务管理者为每个事务日志创建唯一的标识符。为生成唯一标识符提供两个不同的机制:基于套接字和基于进程标识符。
对于基于套接字的标识符,套接字被打开,其端口号用过标识符。如果端口已在使用,将探测下一个端口,直到找到空闲的端口。
process-id-socket-max-ports 代表 TM 在失败前将尝试的最多套接字数量。默认值是 10 。
| /profile=default/subsystem=transactions/:write-attribute(name=process-id-socket-max-ports,value=10)
|
process-id-uuid
| true 表示使用进程标识符来为每个事务创建唯一的标识符。否则将使用基于套接字的机制。默认值为 true 。更多信息请参考 process-id-socket-max-ports 。
| /profile=default/subsystem=transactions/:write-attribute(name=process-id-uuid,value=true)
|
use-hornetq-store
|
对于事务日志,使用 HornetQ 的日志存储机制而不是基于文件的存储。这默认是禁用的,但可能会提高 I/O 性能。我们不推荐对 JTS 事务使用独立的事务管理者。当修改这个选项时,服务器必须用
shutdown 重启以使修改生效。
| /profile=default/subsystem=transactions/:write-attribute(name=use-hornetq-store,value=false)
|
21.1.3. 用 JTA 事务配置您的数据源
本节展示了如何启用数据源上的 JTA。
在开始安装前,你必须满足下列条件:
- 您的数据库或其他资源必须支持 JTA。如果有疑问,请参考数据库或其他资源的相关文档。
- 创建数据库。请参考 第 6.3.1 节 “用管理界面创建一个 Non-XA 数据源”。
- 停止 JBoss EAP 6 服务器。
- 在文本编辑器里编辑服务器配置文件。
过程 21.1. 配置数据源以使用 JTA 事务
在文本编辑器里打开配置文件。
根据您是否以受管域还是独立服务器运行 JBoss EAP 6,您的配置文件所处的位置不同。受管域
受管域的默认配置文件对于 Red Hat 企业版来说,位于EAP_HOME/domain/configuration/domain.xml
,对于 Microsoft Windows 则位于EAP_HOME\domain\configuration\domain.xml
。独立服务器
独立服务器的默认配置文件对于 Red Hat 企业版 Linux 来说,位于EAP_HOME/standalone/configuration/standalone.xml
,对于 Microsoft Windows,位于EAP_HOME\standalone\configuration\standalone.xml
。
定位对应数据源的
<datasource>
标签。数据源将jndi-name
属性设置为您创建时指定的值。例如,ExampleDS 数据源应类似于:<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="H2DS" enabled="true" jta="true" use-java-context="true" use-ccm="true">
设置
jta
属性为true
。和之前的步骤一样,添加下列内容到<datasource>
标记里:jta="true"
。保存配置文件。
保存配置文件并退出文本编辑器。启动 JBoss EAP 6。
重新启动 JBoss EAP 6 服务器。
JBoss EAP 6 已启动且配置您的数据源使用 JTA 事务。
21.1.4. 配置 XA 数据源
为了添加 XA 数据源,你需要登录至管理控制台。详情请参考 第 3.4.2 节 “登录到管理控制台”。
添加新的数据源。
添加新的数据源到 JBoss EAP 6。请按照 第 6.3.1 节 “用管理界面创建一个 Non-XA 数据源” 里的步骤,但要点击顶部的 XA Datasource 标签。配置其他属性。
第 6.6.1 节 “数据源参数” 列出了所有的数据源参数。
配置好的 XA 数据源可以使用了。
21.1.5. 关于事务日志消息
DEBUG
日志级别。详细地调试信息则使用 TRACE
日志级别。关于配置事务 logger 的信息,请参考 第 21.1.6 节 “为事务子系统配置日志”。
TRACE
日志级别时,事务管理者可以生成大量的日志信息。下面是一些最常见的信息。这个列表并不完整,所以实际环境里您可能会看到其他信息。
事务开始 |
当事务开始时,下列代码将被执行:
com.arjuna.ats.arjuna.coordinator.BasicAction::Begin:1342 tsLogger.logger.trace("BasicAction::Begin() for action-id "+ get_uid()); |
事务提交 |
当事务提交时,下列代码将被执行:
com.arjuna.ats.arjuna.coordinator.BasicAction::End:1342 tsLogger.logger.trace("BasicAction::End() for action-id "+ get_uid()); |
事务回滚 |
当事务回滚时,下列代码将被执行:
com.arjuna.ats.arjuna.coordinator.BasicAction::Abort:1575 tsLogger.logger.trace("BasicAction::Abort() for action-id "+ get_uid()); |
事务超时 |
当事务超时时,下列代码将被执行:
com.arjuna.ats.arjuna.coordinator.TransactionReaper::doCancellations:349 tsLogger.logger.trace("Reaper Worker " + Thread.currentThread() + " attempting to cancel " + e._control.get_uid());
您将看到相同的线程回滚上面显示的事务。
|
21.1.6. 为事务子系统配置日志
使用这个过程来控制事务日志信息的数量,它独立于 JBoss EAP 6 里的其他日志设置。主过程展示了如何在基于 Web 的管理控制台里实现这一点。随后给出了管理 CLI 命令。
过程 21.2. 用管理控制台配置事务 Logger
进入日志配置区域。
在管理控制台里,点击 Configuration 标签页。如果您在使用受管域,请在右上角的 Profile 选择框里选择要配置的服务器配置集。展开 Core 菜单,选择 Logging。编辑
com.arjuna
属性。选择 Log Categories 标签页。选择com.arjuna
并点击 Details 部分的 Edit 按钮。在这里您可以添加类专有的日志信息。com.arjuna
类是现有的。您可以修改日志级别以及是否使用父处理程序。- 日志级别
- 默认的日志级别是
WARN
。因为事务可以产生大量的日志输出,标准日志级别对于事务 logger 来说有稍许不同。通常比所选日志级别严重性较低的消息会被舍弃。事务日志级别,从最精简到最冗余。
- TRACE
- DEBUG
- INFO
- WARN
- ERROR
- FAILURE
- 使用父处理程序
- Logger 是否应该将输出发送到父 Logger。默认行为是
true
。
- 修改会立即生效。