S2 Webアプリの初期化

2008/02/13

Webアプリの起動時に何らかの初期化処理をしたい、といったことはよくあることです。
S2アプリでは、コンテナの初期化→コンテナから初期化用クラス取り出し→アプリの初期化、というのがスマートっぽい。

S2のバージョン=>2.4系 の前提。

リスナーサーブレット

アプリケーションの起動を検知するリスナーをつくります。
一般的なリスナーサーブレットと同じようにServletContextListenerをimplementsします。
contextInitialized()で、コンテナから初期化用クラス(AppInitializer 後で作成)を取り出し、初期化メソッドを呼びます。
public class MyContextListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        AppInitializer initializer
         = (AppInitializer) SingletonS2ContainerFactory
                .getContainer().getComponent(AppInitializer.class);
        initializer.initialized();
    }
    ・
    ・


初期化用クラス

初期化処理を行うクラスをつくります。
インタフェースと実装を分けてつくります。

インタフェース(AppInitializer)
public interface AppInitializer {
    void initialized();

    void destroyed();
}


実装(MyAppInitializer)
public class MyAppInitializer implements AppInitializer {

    @Override
    public void initialized() {
        //ここで初期化処理を行う
        System.out.println("Application Initialized!!");
    }
    ・
    ・
}


リスナーの登録

web.xmlに以下の記述をし、リスナーを登録します。
  ・
  ・
  </filter-mapping>

  <listener>
    <listener-class>org.seasar.framework.container.servlet.
                                               S2ContainerListener</listener-class>
  </listener>
  <listener>
    <listener-class>xxx.yyy.MyContextListener</listener-class>
  </listener>

  <servlet>
  ・
  ・

filter-mappingタグとservletタグの間あたりに書きます。
1つ目にはコンテナの初期化を行うためにS2ContainerListenerを、2つ目には自作したリスナーを登録します。
リスナーはこの記述順に動きますから、S2ContainerListenerが先で自作のリスナーが後です。

これで

これでアプリの起動時に、
コンテナの初期化→コンテナから初期化用クラス取り出し→アプリの初期化
という一連の動きが実行できます。

Java | コメント(0) | トラックバック(0)
トラックバック
トラックバックURL:
コメントをどうぞ
名前 (入力しなければ「通りすがり」):

メールアドレス (入力しても公開されません):

URL (入力すればリンクが張られます):


コメント:

(コメントにタグなどを使ってもタグがそのままが表示されます)