gpt4 book ai didi

java - 从 EJB 调用的事务中的过程在 JBoss AS 7.1 中获取 ARJUNA016051 : thread is already associated with a transaction!

转载 作者:行者123 更新时间:2023-12-02 09:14:19 29 4
gpt4 key购买 nike

这与 Jboss AS 7.1 相关,我们一直在使用它为我们的应用程序之一创建 EJB,

我们的应用程序架构是这样的,所有业务逻辑都在存储过程中,我们从 EJB 调用存储过程,我们遇到一个问题,其中有一组要调用的过程,这些过程都构成一个原子操作。例如,假设必须提交用户详细信息,在这种情况下,我们必须调用 7 个不同的过程,每个过程插入、更新不同的表并将结果返回给 EJB,因此如果其中一个调用失败,则所有详细信息在先前操作之一中插入或更新的操作必须被撤消。我们了解到这可以通过引入交易来完成。

因此我们尝试在 Jboss 中使用 TransactionManager

public ClsXDKRTApp() throws NamingException {
tx1 = new TransactionManagerLocator().getTM("java:jboss/TransactionManager");
}

上面的tx1被定义为bean类的一个属性,并且它正确实例化了。

但是一旦我们尝试开始交易,就会遇到以下错误

 11:28:08,201 ERROR [stderr] (http--0.0.0.0-8080-1) javax.transaction.NotSupportedException: BaseTransaction.checkTransactionState - ARJUNA016051: thread is already associated with a transaction!
11:28:08,201 ERROR [stderr] (http--0.0.0.0-8080-1) at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.begin(BaseTransaction.java:63)
11:28:08,201 ERROR [stderr] (http--0.0.0.0-8080-1) at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.begin(BaseTransactionManagerDelegate.java:65)

我们已经检查了不同的论坛来寻找解决方案,但提到的用例与此有很大不同。

任何有关如何处理和解决此问题的指导都会非常有帮助

最佳答案

如果 EJB 是容器管理的,则会有默认事务,您可以在同一调用中调用不同的过程(确保不要在过程中编写提交/回滚),并且 EJB 容器将自动处理完整的事务

关于java - 从 EJB 调用的事务中的过程在 JBoss AS 7.1 中获取 ARJUNA016051 : thread is already associated with a transaction!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16850824/

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