2012-06-06 65 views
1

如果事務產生多個線程,是否有辦法模仿Spring中的全局事務?我知道這在Spring中並不是真的可能,但是在想也許有一些解決方法。Spring中的全局事務

回答

0

Spring不提供事務支持;它僅僅與現有機制(JTA,本地交易,模擬交易)聯繫在一起。所以,你可以控制你使用的任何基礎交易。

如果您在應用程序服務器中,其中一些服務器允許在容器內執行並行處理。容器管理的線程池具有向其他線程傳播容器資源(JNDI上下文,事務等)的優勢。例如,WebSphere和WebLogic使用WorkManager API:http://www.devx.com/Java/Article/28815/0 ,儘管我似乎記得Java EE 6現在支持線程池(儘管如此,不太確定)。

0

通常,事務和其他上下文由容器保存在ThreadLocal中,並且在線程執行期間它可用於每個方法。如果您要使用WorkManager API,則需要檢查供應商是否支持將事務性上下文傳播到異步作業(規範from what I recall不要求)。

另一種方法是查看Spring的custom bean scopes - 您可以嘗試爲您的操作實現自定義作用域並在其中存儲Transactional上下文。這可能不是微不足道的。

更一般的說法是,需要將事務範圍傳播到異步線程並不合適 - 通常異步操作要麼是CPU密集型的,要麼是長期存在的,也許可以更好地重新實現,而無需事務處理。