ライフサイクル・リスナの開発 |
ライフサイクル・リスナのモジュールは、アプリケーション・サーバ環境内で短期、または長期の間、動作させる手段として、Javaベースのタスクとして提供します。 短い期間のタスクの例としては、シングルトンのインスタンス化があります。 また、長い期間のタスク例として、RMIサーバの起動から停止までの管理などがあります。 これらのモジュールは、サーバの開始時に自動的に初期化され、それ以降、サーバのライフサイクルの中における様々なフェーズで通知を受けます。
サーバのライフサイクル・イベント |
ライフサイクル・モジュールは、サーバのライフサイクルの中で下記のイベントに応じた受け入れ準備をしており、イベントを受け取るとそのイベントに応じた該当タスクを実行します。
INIT_EVENT
イベントの時、サーバは構成情報を読み込み、セキュリティやロギング・サービスのような内蔵サブシステムを初期化し、コンテナ群を生成します。
STARTUP_EVENT
イベントの時、サーバは配備済みのアプリケーションをロードし初期化します。
READY_EVENT
イベントの時、サーバはリクエストを受け入れる準備ができています。
SHUTDOWN_EVENT
イベントの時、サーバはロードしていたアプリケーションを破棄して停止します。
TERMINATION_EVENT
イベントの時、サーバはコンテナと内蔵サブシステム、サーバ実行時環境を閉じます。
これらのイベントは、LifecycleEvent
クラスで定義されます。
これらのイベントに受け入れ準備をするライフサイクル・モジュールは、LifecycleListener
インタフェースを実装し、domain.xml
ファイルの中で構成化されます。
LifecycleListener インタフェース |
ライフサイクル・モジュールを生成することは、com.nec.webotx.appserv.server.LifecycleListener
インタフェースを実装する、カスタマイズされたクラスを構成することです。
開発者は、複数のライフサイクル・モジュールを生成して、同時に実行することができます。
LifecycleListener
インタフェースでは、以下のメソッドを定義します。
public void handleEvent(com.nec.webotx.appserv.server.LifecycleEvent event) throws ServerLifecycleException
com.nec.webotx.appserv.server.ServerLifecycleException
例外を送出します。
LifecycleListener
インタフェースのサンプル実装を以下のように、LifecycleListenerImpl.java
ファイルとして示します。
このソースコードをライフサイクル・イベントのテスト用としても使用できます。
|
LifecycleEventクラス |
com.nec.webotx.appserv.server.LifecycleEventクラスは、サーバ・ライフサイクル・イベントを定義します。 イベントに関連するメソッドは下記のとおりです。
public java.lang.Object getData()
public int getEventType()
INIT_EVENT
、STARTUP_EVENT
、READY_EVENT
、SHUTDOWN_EVENT
、TERMINATION_EVENT
のいずれかのイベント・タイプを返します。
public com.nec.webotx.appserv.server.LifecycleEventContext getLifecycleEventContext()
LifecycleEvent
インスタンスは、前の章で説明したLifecycleListener.handleEvent
メソッドに渡されます。
サーバのライフサイクル・イベント・コンテキスト |
com.nec.webotx.appserv.server.LifecycleEventContext
インタフェースは、サーバに関する実行時情報を提供します。
ライフサイクル・イベント・コンテキストは、LifecycleEvent
クラスがサーバの初期化でインスタンス化される時に生成されます。
LifecycleEventContext
インタフェースは、下記のメソッドを定義しています。
public java.lang.String[] getCmdLineArgs()
public java.lang.String getInstallRoot()
public java.lang.String getInstanceName()
public javax.naming.InitialContext getInitialContext()
STARTUP_EVENT
イベントの最中にインストールされます。
ライフサイクル・モジュールは、STARTUP_EVENT
イベントが完了した後に、そのjndi-name
属性により、domain.xml
ファイルで定義された任意のリソースをルックアップすることができます。
注意 |
JNDIの中における他のエンタープラズ・リソースの名前と衝突を回避し、ポータビリティ問題を回避するために、WebOTXアプリケーションサーバでのライフサイクル・モジュール中の名前は全て、文字列「java:comp/env 」から始まらなければなりません。
|
---|
READY_EVENT
イベントの中で行うことができます。
そのモジュールは、全てのリソースがバインドされている初期コンテキストを得るために、getInitialContext()
メソッドを使用することができます。
public void log(java.lang.String message)
message
パラメータには、String型でログファイルに書き込む文字列を指定します。
public void log(java.lang.String message, java.lang.Throwable throwable)
message
パラメータは、エラーか例外について記述するString型です。
throwable
パラメータは、Throwable型のエラーか例外です。
ライフサイクル・モジュールの作成と配備 |
ライフサイクル・モジュールの作成 |
ライフサイクル・モジュールを作成するためには、下記に示すステップで組み立てていきます。
jar -cvf moudle_name.jar *
ライフサイクル・モジュールの配備 |
ライフサイクル・モジュールは、下記のツールを使って配備することができます。
otxadminコマンド
ライフサイクル・モジュールを配備するためには、otxadmin create-lifecycle-module
コマンドを用います。
その構文は次のとおりです。一部のオプショナル・パラメータには既定値を示しています。
otxadmin create-lifecycle-module --user user --classname classname
[--classpath classpath] [--loadorder load_order_number]
[--failurefatal=false] [--enabled=true] [--description text_description]
[--property (name=value)[:name=value]*] modulename
otxadmin
コマンドの一般的なオプショナルのパラメータ
(--password
、--passwordfile
、--host
、--port
、--terse
、--echo
、--interactive
)
に関しては、運用管理コマンド リファレンスマニュアルを参照してください。
(例)
otxadmin create-lifecycle-module --user admin --classname RMIServer MyRMIServer
ライフサイクル・モジュールを配備解除するためには、otxadmin delete-lifecycle-module
コマンドを用います。
その構文は次のとおりです。一部のオプショナル・パラメータには既定値が適用されます。
otxadmin delete-lifecycle-module --user user modulename
(例)
otxadmin delete-lifecycle-module --user admin MyRMIServer
配備済みライフサイクル・モジュールに一覧を得るためには、otxadmin list-lifecycle-modules
コマンドを用います。
その構文は次のとおりです。一部のオプショナル・パラメータには既定値が適用されます。
otxadmin list-lifecycle-modules --user user
(例)
otxadmin delete-lifecycle-module --user admin
ライフサイクル・モジュールの構成情報 |
ライフサイクル・モジュール配備中に、lifecycle-module
要素がdomain.xml
ファイルに生成されます。
管理者は、その構成を変更するために、このファイルを編集することができます。
property
サブ要素は、入力パラメータを指定することを可能にします。
以下に例を示します。
|
is-failure-fatal
がtrue
(既定値はfalse
)に設定される場合、ライフサイクル・モジュールの動作に失敗すると、シャットダウン時か終了時ではなく、サーバの初期化時か開始時に、サーバ動作を停止に働かせることに注意してください。
ライフサイクル・モジュールを配備した後、それを活性化するためにはサーバを再起動しなければなりません。 サーバはモジュールをインスタンス化し、サーバの初期化でライフサイクル・イベント・リスナとしてモジュールを登録します。
サーバのライフサイクル・モジュールで考慮する点 |
初期化または開始の中で割り当てられたリソースは、シャットダウンまたは終了の中で解放されるべきです。 ライフサイクル・モジュール・クラスは、メイン・サーバ・スレッドから同期して呼ばれます。したがって、これらのクラスがサーバをブロックしないことを保証することが重要です。 それに適合するならば、ライフサイクル・モジュールはスレッドを生成してもよいです。しかし、これらのスレッドはシャットダウンと終了の段階の中でスレッド処理を中止しなければなりません。
LifeCycleModule Classloaderは、ライフサイクル・モジュール用の親クラスローダです。
各ライフサイクル・モジュールのdomain.xml
内におけるclasspath
値は、そのクラスローダを構築するために使用されます。
classloaderを構築するために使用される。
ライフサイクル・モジュールによって必要とされる全ての支援クラスは、LifeCycleModule Classloader、あるいはその親やConnector Classloaderで利用可能でなければなりません。
運用者、またはモジュール開発者は、server.policy
ファイルを適切に設定することを保証しなければなりません。また、System.exec()
を実行しようとするライフサイクル・モジュールは、セキュリティ・アクセス妨害を引き起こすかもしれません。
ライフサイクル・モジュールへの構成済みプロパティは、INIT_EVENT
イベント内でプロパティとして渡されます。
JNDIネーミング・コンテキストは、INIT_EVENT
イベント内においては利用できません。
ライフサイクル・モジュールがネーミング・コンテキストを必要とする場合、それはSTARTUP_EVENT
、READY_EVENT
、SHUTDOWN_EVENT
イベントの中で得ることができます。
APIリファレンス |
ライフサイクル・リスナ API 仕様