ヘッダーをスキップ
Oracle Containers for J2EE開発者ガイド
10g(10.1.3.5.0)
B56031-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

2 startupクラスとshutdownクラスの開発

この章では、OC4Jの初期化後またはOC4Jの終了前に呼び出されるstartupクラスとshutdownクラスの開発のガイドラインについて説明します。startupクラスは、OC4Jの起動後にサービスを開始して機能を実行することができます。shutdownクラスは、OC4Jの終了前にこれらのサービスを終了して機能を実行することができます。

これらのクラスをコンパイルする場合、oc4j-api.jarファイルがORACLE_HOME/j2ee/home/oc4j-api.jarなどのJavaのCLASSPATH環境変数に指定されているパスに存在する必要があります。

OC4Jは、server.xmlファイルにおけるこれらのクラスの構成に基づいて、startupクラスとshutdownクラスをデプロイして実行します。

この章には、次の項目が含まれています。

startupクラスの開発

startupクラスは、OC4Jの初期化後に1回のみ実行されます。server.xmlファイルが参照されるたびに再実行されることはありません。startupクラスは次の2つのメソッドを含むoracle.j2ee.server.OC4JStartupインタフェースを実装します。

これらのメソッドでは、サービスの開始、その他の初期化ルーチンの実行、サービスの終了、およびその他の終了ルーチンの実行のコードを実装できます。

それぞれのメソッドには次の2つの引数が必要です。

どちらのメソッドもString値を返しますが、現在は無視されています。


注意:

startupクラスにコンストラクタを指定する場合、パブリックの引数なしコンストラクタを指定することを強くお薦めします。このようにしないと、このクラスのメンバー・メソッドをOC4Jが呼び出そうとした時点で、java.lang.IllegalAccessExceptionがスローされる可能性があります。

startupクラスを作成すると、server.xmlファイルの<startup-classes>要素で、startupクラスを構成する必要があります。このファイルにアクセスするには、Oracle Enterprise Manager 10g Application Server Controlを使用し、OC4Jのホームページで「拡張プロパティ」を選択します。各OC4JStartupクラスは、<startup-classes>要素内の単一の<startup-class>要素で定義されています。各<startup-class>要素では次の属性を定義します。

server.xmlファイルの<init-library>要素では、startupクラスが存在するディレクトリ、またはクラスがアーカイブされているディレクトリとJARファイルを構成します。path引数は、完全修飾または/j2ee/instance/configに対する相対で指定できます。

たとえば、TestStartupクラスの構成は、server.xmlファイルの<startup-class>要素に含まれています。

TestStartupクラスを定義するには、server.xmlファイルに次の記述を追加します。

<startup-classes>
  <startup-class classname="test.oc4j.TestStartup" failure-is-fatal="true">
    <execution-order>0</execution-order>
    <init-param>
      <param-name>oracle.test.startup</param-name>
      <param-value>true</param-value>
     </init-param>
     <init-param>
      <param-name>startup.oracle.year</param-name>
      <param-value>2008</param-value>
     </init-param>
   </startup-class>
 </startup-classes>

コンテナは、この2つの初期化キー/値ペアをstartupクラスに対する入力Hashtable引数内に提供します。

次の例で示すTestStartupは、oracle.j2ee.server.OC4JStartupインタフェースを実装しています。preDeployメソッドは、ハッシュ表からキー/値ペアを取得して出力します。postDeployメソッドはnullメソッドです。TestStartupをコンパイルするときは、JavaのCLASSPATH環境変数が指定するパスにoc4j.jarファイルが存在している必要があります。

package text.oc4j;
import oracle.j2ee.server.OC4JStartup;

import javax.naming.*;
import java.util.*;

public class TestStartup implements OC4JStartup {

   //public, no-argument constructor
    public TestStartup() {
    }

    public String preDeploy(Hashtable args, Context context) throws Exception {
        // bind each argument using its name
        Enumeration keys = args.keys();
        while(keys.hasMoreElements()) {
            String key = (String)keys.nextElement();
            String value = (String)args.get(key);
            System.out.println("prop: " + key + " value: " + args.get(key));
            context.bind(key, value);
        }

        return "ok";
    }

    public String postDeploy(Hashtable args, Context context) throws Exception {
        return null;
    }
}

TestStartupクラスが"../app1/startup.jar"にアーカイブされているとする場合、server.xmlファイルの<init-library>要素を次のように変更します。

<init-library path="../app1/startup.jar" />

OC4Jを起動すると、すべてのアプリケーションが初期化される前にTestStartuppreDeployメソッドが実行されます。OC4Jは、ハッシュ表の値をJNDIコンテキストに移入します。failure-is-fatal属性がtrueに設定されているので、TestStartupが例外をスローすると、OC4Jは終了します。

shutdownクラスの開発

shutdownクラスは、OC4Jが終了する前に実行されます。shutdownクラスが実装するoracle.j2ee.server.OC4JShutdownインタフェースにはpreUndeploypostUndeployという2つのメソッドが含まれており、これらの中に、サービスを終了したり他の終了ルーチンを実行したりするコードを実装できます。

各メソッドに必要な引数は、構成から移入されるハッシュ表と、キー/値ペアに指定された値を処理するためにバインドできるJNDIコンテキストの2つです。


注意:

shutdownクラスにコンストラクタを指定する場合、パブリックの引数なしコンストラクタを指定することを強くお薦めします。このようにしないと、このクラスのメンバー・メソッドをOC4Jが呼び出そうとした時点で、java.lang.IllegalAccessExceptionがスローされる可能性があります。

shutdownクラスの実装と構成は「startupクラスの開発」での説明とほとんど同じですが、構成は<shutdown-classes>要素と<shutdown-class>要素で定義されており、failure-is-fatal属性はありません。したがって、TestShutdownクラスの構成は次のようになります。

<shutdown-classes>
  <shutdown-class classname="test.oc4j.TestShutdown">
    <execution-order>0</execution-order>
    <init-param>
      <param-name>oracle.test.shutdown</param-name>
      <param-value>true</param-value>
     </init-param>
     <init-param>
       <param-name>shutdown.oracle.year</param-name>
       <param-value>2008</param-value>
     </init-param>
   </shutdown-class>
 </shutdown-classes>

TestShutdownクラスが"/j2ee/home/app1/shutdown.jar"にアーカイブされているとする場合、server.xmlファイルに次のようなもう1つの<init-library>要素を追加します。

<init-library path="../app1/shutdown.jar" />