アプリケーションを最初に動作させる時に、環境設定ファイルの読み込みやクラスのロードなどのために時間がかかることがあります。
コンテナの起動時にアプリケーションを一度動作させることで、このような初期化時間の影響を少なくすることができます。
Webアプリケーションの場合
Webアプリケーションでは、サーブレットのスタートアップを利用して、コンテナの起動時にアプリケーションを動作させます。
以下の手順で作成します。
UjiServletを継承して、スタートアップ用のサーブレットクラスを作成します。
initメソッドからUjiServletのinitApplicationメソッドを呼び出します。
サーブレットの記述例
public class MyServlet extends UjiServlet { public MyServlet() { } public void init() { try { ApplicationProfile ap = initApplication(); } catch(Exception e) { e.printStackTrace(); } } }
固有のアプリケーション初期化処理を記述する場合は、アプリケーションクラスを利用して記述します。
スタートアップ用のサーブレットをWebアプリケーション環境定義ファイル(web.xml)で指定します。
load-on-startupを指定することで、コンテナの起動時に呼び出されます。
web.xmlの記述例
<servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>somePackage.MyServlet</servlet-class> <load-on-startup/> </servlet>
EJBアプリケーションの場合
Interstageのワークユニット機能を利用して、ワークユニット起動時にApcoordinatorで作成したセションBeanを実行することができます。
Interstage管理コンソールでワークユニットを選択し、[実行クラス][新規作成]で、以下の情報を作成します。
項目 | 指定方法 |
---|---|
名前 | Initializerなど、適宜設定します。 |
クラス名 | com.fujitsu.uji.ejb.workunit.Initializerを指定します。 |
実行順 | 任意に指定します。 |
引数 | セションBeanのJNDI名をjava:comp/env/ejb/SomeEJBのような形式で指定します。 |
例外発生時のワークユニット起動 | 任意に指定します。 |
ワークユニット多重時の呼び出し | [すべてのVMで呼び出し]を選択します。 |
クラスを実行するコンテナ | [EJBコンテナ]を選択します。 |
固有のアプリケーション初期化処理を記述する場合は、以下のようにビジネスクラスを作成します。
作成したビジネスクラスは、Beanなし、コマンドはuji.initializeとしてコマンドマップに登録します。
ビジネスクラスの記述例
package somepackage; import com.fujitsu.uji.GenericHandler; public class SomeHandler extends GenericHandler { public void startEjb(DispatchContext context) { ... } ... }
コマンドマップの記述例
;uji.initialize=somepackage.SomeHandler.startEjb
関連項目
APIリファレンスのUjiServletクラス