Timer Serviceとは,指定した時刻,経過時間,または間隔でEnterprise Beanを呼び出す機能です。この機能はEJBコンテナが提供します。Timer Serviceを使用すると,マシン負荷が低い時間を指定したバッチ処理や,一定間隔での日次処理など,時刻を指定した処理を容易に実行できます。
ここでは,Timer Serviceで設定できるタイムアウトの内容や,タイムアウトを設定するEJBタイマの動作,Timer Serviceの運用などについて説明します。
Timer Serviceで設定できるタイムアウトやTimer Serviceのサポート範囲,Timer Serviceでのトランザクション管理について説明します。
Timer Serviceは,Java EEに規定されたAPIを使用して,Enterprise Beanから操作します。時刻を指定した処理を行うには,EJBタイマを生成します。EJBタイマにはタイムアウト時刻を指定します。生成されたEJBタイマは,EJBコンテナに管理され,タイムアウト時刻になると,EJBコンテナによってEnterprise Beanのメソッドがコールバックされます。この際にコールバックされるメソッドを,タイムアウトメソッドと呼びます。
Timer Serviceの処理の概要を次の図に示します。
図2-17 Timer Serviceの処理の概要
EJBタイマに設定できるタイマ種別には次の種類があります。
EJBタイマに設定できるタイマ種別と設定できる例を次の表に示します。
表2-32 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タイマの動作を示しています。
図2-18 single-eventタイマとintervalタイマの動作
Java EEの仕様で規定されている,Timer Serviceの機能のサポート状況を次の表に示します。
表2-33 Java EEの仕様で規定されているTimer Serviceの機能のサポート状況
Java EEの仕様で規定されているTimer Serviceの機能 | サポート状況 |
---|---|
トランザクション | ○ |
EJBタイマ永続性 | ×※ |
TimerServiceオブジェクトの取得(DI,JNDIルックアップ,EJBContext) | ○ |
タイムアウトメソッドの指定(アノテーション,TimedObject実装) | ○ |
タイムアウトメソッドの指定(DDによる指定) | × |
(凡例) ○:利用できる。 ×:利用できない。
Enterprise Beanの種別ごとに,Timer Serviceの機能のサポート状況を次の表に示します。
表2-34 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)の操作 | × | ○ | ○ | ○ | × |
アノテーションによるタイマの自動生成 | × | - | ○ | ○ | × |
(凡例) ○:利用できる。 ×:利用できない。 -:利用できない(Java EE仕様)。
Timer Serviceは,トランザクションをサポートしています。具体的には,EJBタイマの生成,EJBタイマの削除,およびタイムアウトメソッドがトランザクションに対応しています。ここでは,タイムアウトメソッドのトランザクション管理について説明します。
EJBタイマの生成については,「2.12.2 EJBタイマの生成とコールバック実行時の動作」を,EJBタイマの削除については,「2.12.4 EJBタイマの削除」を参照してください。
タイムアウトメソッドには,トランザクション管理にBMTまたはCMTを選択できます。
CMTの場合に,タイムアウトメソッドに指定できるトランザクション属性を次に示します。
これ以外の属性が指定された場合,J2EEアプリケーションの開始に失敗します。
タイムアウトメソッドに,CMTでRequired属性またはRequiresNew属性を指定した場合,タイムアウトメソッドのコールバック中にトランザクションがロールバックすると,コールバックをリトライします。コールバックのリトライについては「2.12.5(2) タイムアウトメソッドのコールバックリトライ」を参照してください。