2010年1月4日月曜日

EJB 3.1/EJB Timer/@Schedule

この間入れたGlassFish の Eclipse バンドルで EJB Timer を動かしてみた。

組み込み済みの GlassFish プラグインのおかげで、動作確認だけならほとんどコードを書かずに試行できる。

こんな風にする。(以下、プロジェクト名、クラス名等は適当)

■ EJB プロジェクト作成
以下の手順
  • [New]/[EJB Project]
  • 以下入力
    Project namehello-ejb-timer
    Add project to an EARチェック
    EAR project namehello-ejb-timerEAR
  • [Finish]
EJBプロジェクト、EJB Client JARプロジェクト、EARプロジェクトと、プロジェクトが3つ作成される。

■ EJB Timer 作成
以下の手順
  • hello-ejb-timer プロジェクトから[New]/[EJB Timer (Java EE 6)]
  • パッケージとクラス名を適当に指定。
  • "Schedule:" のテキストエリアをざっと眺める。デフォルトは以下のような感じで月~金の08時~23時なので、必要なら適当に直す。
    second="*/10", minute="*", hour="8-23", dayOfWeek="Mon-Fri", dayOfMonth="*", month="*", year="*", info="MyTimer"

■ 動かす
  • Servers ビューで GlassFish に hello-ejb-timerEAR を追加
  • Servers ビューから[Start]
  • cygwin などで {Domain Directory}/domain1/logs/server.log を tail で垂れ流しておくと、10秒ごとにメッセージが出力されているのが観察できる。({Domain Directory} の位置は、GlassFish サーバをダブルクリックすると開く設定画面で[Browse]ボタンを押せばわかる。)

■ 所感
  • とても簡単に cron ぽいスケジュール動作が実現できる。
  • GlassFish も Eclipse plugin もすごく良い感じ。コード変更も瞬時に反映される。
  • Servlet のみの Java Web アプリの定番のイディオムに、ServletContextListenerクラスで TimerTask の実行を開始する手法があるけど、EJB(3.1以上)が使える環境なら、やっぱり EJB Timer がシンプルで経済的な感じがする。

0 件のコメント:

コメントを投稿