コントローラーは、サーバントの終了を判別した場合、
通常は、そのサーバントにディスパッチされていた他のすべての作業要求をクリーンアップします。
そのサーバントが最後のサーバントである場合、新規作業要求は、サーバントが使用可能になるまで要求キューに入れられます。
サーバントが使用可能になるまでの経過時間によっては、これらの要求は終了することがあります。
これは、要求を処理するために許可された期限が切れたためです。
期限切れを防ぐために、アプリケーション・サーバーの構成設定を変更して、
コントローラーが新規要求を受け入れないようにすることができます。
このタスクについて
コントローラーは、継続的にアプリケーション要求を受信し、サーバントにディスパッチして処理させます。
データベース・エラーなどのシステム・レベルの問題が発生した場合、
要求処理は停止し、要求はコントローラーおよびサーバント間のキューに集められます。
サーバントが使用可能になるまでの間は、タイムアウトになり始めるま
で、要求は継続的にキューに集められます。
タイムアウトが発生すると、タイムアウトした要求は、キューから除去されます。
新規サーバントが、要求の受け入れを開始する準備が整ったときに、
キュー内の次の要求がタイムアウト直前だった場合、その要求のディスパッチ処理は完了できず、
そのサーバントは再びタイムアウト処理によって終了します。
要求は再び他の新規サーバントの準備が整うまでキューに累積され、同じタイムアウトの問題が発生する可能性があります。
この問題が発生し続けると、サーバントのバウンス 問題と呼ばれることがあります。
この問題は、以下のいずれかの方法で処理できます。
- 非サーバー状況を自動的に検出して、サーバントの構成済み最小数が作業を受け入れられるようになるまで、
要求の受け入れを停止するようにサーバーを構成できます。
これが、一番簡単な方法です。
- サーバントがタイムアウトが原因で終了する前に、システム問題が発生していることを検出できる場合、
その問題を処理する自動ルーチンを作成できます。
この自動ルーチンは、f server, pauselisteners コマンドを発行して、
このサーバーが要求を受け入れないようにできます。
次に、ルーチンは、事情の変化を検出し、
検出されたシステム問題が解決されたときに
f server, resumelisteners コマンドを発行する必要があります。
- 非サーバー状況を検出して、
要求の受け入れを停止し、前述の自動ルーチンを作成する
ようにサーバーを構成できます。
自動ルーチンは、発生する可能性のある異なる処理を認識する必要が
あります。これは、サーバーが、非サーバー状況を検出するように構成されているためです。
- f server, pauselisteners コマンドが発行されているにも関わらず、
最後のサーバントが終了した場合、サーバーはすべての要求のリジェクトを開始し、メッセージ BBOO0299I を発行します。
サーバントの最小数が作業を受け入れることが可能になった場合、このサーバントに対して構成されているサーバーは、
自動的に要求の受け入れを開始します。
要求が再び処理されたことを示すメッセージ BBOO0300I も発行されます。
したがって、自動ルーチンは、サーバーが要求の受け入れを再開したと
いうことを、サーバントの最小数が使用可能になったということを検出することによって認識する必要があります。
- control_region_confirm_recovery_on_no_srs カスタム・プロパティーがサーバーに対して指定されている場合、
サーバントの最小数が新規要求を処理できるようになったということを検出した後に、
このサーバントに対して構成されているサーバーは WTOR メッセージ BBOO0297A を発行します。
サーバーが実際に作業の受け入れを開始する前に、このメッセージに応答を入力する必要があります。
- 自動ルーチンによって、サーバーがタイムアウト処理でサーバントを終了させないようになっている場合、
自動ルーチンは、サーバーが要求の受け入れをいつ再開するのが安全かということを認識し、
その時点で f server, resumelisteners コマンドを発行する必要もあります。
自動ルーチンは、メッセージ BBOO0299I が発行されるかどうかに応じて
f server, resumelisteners
コマンドを発行する必要があるかどうかを判別するようにセットアップできます。
このメッセージは、サーバーがサーバントを使い果たし、要求をリジェクトしていることを示しています。
この方法は最も複雑ですが、最大の柔軟性を提供します。
非サーバー状況を処理するようにサーバーを構成するには、以下のステップを実行します。
プロシージャー
- 管理コンソールで、「サーバー」>「アプリケーション・サーバー」とクリックし、
非サーバント状況を自動検出させるアプリケーション・サーバーを選択します。
- 「追加プロパティー」の下で、「カスタム・プロパティー」>「新規」とクリックします。
- 「名前」フィールドに control_region_dreg_on_no_srs と指定し、
「値」フィールドに 1 と指定します。
このカスタム・プロパティーが 1 に設定されているときに、
サーバーが、要求を処理する準備が整っているサーバントが存在しないことを検出した場合、
そのサーバーはディスパッチのターゲットになっているすべての要求をリジェクトします。
このプロパティーを 0 (ゼロ) に設定すると、この機能はオフになります。
- 「名前」フィールドに control_region_confirm_recovery_on_no_srs
と指定し、「値」フィールドに 0 (ゼロ) または 1 のいずれかを指定します。
「値」フィールドに 0 を入力した場合、
コントローラーは、サーバントの最小数が要求を受信する準備が整った直後に、要求の受け入れを再開します。
「値」フィールドに 1 を入力した場合、
サーバントの最小数が作業を受け入れる準備が整ったことを検出した直後に、
コントローラーは WTOR メッセージ BBOO0297A を発行します。
サーバーはこのサーバントに対して構成されています。
サーバーは、要求の受け入れを実際に再開する前に、このメッセージに対する応答を受信するまで待機します。
- 「保管」および「同期化」をクリックして、
この構成変更を適用します。
結果
コントローラーがサーバントの終了を判別し、そのサーバーとが最後のサーバントである場合、
サーバントの最小数を要求の受信に使用可能になるまではコントローラーは新規作業要求を受け入れません。