2.12.9 Timer Service実装時の注意事項

Timer Serviceを実装するときの注意事項を示します。

<この項の構成>
(1) createTimerメソッドの引数infoの指定
(2) DDおよび属性ファイルでのタイムアウトメソッド指定
(3) Timer Serviceオブジェクトをサポートしていない種別のBeanからTimer Serviceオブジェクトを取得しようとした場合の動作
(4) TimerServiceが提供するAPIの動作仕様
(5) Timer Serviceを使用できるEJBのバージョン

(1) createTimerメソッドの引数infoの指定

TimerオブジェクトのgetInfoメソッドは,TimerServiceオブジェクトのcreateTimerメソッドで引数infoに指定されたオブジェクト自体を戻り値とします。そのため,getInfoメソッドの戻り値がcreateTimerメソッド実行時のオブジェクトと異なる状態である場合があり,トラブルが生じやすくなっています。

これを防ぐために,createTimerメソッドで引数infoに指定するオブジェクトはStringやIntegerなどの不変オブジェクトにする,または引数infoに指定したオブジェクトの状態を変更しないことを推奨します。変更した場合には,getInfoメソッドの戻り値は変更後のオブジェクトになります。

(2) DDおよび属性ファイルでのタイムアウトメソッド指定

DDや属性ファイルで<method>タグにタイムアウトメソッドを指定する場合は,次のどちらかとしてください。

(3) Timer Serviceオブジェクトをサポートしていない種別のBeanからTimer Serviceオブジェクトを取得しようとした場合の動作

Timer Serviceをサポートしない取得手段を次の表に示します。Timer Serviceをサポートしない種別のBeanやサーブレットからTimerServiceオブジェクトを取得しようとした場合,手段によって次のような動作をします。

表2-35 Timer Serviceオブジェクトをサポートしていない種別のBeanからTimer Serviceオブジェクトを取得しようとした場合の動作

TimerServiceオブジェクトの取得手段動作
EJBContext#getTimerServiceIllegalStateException例外をスローします。
JNDIのルックアップNamingException例外をスローします。
DIデプロイに失敗します。

Timer Serviceをサポートしている種別のBeanは,タイムアウトメソッドを実装しているかどうかに関係なく,TimerServiceオブジェクトを取得できます。

(4) TimerServiceが提供するAPIの動作仕様

TimerServiceが提供するAPIを呼び出したときの動作のうち,EJB仕様書で明確に示されていない動作仕様があります。ここでは,javax.ejb.TimerServiceおよびjavax.ejb.Timerのアプリケーションサーバでの動作仕様を示します。

(5) Timer Serviceを使用できるEJBのバージョン

Timer Serviceは,EJB 2.1以降で使用できます。