我们使用 XA/分布式事务,如果参与的 xaResource-branch 抛出异常,我正在尝试通知/更新全局事务状态。
一个很好的例子可以在 JMS 中找到Connection#setExceptionListener()
(参考链接),它在ExceptionListener
. 我在 JDBC 规范中寻找类似的东西,但我找不到任何东西。
XA 事务处理在我们的应用程序中是单线程的,给定的全局事务可以触及多个 xaResource 分支。rA
假设 UOW 按,rB
和的顺序rC
发生,我们可能会在 上运行缓慢的查询rB
,导致开始rA
前超时rC
。由于单线程的性质(以及我们使用的 TM 的限制),rC
在全局事务的命运已经确定(回滚)时仍然会继续进行。我们正在尝试通知全局事务rA
已经回滚的事实,以便rC
可以跳过。
如果 JDBC 规范不提供类似于 JMS 的 ExceptionListener 的功能,我能想到的一个选项是使用异步线程以特定频率测试 JDBC 连接。到目前为止,我发现的最接近的示例在此 PostgreSQL 文档(参考链接)中进行了描述,该文档使用异步线程来测试/轮询 JDBC 连接。它可能满足我的需要,但想知道我在 JDBC 规范中是否遗漏了任何其他选项。