2011-10-25 31 views
0

我在監聽器中放置了一個Thread.sleep(50000)來證明這一點,並且數據字面上沒有在數據庫中存儲50s。PostInsertEventListener在數據庫更新之前執行

這很奇怪,而且令人失望,因爲我將實體的id(這裏有BTW)傳遞給一個Web服務,訪問同一個數據庫。如果我不在新線程中進行調用,則Web服務將引發異常,因爲數據不在那裏。

我可以申請一個哈克方法,使一個新的線程中調用,有可能是前一段時間的延遲,但是這將是醜陋

請幫助。

+0

PostInsert!= commit。確保您正確使用交易。在你的情況下,似乎你只是試圖在插入後查詢數據庫,但提交沒有發生在這一點上。 – SirVaulterScoff

回答

1

這與插入在偵聽器之後完成的事實無關。這與事務的提交是在事後完成有關。您的Web服務使用另一個事務作爲插入數據的事務,所以在插入事務提交之前它不會看到插入的數據。

你需要兩階段提交來做你想做的事情。通過JMS隊列調用Web服務,並確保JMS引擎和數據庫都由唯一的XA事務管理器處理。

相關問題