如何在会话事务的入站 jca 资源适配器中控制 XAResource?

How to control XAResource in inbound jca resource adapter for conversational transaction?

我正在使用 JCA 为遗留 EIS 编写入站资源适配器。

EIS 不支持 XA 事务。然而,这些消息形成了存在多个消息的对话。每条消息都会导致一个将由消息端点执行的操作。

对话结束时,将收到 commit/rollback 消息。在那一刻,所有操作都应该提交或回滚。

有什么方法可以让我在 RA 中自行管理生命周期?

显然我可以自己回答我的问题。

调用 ResourceAdapter.start() 时,提供的 BootstrapContext 包含一个 XATerminator。此终止符公开了生命周期方法。

http://docs.oracle.com/javaee/6/api/javax/resource/spi/ResourceAdapter.html http://docs.oracle.com/javaee/6/api/javax/resource/spi/BootstrapContext.html

准备好执行工作时,生成一个 XID,将其设置在 ExecutionContext 上并将该执行上下文传递给工作管理器。 (您可能需要实现自定义 XID 实现)

参见 jca 1.6 规范的第 15 章事务流入