FeaturesPluginsDocs & SupportCommunityPartners

BPEL デザイナー開発者ガイド

ハンドラの使用

次の各節で、表示の順に説明を行います。

  • 特定のハンドラを使用する状況。
  • BPEL デザイナーのコンテキスト内での要素の使用。

フォルトハンドラの使用

いつ使用するか

BPEL 言語では、フォルトハンドラを使用することにより、例外をキャッチして管理できます。たとえば、Web サービスが予期されたのと異なるデータを返した場合、例外が発生します。フォルトが処理されなければ、BPEL プロセス全体が障害を起こした状態になる場合もあります。したがって、プロセス全体がフォルトにならないよう、フォルトハンドラを追加して特定のスコープ内の例外をキャッチし、管理することができます。

それぞれのフォルトハンドラには、エラーが起きた場合に実行されるアクティビティーが 1 つ含まれています。たとえば、エラーが発生した場合に、パートナーサービスに通知されます。フォルトハンドラは、プロセス全体に追加するか、個々のスコープ要素に追加できます。

1 つの フォルトハンドラコンテナを、プロセス要素またはスコープ要素に付加できます。フォルトハンドラコンテナの内部で、特定の種類のフォルトをキャッチするよう構成した、いくつかのキャッチアクティビティーを作成できます。また、特定のハンドラによってキャッチされないすべての例外をキャッチするために、1 つのすべてのキャッチハンドラ要素を作成することもできます。

使用

  1. スコープ要素またはプロセス要素を右クリックし、「追加」>「フォルトハンドラ」を選択します。

    空のコンテナ要素が表示されます。

  2. フォルトハンドラコンテナを右クリックし、「追加」>「キャッチ」または「追加」>「すべてをキャッチ」を選択します。

    特定のキャッチ要素を、いくつでもフォルトハンドラグループに追加できます。すべてをキャッチ要素は、1 つのフォルトハンドラコンテナにつき 1 つだけ追加できます。

  3. フォルトが発生したときに実行するアクティビティーをキャッチ要素またはすべてをキャッチ要素に追加します。

キャッチ要素

この要素は、特定の種類のフォルトを捕捉して処理するのに使用します。

キャッチ要素は、適切なフォルトハンドラコンテナ要素内で使用します。

キャッチ要素のプロパティー

キャッチ要素のプロパティーは、「プロパティー」ウィンドウで定義します。図上でキャッチ要素を右クリックして、「プロパティー」を選択することもできます。次のプロパティーがあります。

  • フォルト名 。フォルトの QName をフォルトの一覧から選択します。一覧には WSDL ファイル内で定義されたフォルトが含まれています。
  • フォルト変数名 。フォルトメッセージを格納する既存の BPEL 変数の名前を指定します。
  • フォルト変数型。変数の型を指定します。
Catch プロパティーウィンドウ

すべてをキャッチ要素

すべてをキャッチ要素は、対応するキャッチ要素ではキャッチされないすべてのフォルトを捕捉して処理するのに使用します。

すべてをキャッチ要素は、1 つ以上のキャッチ要素とともにフォルトハンドラウィンドウ内で使用します。1 つ以上のキャッチ要素とともにフォルトハンドラコンテナ要素内で定義します。

すべてをキャッチ要素には、プロパティーがありません。動作が事前定義されているので、プロパティーの設定は必要ありません。

イベントハンドラの使用

いつ使用するか

個々のスコープだけでなく BPEL プロセス全体を、対応するイベントが発生した場合に同時に呼び出される、一連のイベントハンドラに関連付けることができます。イベントハンドラ内で実行されるアクションは、シーケンスやフローなど、どのようなタイプのアクティビティーにもなります。イベントハンドラの直接の子はスコープだけなので、パレットからイベントハンドラに要素をドラッグすると、その要素は自動的にスコープにラップされます。

次の 2 種類のイベントがあります。

  • 受信メッセージ。これは、WSDL での要求/応答または単方向操作に対応します。これらのメッセージはイベント時要素を使用して指定します。
  • アラーム、またはタイマー。これは、指定された時間が経過したあと、または締切期限に到達したときにアクティビティーを起動します。時間は、 アラーム時 要素を使用して指定されます。

注: イベントハンドラはビジネスプロセスのメインフローを遮ることはありません。イベントが発生した場合、イベントハンドラが実行されると共にメインフローも実行します。
このため、例えばメインフローで受け取った要求に対する返信を行うためにイベントハンドラを使用するべきではありません。メインフローも返信を行い、その返信をクライアントがみることはありません。このことによって様々な問題が引き起こされる可能性があります。
これとは逆に、ビジネスプロセスの状態を要求するためにイベントハンドラを使用することは良い使用例となります。この場合は、イベントハンドラの処理によってビジネスプロセスの状態が集められ、イベントハンドラを起動させた要求に対して返信を行います。

イベントハンドラの仕様に関する良い例と悪い例

使用

  1. プロセス要素または任意のスコープを右クリックして、「追加」>「イベントハンドラ」を選択します。
  2. イベントハンドラコンテナを追加したら、イベントハンドラ要素を右クリックして、イベント時分岐またはアラーム時分岐を追加します。特定のイベント時要素またはアラーム時要素を、いくつでもイベントハンドラグループに追加できます。

イベント時要素

イベント時要素は、指定されたイベントがメッセージの到着を待つことを示します。このタグと属性の解釈は、受信アクティビティーとよく似ています。

使用

  1. イベントハンドラコンテナを右クリックし、「追加」>「イベント時」を選択します。
  2. イベント時要素をダブルクリックすると、プロパティーエディタが開き、次のものを指定したり、変更したりできます。
    • パートナーリンク
    • イベント時要素に関連付けられた操作
    • イベント変数
    OnEvent プロパティーエディタ
  3. イベント時要素を右クリックして「プロパティー」を選択すると、「プロパティー」ウィンドウが開き、イベント時要素のプロパティーを調べたり、修正したりできます。「プロパティーエディタ」ダイアログに表示されるプロパティーに加えて、「プロパティー」ウィンドウには「ポート型」フィールドと「型」フィールドが含まれます。「ポート型」フィールドは、パートナーリンクと操作を指定したときに入力され、「型」フィールドには指定したイベント変数の型が入力されます。
OnEvent プロパティーウィンドウ

イベント時のプロパティーエディタダイアログの「相互関係」タブでは、相互関係セットを確認または指定できます。

このタブには次のものが表示されます。

  • 相互関係セットの名前
  • 相互関係子の開始

「追加」ボタンをクリックすると、相互関係セットを追加できます。詳細については、「 相互関係セットの定義、および要素への相互関係セットの追加 」を参照してください。

アラーム時要素

アラーム時要素は、入れ子にされたスコープの締切期限または期間を指定します。

アラーム時要素のプロパティー

アラーム時要素のプロパティーは「プロパティー」ウィンドウで定義します。このウィンドウを呼び出すには、図上でアラーム時要素を右クリックして、「プロパティー」を選択します。次のプロパティーがあります。

  • 「アラームの種類」は、アラームの種類を選択するのに使用します。使用可能なオプションは次のとおりです。
    • For 。プロセスが待機する期間を設定します。
    • Until 。プロセスの締切期限を指定します。
    • Repeat Every 。プロセス開始の頻度を指定します。指定された期間が満了するたびに、プロセスを開始します。最初の期間のクロックは、関連するスコープが開始されたときに起動します。
    • For + Repeat Every 。指定した待機期間のあとのプロセス開始の頻度を指定します。「Repeat Every」フィールドに指定した期間が満了するたびに、プロセスが開始されます。最初のアラームは、「For」フィールドに指定した期間が満了すると起動されます。
    • Until + Repeat Every 。指定した締切期限に基づいてプロセス開始の頻度を指定します。「Repeat Every」フィールドに指定した期間が満了するたびに、プロセスが開始されます。最初のアラームは、「Until」フィールドに指定した締切期限に達すると起動されます。

  • 第 2 の (および、使用可能な場合は第 3 の) プロパティーは、選択したアラームの種類の期間または締切期限を指定するのに使用します。

補償ハンドラの使用

いつ使用するか

ビジネスプロセスには入れ子になった複数のトランザクションが含まれる場合があります。含まれる多数のトランザクションがすでに処理されたあとに、全体的なビジネストランザクションが失敗するか、取り消される場合があります。このような場合、プロセスの実行による影響を元に戻す必要があります。たとえば、旅行計画プロセスに、チケット、ホテル、および車を予約する複数のトランザクションが含まれる場合があります。旅行が取り消された場合、予約トランザクションは、適切な順序の取り消しトランザクションによって補償される必要があります。そのような場合、WS-BPEL は補償アクションを定義する機能を提供します。補償ハンドラは、補償アクションを実行するアクティビティーのコンテナです。スコープ要素または呼び出し要素に補償ハンドラを 1 つ追加できます。補償ハンドラはスコープを補償アクティビティーまたは補償アクティビティーから呼び出すことができます。

使用

スコープ要素または呼び出し要素に補償ハンドラを追加するには、次の手順に従います。

  1. スコープ要素または呼び出し要素を右クリックし、「追加」>「補償ハンドラ」を選択します。
    空のコンテナ要素が表示されます。
  2. パレットから、実行する 1 つまたは複数のアクティビティーをドラッグし、補償ハンドラのコンテナ内に配置します。各アクティビティーのプロパティーを設定します。

補償ハンドラのプロパティーを設定する必要はありません。

終了ハンドラの使用

いつ使用するか

終了ハンドラは、実行中のスコープの終了を制御するために使用します。実行中のスコープは、その外側のスコープまたはプロセスでフォルトが発生した場合に終了します。

スコープまたはプロセスの中でフォルトがスローされると、そのスコープまたはプロセスに関連付けられているフォルトハンドラが実行されますが、その前にそのスコープまたはプロセスの中で実行中のアクティビティーをすべて終了するようにします。フォルトが発生したスコープまたはプロセスの中にまだ実行中のスコープがある場合、それらも終了するようにします。スコープの終了とは、その中のアクティビティーを終了し、スコープに関連付けられている終了ハンドラを実行することです。

スコープは正常に実行されているか、補償ハンドラまたは終了ハンドラを実行している場合にのみ終了できます。完了したスコープ、フォルトが発生したスコープ、またはフォルトハンドラを実行中のスコープは終了できません。

終了ハンドラは、スコープが終了した場合に実行されるアクティビティーのコンテナです。スコープ 1 つにつき終了ハンドラを 1 つ追加できます。

スコープの終了ハンドラの中でフォルトが発生した場合、そのフォルトは外側のスコープに反映されません。

使用

終了ハンドラをスコープ要素またはプロセス要素に追加するには、次の手順に従います。

  1. デザインビューで、スコープ要素を右クリックし、「追加」>「終了ハンドラ」を選択します。
    空のコンテナ要素が表示されます。
  2. パレットから、実行する 1 つまたは複数のアクティビティーをドラッグし、終了ハンドラのコンテナ内に配置します。各アクティビティーのプロパティーを設定します。

終了ハンドラのプロパティーを設定する必要はありません。

ページの先頭へ


Companion
Projects:
MySQL Database Server   Open JDK: an Open SourceJDK   GlassFish Community: an Open Source Application Server    Mobile & Embedded Community    Open Solaris   java.net - The Source for Java Technology Collaboration   Virtual Box - full virtualizer  Open ESB - The Open Enterprise Service Bus Powered by