这与 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)
我们已经检查了不同的论坛以寻求解决方案,但提到的用例与这个截然不同。
有关如何处理和解决此问题的任何指导都将非常有帮助