2.12.5 Timer Serviceの運用機能
Timer Serviceの運用で使用する機能について説明します。運用機能には次の二つがあります。
-
タイムアウトメソッドのコールバックスレッド数制御機能
-
タイムアウトメソッドのコールバックリトライ機能
これらの機能は,J2EEサーバのプロパティをカスタマイズして設定します。設定するプロパティについては,「2.12.9 実行環境での設定」を参照してください。
(1) タイムアウトメソッドのコールバックスレッド数制御機能
タイムアウトメソッドのコールバックを処理するスレッドを,J2EEサーバ全体で同時に幾つ実行するかを設定します。これをコールバック最大スレッド数といいます。
複数のEJBタイマが同時にタイムアウトした場合,タイムアウトメソッドのコールバックの最大スレッド数の設定によって,次のような動作になります。
-
コールバック最大スレッド数:1(デフォルト)の場合
コールバック処理は順次行われます。そのため,EJBタイマに設定した時刻よりも遅れてコールバック処理が開始されることがあります。
-
コールバック最大スレッド数:2以上の場合
設定した数だけ並行してコールバック処理が実行されます。最大スレッド数を増加させた場合,その分だけリソースを消費するため,並行に実行させたいスレッド数を適切に設定してください。
コールバック最大スレッド数の設定とコールバック処理の関係について次の図に示します。
この図の場合,EJBタイマ1のタイムアウトの1分後に,EJBタイマ2のタイムアウトになる設定にしています。コールバック最大スレッド数を1に設定した場合は,EJBタイマ1のコールバック処理が終了したあと,EJBタイマ2のコールバック処理が開始されます。コールバック最大スレッド数を2に設定した場合は,二つのコールバックを並行して処理できるため,設定どおりにEJBタイマ1の1分後にEJBタイマ2のコールバック処理が開始されます。
- 注意事項
-
コールバックのスレッド数に余裕がある場合でもEnterprise Beanのインスタンスが不足していると,インスタンスが解放されるのを待ってコールバック処理が行われます。そのため,コールバックするインスタンス数を考慮してEnterprise Beanインスタンスプールを設定してください。
(2) タイムアウトメソッドのコールバックリトライ
タイムアウトメソッドのコールバックに失敗した場合は,コールバックをリトライします。
コールバックが失敗する要因として次のケースが考えられます。
-
タイムアウトによるコールバック時に,非検査例外(java.lang.RuntimeException,java.lang.Errorおよびそれらのサブクラス)がスローされた場合
-
タイムアウトメソッドがCMTのRequired属性またはRequiresNew属性で,そのトランザクションがロールバックした場合
コールバックのリトライを行うには,次の二つを設定します。
- リトライ回数
-
リトライする回数を設定します。0を設定した場合は,リトライしません。また,リトライ実行回数が設定したリトライ回数に達すると,そのタイムアウトでのリトライは行いません。
- リトライの実行間隔
-
コールバックが失敗してから,リトライのコールバックを行うまでの時間を設定します。