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