基本的なタイマー コントロールの作成とコンフィグレーション

タイマー コントロールを設定するには、初期タイマー コントロールを Web サービスに挿入して、コントロールの設定をコンフィグレーションする必要があります。

IDE コマンドによるタイマー コントロールの挿入

新しいタイマー コントロールを宣言するには、次の手順に従ってください。

  1. [J2EE] パースペクティブであることを確認します。ワークベンチの上部にあるツールバーのすぐ下に現在のパースペクティブが表示されています。[J2EE] パースペクティブが表示されていない場合は、[ウィンドウ|パースペクティブを開く|J2EE] をクリックしてパースペクティブを切り替えます。
  2. 左側にある [プロジェクト・エクスプローラー] ビューの .java ファイル名をダブル クリックして、エディタに .java ソース ファイルを開きます。
  3. エディタのペインを右クリックして、[挿入|コントロール] を選択します。[コントロールの選択] ダイアログが表示されます。
  4. [新しいシステム コントロール] を展開して、[タイマー コントロール] を選択します。[OK] をクリックします。

  5. 以下のタイマー コントロールのアノテーションがコードに挿入されます。
    @Control
    private TimerControl timerControl1;

    新しいコントロールのデフォルト名 (timerControl1) が強調表示されます。

タイマー コントロールを作成すると、.java ファイルの上部に、タイマー コントロール クラス com.bea.control.TimerControl をインポートするための 1 行が挿入されます。

なお、ページ フローや Java Server Page (JSP ファイル) では、新しいタイマー コントロールを作成することはできません。これは、タイマー コントロールがコールバック (onTimeout メソッド) を定義するのに対し、ページ フローや JSP ページではコールバックを使用できないためです。

タイマー コントロールを使用する前に、タイマーが期限切れになる時間を指定する必要があります。タイマーが期限切れになる時間を指定しない場合、タイマー コントロールは即座にタイム アウトします (デフォルトは 0 秒)。期限切れになる時間は、新たにコードに挿入されるアノテーション @TimerControl.TimerSettings() で指定します。通常、アノテーションは手動で編集するのではなく、[プロパティー] ビューでプロパティ値を設定します。

プロパティ ビューを使用した相対的なタイマー値の指定

相対時間の場合、J2EE パースペクティブの [プロパティー] ビューでタイムアウトや繰り返しの時間間隔を指定することができます。絶対時間の場合は、コントロール メソッドを呼び出すことによって指定する必要があります (「 メソッド呼び出しによる絶対的なタイマーの設定」を参照)。

相対時間のタイムアウトまたは繰り返しの時間間隔を設定するには、次の手順に従います。

  1. エディタ ウィンドウでコントロール名が強調表示されている場合、右側の [プロパティー] ビューに新しいコントロールのプロパティが表示されます。相対時間のタイムアウトを設定するには、[timeout] または [timeoutSeconds] フィールドをクリックして、タイマーが発動するまでの経過時間を入力します。このタイマーが期限切れになるのは一度のみです。時間値には後述の文字列が使用できます。
  2. 繰り返しのタイマーを設定するには、[repeatsEvery] または [repeatsEverySeconds] フィールドに、タイマーが最初に発動してから繰り返し発動する時間間隔を指定します。時間値には後述の文字列が使用できます。

なお、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 日など) が該当します。

TimerControl インタフェースのプロパティの使用

タイマー コントロール インタフェースには、以下の 3 つのプロパティがあります。

  • timeoutAt : 初期タイムアウト間隔 (Date)
  • isRunning : タイマー コントロールが現在実行中かどうかを調べる (boolean)
  • payload : タイマーを開始する前に設定できる特別なデータ。このデータは各タイムアウト イベント中にイベント ハンドラに返されます (serializable)

プロパティ ゲッター セッター 説明
timeoutAt Date Date getTimeoutAt() void setTimeoutAt(Date arg0) 初期タイムアウト間隔 (相対時間)。フォーマットは java.util.Date。
isRunning boolean boolean isRunning()   タイマー コントロールが現在実行中かどうか (true= 実行中、false= 停止)。
payload Serializable Serializable getPayload() void setPayload(Serializable arg0) 各タイマー コールバックでイベント ハンドラに返される特別なデータ。

メソッド呼び出しでタイマー ペイロードを設定する

タイムアウト イベント中にコールバック ハンドラに渡されるペイロードを設定するには、

setPayload(Serializable payload)

上記のメソッドをタイマーの開始前に呼び出します。タイマーの開始後にこのメソッドを呼び出しても効果はありません。ペイロードはシリアライズ可能なため、シリアライズ可能を表すクラスが存在し、オブジェクトをデシリアライズできることに注意する必要があります。

setTimeoutAt() による絶対的なタイマーの設定

setTimeoutAt() を呼び出して TimerControl インタフェースの TimeoutAt プロパティを設定することによって、絶対時間でタイマー コントロールが発動するようにコンフィグレーションできます。

setTimeoutAt メソッドは、指定した絶対時間またはその後にタイマーがイベントをできる限り速やかに発生するようコンフィグレーションします。過去の絶対時間を指定した場合、タイマーはできる限り速やかに発動します。

タイマーの動作中に setTimeoutAt を呼び出した場合、タイマーがいったん停止し再開するまで効果はありません。

setTimeoutAt メソッドは、java.util.Date オブジェクトを引数に取ります。Date オブジェクトの操作方法については、java.util.Date クラスに関するドキュメントを参照してください。この他に Date を処理する場合に便利な Java クラスとして、java.util.GregorianCalendarjava.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 アノテーションには、以下のプロパティがあります。


プロパティ 説明と値
timeout タイマー コントロールが開始して最初に発動するまでの時間 (デフォルト : 0 秒)。
timeoutSeconds タイマー コントロールが開始して最初に発動するまでの秒数 (デフォルト : 0)。
repeatsEvery タイマー コントロールが最初に発動した後に繰り返し発動する時間間隔 (デフォルト : 0 秒、つまり繰り返しなし)。
repeatsEverySeconds タイマー コントロールが最初に発動した後に繰り返し発動する時間間隔 (デフォルト : 0、つまり繰り返しなし)。
coalesceEvents

タイマー コントロールの未配信の発行イベントが複数ある場合、それらを 1 つの onTimeout コールバックとして配信するか (true)、別々のコールバックとして配信するか (false) を指定します (デフォルト : true)。

タイマー コントロールは、参照サービスに 1 つまたは複数のコールバックを配信できない場合がある。これは、参照サービスがビジー状態にあるか、システムの高負荷によって配信が遅れるために発生する。配信されないコールバックのセットは蓄積される。coalesceEvents 属性を true に指定すると、サービスが利用可能になった場合、これらの蓄積されたコールバックが 1 つのコールバックとして処理される。coalesceEvents が false の場合、蓄積されたコールバックは個々に配信される。

transactional タイマーがトランザクションに参加中の場合は true (デフォルト : true)。
jndiContextFactory JNDI コンテキスト ファクトリ クラス (デフォルト : none)。
jndiProviderURL JNDI プロバイダ URL (デフォルト : none)。

タイマー コントロール宣言について

新しいタイマー コントロールを作成すると、その宣言がソース ファイルに表示されます。一般的に、タイマー コントロール宣言は以下のようなコードになります。

import com.bea.control.TimerControl;
...
@TimerControl.TimerSettings(repeatsEverySeconds=5)
@Control
private TimerControl delayTimer;

@TimerControl() アノテーションの実際の属性は、[プロパティー] ビューのプロパティで指定した値で決まります。

@Control アノテーションは、関連付けられた宣言がコントロールであることを Workshop に通知します。このアノテーションがないと、コントロールはサポート コードと正しく結び付けられないので機能しません。

@TimerControl() アノテーションは、タイマー コントロールの動作を制御します。@TimerControl() アノテーションのすべての属性は省略可能で、それぞれにデフォルト値があります。

上の例の delayTimer というタイマー コントロールは、TimerControl のインスタンスとして宣言されています。

 

関連トピック

WebLogic システム コントロールの使用

タイマー コントロール

TimerControl インタフェース

タイマー コントロール リファレンス

チュートリアル : タイマー コントロールの作成

 


さらにヘルプが必要ですか。質問は Workshop ニュース グループまでお寄せください。