カスタム・アドバイザーは、クラス・ファイルとして提供される小さな Java™ コードであり、サーバーのロードを 判定するために Load Balancer 基本コードによって呼び出されます。基本コードは、カスタム・アドバイザーのインスタンスの開始と停止、状況および報告書の提供、ヒストリー情報のログ・ファイルへの記録、さらにアドバイザー結果のマネージャー・コンポーネントへの報告など、必要なすべての管理サービスを提供します。
Load Balancer 基本コードがカスタム・アドバイザーを 呼び出すと、以下のステップが実行されます。
通常 モードまたは置換 モード で Load Balancer と対話するよう、カスタム・アドバイザーを設計できます。
操作モードの選択は、カスタム・アドバイザー・ファイルで、コンストラクター・メソッドのパラメーターとして指定されます。(各アドバイザーは設計に基づいて、上記のモードのいずれかでのみ稼働します。)
通常モードでは、カスタム・アドバイザーがサーバーとデータを交換し、基本アドバイザー・コードが交換の時間を測定して、ロード値を計算します。その後、基本コードがこのロード値をマネージャーに報告します。成功を示す場合は値ゼロが、 またはエラーを示す場合は -1 がカスタム・アドバイザーから戻されます。
通常モードを指定するには、コンストラクター内の replace フラグを false に設定してください。
置換モードでは、基本コードはいかなる時間測定も行いません。カスタム・アドバイザーはその固有の要件に基づいて、指定された操作をすべて実行し、その後、実際のロード値を戻します。基本コードはそのロード値を受け入れ、それをそのままマネージャーに報告します。最良の結果を得るには、高速サーバーを表す 10 と低速サーバーを表す 1000 によって、ロード値を 10 から 1000 の間で正規化してください。
置換モードを指定するには、コンストラクター内の replace フラグを true に設定してください。
カスタム・アドバイザー・ファイル名は ADV_name.java という形式に従わなければなりません。 ここで name はアドバイザーのために選択する名前です。 完全な名前は大文字の接頭部 ADV_ で始まり、後続の文字がすべての小文字でなければなりません。ここで小文字を使用することにより、アドバイザーを実行するためのコマンドでの大/小文字の区別が不要になります。
Java の規則に従って、ファイル内で定義されるクラスの名前はファイルの 名前と一致しなければなりません。
カスタム・アドバイザーは Java 言語で書く必要があり、Load Balancer コードと同じレベルの Java コンパイラーでコンパイルしなければなりません。ご使用の システム上の Java のバージョンを確認するには、 install_path/java/bin ディレクトリーから次のコマンドを実行します。
java -fullversion
現行ディレクトリーがお客様のパスの一部ではない場合、正しいバージョン情報が確実に得られるようにするために、現行ディレクトリーから Java を実行するように指定する必要があります。 その場合、以下のコマンド を install_path/java/bin ディレクトリーから実行してください。
./java -fullversion
コンパイル時には、以下のファイルが参照されます。
コンパイル時には、クラスパス環境変数がカスタム・アドバイザー・ファイルと基本クラス・ファイルの 両方を指していなければなりません。 コンパイル・コマンドの形式は次の とおりです。UNIX Windows システムの場合、コンパイル・コマンドは 次の例のようになります。
install_path/java/bin/javac -classpath /opt/ibm/edge/lb/servers/lib/ibmlb.jar ADV_name.java
ただし、
コンパイルの出力は ADV_name.class などのクラス・ファイルです。アドバイザーを開始する前に、 クラス・ファイルを install_path/servers/lib/CustomAdvisors/ ディレクトリーに コピーしてください。
カスタム・アドバイザーを実行するには、最初にアドバイザーのクラス・ファイル を Load Balancer マシンの lib/CustomAdvisors/ サブディレクトリーにコピーする必要があります。 例えば、myping というカスタム・アドバイザーの場合、ファイル・パスは、install_path/servers/lib/CustomAdvisors/ADV_myping.class になります。
Load Balancer を構成し、マネージャー機能を開始した後、カスタム・アドバイザー を開始するコマンドを発行します。カスタム・アドバイザーは、次のように、その名前から ADV_ 接頭部とファイル拡張子を除いたものによって指定されます。
dscontrol advisor start myping port_number
コマンドに指定するポート番号は、アドバイザーがターゲット・サーバーとの接続をオープンするポートです。
すべてのアドバイザーと同様に、カスタム・アドバイザーは、ADV_Base と呼ばれるアドバイザー基本クラスの機能性を拡張 します。アドバイザー・ベース は、マネージャーの重みづけアルゴリズムで使用できるようにマネージャーに ロードを報告するなど、アドバイザーの大部分の機能を実行します。アドバイザー・ベースはまた、ソケット接続およびクローズ操作を実行し、アドバイザーが使用する送信および受信メソッドを提供します。アドバイザーは、調査中のサーバー用に指定されたポートでデータを送信および受信するためだけに使用されます。アドバイザー・ベース内の TCP メソッドは、ロードを計算するために時間測定されます。アドバイザー・ベースのコンストラクター内のフラグが、既存のロードをアドバイザーから戻された新しいロードで上書きするかどうかを示します。
アドバイザーには、以下の基本クラス・メソッドがあります。
これらの必須ルーチンに関する詳細は、このセクションで後述します。
カスタム・アドバイザーは、ネイティブ・アドバイザーまたは標準アドバイザーを検索した後に呼び出されます。 Load Balancer は、指定されたアドバイザーを標準アドバイザーのリスト中で見つけられない場合、 カスタム・アドバイザーのリストを調べます。アドバイザーの使用に関する追加情報 が「WebSphere® Application Server Load Balancer 管理ガイド 」に記載されています。
カスタム・アドバイザーの名前およびパスについては、以下の要件を忘れないでください。
public <advisor_name> (
String sName;
String sVersion;
int iDefaultPort;
int iInterval;
String sDefaultLogFileName;
boolean replace
)
void ADV_AdvisorInitialize()
このメソッドは、カスタム・アドバイザーに必要な初期化を実行するために提供されます。このメソッドが呼び出されるのはアドバイザー基本モジュールを開始した後です。
標準アドバイザーを含む多くの場合においてこのメソッドは使用されず、 そのコードを構成するのは return ステートメントだけです。 このメソッドは suppressBaseOpeningSocket メソッドを呼び出すために使用できます。 suppressBaseOpeningSocket メソッドが有効であるのは上記のメソッド内から呼び出された場合のみです。
int getLoad(
int iConnectTime;
ADV_Thread *caller
)
以下のセクションで説明するメソッドまたは関数は、カスタム・アドバイザーから呼び出せます。これらのメソッドはアドバイザー基本コードによってサポートされています。
一部の関数呼び出し (例えば function_name () など) は直接に作成できますが、その他は接頭部 caller を必要とします。caller は基本アドバイザー・インスタンスを示し、これは実行されるカスタム・アドバイザーをサポートします。
ADVLOG 関数により、カスタム・アドバイザーはテキスト・メッセージをアドバイザー基本ログ・ファイルに書き込むことができます。形式は次のとおりです。
void ADVLOG (int logLevel, String message)
getAdvisorName 関数は、カスタム・アドバイザーの名前の接尾部部分が入った Java ストリングを戻します。例えば、ADV_cdload.java という名前のアドバイザーでは、この関数は値 cdload を戻します。
この関数にはパラメーターを使用しません。
この値はアドバイザーのインスタンス化中に変更できないことに注意してください。
getAdviseOnPort 関数は、呼び出しカスタム・アドバイザーを実行するポート番号を戻します。戻り値は Java 整数 (int) であり、この関数にはパラメーター はありません。
この値はアドバイザーのインスタンス化中に変更できないことに注意してください。
getCurrentServerId 関数は、現行サーバーを一意的に表す Java ストリングを戻します。
アドバイザー基本コードがすべてのサーバー・マシンを連続して照会するため、通常はカスタム・アドバイザーを呼び出すたびにこの値が変更されます。
この関数にはパラメーターを使用しません。
getCurrentClusterId 関数呼び出しは、現行クラスターを一意的に表す Java ストリングを戻します。
アドバイザー基本コードがすべてのクラスターを連続して照会するため、通常はカスタム・アドバイザーを呼び出すたびにこの値が変更されます。
この関数にはパラメーターを使用しません。
getSocket 関数呼び出しは、通信のために現行サーバーに対してオープンされているソケットを表す Java ソケットを戻します。
この関数にはパラメーターを使用しません。
getInterval 関数は、アドバイザー・サイクル間の秒数であるアドバイザー間隔を戻します。この値は、 dscontrol コマンドを使用して実行時に変更しない限り、 カスタム・アドバイザーのコンストラクターに設定されたデフォルト値と同じです。
戻り値は Java 整数 (int) です。この関数にはパラメーターを使用しません。
getLatestLoad 関数により、カスタム・アドバイザーは指定サーバー・オブジェクトの最新ロード値を獲得できます。 ロード値は、アドバイザー基本コードおよびマネージャー・デーモンによって内部テーブルで保守されています。
int caller.getLatestLoad (String clusterId, int port, String serverId)
3 つの引数は 1 つのサーバー・オブジェクトをともに定義します。
戻り値は整数です。
この関数呼び出しは、あるプロトコルまたはポートの動作を別のものの動作に依存させる場合に役立ちます。例えば、同一マシン上の Telnet サーバーが使用不可である場合に、特定アプリケーション・サーバーを使用不可にするカスタム・アドバイザーでこの関数呼び出しを使用する場合などです。
receive 関数は、ソケット接続から情報を入手します。
caller.receive(StringBuffer *response)
パラメーター response は、検索されたデータが置かれるストリング・バッファーです。さらに、この関数は以下の重要度のある整数値を戻します。
send 関数は、指定ポートを使用してデータのパケットをサーバーに送信するために確立したソケット接続を使用します。
caller.send(String command)
パラメーター command は、サーバーに送信するデータが入っているストリングです。この関数は、以下の重要度のある整数値を戻します。
suppressBaseOpeningSocket 関数呼び出しにより、カスタム・アドバイザーの代わりに 基本アドバイザー・コードがサーバーへの TCP ソケットをオープンするかどうかを カスタム・アドバイザーが指定できます。 アドバイザーが状況を判別するためにサーバーとの直接通信を使用しない場合は、このソケットをオープンする必要はありません。
この関数呼び出しを出せるのは一度だけであり、ADV_AdvisorInitialize ルーチンから出さなければなりません。
この関数にはパラメーターを使用しません。