11.7.4. Jakarta Transactions 事务错误处理
11.7.4.1. 处理事务错误
事务错误很难解决,因为它们通常依赖于时间。以下是排除错误的一些常见错误和观点:
这些规则不适用于启发性错误。如果您遇到启发性错误,请参阅在交易中处理 Heuristic Outcome,并联系红帽全球支持服务以获得帮助。
- 事务超时,但业务逻辑线程未注意到
当 Hibernate 无法获取用于延迟加载的数据库连接时,这种类型的错误通常会列出自身。如果频繁发生,您可以延长超时值。有关配置事务管理器的详情,请查看 JBoss EAP 配置指南。
如果这不可行,您或许能够调整外部环境以更快地执行,或者将代码重组为更高效。如果您遇到超时问题,请联系红帽全球支持服务。
- 事务已在线程上运行,或者您收到
NotSupportedException 异常
NotSupportedException 异常
通常表示您试图嵌套 Jakarta Transactions 事务,且不受支持。如果您没有尝试嵌套事务,则可能会在线程池任务中启动另一个事务,但无需暂停或终止事务即可完成任务。应用通常使用
UserTransaction
,后者自动处理此问题。如果是这样,则框架可能存在问题。如果您的代码确实
直接使用
或交易方法,请注意提交或回滚事务时的以下行为:如果您的代码使用事务
管理器TransactionManager
方法来控制您的事务,则提交或回滚事务会从当前线程中解除事务关联。但是,如果您的代码使用事务
方法,则事务可能不会与正在运行的线程关联,而且您需要手动将其从线程中取消关联,然后再将其返回到线程池。- 您无法获取第二个本地资源
- 如果您尝试将第二个非 XA 资源放入事务中,则会出现这个错误。如果您在事务中需要多个资源,则必须是 XA。