0
我有一個實體有一個使用postPersist和postUpdate註冊的CallBackListener。偵聽器接收實體並將該ID提交給執行進一步處理的JMS隊列。消息提交和消費速度非常快,以至於在原始會話完成交易之前發生。我需要知道何時休眠已完成其交易
因此,MDB無法找到實體或實體過時。我真正想要的是在消費消息之前讓MDB檢查以驗證原始事務已完成的方法。
有什麼建議嗎?
我有一個實體有一個使用postPersist和postUpdate註冊的CallBackListener。偵聽器接收實體並將該ID提交給執行進一步處理的JMS隊列。消息提交和消費速度非常快,以至於在原始會話完成交易之前發生。我需要知道何時休眠已完成其交易
因此,MDB無法找到實體或實體過時。我真正想要的是在消費消息之前讓MDB檢查以驗證原始事務已完成的方法。
有什麼建議嗎?
你也許可以諮詢Transaction.wasCommitted
後與SessionFactory
或Session
註冊的org.hibernate.Interceptor
一個實例,併發布消息發送到afterTransactionCompletion(Transaction tx)
方法隊列。在afterTransaction
方法中,您可能必須在某個全局threadlocal中訪問實體的ID。
我做了一些測試,它似乎是攔截在數據庫事務級別。換句話說,它在將數據提交給數據庫之後觸發,而不是在提交java事務時觸發。我還在挖。 – Preston 2010-11-11 23:46:04
這樣做會不會更好,即在提交DB txn後發送JMS消息?這樣MDB將會看到提交的數據。還是計劃實現一個事務引擎,將輸入作爲JMS消息並使用RDBMS進行持久化? – 2010-11-14 08:07:52