2017-02-20 9 views
0

JMSに関する問題があります。イベント・データベースから検索され、ActiveMQブローカーを介してESBに送信されます。Atomikosトランザクションテストjms

JMSが送信されると、イベント・データベースで送信済みとしてマークされます。プロセスはトランザクショナルになっています。

しかし、私が気付いたのは、JMSが受信されていない間にJMSとして送信されたことに気付きました。 私はこの問題を研究し、分散トランザクションが実装されていないことに気付いたため、JMSが失われていました。それらはイベントデータベースで送信されたものとしてマークされていますが、送信されたESBはエラーをスローし、JMSは受信されませんでした。

この時点でデータベーストランザクションはロールバックされている必要がありますが、両方のトランザクションが管理されていないためではありません。

私は両方のトランザクションを処理するAtomikosトランザクションコーディネーターを実装しました。今度は私の新しい設定をテストしたいと思います。

両方のトランザクション処理をテストする方法があると聞きましたが、例は見つかりませんでした。アイデアや例はありますか?

技術:春の統合、ActiveMQの、Atomikos

答えて

0

Spring Documentationを参照してください。同じテクニックが適用されます。

実際のデータベースにアクセスするテストでよく発生する問題の1つが、永続ストアの状態に及ぼす影響です。開発データベースを使用している場合でも、状態の変更は将来のテストに影響する可能性があります。また、永続データの挿入や変更など、多くの操作をトランザクション外で実行(または検証)することはできません。

TestContextフレームワークはこの問題を解決します。デフォルトでは、フレームワークはテストごとにトランザクションを作成し、ロールバックします。トランザクションの存在を想定できるコードを記述するだけです。テストでプロキシされたオブジェクトをトランザクションで呼び出すと、構成されたトランザクションのセマンティクスに従って正しく動作します。さらに、テストメソッドは、テスト用に管理されているトランザクション内で実行中に選択したテーブルの内容を削除すると、トランザクションはデフォルトでロールバックされ、テスト実行前の状態に戻ります。トランザクションのサポートは、テストのアプリケーションコンテキストで定義されたPlatformTransactionManager Beanを介してテストに提供されます。

特定のテストでデータベースにデータを入力または変更するときにトランザクションがコミットすることがあるが、時に便利な場合、TestContextフレームワークは、トランザクションを@Commit経由でロールバックせずにコミットさせるよう指示することができます注釈。

TestContextフレームワークによるトランザクション管理を参照してください。

関連する問題