アプリケーション・サーバーの 1 つ以上のカスタム・サービスを作成できます。
各カスタム・サービスでは、サーバーの始動とシャットダウンの際にロードおよび初期化されるクラスを定義しています。
これらのクラスのそれぞれに、com.ibm.websphere.runtime.CustomService インターフェースを
実装する必要があります。カスタム・サービスを作成後、管理コンソールを使用して、
アプリケーション・サーバーのカスタム・サービスを構成します。
このタスクについて
カスタム・サービスは、コントローラーではなくサーバントで実行します。
例えば、サーバーの存続期間に始動されるサーバントが複数あり、
これらのサーバントは、WLM の必要に応じて、サーバー (コントローラー) の稼働後しばらくしてから始動される場合があるため、
カスタム・サービスが各サーバントの始動中に実行します。
サーバーが始動およびシャットダウンしたときに実行される
フック・ポイントを定義する必要がある場合は、
カスタム・サービス・クラスを作成し、次に管理コンソールを使用してカスタム・サービス・インスタンスを構成します。
アプリケーション・サーバーの始動時に、
カスタム・サービスの開始と初期化が行われます。
以下のリストは、
WebSphere Application Server カスタム・サービスの実装に
適用される制約事項です。これらの制約事項の大部分は、初期化メソッドにのみ
適用されます。
- 初期化およびシャットダウン・メソッドは、ランタイムに制御を戻す必要があります。
- すべてのカスタム・サービスの初期化メソッドが戻るまでは、サーバー・インスタンスに作業はディスパッチされません。
- 初期化およびシャットダウン・メソッドは、各サービスごと、およびサーバー・インスタンスを構成するオペレーティング・システム・プロセスごとに 1 度だけ呼び出されます。
- 処理レベルの静的データの初期化 (処理を残さない) がサポートされます。
- JDBC RMLT (リソース・マネージャー・ローカル・トランザクション) 操作のみサポートされます。メソッドが戻される前に、
すべての作業単位 (UOW) を完了する必要があります。
- スレッドの作成はサポートされません。
- ソケットおよび I/O (ファイル入出力を除く) の作成はサポートされません。
- クライアント・コード、サーブレット、エンタープライズ Bean などの標準 Java 2 Platform, Enterprise Edition (J2EE) コードの実行はサポートされません。
- Java Transaction API (JTA) インターフェースは使用できません。
- このフィーチャーは、J2EE サーバー・プロセスで使用可能で、汎用サーバー・プロセスのみを分散します。
- ランタイムがシャットダウンを呼び出そうとする際、プロセスの終了前にシャットダウンが呼び出される保証はありません。
- リソースを要求する JNDI 操作はサポートされていません。
プロシージャー
- com.ibm.websphere.runtime.CustomService インターフェースをインプリメントする、カスタム・サービス・クラスを開発します。
com.ibm.websphere.runtime.CustomService インターフェースには、
初期化メソッドとシャットダウン・メソッドが組み込まれています。
アプリケーション・サーバーは、初期化メソッドを使用してカスタム・サービスにプロパティーを受け渡します。
これらのプロパティーには、以下が含まれます。
- サービスの構成情報を含む外部ファイルの名前を指定するプロパティー。
この情報を検索するために、externalConfigURLKey プロパティーが使用できます。
- サービス用の他のシステム管理構成データと一緒にサービス用に保管される、名前と値のペアを含むプロパティー。
例外を作成する可能性があることを宣言する初期化メソッドとシャットダウン・メソッドの両方。
ただし、特定の例外サブクラスは定義しません。いずれかのメソッドにより例外が作成される場合、ランタイムはその例外をログに記録し、
カスタム・サービスを使用不可にし、サーバーの始動を継続します。
- カスタム・サービスを構成します。
管理コンソールで、「サーバー」>「アプリケーション・サーバー」とクリックして、次に「サーバー・インフラストラクチャー」で、「カスタム・サービス」>「新規」とクリックします。
カスタム・サービス・インスタンスの設定ページで、
既存のアプリケーション・サーバーのカスタム・サービス構成を作成して、
インプリメントするクラスの名前を指定します。
カスタム・サービス・クラスに構成ファイルが必要な場合は、
構成ファイルの完全修飾パス名を「externalConfigURL」フィールドに指定します。
このファイル名は、カスタム・サービス・クラスに渡されます。
カスタム・サービスからネイティブ・ライブラリーを呼び出すには、
カスタム・サービスのクラスおよび JAR ファイルを見つけるのに使用されるパス名に加え、Classpath フィールドにパス名を提供します。
このプロシージャーによりパス名が拡張クラス・ローダーに追加されて、カスタム・サービスはネイティブ・ライブラリーを見つけ、正しくロードすることができます。
- アプリケーション・サーバーを停止してから再始動します。
アプリケーション・サーバーを停止してから再始動します。
結果
各カスタム・サービスでは、サーバーの始動とシャットダウンの際にロードおよび初期化されるクラスを定義しています。
サーバーの始動および停止時に、
カスタム・サービスのロードと初期化が行われます。
例
既述のとおり、カスタム・サービス・クラスは com.ibm.websphere.runtime.CustomService インターフェースをインプリメントする必要があります。
また、このクラスは initialize および shutdown メソッドを
インプリメントする必要があります。
以下の例は、カスタム・サービスをインプリメントする
ServerInit クラスを宣言するコードを示しています。
このコードでは、カスタム・サービス・クラスが構成ファイルを必要とする
ことを想定しています。
また、この例には、外部の構成ファイルにアクセスするコードも含まれています。
クラスが構成ファイルを必要としない場合は、
このコードの configProperties 部分を含める必要はありません。
public class ServerInit implements com.ibm.websphere.runtime.CustomService
{
/**
* The initialize method is called by the application server runtime when the
* server starts. The Properties object that the application server passes
* to this method must contain all of the configuration information that this
* service needs to initialize properly.
*
* @param configProperties java.util.Properties
*/
static final java.lang.String externalConfigURLKey =
"com.ibm.websphere.runtime.CustomService.externalConfigURLKey";
static String ConfigFileName="";
public void initialize(java.util.Properties configProperties) throws Exception
{
if (configProperties.getProperty(externalConfigURLKey) != null)
{
ConfigFileName = configProperties.getProperty(externalConfigURLKey);
}
// Implement rest of initialize method
}
/**
* The shutdown method is called by the application server runtime when the
* server begins its shutdown processing.
*
public void shutdown() throws Exception
{
// Implement shutdown method
}
次の作業
アプリケーション・サーバーを調べて、
カスタム・サービスの初期化メソッドおよびシャットダウン・メソッドが意図したとおりに実行されたことを確認してください。