ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

F.6.1 指定時刻にビジネスクラスを呼び出したい

EJBコンテナが提供するEJBタイマーサービス機能は、タイマーをEJBコンテナに設定することで、任意の時刻にEJBコンテナがEJBセションBeanを実行します。
ApcoordinatorのEJBアプリケーションフレームワークでは、EJBタイマーサービス機能を使用して指定時刻にビジネスクラスを呼び出すことができます。

注意

EJBタイマーサービス機能を利用する場合、以下の点に注意してください。

  • EJBタイマーサービス機能は、EJB 2.1以上のステートレスセションBeanだけで使用することができます。

  • EJBタイマーサービスでは、呼び出す時刻をミリ秒単位で指定しますが、ミリ秒単位の精度のタイマーを提供するものではありません。

EJBタイマーサービス機能を利用してビジネスクラスを呼び出す場合は、アプリケーションを次のように作成します。

タイマー情報クラスを作成する

EJBタイマーサービスでは、タイマーの作成時に任意のデータをタイマーに設定して、コールバック処理時に参照できます。これを利用して、ビジネスクラスのメソッド呼び出しに必要なデータBean、コマンド名をタイマーに設定します。タイマーに設定可能なオブジェクトは1つであるため、データBean、コマンド名を格納するためのクラスを作成する必要があります。ここでは、このクラスをタイマー情報クラスと呼びます。タイマー情報クラスは、例えばJavaBeans形式のクラスとして作成します。

注意

タイマー情報クラスの作成では、以下の点に注意してください。

  • タイマー情報クラスは、シリアライズ可能である必要があります。

  • タイマー情報クラス内では、データBeanを除いて、Apcoordinatorが提供するクラスを継承、もしくはインタフェースを実装したクラスを保持することはできません。

タイマーを作成する

タイマーの作成は、次の手順で行います。

  1. EJBSessionProfileのgetEJBContextメソッドを使用して、EJBContextを取得します。取得したEJBContextのgetTimerServiceメソッドを使用して、TimerServiceを取得します。

  2. タイマー情報クラスを生成して、呼び出すビジネスクラスのメソッドに対応したデータBeanとコマンド名をタイマー情報クラスに設定します。

  3. TimerServiceのcreateTimerメソッドを使用して、時刻とタイマー情報クラスを指定します。この処理により、タイマーが作成され、開始されます。

注意

タイマーの作成をトランザクションの範囲内で実行した場合、トランザクションがロールバックされると、 EJBコンテナはタイマーの作成を取り消します。 詳細については、ご使用になるアプリケーションサーバのマニュアルを参照してください。

ejbTimeoutメソッドを実装する

セションBeanクラスにTimedObjectインタフェースを実装してejbTimeoutメソッドを作成します。 ejbTimeoutメソッドは、タイマーで指定した時刻にEJBコンテナから呼び出されるメソッドで、 TimedObjectインタフェースで定義されています。ejbTimeoutメソッドには、 タイマーで指定した時刻に呼び出される処理を実装します。 ここでは、ビジネスクラスのメソッドを呼び出すために以下の処理を作成します。

  1. ejbTimeoutメソッドの第一引数はTimerクラスです。Timerクラスから、タイマー作成時に設定したタイマー情報クラスを取得します。

  2. タイマー情報クラスからデータBeanとコマンド名を取得します。

  3. 取得したデータBeanとコマンド名を指定してUjiSessionBeanクラスのexecメソッドを呼び出します。execメソッドの第三引数はnullを指定します。

注意

ejbTimeoutメソッドをトランザクションの範囲内で実行した場合、トランザクションがロールバックされると、 EJBコンテナはejbTimeoutメソッドを再試行します。 詳細については、ご使用になるアプリケーションサーバのマニュアルを参照してください。