Java 从EJB调用的事务中的过程获取ARJUNA016051:线程已与事务关联!在JBossAS 7.1中
这与JBossAS 7.1有关,我们一直在使用它为我们的一个应用程序创建EJB 我们的应用程序体系结构是这样的,所有业务逻辑都存在于存储过程中,在存储过程中我们从EJB调用存储过程,我们遇到了一个问题,在存储过程中有一组要调用的过程,这些过程都构成了一个原子操作。例如,假设必须提交一个用户详细信息,在这种情况下,我们必须调用7个不同的过程,每个过程插入、更新不同的表并将结果返回给EJB,因此,如果其中一个调用失败,则必须撤消在前一个操作中插入或更新的所有详细信息。我们了解到,这可以通过引入交易来实现 所以我们尝试在Jboss中使用TransactionManagerJava 从EJB调用的事务中的过程获取ARJUNA016051:线程已与事务关联!在JBossAS 7.1中,java,transactions,ejb,jboss7.x,transactionmanager,Java,Transactions,Ejb,Jboss7.x,Transactionmanager,这与JBossAS 7.1有关,我们一直在使用它为我们的一个应用程序创建EJB 我们的应用程序体系结构是这样的,所有业务逻辑都存在于存储过程中,在存储过程中我们从EJB调用存储过程,我们遇到了一个问题,在存储过程中有一组要调用的过程,这些过程都构成了一个原子操作。例如,假设必须提交一个用户详细信息,在这种情况下,我们必须调用7个不同的过程,每个过程插入、更新不同的表并将结果返回给EJB,因此,如果其中一个调用失败,则必须撤消在前一个操作中插入或更新的所有详细信息。我们了解到,这可以通过引入交易来
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容器将自动处理整个事务