実行クラスとは
IJServerの起動時や停止時に任意のJavaアプリケーションを呼び出すことができます。
IJServerの起動時に呼び出すJavaアプリケーションを起動時実行クラスと呼び、IJServerの停止時に呼び出すJavaアプリケーションを停止時実行クラスと呼びます。
実行クラスでは、IJServerやJava VMプロセス単位で一度だけ行う初期化や終了処理を実装することにより、以下のような処理に利用することができます。
データベースの初期化、終了処理
JNDIによるObjectのlookup処理
EJBアプリケーションメソッドの呼び出し
実行クラスからは、以下がJNDIで参照可能です。
EJBHomeオブジェクト
EJB Homeオブジェクト
EJB LocalHomeオブジェクト
リソース参照
JDBCデータソース
JDBCデータソースを使用してコネクションの獲得・データベースアクセス・コネクション解放が可能です。
また、実行クラスからは、以下のEJBアプリケーションが呼び出しが可能です。
STATEFUL Session Bean
STATELESS Session Bean
Entity Bean BMP
Entity Bean CMP1.1
Entity Bean CMP2.0
実行クラスを呼び出す契機
実行クラスを呼び出す契機は以下のとおりです。
起動時実行クラスは、IJServerの起動後、アプリケーションへのリクエストの受付を開始する前に呼び出されます。
停止時実行クラスは、IJServerの停止時、アプリケーションへのリクエストの受付を停止した直後に呼び出されます。IJServerを強制停止した場合には停止時実行クラスは呼び出されません。
実行クラスは複数指定することができ、呼び出す順番を決めることができます。
実行クラスの用途に合わせてすべてのプロセス(Java VM)で呼び出すか、IJServer単位で一度のみ呼び出すかを選択することができます。
呼び出し方法 | 利用例 | 例 |
---|---|---|
すべてのプロセスで呼び出し | すべてのプロセスで行わなければならない処理 | JNDIによるObjectのlookup処理 |
一度のみ呼び出し | プロセスごとの実行が必要でない処理や、プロセス間で共有することのできる処理 | データベースの初期化、終了処理 |
実行クラスの作成方法
実行クラスを作成するために、特別なクラスやインタフェースを用意する必要はありません。
以下の2つの条件を満たすJavaアプリケーションを作成してください。
mainメソッドが実装され、コマンドラインから実行が可能である。
publicクラスとして宣言されている。
以下に、単純な実行クラスの例を示します。
package test; public class UserStartup{ public static void main(String args[]){ if(args.length == 1){ System.out.println(args[0]); } //ユーザ実装をここに記述 } }
実行クラスの登録方法
実行クラスの登録は、以下に示す2つの設定をInterstage管理コンソールで行います。詳細はInterstage管理コンソールのヘルプを参照してください。また、isj2eeadminコマンドで登録することも可能です。詳細は、“リファレンスマニュアル(コマンド編)”を参照してください。
実行クラスの設定
実行クラスの設定情報を登録します。
クラスパスの設定
実行クラスをワークユニットのクラスパスに設定します。
注意
IJServerのタイプが「WebアプリケーションとEJBアプリケーションを別JavaVMで運用」の場合、Servletコンテナ用とEJBコンテナ用の2つのクラスパスが存在します。実行クラスを呼び出すコンテナのクラスパスに設定してください。
IJServerのタイプが「WebアプリケーションとEJBアプリケーションを別JavaVMで運用」の場合、コンテナ依存の処理に対応するために、実行クラスを起動するコンテナを次の3つの中から選択してください。
Webコンテナ
EJBコンテナ
Web・EJB両方
起動時実行クラスで発生した例外がIJServerワークユニットにthrowされた場合に、IJServerの起動を続行するか中止するかを選択することができます。
クラスローダの分離が「EAR間で分離」または「すべて分離」の場合、起動時実行クラスまたは停止時実行クラスからEJBアプリケーションを呼び出すことはできません。
実行クラスから別のJava VM上のEJBアプリケーションに対して処理を行う場合、実行クラスを起動する前にあらかじめEJBアプリケーションを配備したIJServerを起動しておく必要があります。
IJServerのタイプが「WebアプリケーションとEJBアプリケーションを別JavaVMで運用」の場合、Webコンテナで設定した実行クラスから同一IJServer内のEJBアプリケーションに対する処理呼び出しは保証されません。
以下に、処理が実行できない場合の例と回避方法を示します。
処理できない例 | 回避方法 |
---|---|
IJServerのタイプが「WebアプリケーションとEJBアプリケーションを別JavaVMで運用」の場合、Webコンテナで設定した実行クラスから同一IJServer内のEJBアプリケーションのlookup処理。 | 以下のどちらかを選択する。
|
起動時実行クラスまたは停止時実行クラスから呼び出したEJBアプリケーション内ではEJBタイマーサービスの機能は使用できません。