gpt4 book ai didi

java - ibm liberty 中的 JTA 事务配置

转载 作者:行者123 更新时间:2023-12-02 01:42:33 24 4
gpt4 key购买 nike

我有一个MDB来根据某些条件触发进程(线程)。 进程/线程是一个长时间运行的进程,因此我们不想保留触发MDB的线程。

因此,我们创建一个新线程并将其自由地提交给托管任务执行器,并且偶尔会在事情尚未准备好时进入休眠状态。

线程从数据库读取记录,将其作为消息发布到另一个MQ/JMS 队列,然后将记录写入数据库。

我希望MQ/JMS消息和数据库写入成为事务的一部分 - 两者应该一起成功/失败。

如何在 IBM liberty 环境中执行此操作。

如有任何建议/帮助,我们将不胜感激。谢谢!!

我尝试使用 @TransactionalREQUIRES_NEW 进行注释,但不起作用。

通常我们可能必须定义使用 JTA 事务,然后使用 @Transactional 进行注释。

最佳答案

根据规范,ManagedExecutorService 任务不在事务下运行。然而,他们确实有能力开始新的交易。您可以按如下方式进行操作,

executor.submit(() -> {
UserTransaction tx = InitialContext.doLookup("java:comp/UserTransaction");
tx.begin();
try {
try (Connection con = dataSource.getConnection()) {
ResultSet results = con.createStatement().executeQuery(...);
... process result set and send messages
... update database
}
} finally {
tx.commit(); // or tx.rollback
}
return null;
});

关于java - ibm liberty 中的 JTA 事务配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54242976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com