2.6.4 読み出しメッセージの差し戻し

メッセージの同時引き出しをなしに指定した場合,ee_scd_msg_receive関数によって読み出したメッセージは,ee_scd_msg_rollback関数によって差し戻すことができます。ee_scd_msg_rollback関数を発行すると,トランザクションの終了状態に関係なく,読み出し済みのメッセージをロールバックして,メッセージを未読み出しの状態にします。

読み出しメッセージの差し戻し例を次の図に示します。

図2-39 読み出しメッセージの差し戻し例

[図データ]

説明
  1. 入力メッセージ1を読み出します。
  2. ee_scd_msg_receive関数によって,入力メッセージ2を読み出します。
  3. ee_scd_msg_receive関数によって,入力メッセージ3を読み出します。
  4. ee_scd_msg_rollback関数によって,入力メッセージ2以降を差し戻します。
  5. UAPを終了します(リターンします)。
  6. 入力メッセージ2,3が未読み出しの状態に戻ります。

トランザクション起動時に読み出したメッセージは,ee_scd_msg_rollback関数では差し戻せません。トランザクション起動時に読み出したメッセージを差し戻したい場合は,トランザクションをロールバックさせる必要があります。

<この項の構成>
(1) 読み出しメッセージの差し戻しが有効となるタイミング

(1) 読み出しメッセージの差し戻しが有効となるタイミング

ee_scd_msg_rollback関数によってメッセージが未読み出しの状態となるのは,ee_scd_msg_rollback関数を発行してUAPがリターン(コミット)したタイミングです。

ee_scd_msg_receive関数発行後,ee_scd_msg_rollback関数を発行し,再度ee_scd_msg_receive関数を発行した場合は,次のメッセージを読み出します。

読み出しメッセージの差し戻しが有効となるタイミングを,次の図に示します。

図2-40 読み出しメッセージの差し戻しが有効となるタイミング

[図データ]

説明
  1. 入力メッセージ1を読み出します。
  2. ee_scd_msg_receive関数によって,入力メッセージ2を読み出します。
  3. ee_scd_msg_receive関数によって,入力メッセージ3を読み出します。
  4. ee_scd_msg_rollback関数によって,入力メッセージ2以降を差し戻します。
  5. ee_scd_msg_receive関数によって,入力メッセージ4を読み出します。
  6. UAP処理を終了します(リターンします)。
  7. 入力メッセージ2,3,4が未読み出しの状態に戻ります(ee_scd_msg_rollback関数の発行後に読み出した入力メッセージ4も,未読み出しの状態に戻ります)。

なお,ee_scd_msg_rollback関数を複数回発行した場合は,最後にee_scd_msg_rollback関数で指定したメッセージ通番が有効となります。