Interstage Application Server アプリケーション作成ガイド (イベントサービス編) |
目次
索引
![]() ![]() |
第4章 アプリケーションの開発(各機能) | > 4.5 ローカルトランザクションでのアプリケーション開発 |
ローカルトランザクションのトランザクションタイムアウトの監視時間は、不要となったトランザクションを回収することでシステム資源の回収を行う機能です。
ローカルトランザクションのタイムアウト時間は、essetcnfコマンド、またはessetcnfchnlコマンドを使用して設定します。essetcnfコマンドでの設定については、“構成情報の設定”を、essetcnfchnlコマンドでの設定については、“イベントチャネルの環境設定”を参照してください。
イベントデータの受信処理もローカルトランザクションのトランザクションタイムアウトの監視対象になります。イベントデータの受信処理は、イベントデータが存在しない場合は待ち状態になりますが、その時間もトランザクションタイムアウトの監視時間に含まれます。
したがって、トランザクションタイムアウトの監視時間を短い時間にチューニングした場合は、以下のような問題が発生する場合があります。
上記のようにpullでのデータ取得後にトランザクションタイムアウトが発生すると、コンシューマがタイムアウトを検出できるのは、local_commitとなります。その際、6.で他の資源に対するトランザクションが完了していたとすると、チャネルと他の資源の一貫性に矛盾が発生する可能性があります。
この問題を回避するためには、以下の方法があります。
以下にES_ChannelUtil_pull_waitメソッドを使用した際の動作を示します。
上記のように、pull_waitを使用することでpullは待ち状態にならず、即時復帰します。したがって、ユーザは適切なトランザクションタイムアウト時間を設定することができます。
なお、pull_waitメソッドを発行しても、pull_waitメソッド自身が以下のタイムアウトとなる場合があります。その場合は、pull_waitメソッドをリトライするようにしてください。
タイムアウトの種類 |
例外 |
マイナーコード |
pullのイベントデータ待ちタイムアウト |
COMM_FAILURE |
0x464a01c1 |
ローカルトランザクションタイムアウト |
COMM_FAILURE |
0x464a01c5 |
CORBAサービスのタイムアウト |
COMM_FAILURE |
0x464a0101 |
目次
索引
![]() ![]() |