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タイマ
(2) EJBタイマの種別
(3) Timer Serviceのサポート範囲
(4) Timer Serviceでのトランザクション管理

(1) Timer ServiceとEJBタイマ

Timer Serviceは,Java EEに規定されたAPIを使用して,Enterprise Beanから操作します。時刻を指定した処理を行うには,EJBタイマを生成します。EJBタイマにはタイムアウト時刻を指定します。生成されたEJBタイマは,EJBコンテナに管理され,タイムアウト時刻になると,EJBコンテナによってEnterprise Beanのメソッドがコールバックされます。この際にコールバックされるメソッドを,タイムアウトメソッドと呼びます。

Timer Serviceの処理の概要を次の図に示します。

図2-17 Timer Serviceの処理の概要

[図データ]

(2) EJBタイマの種別

EJBタイマに設定できるタイマ種別には次の種類があります。

EJBタイマに設定できるタイマ種別と設定できる例を次の表に示します。

表2-32 EJBタイマに設定できるタイマ種別と設定できる例

タイマ種別設定できる例説明
single-event2006/4/15 12:002006/4/15 12:00にタイムアウトメソッドを1回だけ実行します。
24時間後EJBタイマが生成されてから24時間後に,タイムアウトメソッドを1回だけ実行します。
interval2006/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タイマの動作

[図データ]

(3) Timer Serviceのサポート範囲

Java EEの仕様で規定されている,Timer Serviceの機能のサポート状況を次の表に示します。

表2-33 Java EEの仕様で規定されているTimer Serviceの機能のサポート状況

Java EEの仕様で規定されているTimer Serviceの機能サポート状況
トランザクション
EJBタイマ永続性×
TimerServiceオブジェクトの取得(DI,JNDIルックアップ,EJBContext)
タイムアウトメソッドの指定(アノテーション,TimedObject実装)
タイムアウトメソッドの指定(DDによる指定)×

(凡例) ○:利用できる。 ×:利用できない。

注※
@Scheduleアノテーションのpersistent属性の指定も有効になりません。
障害などでJ2EEサーバを再起動したときは,再起動前に使用していたEJBタイマは引き継がれません。J2EEサーバ起動時にEJBタイマを自動で生成する場合は,「2.12.3 EJBタイマの自動生成」を参照してください。

Enterprise Beanの種別ごとに,Timer Serviceの機能のサポート状況を次の表に示します。

表2-34 Enterprise Beanの種別ごとの,Timer Serviceの機能のサポート状況

Timer Serviceの機能Message-driven BeanSession BeanEntity Bean
Stateful Session BeanStateless Session BeanSingleton Session Bean
TimerServiceオブジェクトの取得××
Timer Serviceに関するオブジェクト(TimerService,Timer,TimerHandle)の操作××
アノテーションによるタイマの自動生成××

(凡例) ○:利用できる。 ×:利用できない。 -:利用できない(Java EE仕様)。


(4) Timer Serviceでのトランザクション管理

Timer Serviceは,トランザクションをサポートしています。具体的には,EJBタイマの生成,EJBタイマの削除,およびタイムアウトメソッドがトランザクションに対応しています。ここでは,タイムアウトメソッドのトランザクション管理について説明します。

EJBタイマの生成については,「2.12.2 EJBタイマの生成とコールバック実行時の動作」を,EJBタイマの削除については,「2.12.4 EJBタイマの削除」を参照してください。

(a) タイムアウトメソッドに設定できるトランザクション属性

タイムアウトメソッドには,トランザクション管理にBMTまたはCMTを選択できます。

CMTの場合に,タイムアウトメソッドに指定できるトランザクション属性を次に示します。

これ以外の属性が指定された場合,J2EEアプリケーションの開始に失敗します。

(b) タイムアウトメソッドのコールバックに対するトランザクション管理

タイムアウトメソッドに,CMTでRequired属性またはRequiresNew属性を指定した場合,タイムアウトメソッドのコールバック中にトランザクションがロールバックすると,コールバックをリトライします。コールバックのリトライについては「2.12.5(2) タイムアウトメソッドのコールバックリトライ」を参照してください。