2010-11-11 75 views
0

我有一個實體有一個使用postPersist和postUpdate註冊的CallBackListener。偵聽器接收實體並將該ID提交給執行進一步處理的JMS隊列。消息提交和消費速度非常快,以至於在原始會話完成交易之前發生。我需要知道何時休眠已完成其交易

因此,MDB無法找到實體或實體過時。我真正想要的是在消費消息之前讓MDB檢查以驗證原始事務已完成的方法。

有什麼建議嗎?

回答

2

你也許可以諮詢Transaction.wasCommitted後與SessionFactorySession註冊的org.hibernate.Interceptor一個實例,併發布消息發送到afterTransactionCompletion(Transaction tx)方法隊列。在afterTransaction方法中,您可能必須在某個全局threadlocal中訪問實體的ID。

+0

我做了一些測試,它似乎是攔截在數據庫事務級別。換句話說,它在將數據提交給數據庫之後觸發,而不是在提交java事務時觸發。我還在挖。 – Preston 2010-11-11 23:46:04

+0

這樣做會不會更好,即在提交DB txn後發送JMS消息?這樣MDB將會看到提交的數據。還是計劃實現一個事務引擎,將輸入作爲JMS消息並使用RDBMS進行持久化? – 2010-11-14 08:07:52