Timer Serviceを利用する場合の注意事項について説明します。
- Timer Serviceを利用した場合,EJBタイマに指定した時刻と,実際にタイムアウトメソッドがコールバックされる時刻に差が生じることがあります。この場合,次の要因が考えられます。
- ガーベージコレクションの実行
EJBタイマで指定した時刻に,JavaVMでガーベージコレクションが実行された場合,ガーベージコレクションの処理が優先されます。ガーベージコレクションが終了してからタイムアウトメソッドがコールバックされるため,指定した時刻との差異が生じることがあります。
- プラットフォームやハードウェア環境
Timer Serviceでは,JavaVMの時間を使用します。JavaVMの時間は,プラットフォームやハードウェア環境に依存します。コールバックもJavaVMの時間に従って実行されるため,指定した時刻との差異が生じることがあります。
- J2EEサーバが稼働するマシンで,NTPクライアントソフトウェアなどによってシステム時刻が修正された場合,登録済みのEJBタイマのタイムアウト時刻は次のような動作になります。
- single-eventタイマの場合
修正前のシステム時刻が継続されているものとして,タイムアウトが発生します。
- intervalタイマの場合
修正後,修正前のシステム時刻が継続されているものとして1回目のタイムアウトが発生します。2回目以降は,修正後のシステム時刻に従ってタイムアウトが発生します。