2.12.10 Timer Serviceを利用する場合の注意事項
Timer Serviceを利用する場合の注意事項について説明します。
-
Timer Serviceを利用した場合,EJBタイマに指定した時刻と,実際にタイムアウトメソッドがコールバックされる時刻に差が生じることがあります。この場合,次の要因が考えられます。
-
GCの実行
EJBタイマで指定した時刻に,JavaVMでGCが実行された場合,GCの処理が優先されます。GCが終了してからタイムアウトメソッドがコールバックされるため,指定した時刻との差異が生じることがあります。
-
プラットフォームやハードウェア環境
Timer Serviceでは,JavaVMの時間を使用します。JavaVMの時間は,プラットフォームやハードウェア環境に依存します。コールバックもJavaVMの時間に従って実行されるため,指定した時刻との差異が生じることがあります。
-
-
J2EEサーバが稼働するマシンで,NTPクライアントソフトウェアなどによってシステム時刻が修正された場合,登録済みのEJBタイマのタイムアウト時刻は次のような動作になります。
-
single-eventタイマの場合
修正前のシステム時刻が継続されているものとして,タイムアウトが発生します。
-
intervalタイマの場合
修正後,修正前のシステム時刻が継続されているものとして1回目のタイムアウトが発生します。2回目以降は,修正後のシステム時刻に従ってタイムアウトが発生します。
-
calendar-basedタイマの場合,または@Scheduleアノテーションを指定する方式の場合
指定された日時に一度だけコールバックされる設定のときには,修正前のシステム時刻が継続されているものとしてタイムアウトが発生します。
定期的にコールバックされる設定のときには,修正後,修正前のシステム時刻が継続されているものとして1回目のタイムアウトが発生します。2回目以降は,修正後のシステム時刻に従ってタイムアウトが発生します。
次の図に,システム時刻を変更しない場合,システム時刻を戻した場合,およびシステム時刻を進めた場合のコールバックのタイミングの例を示します。
図2‒32 コールバックのタイミングの例 -