Cosminexus 機能解説

[目次][用語][索引][前へ][次へ]

5.10.2 EJBタイマの生成と削除

Timer Serviceによって指定した時刻に処理を実行するには,EJBタイマを生成します。また,EJBタイマによる処理の実行を停止するには,EJBタイマを削除します。EJBタイマの生成,削除のタイミングは,EJBタイマの種別や,トランザクションの管理下で処理が実行されるかどうかによって異なります。ここでは,EJBタイマの生成と削除のタイミング,およびEJBタイマの生成時と削除時のタイムアウトメソッドのコールバックの動作について説明します。

<この項の構成>
(1) EJBタイマの生成
(2) EJBタイマの削除

(1) EJBタイマの生成

EJBタイマ生成では,EJBタイマ生成メソッド(javax.ejb.TimerServiceオブジェクトのcreateTimerメソッド)によって,EJBタイマが一つ生成されます。EJBタイマが生成されると,指定した時刻にタイムアウトが発生してタイムアウトメソッドがコールバックされます。

(a) タイムアウト時刻のカウント

EJBタイマ生成時に,EJBタイマを呼び出してから1回目のタイムアウトメソッドを実行するまでの時間を指定しているEJBタイマの場合,時間のカウントは,EJBタイマ生成メソッドが呼ばれた時刻を基点に開始されます。EJBタイマの生成とカウントの開始について次の図に示します。

図5-17 EJBタイマの生成とカウントの開始

[図データ]

(b) EJBタイマ生成とタイムアウトメソッドのコールバック実行のタイミング

EJBタイマが生成されるタイミングおよびタイムアウトメソッドがコールバックされるタイミングは,EJBタイマ生成がトランザクションの管理下で行われるかどうかによって異なります。

EJBタイマ生成がトランザクションの管理下で行われる場合
EJBタイマは,トランザクションがコミットした時に生成されます。
タイムアウトメソッドのコールバックが実行されるタイミングは,トランザクションがコミットしたあとにタイムアウト時刻となるEJBタイマの場合と,トランザクションがコミットする前にタイムアウト時刻となるEJBタイマの場合とで異なります。なお,トランザクションがロールバックされた場合は,EJBタイマの生成は取り消されます。
  • トランザクションがコミットしたあとにタイムアウト時刻となるEJBタイマの場合
    指定した時刻どおりにタイムアウトメソッドがコールバックされます。EJBタイマ生成とコールバックの実行について次の図に示します。

    図5-18 EJBタイマ生成とコールバックの実行(トランザクションがコミットしたあとにタイムアウト時刻となるEJBタイマの場合)

    [図データ]

    この図では,EJBタイマ生成メソッドが呼ばれた時点から,タイムアウト時刻までのカウントが開始され,指定した時刻どおりにタイムアウトメソッドがコールバックされます。EJBタイマが生成されるのは,トランザクションコミット時です。
  • トランザクションがコミットする前にタイムアウト時刻となるEJBタイマの場合
    トランザクションがコミットした直後にタイムアウトメソッドがコールバックされます。EJBタイマ生成とコールバックの実行について次の図に示します。

    図5-19 EJBタイマ生成とコールバックの実行(トランザクションがコミットする前にタイムアウト時刻となるEJBタイマの場合)

    [図データ]

    この図では,EJBタイマ生成メソッドが呼ばれた時点から,タイムアウト時刻までのカウントが開始され,トランザクションコミットの前にタイムアウト時刻になります。トランザクションコミット時までEJBタイマは生成されないため,タイムアウト時刻になってもタイムアウトメソッドはコールバックされません。トランザクションがコミットした直後にコールバックされます。

EJBタイマ生成がトランザクションの管理下で行われない場合
EJBタイマはEJBタイマ生成メソッドが呼ばれた直後に生成されます。
トランザクションの管理下でない場合のEJBタイマ生成について次の図に示します。

図5-20 EJBタイマ生成とコールバックの実行(トランザクションの管理下でない場合)

[図データ]

この図では,EJBタイマ生成メソッドが呼ばれた直後にEJBタイマが生成されます。そのあと,指定した時刻どおりにタイムアウトメソッドがコールバックされます。

(2) EJBタイマの削除

EJBタイマを削除するには,EJBタイマキャンセルを行います。

なお,single-eventタイマの場合は,タイムアウトメソッドのコールバック完了時にEJBタイマが削除されます。intervalタイマの場合,EJBタイマキャンセルが行われるまでEJBタイマは削除されません。

EJBタイマキャンセルでは,EJBタイマキャンセルメソッド(javax.ejb.Timerオブジェクトのcancelメソッド)によって,EJBタイマが一つ削除されます。EJBタイマが削除されると,それ以降のコールバックは実行されません。EJBタイマキャンセルによってEJBタイマが削除されるタイミングは,EJBタイマキャンセルがトランザクションの管理下で行われるかどうかによって異なります。

EJBタイマキャンセルがトランザクションの管理下で行われる場合
EJBタイマは,トランザクションのコミット時に削除されます。そのため,EJBタイマキャンセルメソッドが呼ばれてから,トランザクションがコミットするまでの間にタイムアウト時刻になることがあります。
トランザクションがロールバックされた場合は,EJBタイマキャンセルは取り消されます。

EJBタイマキャンセルがトランザクションの管理下で行われない場合
EJBタイマは,EJBタイマキャンセルメソッドが呼ばれた直後に削除されます。
参考
J2EEアプリケーションの停止時には,停止対象のJ2EEアプリケーションのEJBタイマはすべて削除されます。J2EEサーバの停止または異常終了時には,J2EEサーバ上のEJBタイマはすべて削除されます。