2017-02-20 146 views
0

我有一個關於JMS的問題。它們從事件數據庫中檢索並通過ActiveMQ代理髮送到ESB。Atomikos交易測試jms

當JMS發送時,它們被標記爲在事件數據庫中發送。這個過程應該是事務性的。

但是,我注意到,索姆JMS被標記爲發送時,他們沒有收到。 我研究過這個問題,並注意到分佈式事務沒有實現,導致JMS的丟失。它們被標記爲發送到事件數據庫中,但發送給它們的ESB發生錯誤,並且未收到JMS。

在這一點上數據庫事務應該已經回滾,但它不是兩個事務都沒有管理。

我實現了Atomikos事務協調器來處理這兩個事務。現在我想測試我的新配置。

我聽說有一種方法來測試兩個事務處理,但我沒有找到任何示例。你有什麼想法或例子嗎?

技術:Spring集成,ActiveMQ的,Atomikos公司

回答

0

Spring Documentation。相同的技術也適用。

訪問真實數據庫的測試中的一個常見問題是它們對持久性存儲的狀態的影響。即使在使用開發數據庫時,對狀態的更改也可能影響未來的測試。此外,許多操作(例如插入或修改持久數據)不能在事務外執行(或驗證)。

TestContext框架解決了這個問題。默認情況下,框架將爲每個測試創建並回滾事務。您只需編寫可以假定交易存在的代碼。如果您在測試中調用事務代理對象,則它們將根據其配置的事務語義正確行爲。另外,如果測試方法在爲測試管理的事務內運行時刪除所選表的內容,那麼事務將默認回滾,並且數據庫將在執行測試之前返回到其狀態。事務支持通過在測試的應用程序上下文中定義的PlatformTransactionManager bean提供給測試。

如果你想要一個事務提交 - 不尋常的,但當你想要一個特定的測試來填充或修改數據庫時偶爾有用 - 可以指示TestContext框架使事務提交而不是通過@Commit回滾註解。

使用TestContext框架查看事務管理。