WebLogic Server アプリケーションの開発

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

アプリケーション ライフサイクル イベントのプログラミング

以下の節では、WebLogic Server のアプリケーション ライフサイクル イベントに応答するアプリケーションの作成方法について説明します。

警告 : アプリケーション スコープの起動クラスと停止クラスは、WebLogic Server のリリース 9.0 以降では非推奨になりました。起動クラスと停止クラスに関するこの章の情報は、下位互換性のためにのみ提供されています。このクラスの代わりに、ライフサイクル リスナ イベントをアプリケーションで使用してください。

 


アプリケーション ライフサイクル イベントについて

アプリケーション ライフサイクル リスナ イベントは、デプロイメント、アンデプロイメント、および再デプロイメント時の動作を開発者が制御できるハンドルを提供します。この節では、アプリケーション ライフサイクル リスナ イベントの使用方法について説明します。

WebLogic Server には、リスナ クラス、停止クラス、および起動クラスを拡張するときに使用できる 4 つのアプリケーション ライフサイクル イベントがあります。内容は以下のとおりです。

注意 : 起動クラスおよび停止クラスでは、main{} メソッドのみを実装します。リスナ用に提供されたメソッドを実装した場合は、無視されます。
注意 : ApplicationLifecycleListener に remove{} メソッドは提供されていません。イベントが、デプロイメントでの起動時 (prestart と poststart) およびアンデプロイメントでの停止時 (prestop と poststop) にのみ開始されるためです。

 


weblogic-application.xml へのイベントの登録

これらのイベントを使用するには、weblogic-application.xml デプロイメント記述子に登録する必要があります。「エンタープライズ アプリケーションのデプロイメント記述子の要素」を参照してください。以下の要素を定義します。

 


基本的なライフサイクル リスナ機能のプログラミング

抽象クラス (WebLogic Server 付属のクラス) weblogic.application.ApplicationLifecycleListener を拡張することにより、リスナを作成します。作成したリスナは、コンテナの検索対象になります。

WebLogic Server の ApplicationLifecycleListener 抽象クラスに提供されている次のメソッドをオーバーライドし、必要な機能を追加してアプリケーションを拡張します。

コード リスト 9-1 に、ApplicationLifecycleListener をオーバーライドする方法を示します。この例では、パブリック クラス MyListener が ApplicationLifecycleListener を拡張しています。

コード リスト 9-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(postStart) -- 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
}

コード リスト 9-2 に、停止クラスを実装する方法を示します。停止クラスは、preStop イベントおよび postStop イベントにアタッチできます。この例では、パブリック クラス MyShutdown が ApplicationLifecycleListener を拡張していません。weblogic-application.xml デプロイメント記述子内に宣言されている停止クラスは、WebLogic Server 固有のインタフェースに依存する必要がないからです。

コード リスト 9-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
}

コード リスト 9-3 に、起動クラスを実装する方法を示します。起動クラスは、preStart イベントおよび postStart イベントにアタッチできます。この例では、パブリック クラス MyStartup が ApplicationLifecycleListener を拡張していません。weblogic-application.xml デプロイメント記述子内に宣言されている起動クラスは、WebLogic Server 固有のインタフェースに依存する必要がないからです。

コード リスト 9-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
}

 


URI パラメータを指定した場合と指定しない場合のライフサイクル イベントのコンフィグレーション例

次の例に、weblogic-application.xml デプロイメント記述子ファイルでアプリケーション ライフサイクル イベントをコンフィグレーションする方法を示します。URI パラメータは必須ではありません。アプリケーションの $CLASSPATH 内であれば任意の位置にクラスを配置できます。ただし、$CLASSPATH にクラスの位置を定義する必要があります。EAR に APP-INF/classes ディレクトリまたは APP-INF/lib ディレクトリが存在する場合は、これらのディレクトリにリスナを配置できます。この場合、リスナは自動的に $CLASSPATH に含まれます。

次の例に、URI パラメータを使用してアプリケーション ライフサイクル イベントをコンフィグレーションする方法を示します。この例では、アーカイブ foo.jar はクラスを含み、EAR ファイルの最上位に存在します (例 : myEar/foo.jar)。

コード リスト 9-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 パラメータを使用せずにアプリケーション ライフサイクル イベントをコンフィグレーションする方法を示します。

コード リスト 9-5 URI パラメータを使用しないアプリケーション ライフサイクル イベントのコンフィグレーション
 <listener>
       <listener-class>MyListener</listener-class>
  </listener>
  <startup>
       <startup-class>MyStartup</startup-class>
  </startup>
  <shutdown>
       <shutdown-class>MyShutdown</shutdown-class>
  </shutdown>

 


再デプロイメント時のアプリケーション ライフサイクル イベントの動作について

アプリケーションの完全な再デプロイメントが発生する場合にのみ、アプリケーション ライフサイクル イベントが開始されます。アプリケーションの完全な再デプロイメント時に、アプリケーション ライフサイクル イベントが登録済みであれば、アプリケーション ライフサイクルはまず停止シーケンスを開始し、次にクラスを再初期化し、その後開始シーケンスを実行します。

たとえば、完全なアプリケーション ライフサイクル イベント セット (preStart、postStart、preStop、postStop) に対してリスナが登録されている場合、完全な再デプロイメント時に次のイベント シーケンスが表示されます。

  1. preStop{}
  2. postStop{}
  3. 初期化の開始 (デバッグ フラグを設定していない場合は、初期化の内容は表示されません)
  4. preStart{}
  5. postStart{}

 


アプリケーション バージョン ライフサイクル イベントのプログラミング

以下の節では、WebLogic Server のアプリケーション バージョン ライフサイクル イベントに応答するアプリケーションの作成方法について説明します。

アプリケーション バージョン ライフサイクル イベントの動作について

WebLogic Server はアプリケーション バージョン ライフサイクル イベントの通知を提供しており、ApplicationVersionLifecycleListener クラスを拡張して、weblogic-application.xml でライフサイクル リスナを指定できます。「エンタープライズ アプリケーションのデプロイメント記述子の要素」および「URI パラメータを指定した場合と指定しない場合のライフサイクル イベントのコンフィグレーション例」を参照してください。

アプリケーション バージョン ライフサイクル イベントは次のように呼び出されます。

アプリケーション バージョン ライフサイクル イベントの種類

WebLogic Server には 4 つのアプリケーション バージョン ライフサイクル イベントがあります。

アプリケーション バージョン ライフサイクル イベントを使用する場合のプロダクション デプロイメント シーケンスの例

以下の表では、デプロイメント (V1)、プロダクション再デプロイメント (V2)、およびアンデプロイ (V2) の例を示します。

表 9-1 デプロイメント アクションとアプリケーション バージョン ライフサイクル イベントのシーケンス
デプロイメント アクション
時間
バージョン V1
バージョン V2
バージョン V1 のデプロイメント
T0
preDeploy(V1) が呼び出される。
 
T1
デプロイメントが開始される。
 
T2
V1 のアプリケーション ライフサイクル リスナが登録される。
 
T3
V1 がアクティブなバージョンとなり、デプロイメントが完了する。
 
T4
postDeploy(V1) が呼び出される。
 
T5
アプリケーション リスナが postDeploy(V1) を取得する。
 
バージョン V2 のプロダクション再デプロイメント
T6
 
preDeploy(V2) が呼び出される。
T7
アプリケーション バージョン リスナが preDeploy(V1) を受け取る。
 
T8
 
デプロイメントが開始される。
T9
 
V2 のアプリケーション ライフサイクル リスナが登録される。
T10
デプロイ (V2) が成功すると、V1 はアクティブなバージョンでなくなる。
デプロイ (V2) が成功すると、V2 は V1 に代わってアクティブなバージョンとなる。
デプロイメントが完了する。
T11
 
postDeploy(V2) が呼び出される。

注意 : このイベントはデプロイメントが失敗した場合でも発生する。

T12
アプリケーション バージョン リスナが postDeploy(V2) を取得する。デプロイ (V2) が失敗した場合、V1 はアクティブなままとなる。
 
T13
 
アプリケーション リスナが postDeploy(V2) を取得する。
T14
デプロイ (V2) が成功すると、V1 は廃止を開始する。
 
T15
V1 のアプリケーション リスナが登録解除される。
 
T16
V1 が廃止される。
 
V2 のアンデプロイメント
T17
 
preUndeploy(v2) が呼び出される。
T18
 
アプリケーション リスナは呼び出された preUndeploy(v2) を取得する。
T19
 
アンデプロイメントが開始される。
T20
 
V2 がアクティブなバージョンでなくなる。
T21
 
V2 のアプリケーション バージョン リスナが登録解除される。
T22
 
アンデプロイメントが完了する。
T23
 
アプリケーション全体がアンデプロイされると、postDelete(V2) が呼び出される。

注意 : このイベントはアンデプロイメントが失敗した場合でも発生する。


  ページの先頭       前  次