2.12.1 Timer Serviceの概要
Timer Serviceとは,指定した時刻,経過時間,または間隔でEnterprise Beanを呼び出す機能です。この機能はEJBコンテナが提供します。Timer Serviceを使用すると,マシン負荷が低い時間を指定したバッチ処理や,一定間隔での日次処理など,時刻を指定した処理を容易に実行できます。
ここでは,Timer Serviceで設定できるタイムアウトの内容や,タイムアウトを設定するEJBタイマの動作,Timer Serviceの運用などについて説明します。
Timer Serviceで設定できるタイムアウトやTimer Serviceのサポート範囲,Timer Serviceでのトランザクション管理について説明します。
- 〈この項の構成〉
(1) Timer ServiceとEJBタイマ
Timer Serviceは,Java EEに規定されたAPIを使用して,Enterprise Beanから操作します。時刻を指定した処理を行うには,EJBタイマを生成します。EJBタイマにはタイムアウト時刻を指定します。生成されたEJBタイマは,EJBコンテナに管理され,タイムアウト時刻になると,EJBコンテナによってEnterprise Beanのメソッドがコールバックされます。この際にコールバックされるメソッドを,タイムアウトメソッドと呼びます。
Timer Serviceの処理の概要を次の図に示します。
(2) EJBタイマの種別
EJBタイマに設定できるタイマ種別には次の種類があります。
-
single-eventタイマ
タイムアウトメソッドを1回だけ実行するためのEJBタイマです。
タイムアウトの設定には,タイムアウトメソッドを実行する時刻を指定する方法と,EJBタイマ生成メソッドを呼び出してからタイムアウトメソッドを実行するまでの時間を指定する方法があります。
javax.ejb.TimerServiceインタフェースの次のメソッドで生成できます。
-
createTimer(long duration, Serializable info)メソッド
-
createTimer(Date expiration, Serializable info)メソッド
-
createSingleActionTimerメソッド
-
-
intervalタイマ
一定間隔で,繰り返しタイムアウトメソッドを実行するためのEJBタイマです。
タイムアウトの設定には,1回目のタイムアウトメソッドを実行する時刻を指定する方法と,EJBタイマ生成メソッドを呼び出してから1回目のタイムアウトメソッドを実行するまでの時間を指定する方法があります。また,この設定のほかに,2回目以降のタイムアウトメソッドを実行するためのタイムアウトの間隔を指定します。この間隔は,タイムアウトから次のタイムアウトまでの間隔です。
javax.ejb.TimerServiceインタフェースの次のメソッドで生成できます。
-
createTimer(long initialDuration, long intervalDuration, Serializable info)メソッド
-
createTimer(Date initialExpiration, long intervalDuration, Serializable info)メソッド
-
createIntervalTimerメソッド
-
-
calendar-basedタイマ
カレンダー形式で指定した日時にタイムアウトメソッドを実行するためのEJBタイマです。一つまたは複数の値を指定できます。また,ワイルドカードや範囲の指定もできます。calendar-basedタイマの指定方法の詳細は,「2.12.7(3) カレンダー形式でスケジュールを指定する場合の指定方法」を参照してください。
javax.ejb.TimerServiceインタフェースの次のメソッドで生成できます。
-
createCalendarTimerメソッド
また,@Scheduleアノテーションを使用して作成することもできます。詳細は,「2.12.3 EJBタイマの自動生成」を参照してください。
-
EJBタイマに設定できるタイマ種別と設定できる例を次の表に示します。
タイマ種別 |
設定できる例 |
説明 |
---|---|---|
single-event |
2006/4/15 12:00 |
2006/4/15 12:00にタイムアウトメソッドを1回だけ実行します。 |
24時間後 |
EJBタイマが生成されてから24時間後に,タイムアウトメソッドを1回だけ実行します。 |
|
interval |
2006/4/1 12:00から24時間間隔 |
2006/4/1 12:00に1回目のタイムアウトメソッドを実行します。そのあと,24時間間隔でタイムアウトメソッドを繰り返し実行します。 |
24時間後から10時間間隔 |
EJBタイマが生成されてから24時間後に,1回目のタイムアウトメソッドを実行します。そのあと,10時間間隔でタイムアウトメソッドを繰り返し実行します。 |
|
calendar-based |
毎月1日 12:00 |
毎月1日の12時になるとタイムアウトメソッドを実行します。 |
EJBタイマのうち,single-eventタイマとintervalタイマの動作を次の図に示します。この図では,2:00にタイムアウトメソッドを1回だけコールバックするsingle-eventタイマと,2:00から2時間間隔でタイムアウトメソッドをコールバックするintervalタイマの動作を示しています。
(3) Timer Serviceのサポート範囲
Java EEの仕様で規定されている,Timer Serviceの機能のサポート状況を次の表に示します。
Java EEの仕様で規定されているTimer Serviceの機能 |
サポート状況 |
---|---|
トランザクション |
○ |
EJBタイマ永続性 |
×※ |
TimerServiceオブジェクトの取得(DI,JNDIルックアップ,EJBContext) |
○ |
タイムアウトメソッドの指定(アノテーション,TimedObject実装) |
○ |
タイムアウトメソッドの指定(DDによる指定) |
× |
Enterprise Beanの種別ごとに,Timer Serviceの機能のサポート状況を次の表に示します。
Timer Serviceの機能 |
Message-driven Bean |
Session Bean |
Entity Bean |
||
---|---|---|---|---|---|
Stateful Session Bean |
Stateless Session Bean |
Singleton Session Bean |
|||
TimerServiceオブジェクトの取得 |
× |
− |
○ |
○ |
× |
Timer Serviceに関するオブジェクト(TimerService,Timer,TimerHandle)の操作 |
× |
○ |
○ |
○ |
× |
アノテーションによるタイマの自動生成 |
× |
− |
○ |
○ |
× |
(4) Timer Serviceでのトランザクション管理
Timer Serviceは,トランザクションをサポートしています。具体的には,EJBタイマの生成,EJBタイマの削除,およびタイムアウトメソッドがトランザクションに対応しています。ここでは,タイムアウトメソッドのトランザクション管理について説明します。
EJBタイマの生成については,「2.12.2 EJBタイマの生成とコールバック実行時の動作」を,EJBタイマの削除については,「2.12.4 EJBタイマの削除」を参照してください。
(a) タイムアウトメソッドに設定できるトランザクション属性
タイムアウトメソッドには,トランザクション管理にBMTまたはCMTを選択できます。
CMTの場合に,タイムアウトメソッドに指定できるトランザクション属性を次に示します。
-
Required属性
-
RequiresNew属性
-
NotSupported属性
これ以外の属性が指定された場合,J2EEアプリケーションの開始に失敗します。
(b) タイムアウトメソッドのコールバックに対するトランザクション管理
タイムアウトメソッドに,CMTでRequired属性またはRequiresNew属性を指定した場合,タイムアウトメソッドのコールバック中にトランザクションがロールバックすると,コールバックをリトライします。コールバックのリトライについては「2.12.5(2) タイムアウトメソッドのコールバックリトライ」を参照してください。