@Control private TimerControl timerControl1;新しいコントロールのデフォルト名 (timerControl1) が強調表示されます。
タイマー コントロールを作成すると、.java ファイルの上部に、タイマー コントロール クラス com.bea.control.TimerControl をインポートするための 1 行が挿入されます。
なお、ページ フローや Java Server Page (JSP ファイル) では、新しいタイマー コントロールを作成することはできません。これは、タイマー コントロールがコールバック (onTimeout メソッド) を定義するのに対し、ページ フローや JSP ページではコールバックを使用できないためです。
タイマー コントロールを使用する前に、タイマーが期限切れになる時間を指定する必要があります。タイマーが期限切れになる時間を指定しない場合、タイマー コントロールは即座にタイム アウトします (デフォルトは 0 秒)。期限切れになる時間は、新たにコードに挿入されるアノテーション @TimerControl.TimerSettings() で指定します。通常、アノテーションは手動で編集するのではなく、[プロパティー] ビューでプロパティ値を設定します。
相対時間の場合、J2EE パースペクティブの [プロパティー] ビューでタイムアウトや繰り返しの時間間隔を指定することができます。絶対時間の場合は、コントロール メソッドを呼び出すことによって指定する必要があります (「 メソッド呼び出しによる絶対的なタイマーの設定」を参照)。
相対時間のタイムアウトまたは繰り返しの時間間隔を設定するには、次の手順に従います。
なお、timeout と timeoutSeconds はそのいずれか 1 つ、repeatsEvery と repeatsEverySeconds はそのいずれか 1 つしか設定できません。両方の値を設定する場合は、xxxSeconds 値を使用します。
タイムアウト値または繰り返しの時間値を入力する場合、相対時間をテキスト文字列として入力する必要があります。整数の後に時間単位 (大文字と小文字を区別しない) を続けます。時間単位は、スペースで区切ることができます。
次に例を示します。
1 hour 30 min
これは 1 時間 30 分を意味します。
30 s
これは 30 秒を意味します。
以下の時間文字列はすべての時間単位を省略しないで指定した有効な持続時間指定です。
99 years 11 months 13 days 23 hours 43 minutes 51 seconds
この例では、約 100 年後に期限切れになるタイマー コントロールが作成されます。
時間単位には省略形を使用することができます。たとえば、「months」の有効な省略形は「month」、「mont」、「mon」、「mo」、および「m」です。月と分の両方を指定する場合は、どちらを表すのか区別できるような省略形を使用します。
テキスト文字列は、先頭が「p」(大文字と小文字を区別しない) で始まる ISO 8601 拡張フォーマットを使用することもできます。その場合、1 文字からなる省略形を使用し、スペースを入れないで、年、月、日、時、分、秒の順番で指定しなければなりません (http://www.w3.org/TR/xmlschema-2/#duration を参照)。
以下のタイマー コントロール宣言は上の例と同じですが、完全省略形を使用しています。
P99Y11Mo13D23H43M51S
持続時間はグレゴリオ歴のルールに従って計算されるので、今日が 17 日であれば、今日から 3 か月後もその月の 17 日になります。対象となる月が短く、対応する日が存在しない場合 (2 月 31 日など)、同じ月の直近の日 (通常の年の 2 月 28 日や、うるう年の 2 月 29 日など) が該当します。
タイマー コントロール インタフェースには、以下の 3 つのプロパティがあります。
![]() |
![]() |
![]() |
||||||||||||||||||||
![]() |
|
![]() |
||||||||||||||||||||
![]() |
![]() |
![]() |
タイムアウト イベント中にコールバック ハンドラに渡されるペイロードを設定するには、
setPayload(Serializable payload)
上記のメソッドをタイマーの開始前に呼び出します。タイマーの開始後にこのメソッドを呼び出しても効果はありません。ペイロードはシリアライズ可能なため、シリアライズ可能を表すクラスが存在し、オブジェクトをデシリアライズできることに注意する必要があります。
setTimeoutAt() を呼び出して TimerControl インタフェースの TimeoutAt プロパティを設定することによって、絶対時間でタイマー コントロールが発動するようにコンフィグレーションできます。
setTimeoutAt メソッドは、指定した絶対時間またはその後にタイマーがイベントをできる限り速やかに発生するようコンフィグレーションします。過去の絶対時間を指定した場合、タイマーはできる限り速やかに発動します。
タイマーの動作中に setTimeoutAt を呼び出した場合、タイマーがいったん停止し再開するまで効果はありません。
setTimeoutAt メソッドは、java.util.Date オブジェクトを引数に取ります。Date オブジェクトの操作方法については、java.util.Date クラスに関するドキュメントを参照してください。この他に Date を処理する場合に便利な Java クラスとして、java.util.GregorianCalendar と java.text.SimpleDateFormat があります。
repeats-every 属性がゼロより大きい値に設定されている場合、getTimeoutAt メソッドは、タイマーが次に発動する時間を返します。repeats-every 属性がゼロに設定されている場合、getTimeoutAt メソッドは、setTimeoutAt メソッドまたは timeout 属性で設定されている値を返します。onTimeout コールバック ハンドラ内から getTimeoutAt メソッドを呼び出した場合、最初のタイムアウトはすでに過ぎているので、getTimeoutAt は、次のタイムアウト時刻か、またはタイマーが繰り返すように設定されていない場合は最初のタイムアウト時刻を返します。
以下のコードでは、最初のタイムアウトが現在の 30 秒後に発動するよう指定する setTimeoutAt メソッドを呼び出し、それ以後、タイマーが 60 秒ごとに発動するように指定する setRepeatsEvery メソッドを呼び出します。
@Control
private TimerControl tTimer;
@WebMethod() @Conversation(value= Conversation.Phase.START) public void StartTimer() { Calendar cd = new GregorianCalendar(); cd.set(cd.SECOND, 30); tTimer.setTimeoutAt(cd.getTime()); tTimer.setRepeatsEvery(60); tTimer.start(); }
[プロパティー] ビューでコントロールのプロパティを設定することによって、J2EE パースペクティブのタイマー コントロールの他の設定を指定することができます。たとえば、コード エディタで _timer というタイマー コントロール インスタンスの名前が強調表示される場合は、[プロパティー] ビューにコントロールのプロパティが表示されます。
これらのプロパティは、コード内でタイマー コントロールを識別する @TimerControl.TimerSettings アノテーションの属性に対応しています。@TimerControl.TimerSettings アノテーションには、以下のプロパティがあります。
新しいタイマー コントロールを作成すると、その宣言がソース ファイルに表示されます。一般的に、タイマー コントロール宣言は以下のようなコードになります。
import com.bea.control.TimerControl; ... @TimerControl.TimerSettings(repeatsEverySeconds=5) @Control private TimerControl delayTimer;
@TimerControl() アノテーションの実際の属性は、[プロパティー] ビューのプロパティで指定した値で決まります。
@Control アノテーションは、関連付けられた宣言がコントロールであることを Workshop に通知します。このアノテーションがないと、コントロールはサポート コードと正しく結び付けられないので機能しません。
@TimerControl() アノテーションは、タイマー コントロールの動作を制御します。@TimerControl() アノテーションのすべての属性は省略可能で、それぞれにデフォルト値があります。
上の例の delayTimer というタイマー コントロールは、TimerControl のインスタンスとして宣言されています。