2013-05-31 25 views
3

這與Jboss AS 7.1有關,我們一直在使用它來爲我們的應用程序創建一個EJB,我們的應用程序體系結構是這樣的,所有的業務邏輯都存在於存儲過程中,其中在我們從EJB調用存儲過程,我們有一個問題,那裏有一組要調用的過程,並且這些過程都構成一個原子操作。例如,假設必須提交用戶詳細信息,在這種情況下,我們必須調用7個不同的過程,並且每個過程插入,更新不同的表並將結果返回給EJB,因此如果其中一個調用失敗,則所有細節插入或更新之前的操作之一必須撤消。我們瞭解到這可以通過引入交易來完成。從EJB調用的事務中的過程獲取ARJUNA016051:線程已經與事務關聯!在JBoss AS 7.1中

所以我們嘗試使用事務管理在JBoss中

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) 

我們已經檢查了不同的論壇,一個解決方案,但提到usecases來自這一個截然不同。

任何指導,如何處理和解決這個問題將是非常有益的

回答

0

如果EJB的容器管理會有默認的事務,你可以調用不同的程序,在同一呼叫(確保不寫承諾/過程中的回滾)和EJB容器將自動處理完整事務