Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド |
目次 索引 |
第3部 EJB編 | > 第10章 EJBサービスの機能 | > 10.5 EJBサービスで使用できる時間監視機能 |
EJBタイマーサービスは、EJB2.1規約から追加された機能です。本機能では、以下のようなタイマーを作成し、任意の時刻にEJBコンテナからコールバック処理を実行させることができます。
したがって、例えば買い物をするとポイントが貯まるサービスで、毎日0:00にポイントを集計し、ポイントが貯まったお客様に販促メールを配信するといったタイマーを利用したイベント処理を作成することが可能になります。
本機能はEJBアプリケーションでタイマーを作成する機能です。タイマーを作成したIJServerプロセスが停止した場合(メモリ不足などにより強制停止した場合を含む)には、タイマーも停止します。このため、タイマーが予期せず停止する場合がありますので、常時タイマーを起動しておきたい場合には他の時間監視機能を使用することをお勧めします。
EJBタイマーサービスはSTATELESS Session Bean、Message-driven Beanで使用可能です。
(注) 本バージョンではEntity Beanはタイマーによるコールバック処理(ejbTimeoutメソッド)は実行されません。また、EJBタイマーサービスを使用するEntity Beanを配備したIJServerを起動するとIJServer21149の警告メッセージが出力されます。
タイマーはEJBタイマーサービスのcreateTimerメソッドを実行して生成します。createTimerメソッドの引数に実行時刻や実行間隔を指定します。EJBタイマーサービスは、Enterprise BeanにEJBコンテナより渡されるEJBコンテキストのgetTimerServiceメソッドを実行して取得します。
生成したタイマーをキャンセルするには、Enterprise Beanより生成したタイマーのcancelメソッドを実行します。タイマーは、Enterprise BeanにてgetTimerServiceメソッドを実行して取得したEJBタイマーサービスに対し、getTimersメソッドを実行することにより取得できます。また、コールバック処理(ejbTimeoutメソッド)の引数で渡されます。
タイマー生成時に指定した時刻に、EJBタイマーサービスより各Enterprise Beanのコールバック処理(ejbTimeoutメソッド)を実行します。Enterprise Beanはjavax.ejb.TimedObjectインタフェースを実装している必要があります。
タイマーは生成したプロセス内でのみ使用できます。そのためEnterprise BeanのRemoteインタフェースやWebサービスのエンドポイントを通してリモート側で取得しないでください。また、クラスタ構成やプロセス多重環境での使用は未サポートです。EJBタイマーサービスを実装したEJBアプリケーションを配備してプロセス多重度を2以上に設定したIJServerで起動した場合は、IJServer21148のエラーが発生します。
EJBタイマーサービスで生成するタイマーは、配備したモジュールが非活性になると削除されます。そのため以下の操作を行った場合、必要に応じてタイマーを再登録してください。
負荷が集中するとタイマーの開始時間がずれる場合があります。
タイマーの処理がすぐに完了せず、後続のタイマーの実行時間が来た場合、後続のタイマーは実行中のタイマーの完了を待ちます。実行中のタイマーが完了後、実行予定時刻が超過しているタイマーはただちに実行されます。一定間隔で実行するタイマーの場合、実行予定時刻を越えている処理分連続して実行されます。
トランザクションの範囲内で生成したタイマーは、トランザクションがロールバックされると削除されます。
トランザクションの範囲内でタイマーをキャンセルした場合、トランザクションがロールバックされるとキャンセルは無効になります。新規タイマーの場合は削除されます。既存のタイマーの場合は継続して動作します。
コールバック処理実行時のトランザクションは、EJBアプリケーションに定義されたトランザクション属性により以下のように動作します。
トランザクション属性 |
EJBコンテナの処理 |
---|---|
RequiresNew |
EJBコンテナはトランザクションを新しく開始してからコールバック処理を実行します。 |
Supports |
EJBコンテナはトランザクションを開始せず、コールバック処理を実行します。 |
Mandatory |
指定できません。 |
トランザクション属性の詳細は“トランザクション管理種別とトランザクション属性”を参照してください。
コールバック処理(ejbTimeoutメソッド)はそれぞれ以下のインスタンス上で実行されます。
プーリングされているインスタンス上でコールバック処理が実行されます。
新しいインスタンス上でコールバック処理が実行されます。
(インスタンスはコールバック処理実行後削除されます。)
未サポートです。コールバック処理は実行されません。
以降の節で、EJBタイマーサービスを利用するアプリケーションの作成方法を説明します。
目次 索引 |