【问题标题】:Procedures in Transactions called from EJB getting ARJUNA016051: thread is already associated with a transaction! in JBoss AS 7.1从 EJB 调用的事务中的过程得到 ARJUNA016051:线程已与事务相关联!在 JBoss AS 7.1 中
【发布时间】:2013-05-31 06:15:09
【问题描述】:

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

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

所以我们尝试在 Jboss 中使用 TransactionManager

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

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

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

 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)

我们已经检查了不同的论坛以寻求解决方案,但提到的用例与这个大不相同。

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

【问题讨论】:

    标签: java transactions ejb jboss7.x transactionmanager


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      • 2013-07-13
      • 1970-01-01
      相关资源
      最近更新 更多