第 5 章 处理事务管理器例外
5.1. 调试超时事务 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
交易超时的原因有很多,例如:
- 服务器性能较慢
- 线程卡住等待某些内容或挂起
- 线程需要多于配置的事务超时时间来完成处理
您可以查看日志是否有以下出错信息来识别超时事务:
WARN ARJUNA012117 "TransactionReaper::check timeout for TX {0} in state {1}"
WARN ARJUNA012117 "TransactionReaper::check timeout for TX {0} in state {1}"
其中 {0} 是事务的 Uid,{1} 是超时事务的状态 {1} 的交易管理器视图。
事务管理器提供以下调试事务超时的选项:
-
您可以为事务配置超时值来控制事务生命周期。如果在事务终止前超时值因提交或回滚而终止,事务
子系统将回滚事务。 您可以使用
XAResource接口的setTransactionTimeout方法,将当前的事务传播到资源管理器。如果支持,此操作会覆盖与资源管理器关联的任何默认超时。在如下情况下覆盖超时功能:- 当长时间运行的事务有超过默认生命周期时
- 当使用默认超时时,资源管理器可能会在事务终止前回滚,从而导致事务回滚。
如果您没有指定超时值或使用
0值,事务管理器将使用特定于实现的默认值。在 JBoss EAP 事务经理中,consultantEnvironmentBean.defaultTimeout属性代表此实施特定默认值。默认值为300秒。0代表禁用默认的事务超时。您可以使用以下管理 CLI 命令修改默认事务超时:
/subsystem=transactions:write-attribute(name=default-timeout,value=VALUE)
/subsystem=transactions:write-attribute(name=default-timeout,value=VALUE)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在受管域中运行时,您必须在命令之前使用
/profile=PROFILE_NAME指定要更新的配置集。-
JBoss EAP 交易管理器支持全或无状态的方法,在
XAResource实例上调用setTransactionTimeout方法。您可以将JTAEnvironmentBean.xaTransactionTimeoutEnabled属性设置为true,这是对所有实例调用方法的默认值。否则,您可以使用com.arjuna.ats.jta.common.JTAEnvironmentBean 类的方法禁用超时,并逐个事务指定超时。setXATransactionTimeoutEnabled