A.1.2 トラブルシューティングのステップ

  1. JavaコードはTravelAgencyControllerクラスの@LRA注釈付きメソッドbooking()に入ります。

    TravelAgencyのPDB (Travel PDB)のDBA_SAGASに対する問合せは、次の状態を示します:

    Travel PDB:

    SELECT id, initiator, coordinator, status FROM dba_sagas;
    ID イニシエータ コーディネータ ステータス

    abc123

    TravelAgency

    TACoordinator

    Initiated

    この時点で、参加者は登録されていません。新しく作成されたSagaには、Saga識別子'abc123'が割り当てられています。

  2. このステップは、参加者AirlineがSagaコーディネータにACKを送信することによって、Sagaに正式に参加することに対応しています。これはSagaフレームワークによって処理され、Sagaイニシエータからの結合メッセージによって開始されます。Sagaイニシエータは、次のコード・セグメントに示すようにsendRequest()コールを呼び出します:

    saga.sendRequest ("Airline", bookingPayload);

    ACKはコーディネータPDBと参加者PDBの両方に記録されます。次のステップ3と4は、各PDBのSagaディクショナリ・ビューに示されているように、操作の時系列を表しています。

    Airline PDB (ACK開始)

    SELECT id, participant, initiator, status FROM dba_sagas WHERE id='abc123';
    ID 参加者 イニシエータ ステータス

    abc123

    Airline

    TravelAgency

    Joining

  3. トラベル・コーディネータ(TACoordinator)は非同期ACKメッセージを受信し、指定されたSagaの参加者セットに参加者(Airline)を追加して、応答メッセージを送信することで応答します。

    Travel Coordinator PDB (ACK受信):

    SELECT id, participant, status FROM dba_saga_participant_set WHERE id='abc123';
    ID 参加者 ステータス

    abc123

    TravelAgency

    Joined

  4. AirlineはSagaコーディネータからACKメッセージを受信し、@Request注釈付きメソッド: handleTravelAgencyRequest()を使用して、Sagaペイロードの処理を開始します。

    Airline PDB (ACK完了):

    SELECT id, participant, initiator, status FROM dba_sagas WHERE id='abc123';
    ID 参加者 イニシエータ ステータス

    abc123

    Airline

    TravelAgency

    Joined

    参加確認のプロセスは、AQメッセージング、伝播および通知を使用して実行されます。参加メッセージはソースOUTキュー(この例ではSAGA$_AIRLINE_OUT_Q1)でエンキューされ、メッセージ・ブローカを経由して、SagaコーディネータのINキュー(SAGA$_TACOORDINATOR_IN_Q1)に伝播されます。

  5. Airlineから応答を受信すると、イニシエータ(TravelAgency)はSagaをファイナライズ(コミット)します。ファイナライズ・プロセスには、次の状態遷移が含まれます。

    Travel PDB:

    SELECT id, initiator, coordinator, status FROM dba_sagas WHERE id='abc123';
    ID イニシエータ コーディネータ ステータス

    abc123

    TravelAgency

    TACoordinator

    Committed

  6. Airlineはコミット・メッセージを受信して、独自のコミット・アクションを開始します。これにより、参加者のPDBでSagaがJoinedからCommittedに遷移します。Airlineはコミットのステータスを示すメッセージを、コーディネータに送信します。

    Airline PDB:

    SELECT id, participant, initiator, status FROM dba_sagas WHERE id='abc123';
    ID 参加者 イニシエータ ステータス

    abc123

    Airline

    TravelAgency

    Committed

  7. 最後のステップは、TACoordinatorAirlineの最終ステータスを登録することに対応します。これは、dba_saga_participant_setビューに反映されます。

    Travel Coordinator PDB:

    SELECT id, participant, status FROM dba_saga_participant_set WHERE id='abc123';
    ID 参加者 ステータス

    abc123

    TravelAgency

    Committed