アプリケーションとチャネルの動作について説明します。
サプライヤに接続するイベントチャネルのオブジェクトリファレンス、およびコンシューマに接続するイベントチャネルのオブジェクトリファレンスは、事前に獲得して接続しているものとして説明します。
なお、以下の図の矢印は、サプライヤからのデータの流れだけを示しています。コンシューマの場合も、同様のデータの流れとなります。
サプライヤがグローバルトランザクションに対してCurrent_beginを発行します。
サプライヤが他のリソースに対してアクセスします。通常、他のリソースはデータベースシステムであり、データベースシステムからのデータの入力が想定されます。
サプライヤがチャネルに対してpushを発行します。チャネルでは、イベントデータを保持します。この時点では、蓄積処理は行われません。
サプライヤがグローバルトランザクションに対してCurrent_commitを発行します。グローバルトランザクションは、他のリソースおよびチャネルに対してcommit命令を発行します。他のリソースは、トランザクションの完了処理を行います。チャネルでは、保持していたイベントデータの蓄積処理を完了します。
コンシューマがグローバルトランザクションに対してCurrent_beginを発行します。
コンシューマがチャネルに対してpullを発行すると、チャネルはコンシューマにpullの復帰値としてイベントデータを通知します。この時点では、チャネルにイベントデータが蓄積されたままの状態です。
コンシューマが他のリソースに対してアクセスします。通常、他のリソースはデータベースシステムであり、データベースシステムへのデータの出力が想定されます。
コンシューマがグローバルトランザクションに対してCurrent_commitを発行します。グローバルトランザクションは、他のリソースおよびチャネルに対してcommit命令を発行します。他のリソースはトランザクションの完了処理を行います。チャネルはメッセージの受信が完了したことを確認し、イベントデータを削除します。