タイマー コントロールで時間を指定するには
このトピックでは、タイマー コントロールに対して相対時間と絶対時間を指定する方法について説明します。
コントロールに関する詳細については、コントロール : Web サービスからリソースを使用するを参照してください。
タイマー コントロールの詳細については、タイマー コントロール : Web サービスでタイマーを使用するを参照してください。
タイマー コントロールのコンフィグレーションと使用方法については、タイマー コントロールを使用するを参照してください。
次のような場合には必ず相対時間を指定しなければなりません。
@jws:timer タグの timeout または repeats-every 属性の値を設定する場合
TimerControl インタフェースの setTimeout または setRepeatsEvery メソッドを呼び出す場合
テキストで表す場合、相対時間の指定形式は次のようになります。
整数の後に時間の単位(以下参照)を指定する。単位は省略形で指定でき、大文字と小文字は区別されず、スペースで区切ることができます。
「p」(大文字と小文字を区別)を先頭に使用できる。その場合、1 文字からなる省略形を使用し、スペースを入れないで、y、m、d、h、m、s の順番で指定しなければなりません。
たとえば、次のコード サンプルはすべての時間単位を省略しないで指定した有効な持続時間指定です。
/** * @jws:control * @jws:timer timeout="99 years 11 months 13 days 23 hours 43 minutes 51 seconds" */ Timer almostCentury;
この例では、約 100 年経過した後に初めて発動するタイマー コントロールを作成します。
時間単位には省略形を使用することができます。たとえば、「months」の有効な省略形は「month」、「mont」、「mon」、「mo」、および「m」です。月と分の両方を指定する場合は、どちらを表すのか区別できるような省略形を使用します。
次のタイマー コントロール宣言は上の例と同じですが、完全省略形を使用しています。
/* * @control * @timer timeout="P99Y11Mo13D23H43M51S"
*/ Timer almostCentury;
持続時間はグレゴリオ歴のルールに従って計算されるので、今日が 17 日であれば、今日から 3 か月後もその月の 17 日になります。対象となる月が短く、対応する日が存在しない場合(2 月 31 日など)、同じ月の直近の日(うるう年の 2 月 29 日など)が該当します。
TimerControl インタフェースの setTimeoutAt メソッドを呼び出すことで、絶対時間でタイマー コントロールが発動するようにコンフィグレーションできます。
setTimeoutAt メソッドは、指定した絶対時間またはその後にタイマーがイベントをできる限り速やかに発生するようコンフィグレーションします。過去の絶対時間を指定した場合、タイマーはできる限り速やかに発動します。
setTimeoutAt をトランザクションで呼び出した場合、トランザクションがロールバックされると効果(コールバック ハンドラで実装されるすべての処理)もロールバックされるので、効果がコミットされるのはトランザクションがコミットされたときだけです。
タイマーの動作中に setTimeoutAt を呼び出した場合、タイマーがいったん停止されて再始動されるまで効果はありません。
setTimeoutAt メソッドは、java.util.Date オブジェクトを引数に取ります。Date オブジェクトの操作方法については、java.util.Date クラスに関するドキュメントを参照してください。この他に Date を処理する場合に便利な Java クラスとして、java.util.GregorianCalendar と java.text.SimpleDateFormat があります。