ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server アプリケーションの開発
11g リリース 1 (10.3.1)
B55515-01
 

目次
目次

戻る
戻る
 
次へ
次へ
 

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

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

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

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

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

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

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

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

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

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

コード リスト 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 イベントにアタッチできます。この例では、パブリック クラス MyShutdownApplicationLifecycleListener を拡張しません。これは、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 イベントにアタッチできます。この例では、パブリック クラス MyStartupApplicationLifecycleListener を拡張しません。これは、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 が管理者である場合、アプリケーション デプロイヤには管理者特権が必要です。これがない場合、デプロイメントは失敗します。

  1. 基本的なライフサイクル リスナ機能のプログラミング」で説明した基本的なプログラミング手順に従います。

  2. listener 要素内に、run-as-principal-name 要素を追加して、イベントの起動や停止を行う特権を持つユーザを指定します。たとえば、

    prompt> java weblogic.DDConverter [options] archive_file_or_directory
    

ここに指定する ID はシステムの有効なユーザ名である必要があります。run-as-principal-name を指定しない場合、アプリケーション ライフサイクル リスナの実行のための run-as ID としては、デプロイメント開始者のユーザ ID が使用される。

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

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

コード リスト 10-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 パラメータを指定した場合と指定しない場合のライフサイクル イベントのコンフィグレーション例」を参照してください。

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

  • 静的なデプロイメントと動的なデプロイメントのいずれの場合にも呼び出される。

  • 匿名 ID とユーザ ID のいずれかを使用して呼び出される。

  • 現在のアプリケーションがバージョン管理されている場合にのみ呼び出される。それ以外の場合、バージョン ライフサイクル イベントは無視されます。

  • リスナを登録しているバージョンを含めて、すべてのアプリケーション バージョンについて呼び出される。イベントが特定のバージョンに属しているかどうかを調べるには、ApplicationVersionLifecycleEvent.isOwnVersion メソッドを使用します。バージョン ライフサイクル イベントの種類の詳細については、ApplicationVersionLifecycleEvent クラスを参照してください。

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

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

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

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

表 10-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) が呼び出される。

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