Integration コントロールを使用する

     前  次    新しいウィンドウで目次を開く     
ここから内容

WLI タイマー コントロール

WLI JMS のプロパティ ペイン

注意 : WLI タイマー コントロールは、WebLogic Integration の使用許諾を受けた場合にのみ、BEA WorkSpace Studio で使用できます。

タイマー コントロールは、指定した時間が経過したとき、または指定した絶対時間になったときにアプリケーションに通知します。

 


この節に含まれるトピック

概要: WLI タイマー コントロール

WLI タイマー コントロールの作成およびコンフィグレーションについて概説します。

WLI タイマー コントロールを作成する

WLI タイマー コントロールを作成およびコンフィグレーションする方法について説明します。

WLI タイマー コントロールを使用する

作成済みのタイマー コントロールをコンフィグレーションする方法について説明します。

WLI タイマー コントロールで時間を指定する

WLI タイマー コントロールの属性を設定する際に、相対時間や絶対時間を指定する方法について説明します。

 


概要 : WLI タイマー コントロール

トランザクションとイベントには、完了するまでにある程度の時間を必要とするものがあります。また、中止しないと無限に実行を継続して、リソースを大量に消費するものもあります。また、特定の時刻に実行する必要のあるものもあります。タイマー コントロールを使用すると、指定した時間間隔が経過したとき、または指定した絶対時間に達したときに、コードで応答することができます。

 


WLI タイマー コントロールを作成する

ここでは、新しい WLI タイマー コントロールを作成する方法について説明します。

WLI タイマー コントロールを作成するには、次の手順に従います。

  1. [パッケージ・エクスプローラー] ペインで、WLI タイマー コントロールを追加するビジネス プロセスをダブルクリックします。ビジネス プロセスがデザイン ビューに表示されます。
  2. データ パレットWLI JMS のプロパティ ペイン をクリックし、ドロップダウン リストから Integration コントロール を選択して、アプリケーションの統合に使用するコントロールのリストを表示します。
  3. 注意 : [データ パレット] ビューが BEA Workshop for WebLogic Platform に表示されない場合は、メニュー バーから [ウィンドウビューの表示データ パレット] をクリックします。
  4. [WLI タイマー] を選択します。
  5. WLI タイマー コントロールが作成され、[データ パレット] に表示されます。

 


WLI タイマー コントロールを使用する

タイマー コントロールは、指定した時間が経過したとき、または指定した絶対時間になったときにアプリケーションに通知します。タイマー コントロールを使用すると、たとえばプロセスを一日中一定の間隔で実行したり、あまりに長い時間がかかっている操作をキャンセルしたりできます。

次の節では、タイマー コントロールのコンフィグレーション方法について説明します。

タイマー コントロールのデフォルト動作を設定する

デザイン ビューでのタイマー コントロールの動作を指定するには、[プロパティー] ペインでコントロールの timeout および repeatsEvery プロパティを設定します。図 18-1 に示すように、タイマー コントロール インスタンスにはさまざまなアノテーションが表示されます。

図 18-1 WLI JMS のプロパティ ペイン

WLI JMS のプロパティ ペイン

これらのアノテーションは、コード内でタイマー コントロールを識別する com.bea.control.WliTimerControl.TimerSettings の属性に対応しています。com.bea.control.WliTimerControl.TimerSettings には、以下の属性があります。

 


WLI タイマー コントロールで時間を指定する

ここでは、タイマー コントロールの相対時間値と絶対時間値を指定する方法について説明します。相対時間値は、現時点からの相対的な時間間隔を表します。たとえば、「次の火曜日」、「今から 20 分」のように指定します。絶対時間値は時刻を表します。たとえば、「午後 5 時」は絶対時間です。

相対時間を指定する

現時点からの相対的な時間にイベントを作動させたい場合は相対時間を指定します。たとえば、別のシステムが応答するまでの待機時間を 5 分にしたいとします。その場合は、アプリケーションで相対時間 5 分のタイマーを設定して起動します。システムが応答する前にタイマーが期限切れになる (つまり、タイマーのコールバックが呼び出される) と、Web サービスは待機を中止して他のオペレーションを続行します。

タイマーを一定の間隔で作動させたい場合は、WLI タイマー コントロールの timeout 属性と一緒に、オプションの repeatsEvery 属性も指定します。これらの属性は、[プロパティ] ペインかソース コードで設定できます。また、TimerControl インタフェースの setTimeout メソッドや setRepeatsEvery メソッドを呼び出して設定することもできます。

相対時間を文字列として表現する場合は、時間を表す整数の後ろに時間単位を付加します。時間単位の大文字小文字は区別されません。これらの時間単位を区切るにはスペースを使用します。たとえば、次のサンプル コードは、すべての時間単位をフルスペルで指定した有効な期間です。

/** 
 * org.apache.beehive.controls.api.bean.Control
 * com.bea.control.WliTimerControl.TimerSettings ="99 years 11 months 13 days 23 hours 43 minutes 51 seconds" 
 */
Timer almostCentury;

このサンプルでは、デフォルトではほぼ 100 年後に初めて作動するタイマー コントロールを作成しています。

時間単位の表記は短縮できます。たとえば、「months」の短縮形として使用できるのは、「month」、「mont」、「mon」、「mo」、および「m」です。months と minutes の両方を指定する場合は、両者を区分できる長さの短縮形を使用してください。

文字列の先頭に、「p」を付けることもできます。この文字も、大文字小文字は区別されません。これを指定した場合は、すべての時間単位に 1 文字の短縮形を使用し、スペースを挿入することなく y、m、d、h、m、s の順に指定しなければなりません。

次に示すタイマー コントロールの宣言では、完全な短縮を使用して、上に示したサンプルと同じ時間を表しています。

/*
 * @control 
 * @timer timeout="P99Y11Mo13D23H43M51S"
 */
Timer almostCentury;

期間は、グレゴリオ暦に基づいて計算されます。したがって、今日がある月の 17 日であれば、今日から 3 ヵ月後もその月の 17 日になります。たとえば 2 月 31 日のように、該当月の日数が少なく対応する日が存在しない場合は、同じ月の最も近い日 (うるう年であれば 2 月 29 日) が使用されます。

絶対時間を指定する

絶対時間は、オペレーションを特定の時刻に開始または終了したい場合に使用します。たとえば、友人の誕生日を忘れないようにするため、誕生日が近づいたら Web サービスからの電子メールで通知するアプリケーションを作成できます。

タイマー コントロールが絶対時間で作動するようにコンフィグレーションするには、TimerControl インタフェースの setTimeoutAt メソッドを呼び出します。

setTimeoutAt メソッドでは、指定した絶対時間が経過し次第、できる限り早くイベントが作動するようにタイマーをコンフィグレーションできます。過去の絶対時間を指定すると、タイマーはその時点からできる限り早く作動します。

setTimeoutAt メソッドがトランザクション内で呼び出された場合、そのトランザクションがロールバックされると、setTimeoutAt メソッドの効果 (コールバック ハンドラ内で実行されたすべての作業) もロールバックされます。つまり、トランザクションがコミットされた場合に限り、setTimeoutAt メソッドの効果もコミットされます。

タイマーの実行中に setTimeoutAt が呼び出されても、タイマーが停止して再起動されるまでは有効になりません。

setTimeoutAt メソッドは、引数として java.util.Date オブジェクトを取ります。その他の日付関連の Java クラスとしては、java.util.GregorianCalendarjava.text.SimpleDateFormat が使用できます。

getTimeoutAt メソッドは、repeatsEvery 属性がゼロより大きい値に設定されている場合に、タイマーの次回の作動予定時刻を返します。repeatsEvery 属性がゼロに設定されている場合、getTimeoutAt メソッドは、setTimeoutAt メソッドによって設定された値、または timeout 属性に設定されている値を返します。getTimeoutAt メソッドを onTimeout コールバック ハンドラ内から呼び出すと、初回のタイムアウトはすでに作動しているため、getTimeoutAt からは次回のタイムアウトが返されるか、タイマーが繰り返し作動するように設定されていない場合は初回のタイムアウトの時刻が返されます。

次のサンプルでは、setTimeoutAt メソッドを呼び出して初回のタイムアウトが 30 秒後に作動するように設定し、setRepeatsEvery メソッドを呼び出してその後 60 秒ごとにタイマーが作動するように指定しています。onTimeout イベントでは、タイマー コントロールの作動に関する情報が提供されます。

/**
 * @common:operation
 * @jws:conversation phase="start"
 */
public void StartTimer()
{
    Calendar cd = new GregorianCalendar();
    cd.set(cd.SECOND, 30);
    tTimer.setTimeoutAt(cd.getTime());
    tTimer.setRepeatsEvery(60);
    tTimer.start();
}
public void tTimer_onTimeout(long time)
{
    callback.FireTimeout("The timer was scheduled to fire at: " + new Date(time) 
    + ". The current time is: " + new Date() 
    + ". The timer will fire again at: " + tTimer.getTimeoutAt());
}

  ページの先頭       前  次