2.4.1.1. Nablarchサーブレットコンテキスト初期化リスナー¶
本クラスはサーブレットコンテキストリスナーとして定義されており、 ウェブアプリケーションの起動時、終了時に以下の処理を行う。
2.4.1.1.1. モジュール一覧¶
<dependency>
<groupId>com.nablarch.framework</groupId>
<artifactId>nablarch-fw-web</artifactId>
</dependency>
<dependency>
<groupId>com.nablarch.framework</groupId>
<artifactId>nablarch-core</artifactId>
</dependency>
<dependency>
<groupId>com.nablarch.framework</groupId>
<artifactId>nablarch-core-repository</artifactId>
</dependency>
<dependency>
<groupId>com.nablarch.framework</groupId>
<artifactId>nablarch-core-applog</artifactId>
</dependency>
2.4.1.1.2. システムリポジトリを初期化する¶
システムリポジトリの初期化を行うには、以下のとおり設定する必要がある。
- サーブレットコンテキストリスナーとして、本クラスを登録する。
- サーブレットコンテキストの初期化パラメータとして、コンポーネント設定ファイルのパスを設定する。
web.xml への設定例を以下に示す。
- ポイント
- コンポーネント設定ファイルのパスのパラメータ名は di.config とすること。
<context-param>
<param-name>di.config</param-name>
<param-value>web-boot.xml</param-value>
</context-param>
<listener>
<listener-class>nablarch.fw.web.servlet.NablarchServletContextListener</listener-class>
</listener>
2.4.1.1.3. 初期化の成否を後続処理で取得する¶
本クラスの初期化に成功したか否かは、NablarchServletContextListener#isInitializationCompleted を使用して取得できる。
初期化に成功した場合は上記メソッドは true
を返却する。
本クラスの初期化に失敗するとアプリケーションの起動も失敗するが、サーブレットコンテキストリスナーを複数登録していた場合は、 本クラスの後続のサーブレットコンテキストリスナーの処理が実行されることがある。 この機能を使用することで本クラスの後続のサーブレットコンテキストリスナーにおいて、 以下のようにシステムリポジトリの初期化に成功した場合だけ処理を続行するといった分岐が可能となる。
public class CustomServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
if(NablarchServletContextListener.isInitializationCompleted()){
// システムリポジトリを使用した処理
}
}
なお、サーブレットコンテキストリスナーの実行順は web.xml に記載した順序となる。
システムリポジトリを使用するサーブレットコンテキストリスナーを登録する場合は、
以下のように本クラスより後に web.xml に記載する必要がある。
また、 @WebListener
アノテーションによるサーブレットコンテキストリスナーの登録では実行順序は保証されないため、
必ず web.xml で定義すること。
<listener>
<listener-class>nablarch.fw.web.servlet.NablarchServletContextListener</listener-class>
</listener>
<listener>
<listener-class>please.change.me.CustomServletContextListener</listener-class>
</listener>
補足
複数のサーブレットコンテキストリスナーが登録されている場合に、先に実行されたサーブレットコンテキストリスナーの処理の例外を検知して処理を中止するか、 例外を無視して後続のサーブレットコンテキストリスナーの処理を継続するかはサーブレットコンテナの実装に依存する。