Cosminexus 機能解説
Timer Serviceによって指定した時刻に処理を実行するには,EJBタイマを生成します。また,EJBタイマによる処理の実行を停止するには,EJBタイマを削除します。EJBタイマの生成,削除のタイミングは,EJBタイマの種別や,トランザクションの管理下で処理が実行されるかどうかによって異なります。ここでは,EJBタイマの生成と削除のタイミング,およびEJBタイマの生成時と削除時のタイムアウトメソッドのコールバックの動作について説明します。
EJBタイマ生成では,EJBタイマ生成メソッド(javax.ejb.TimerServiceオブジェクトのcreateTimerメソッド)によって,EJBタイマが一つ生成されます。EJBタイマが生成されると,指定した時刻にタイムアウトが発生してタイムアウトメソッドがコールバックされます。
EJBタイマ生成時に,EJBタイマを呼び出してから1回目のタイムアウトメソッドを実行するまでの時間を指定しているEJBタイマの場合,時間のカウントは,EJBタイマ生成メソッドが呼ばれた時刻を基点に開始されます。EJBタイマの生成とカウントの開始について次の図に示します。
図5-17 EJBタイマの生成とカウントの開始
EJBタイマが生成されるタイミングおよびタイムアウトメソッドがコールバックされるタイミングは,EJBタイマ生成がトランザクションの管理下で行われるかどうかによって異なります。
図5-18 EJBタイマ生成とコールバックの実行(トランザクションがコミットしたあとにタイムアウト時刻となるEJBタイマの場合)
この図では,EJBタイマ生成メソッドが呼ばれた時点から,タイムアウト時刻までのカウントが開始され,指定した時刻どおりにタイムアウトメソッドがコールバックされます。EJBタイマが生成されるのは,トランザクションコミット時です。図5-19 EJBタイマ生成とコールバックの実行(トランザクションがコミットする前にタイムアウト時刻となるEJBタイマの場合)
この図では,EJBタイマ生成メソッドが呼ばれた時点から,タイムアウト時刻までのカウントが開始され,トランザクションコミットの前にタイムアウト時刻になります。トランザクションコミット時までEJBタイマは生成されないため,タイムアウト時刻になってもタイムアウトメソッドはコールバックされません。トランザクションがコミットした直後にコールバックされます。図5-20 EJBタイマ生成とコールバックの実行(トランザクションの管理下でない場合)
この図では,EJBタイマ生成メソッドが呼ばれた直後にEJBタイマが生成されます。そのあと,指定した時刻どおりにタイムアウトメソッドがコールバックされます。
EJBタイマを削除するには,EJBタイマキャンセルを行います。
なお,single-eventタイマの場合は,タイムアウトメソッドのコールバック完了時にEJBタイマが削除されます。intervalタイマの場合,EJBタイマキャンセルが行われるまでEJBタイマは削除されません。
EJBタイマキャンセルでは,EJBタイマキャンセルメソッド(javax.ejb.Timerオブジェクトのcancelメソッド)によって,EJBタイマが一つ削除されます。EJBタイマが削除されると,それ以降のコールバックは実行されません。EJBタイマキャンセルによってEJBタイマが削除されるタイミングは,EJBタイマキャンセルがトランザクションの管理下で行われるかどうかによって異なります。
All Rights Reserved. Copyright (C) 2006, 2007, Hitachi, Ltd.