java - 在事务内进行无事务 EJB 调用

标签 java jakarta-ee transactions ejb jta

我会尝试描述一下情况。我们有网络服务;对于每个请求,Web 服务都会启动一个 JTA 事务。它通过其中的 XA 数据源执行多个数据库调用,并调用一些其他 Web 服务(在事务上下文之外),还在其他服务器上进行几个远程 EJB 调用。

问题是容器似乎试图将 EJB 纳入事务(这似乎合乎逻辑),但实际上我希望它不参与该事务,因为当它参与该事务时,它总是在最终超时提交阶段,但是当我排除 EJB 调用时,它工作正常。

我无法更改 EJB 实现,只能控制 Web 服务代码。所以,我的问题是:如何对事务感知 EJB 进行 EJB 调用,但不在我的 JTA 事务中,但仍处于其他 XA 资源的 JTA 事务中?我希望我的问题说清楚了:)。

编辑:尝试用伪代码示例使其更清楚:

// Begin transaction
UserTransaction tx = (UserTransaction) ctx.lookup(USER_TRANSACTION);
tx.begin();

// Do some database operations on XA datasource

// Call remote EJB which has transcation attribute set to 'Supports'
AccountInfo account = accountEjb.getAccountInfo(userId, accountId); // <-- Is it possible to make this to be not be part of user transction?

// Do some more database operations on XA datasource

// Commit transaction
tx.commit();

最佳答案

您可以使用一些适当的事务属性创建另一个 bean。该 bean 可以将所有调用委托(delegate)给第一个 bean。

或者您可以从另一个线程调用此 ejb。

关于java - 在事务内进行无事务 EJB 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1381257/

相关文章:

java - 在 Java 中有什么方法可以通过指定 x 和 y 位置来获取 AWT 组件对象?

javascript - 在浏览器关闭时删除 session 范围内的托管 bean

jakarta-ee - EJB 中如何管理 CMT 和 BMT?

java - 使用 Spring Data 和 MySQL 运行 2 个事务方法时出现死锁

java - WebView抓取表单数据

Java 正则表达式注释和 HTTP 正文 POST 的要求

java - 如何添加到具有外键的数据库

java - JBoss 作为 7 : Map Servlet to Context Root ("/") via Code Config

java - 如何将遗留 Java/J2EE 网站移植到现代脚本语言(PHP、Python/Django 等)?

java - Spring Data CrudRepository 和事务