【发布时间】: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