Interstage Application Server アプリケーション作成ガイド (イベントサービス編)
目次 索引 前ページ次ページ

第4章 アプリケーションの開発(各機能)> 4.6 グローバルトランザクションでのアプリケーション開発

4.6.3 グローバルトランザクションのトランザクションタイムアウトについて

 グローバルトランザクションのトランザクションタイムアウトの監視時間は、不要となったトランザクションを回収することでシステム資源の回収を行う機能です。
 グローバルトランザクションのタイムアウト時間は、データベース連携サービスのconfigファイル(TRAN_TIME_OUT)、またはset_timeoutメソッドを使用して設定します。configファイルの設定方法については、“チューニングガイド”の“データベース連携サービスの環境定義”−“configファイル”を参照してください。set_timeoutメソッドについては、“リファレンスマニュアル(API編)”の“Currentインタフェース”を参照してください。
 イベントデータの受信処理もグローバルトランザクションのトランザクションタイムアウトの監視対象になります。イベントデータの受信処理は、イベントデータが存在しない場合は待ち状態になりますが、その時間もトランザクションタイムアウトの監視時間に含まれます。
 したがって、ローカルトランザクションと同様、pullの待ち時間が長い場合は、トランザクションタイムアウトが発生します。

 タイムアウトの発生を防止するためには、ES_ChannelUtil_pull_wait()でデータの受信を検出後、トランザクションを開始することで回避することができます。

 以下にES_ChannelUtil_pull_wait()を使用した際の動作を示します。

  1. コンシューマがチャネルに対してpull_waitを発行すると、チャネルはイベントデータを蓄積していないため、pull_waitは待ち状態になります。
  2. サプライヤがグローバルトランザクションに対してCurrent_beginを発行します。
  3. サプライヤが他のリソースに対してアクセスします。通常、他のリソースはデータベースシステムであり、データベースシステムからのデータの入力が想定されます。
  4. サプライヤがチャネルに対してpushを発行します。チャネルではイベントデータを保持します。なお、この時点ではイベントデータを保持するだけであり、蓄積処理は行いません。
  5. サプライヤがグローバルトランザクションに対してCurrent_commitを発行します。グローバルトランザクションは、他のリソースおよびチャネルに対してcommit命令を発行します。他のリソースは、トランザクションの完了処理を行います。チャネルは、保持していたイベントデータの蓄積処理を完了します。
  6. コンシューマがグローバルトランザクションに対してCurrent_beginを発行します。
  7. コンシューマがチャネルに対してpullを発行すると、チャネルはイベントデータをpullの復帰値としてコンシューマに通知します。なお、この時点でチャネルはイベントデータを保持したままの状態です。
  8. コンシューマが他のリソースに対してアクセスします。通常、他のリソースはデータベースシステムであり、データベースシステムへのデータの出力が想定されます。
  9. コンシューマがグローバルトランザクションに対してCurrent_commitを発行します。グローバルトランザクションは、他のリソースおよびチャネルに対してcommit命令を発行します。他のリソースは、トランザクションの完了処理を行います。チャネルではメッセージの受信が完了したことを確認して、イベントデータを削除します。

 上記のように、pull_waitを使用することでpullは待ち状態にならず、即時復帰します。したがって、ユーザは適切なトランザクションタイムアウト時間を設定することが可能になります。
 なお、pull_waitメソッドを発行しても、pull_waitメソッド自身が以下のタイムアウトとなる場合があります。その場合は、pull_waitメソッドをリトライするようにしてください。

タイムアウトの種類

例外

マイナーコード

pullのイベントデータ待ちタイムアウト

COMM_FAILURE

0x464a01c1
0x464a09c1

CORBAサービスのタイムアウト

COMM_FAILURE

0x464a0101
0x464a0901


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005