以下の節では、WebLogic Server のアプリケーション ライフサイクル イベントに応答するアプリケーションの作成方法について説明します。
アプリケーション バージョン ライフサイクル イベントのプログラミング
注意 : アプリケーション スコープの起動クラスと停止クラスは、WebLogic Server のリリース 9.0 以降では非推奨になりました。起動クラスと停止クラスに関するこの章の情報は、下位互換性のためにのみ提供されています。このクラスの代わりに、ライフサイクル リスナ イベントをアプリケーションで使用してください。 |
アプリケーション ライフサイクル リスナ イベントは、デプロイメント、アンデプロイメント、および再デプロイメント時の動作を開発者が制御できるハンドルを提供します。この節では、アプリケーション ライフサイクル リスナ イベントの使用方法について説明します。
WebLogic Server には、リスナ クラス、停止クラス、および起動クラスを拡張するときに使用できる 4 つのアプリケーション ライフサイクル イベントがあります。以下のものが含まれます。
リスナ - 任意のイベントにアタッチできる。次に、リスナのメソッドの例を示します。
prompt> java weblogic.DDConverter [options
] archive_file_or_directory
preStart イベントは、準備フェーズを開始、またはアプリケーションのデプロイメント プロセスを開始する。
prompt> java weblogic.DDConverter [options] archive_file_or_directory
postStart イベントは、アクティブ化フェーズを終了、またはアプリケーションのデプロイメント プロセスを終了する。アプリケーションがデプロイされます。
prompt> java weblogic.DDConverter [options] archive_file_or_directory
preStop イベントは、非アクティブ化フェーズを開始、またはアプリケーションの削除またはアンデプロイメントのプロセスを開始する。
prompt> java weblogic.DDConverter [options] archive_file_or_directory
postStop イベントは、削除フェーズを終了、またはアプリケーションの削除またはアンデプロイメントのプロセスを終了する。
停止クラスは postStop イベントのみを取得する。
注意 : アプリケーション スコープの停止クラスは、WebLogic Server のリリース 9.0 以降では非推奨になりました。代わりに、ライフサイクル リスナを使用してください。 |
起動クラスは preStart イベントのみを取得する。
注意 : アプリケーション スコープの停止クラスは、WebLogic Server のリリース 9.0 以降では非推奨になりました。代わりに、ライフサイクル リスナを使用してください。起動クラスおよび停止クラスでは、
|
これらのイベントを使用するには、weblogic-application.xml
デプロイメント記述子に登録する必要があります。「エンタープライズ アプリケーションのデプロイメント記述子の要素」を参照してください。以下の要素を定義します。
listener
- ユーザ定義のアプリケーション ライフサイクル リスナを登録するときに使用する。これらは、抽象基本クラス weblogic.application.ApplicationLifecycleListener
を拡張するクラスである。
shutdown
- ユーザ定義の停止クラスを登録するときに使用する。
startup
- ユーザ定義の起動クラスを登録するときに使用する。
抽象クラス (WebLogic Server 付属のクラス) weblogic.application.ApplicationLifecycleListener
を拡張することにより、リスナを作成します。作成したリスナは、コンテナの検索対象になります。
WebLogic Server の ApplicationLifecycleListener
抽象クラスに提供されている次のメソッドをオーバーライドし、必要な機能を追加してアプリケーションを拡張します。
preStart{}
postStart{}
preStop{}
postStop{}
コード リスト 10-1 に、ApplicationLifecycleListener をオーバーライドする方法を示します。この例では、パブリック クラス MyListener が ApplicationLifecycleListener を拡張しています。
コード リスト 10-1 MyListener
import weblogic.application.ApplicationLifecycleListener; import weblogic.application.ApplicationLifecycleEvent; public class MyListener extends ApplicationLifecycleListener { public void preStart(ApplicationLifecycleEvent evt) { System.out.println ("MyListener(preStart) -- we should always see you.."); } // preStart public void postStart(ApplicationLifecycleEvent evt) { System.out.println ("MyListener(postStart) -- we should always see you.."); } // postStart public void preStop(ApplicationLifecycleEvent evt) { System.out.println ("MyListener(preStop) -- we should always see you.."); } // preStop public void postStop(ApplicationLifecycleEvent evt) { System.out.println ("MyListener(postStop) -- we should always see you.."); } // postStop public static void main(String[] args) { System.out.println ("MyListener(main): in main .. we should never see you.."); } // main }
コード リスト 10-2 に、停止クラスを実装する方法を示します。停止クラスは、preStop イベントおよび postStop イベントにアタッチできます。この例では、パブリック クラス MyShutdown
は ApplicationLifecycleListener
を拡張しません。これは、weblogic-application.xml
デプロイメント記述子で宣言された停止クラスは WebLogic Server 固有のインタフェースに依存しないためです。
コード リスト 10-2 MyShutdown
import weblogic.application.ApplicationLifecycleListener; import weblogic.application.ApplicationLifecycleEvent; public class MyShutdown { public static void main(String[] args) { System.out.println ("MyShutdown(main): in main .. should be for post-stop"); } // main }
コード リスト 10-3 に、起動クラスを実装する方法を示します。起動クラスは、preStart イベントおよび postStart イベントにアタッチできます。この例では、パブリック クラス MyStartup
は ApplicationLifecycleListener
を拡張しません。これは、weblogic-application.xml
デプロイメント記述子で宣言された起動クラスは WebLogic Server 固有のインタフェースに依存しないためです。
コード リスト 10-3 MyStartup
import weblogic.application.ApplicationLifecycleListener; import weblogic.application.ApplicationLifecycleEvent; public class MyStartup { public static void main(String[] args) { System.out.println ("MyStartup(main): in main .. should be for pre-start"); } // main }
run-as-principal-name
要素を使用して起動イベントや停止イベントに対しユーザ ID を指定できる、ロールベース機能を備えたアプリケーション ライフサイクル イベントをコンフィグレーションできます。ただし、アプリケーション ライフサイクル リスナ用に定義された run-as-principal-name
ID が管理者である場合、アプリケーション デプロイヤには管理者特権が必要です。これがない場合、デプロイメントは失敗します。
「基本的なライフサイクル リスナ機能のプログラミング」で説明した基本的なプログラミング手順に従います。
listener
要素内に、run-as-principal-name
要素を追加して、イベントの起動や停止を行う特権を持つユーザを指定します。たとえば、
prompt> java weblogic.DDConverter [options] archive_file_or_directory
ここに指定する ID はシステムの有効なユーザ名である必要があります。run-as-principal-name
を指定しない場合、アプリケーション ライフサイクル リスナの実行のための run-as
ID としては、デプロイメント開始者のユーザ ID が使用される。
次の例に、weblogic-application.xml
デプロイメント記述子ファイルでアプリケーション ライフサイクル イベントをコンフィグレーションする方法を示します。URI パラメータは必須ではありません。アプリケーションの $CLASSPATH
内であれば任意の位置にクラスを配置できます。ただし、$CLASSPATH
にクラスの位置を定義する必要があります。EAR に APP-INF/classes
ディレクトリまたは APP-INF/lib
ディレクトリが存在する場合は、これらのディレクトリにリスナを配置できます。この場合、リスナは自動的に $CLASSPATH
に含まれます。
次の例に、URI パラメータを使用してアプリケーション ライフサイクル イベントをコンフィグレーションする方法を示します。この例では、アーカイブ foo.jar
はクラスを含み、EAR ファイルの最上位に存在します。(例 : myEar/foo.jar
)。
コード リスト 10-4 URI パラメータを使用したアプリケーション ライフサイクル イベントのコンフィグレーション
<listener> <listener-class>MyListener</listener-class> <listener-uri>foo.jar</listener-uri> </listener> <startup> <startup-class>MyStartup</startup-class> <startup-uri>foo.jar</startup-uri> </startup> <shutdown> <shutdown-class>MyShutdown</shutdown-class> <shutdown-uri>foo.jar</shutdown-uri> </shutdown>
次の例に、URI パラメータを使用せずにアプリケーション ライフサイクル イベントをコンフィグレーションする方法を示します。
アプリケーションの完全な再デプロイメントが発生する場合にのみ、アプリケーション ライフサイクル イベントが開始されます。アプリケーションの完全な再デプロイメント時に、アプリケーション ライフサイクル イベントが登録済みであれば、アプリケーション ライフサイクルはまず停止シーケンスを開始し、次にクラスを再初期化し、その後開始シーケンスを実行します。
たとえば、完全なアプリケーション ライフサイクル イベント セット (preStart、postStart、preStop、postStop) に対してリスナが登録されている場合、完全な再デプロイメント時に次のイベント シーケンスが表示されます。
preStop{}
postStop{}
初期化の開始 (デバッグ フラグを設定していない場合は、初期化の内容は表示されません)
preStart{}
postStart{}
以下の節では、WebLogic Server のアプリケーション バージョン ライフサイクル イベントに応答するアプリケーションの作成方法について説明します。
WebLogic Server はアプリケーション バージョン ライフサイクル イベントの通知を提供しており、ApplicationVersionLifecycleListener
クラスを拡張して weblogic-application.xml
でライフサイクル リスナを指定できます。「エンタープライズ アプリケーションのデプロイメント記述子の要素」と「URI パラメータを指定した場合と指定しない場合のライフサイクル イベントのコンフィグレーション例」を参照してください。
アプリケーション バージョン ライフサイクル イベントは次のように呼び出されます。
静的なデプロイメントと動的なデプロイメントのいずれの場合にも呼び出される。
匿名 ID とユーザ ID のいずれかを使用して呼び出される。
現在のアプリケーションがバージョン管理されている場合にのみ呼び出される。それ以外の場合、バージョン ライフサイクル イベントは無視されます。
リスナを登録しているバージョンを含めて、すべてのアプリケーション バージョンについて呼び出される。イベントが特定のバージョンに属しているかどうかを調べるには、ApplicationVersionLifecycleEvent.isOwnVersion
メソッドを使用します。バージョン ライフサイクル イベントの種類の詳細については、ApplicationVersionLifecycleEvent
クラスを参照してください。
WebLogic Server には 4 つのアプリケーション バージョン ライフサイクル イベントがあります。
public void
preDeploy(ApplicationVersionLifecycleEvent evt)
preDeloy
イベントは、アプリケーション バージョンのデプロイまたは再デプロイ操作が開始されたときに呼び出されます。
public void
postDeploy(ApplicationVersionLifecycleEvent evt)
postDeloy
イベントは、アプリケーション バージョンが正常にデプロイまたは再デプロイされたときに呼び出されます。
public void
preUndeploy(ApplicationVersionLifecycleEvent evt)
preUndeloy
イベントは、アプリケーション バージョンのアンデプロイ操作が開始されたときに呼び出されます。
public void
postDelete(ApplicationVersionLifecycleEvent evt)
postDelete
イベントは、アプリケーション バージョンが削除されたときに呼び出されます。
prompt> java weblogic.DDConverter [options] archive_file_or_directory
以下の表では、デプロイメント (V1)、プロダクション再デプロイメント (V2)、およびアンデプロイ (V2) の例を示します。
表 10-1 デプロイメント アクションとアプリケーション バージョン ライフサイクル イベントのシーケンス
デプロイメント アクション | 時間 | バージョン V1 | バージョン V2 |
---|---|---|---|
バージョン V1 のデプロイメント |
T0 |
|
|
T1 |
デプロイメントが開始される。 |
||
T2 |
V1 のアプリケーション ライフサイクル リスナが登録される。 |
||
T3 |
V1 がアクティブなバージョンとなり、デプロイメントが完了する。 |
||
T4 |
|
||
T5 |
アプリケーション リスナが |
||
バージョン V2 のプロダクション再デプロイメント |
T6 |
|
|
T7 |
アプリケーション バージョン リスナが |
||
T8 |
デプロイメントが開始される。 |
||
T9 |
V2 のアプリケーション ライフサイクル リスナが登録される。 |
||
T10 |
デプロイ (V2) が成功すると、V1 はアクティブなバージョンでなくなる。 |
デプロイ (V2) が成功すると、V2 は V1 に代わってアクティブなバージョンとなる。 デプロイメントが完了する。 |
|
T11 |
注意 : このイベントはデプロイメントが失敗した場合でも発生する。 |
||
T12 |
アプリケーション バージョン リスナが |
||
T13 |
アプリケーション リスナが |
||
T14 |
デプロイ (V2) が成功すると、V1 は廃止を開始する。 |
||
T15 |
V1 のアプリケーション リスナが登録解除される。 |
||
T16 |
V1 が廃止される。 |
||
V2 のアンデプロイメント |
T17 |
|
|
T18 |
アプリケーション リスナは呼び出された |
||
T19 |
アンデプロイメントが開始される。 |
||
T20 |
V2 がアクティブなバージョンでなくなる。 |
||
T21 |
V2 のアプリケーション バージョン リスナが登録解除される。 |
||
T22 |
アンデプロイメントが完了する。 |
||
T23 |
アプリケーション全体がアンデプロイされると、 注意 : このイベントはアンデプロイメントが失敗した場合でも発生する。 |