2.6.7 サービス先行解放

サービス先行解放とは,同期点でのメッセージ送信処理前にサービスを解放し,次のトランザクション(未読み出しメッセージ)の処理を先行して行えるようにすることです。UAPの処理(受信メッセージ処理)を早めるために,サービス先行解放を実行します。

サービス先行解放を実行するための条件を次に示します。

サービス先行解放のタイミングを次の図に示します。

図2-42 サービス先行解放のタイミング

[図データ]

説明
  1. メッセージ1を読み出して,トランザクションを起動します。
  2. 同期点でのメッセージの送信前に,サービスを解放します。
  3. メッセージ2を読み出して,トランザクションを起動します。
  4. 同期点でのメッセージの送信前に,サービスを解放します。
<この項の構成>
(1) タイマトランザクションのスケジュール

(1) タイマトランザクションのスケジュール

ee_tim_execap関数でタイマトランザクションを即時起動する場合(actionにEETIM_JUSTを指定)などに,タイマ登録を行ったトランザクションが終了してからトランザクションを起動したいときは,flagsオプションにEETIM_SCDL_HOLDを指定します。

EETIM_SCDL_HOLDの指定によるメッセージ読み出しタイミングの違いを次の図に示します。

図2-43 EETIM_SCDL_HOLDの指定によるメッセージ読み出しタイミングの違い

[図データ]

[図データ]

説明
  • EETIM_SCDL_HOLDを指定しない場合は,サービス解放のタイミングでメッセージ2を読み出します。
  • EETIM_SCDL_HOLDを指定した場合は,トランザクションが終了してからメッセージ2を読み出します。

EETIM_SCDL_HOLDを指定したタイマをキャンセルすると,EETIM_SCDL_HOLDを指定しなかったものとして,サービス解放時に次のメッセージをスケジュールします。

また,EETIM_SCDL_HOLDを指定した複数のタイマを登録した場合に,EETIM_SCDL_HOLDを指定したタイマをキャンセルすると,EETIM_SCDL_HOLDを指定したタイマが一つでもあれば,トランザクション終了時に次のメッセージをスケジュールします。

なお,EETIM_SCDL_HOLDを指定したタイマを登録したトランザクション(サービス)の同時実行数が複数かどうかに関係なく処理を行います。