2010-11-09 32 views
3

我有一個情況,在我的JAVA應用程序中,我想調用另一個服務(JMS,WebService,SMS門方式等)的事務中,我不想依賴於調用的結果(成功,失敗,拋出異常,...等),所以如果它在某種程度上失敗也不會影響我的交易完成後,使用線程來運行不屬於事務的方法?

什麼是使用這種最好的方法,我使用Spring框架,

也我想問我是否使用線程來處理這個問題,但是我的部署將在羣集上(即帶有單獨JVM的不同節點),處理(鎖定,同步)的最佳方式是什麼,

關注,

回答

0

我會安排在quartz工作。

+0

你能解釋一下嗎 – 2010-11-09 08:47:15

+0

也考慮到了,我想在我打電話時立即運行這個方法 – 2010-11-09 09:03:25

+0

我只是簡單地把這個工作放在石英隊列中進行異步執行。春天與石英有很好的結合。當然,如果你的應用程序中沒有使用石英,那麼僅僅爲了這個用例介紹它可能是一種矯枉過正。 – cherouvim 2010-11-09 14:35:09

1

你可以產生一個新的線程(最好通過java.util.Executor或春季TaskExecutor)來執行輔助任務。 Spring的事務同步使用非可繼承的ThreadLocal變量,因此新線程不會參與當前事務。

或者,也許更優雅,你可以指定周圍的附屬任務明確的事務隔離級別,是這樣的:

@Transactional(propagation=Propagation.NOT_SUPPORTED) 
public void doTheThing() { /.../ } 

這將暫停該方法的持續時間將現有的事務,雖然你」 d仍然需要小心運行時異常,而不是向主事務邊界冒泡。

關於你的第二個問題,集羣中的鎖定和同步是一個非常複雜的話題,而不是我可以真正回答你提供的信息的一個問題。我建議爲此打開一個新問題,並闡述您的要求。

相關問題