2015-11-07 29 views
0

應用程序1(A1)通過MQ向A2發送消息。 A2使用XA事務,以便在隊列中放置的消息被A2選中,處理並寫入數據庫,並且整個事務立即提交。測試應用程序的事務處理能力

我想測試A2是否正確保持系統一致性,如果事務中途失敗並且XA是否已正確實現。

我想在A2接收郵件後立即停止數據庫。但我不確定我是否有足夠的時間來阻止數據庫,以及我是否會確定郵件已被選中。

其他任何測試此建議的建議?

感謝,

佳日

回答

1

我假設你在這裏使用Java,否則,一些本不適用。

快速,實用的解決方案是在您的流程中注入延遲,這會讓您有時間採取您的交易破壞性行動。最簡單的方法是在調試器中運行應用程序。在某個合適的位置放置一個斷點(也許在收到消息並且數據庫寫入完成但未提交之後),並在調試器暫停該線程時終止數據庫。另外,向你的代碼添加一個測試鉤子,這樣如果MQ消息有一個名爲'sleeponmessagereceived'的標題,那麼線程將會睡眠。

更復雜但複雜的技術是通過某些AOP工具使用錯誤注入。我一定會看看Byteman。它允許您在運行時注入字節碼,並且最初是爲了測試Arjuna事務管理器的XA場景而編寫的。您可以通過程序注入代碼,也可以使用annotate unit testing procedures。這種方法的一些優點是可以指導Byteman根據各種其他條件(如第n次調用)或方法arg爲X來觸發錯誤條件。此外,根據您對事務的瞭解程度的詳細程度經理是,你可以重新創建更廣泛的場景來產生一些更棘手的XA結果,如啓發式異常。有一些示例here演示瞭如何使用Byteman腳本來驗證MQ XA恢復。此project旨在幫助重現XA故障和恢復。這是JBoss特有的,但我會想象你能夠適應你的環境。