Oracle® Fusion Middleware Oracle WebLogic Serverアプリケーションの開発 11g リリース1(10.3.5) B60990-03 |
|
前 |
次 |
次の項では、WebLogic Serverのアプリケーション・ライフサイクル・イベントに応答するアプリケーションの作成方法について説明します。
アプリケーション・バージョン・ライフサイクル・イベントのプログラミング
注意: アプリケーション・スコープの起動クラスと停止クラスは、WebLogic Serverのリリース9.0以降では非推奨になりました。起動クラスと停止クラスに関するこの章の情報は、下位互換性のためにのみ提供されています。このクラスの代わりに、ライフサイクル・リスナー・イベントをアプリケーションで使用してください。 |
アプリケーション・ライフサイクル・リスナー・イベントは、デプロイメント、アンデプロイメント、および再デプロイメント時の動作を開発者が制御できるハンドルを提供します。この項では、アプリケーション・ライフサイクル・リスナー・イベントの使用方法について説明します。
WebLogic Serverには、リスナー・クラス、停止クラス、および起動クラスを拡張するときに使用できる4つのアプリケーション・ライフサイクル・イベントがあります。以下のものが含まれます。
リスナー - 任意のイベントにアタッチできます。リスナーのメソッドの例は次のとおりです。
public void preStart(ApplicationLifecycleEvent evt) {}
preStartイベントは、準備フェーズを開始、またはアプリケーションのデプロイメント・プロセスを開始します。
public void postStart(ApplicationLifecycleEvent evt) {}
postStartイベントは、アクティブ化フェーズを終了、またはアプリケーションのデプロイメント・プロセスを終了します。アプリケーションがデプロイされます。
public void preStop(ApplicationLifecycleEvent evt) {}
preStopイベントは、非アクティブ化フェーズを開始、またはアプリケーションの削除またはアンデプロイメントのプロセスを開始します。
public void postStop(ApplicationLifecycleEvent evt) {}
postStopイベントは、削除フェーズを終了、またはアプリケーションの削除またはアンデプロイメントのプロセスを終了します。
停止クラスはpostStopイベントのみを取得します。
注意: アプリケーション・スコープの停止クラスは、WebLogic Serverのリリース9.0以降では非推奨になりました。代わりに、ライフサイクル・リスナーを使用してください。 |
起動クラスはpreStartイベントのみを取得します。
注意: アプリケーション・スコープの停止クラスは、WebLogic Serverのリリース9.0以降では非推奨になりました。代わりに、ライフサイクル・リスナーを使用してください。起動クラスおよび停止クラスでは、
|
これらのイベントを使用するには、weblogic-application.xml
デプロイメント記述子に登録する必要があります。付録A「エンタープライズ・アプリケーションのデプロイメント記述子の要素」を参照してください。以下の要素を定義します。
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
要素を追加して、イベントの起動や停止を行う権限のあるユーザーを指定します。例:
<listener> <listener-class>myApp.MySessionAttributeListenerClass</listener-class> <run-as-principal-name>javajoe</run-as-principal-name> </listener>
ここに指定する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
でライフサイクル・リスナーを指定できます。付録A「エンタープライズ・アプリケーションのデプロイメント記述子の要素」」と「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
イベントは、アプリケーション・バージョンが削除されたときに呼び出されます。
注意: postDelete イベントは、アプリケーション・バージョン全体が完全に削除された後にのみ起動されます。これには、モジュールのアンデプロイやターゲットのサブセットからのアンデプロイなどの部分的なアンデプロイは含まれません。 |
以下の表では、デプロイメント(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 |
アプリケーション全体がアンデプロイされると、 注意:このイベントはアンデプロイメントが失敗した場合でも発生します。 |