⛄️
Java EEアプリケーションで起動時になにかしらの処理をする方法
いくつか考えてみました。
-
HttpServlet.init
をオーバーライドする(Servlet) -
ServletContainerInitializer
の実装クラスを作る(Servlet) -
Singleton
セッションビーンに@Startup
を付けて@PostConstructed
を付けたメソッドを定義する(EJB) -
Extension
の実装クラスを作ってライフサイクルイベントをハンドリングするオブザーバーメソッドを作る(CDI) -
@ApplicationScoped
なCDI管理ビーンを作って@Initialized(ApplicationScoped.class)
なイベントをハンドリングするオブザーバーメソッドを作る(CDI)
他にもあったら教えてください!
で、個人的には
- Servlet APIを直接使うのは可能な限り避けたい
- EJBは使わない
という感じなのでCDIで実現するのが良さそうです。
起動時処理に Extension
を使うのはなんか違う感じがしますし、@Initialized(ApplicationScoped.class)
を使った方法が好みです。
具体的にはこんなコードです。
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.Initialized;
import javax.enterprise.event.Observes;
@ApplicationScoped
public class Hoge {
public void handle(@Observes @Initialized(ApplicationScoped.class) Object event) {
//ここに起動時にしたい処理を書く
}
}
CDI以外のサンプルも含んだコードは次のURLです。
Discussion