FeaturesPluginsDocs & SupportCommunityPartners

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

BPEL マッパーについて

BPEL マッパーは、BPEL プロセスのデザインビュー、ソースビュー、またはログ記録ビューのタブになっています。

BPEL マッパーは、BPEL プロセスデータの処理と指示を行うためのフレームワークを提供します。このフレームワークは、次のコンポーネントからなります。

  • メニューバー。メニューバーは、BPEL マッピングを作成するために使用する演算子、必要な要素、および XPath 関数を提供します。XPath 関数を構成している述語を組み込むことにより、BPEL マッピングを強化または拡張することもできます。
  • ソースツリー区画。ソースツリー区画は左側にあり、ビジネスプロセスのデータ変数やパートナーリンクにアクセスするためのツリーコンポーネントを含みます。
  • マッピング区画。マッピング区画は、BPEL マッピングを作成するためのキャンバスを含んでいます。メニューバーで関数を選択する場合は、マッピング区画に関数ボックスが表示されます。関数が引数を受け入れる場合は、関数ボックスの左側に、各引数に 1 つずつ、コネクタがあります。引数を省略できる場合は、引数名のあとに疑問符が表示されます。関数ボックスの右側には、結果用のコネクタが 1 つあります。BPEL マッパーは、次のビジネスプロセス要素に使用できます。
    • 代入アクティビティー。1 つ以上のコピー割り当てを定義できます。
    • If アクティビティー。条件を定義できます。
    • If アクティビティー内の ElseIf 要素。条件を定義できます。
    • ForEach アクティビティー。条件を定義できます。
    • RepeatUntil アクティビティー。条件を定義できます。
    • While アクティビティー。条件を定義できます。
    • 待機アクティビティー。締切期限または期間を指定できます。
    • onAlarm イベント。締切期限または期間を指定できます。
  • 宛先ツリー区画。この区画は右側にあります。宛先区画のツリーコンポーネントは、マッピングしているビジネスプロセス要素によって異なります。この区画には、次のコンポーネントが含まれます。
    • 代入アクティビティーの場合、右の区画には左の区画と同じツリーコンポーネントが入っています。
    • If アクティビティー、ElseIf 要素、ForEach アクティビティー、RepeatUntil アクティビティー、および While アクティビティーの場合、右側の区画には「結果」ノードが入っています。
    • 待機アクティビティーとアラーム時イベントの場合、右側の区画には、「締切期限」ノードまたは「期間」ノードが入っています。

「BPEL マッパー」ウィンドウを開くには、次の手順に従います。

  • BPEL 図を開き、次のいずれかの操作を行います。
    • BPEL マッパーが必要な要素をダブルクリックします。「マッパー」タブが開きます。
    • マッパーが必要な要素を選択し、図のツールバーで「マッパー」タブをクリックします。
プロセスのマッパーと図を同時に表示したい場合は、マッパーを別ウィンドウに表示できます。詳細は、「ドキュメントビューのクローン」を参照してください。

BPEL マッピングの作成

関数を使用せずに、直接、ソースツリー区画から宛先ツリー区画へマッピングを作成できます。この種類のマッピングは、次のいずれかにすることができます。

  • 変数から変数へ
  • 部分から部分へ
  • XSD 要素から XSD 要素へ
  • XSD 属性から XSD 属性へ

BPEL マッパーのメニューバーから、1 つ以上の XPath 関数 を使用するマッピングを作成することもできます。たとえば、BPEL プロセスに、ある期間だけ待つ待機アクティビティーが含まれている場合は、期間リテラル関数を使用して期間を指定できます。

関数を使用せずにマッピングを作成するには、次の手順に従います。

  1. ソースツリー区画で、マップ元のノードが表示されるまでツリーコンポーネントを展開します。
  2. 宛先ツリー区画にツリーコンポーネントが含まれている場合は、マップ先のノードが表示されるまでツリーコンポーネントを展開します。
  3. ソースツリー区画内のノードを選択し、ポインタを宛先ツリー区画内のノードまでドラッグします。

    それらのノードがリンクによって接続されます。

マッピングの中に関数を使用するには、次の手順に従います。

  1. 関数が入っているドロップダウンメニューをクリックします。
  2. 関数をクリックします。

    マッピング区画に関数ボックスが表示されます。

  3. 関数ボックスの左側の適切なコネクタに引数をマッピングします。ソースは、ソースツリー区画内のノードにするか、別の関数ボックスからの出力にすることができます。引数を省略できる場合は、引数名のあとに疑問符が表示されます。
  4. 関数ボックスの右側から結果をマッピングします。宛先は、宛先ツリー区画内のノードにするか、別の関数ボックスへの入力にすることができます。

マッピング内のリンクまたは関数を最小限に抑えるには、次の手順に従います。

  1. リンクまたは関数を選択します。
  2. リンクが宛先ツリー区画に入るポイントにある小さなマイナスアイコンをクリックします。

マッピング内のリンクまたは関数を削除するには、次の手順に従います。

  1. リンクまたは関数を選択します。
  2. 「削除」を押します。

述語の操作

BPEL マッパーを使用すると、XPath 関数からなる述語を作成できます。

述語は、複数の値を持つことができるノードに条件を適用します。結果は、条件を満たすノードのサブセットです。

たとえば、あるノードが製品の番号を表すとします。番号が 50 より大きいすべての製品を選択する場合は、より大きい関数と数値リテラル関数を使用して条件を定義できます。

述語を作成できるのは、特定の種類のノードだけです。それらのノードのポップアップメニューには、「新規述語」オプションが含まれています。ソースツリー区画でツリーコンポーネントを展開すると、述語を持つことができるノードにアスタリスク (*) が表示されます。

述語を作成すると、その述語を割り当ての中で指定できます。たとえば、ソースツリー区画内の述語から、宛先ツリー区画内のノードへデータをコピーできます。

既存の述語を編集または削除できます。

述語を作成するには、次の手順に従います。

  1. ソースツリー区画で、アスタリスク (*) が表示されているノードを右クリックし、「新規述語」を選択します。

    述語エディタが起動します。

  2. XPath 関数を使用して、述語の条件を作成します。結果を宛先ツリー区画内の述語ノードへマッピングします。
  3. 「閉じる」をクリックします。

    エディタは、述語ノードを直ちに元のノードの下に追加します。条件が角括弧内に表示されます。

述語を編集するには、次の手順に従います。

  1. ソースツリー区画内で、述語ノードを右クリックし、「述語を編集」を選択します。
  2. 条件を変更します。
  3. 「閉じる」をクリックします。

述語を削除するには、次の手順に従います。

  1. ソースツリー区画内で、述語ノードを右クリックし、「述語を削除」を選択します。
  2. 「はい」をクリックします。

XPath 関数リファレンス

BPEL マッパーのメニューバーで、一連の XPath 関数を使用できます。それらの関数は、XPath 1.0 仕様に基づいています。メニューにはいくつかの XPath 拡張関数も含まれます。

それぞれの関数には、ゼロ個以上の引数があります。それぞれの関数は 1 つの結果を返します。

メニューバーには、「演算子」、「論理」、「文字列」、「ノード」、「数値」、「日付と時刻」、「BPEL」の各ドロップダウンメニューがあります。

演算子

「演算子」メニューには、次の関数が含まれています。

  • より大きい
  • より大きいか等しい
  • より小さい
  • より小さいか等しい
  • 加算
  • 減算
  • 乗算
  • 除算
  • 残余
  • 等しくない
  • 等しい

論理

「論理」メニューには、次の関数が含まれています。

  • 論理積は、次のロジックを使用します。両方の引数が真の場合、この関数は真を返します。どちらかの引数が偽の場合、この関数は偽を返します。
  • 論理和は、次のロジックを使用します。いずれかの引数が真の場合、この関数は真を返します。両方の引数が偽の場合、この関数は偽を返します。
  • 否定は、次のロジックを使用します。引数が偽の場合、この関数は真を返します。引数が真の場合、この関数は偽を返します。
  • 言語は、コンテキストノードの言語が、引数内で指定された言語またはそのサブ言語であるかどうかに応じて、真または偽を返します。
  • 論理偽は、偽を返します。
  • 論理真は、真を返します。
  • 論理は、引数を boolean に変換します。ロジックの詳細については、XPath 1.0 仕様を参照してください。

文字列

「文字列」メニューには、次の関数が含まれています。

  • 含むは、次のロジックを使用します。第 1 引数の文字列に第 2 引数の文字列が含まれている場合、この関数は真を返します。それ以外の場合、この関数は偽を返します。
  • 空白を正規化は、空白を正規化した引数文字列を返します。先行または後続する空白は削除され、空白文字の並びが 1 つの空白文字に置き換えられます。
  • 文字列は、オブジェクトを文字列に変換します。
  • …で始まるは、次のロジックを使用します。第 1 引数の文字列が第 2 引数の文字列で始まる場合、この関数は真を返します。それ以外の場合、この関数は偽を返します。
  • 文字列長は、文字列内の文字の数を返します。
  • 部分文字列は、第 1 引数の部分文字列として、第 2 引数で指定された位置から始まり、第 3 引数で指定された長さの文字列を返します。最初の文字の位置は 1 で、2 番目の文字の位置は 2 となり、以下同様です。第 3 引数は省略できます。第 3 引数が指定されなかった場合、この関数は、第 2 引数で指定された位置から始まって文字列の終わりまで続く部分文字列を返します。
  • 前方部分文字列は、第 1 引数の部分文字列として、第 1 引数の文字列内で第 2 引数の文字列が最初に現れる場所より前にある文字列を返します。第 1 引数の文字列に第 2 引数の文字列が含まれていない場合、この関数は空の文字列を返します。
  • 後方部分文字列は、第 1 引数の部分文字列として、第 1 引数の文字列内で第 2 引数の文字列が最初に現れる場所の直後にある文字列を返します。第 1 引数の文字列に第 2 引数の文字列が含まれていない場合、この関数は空の文字列を返します。
  • 置換は、第 1 引数の文字列を、その中の第 2 引数の文字列内にある文字に該当する文字を第 3 引数の文字列内の対応する位置にある文字に置き換えて返します。
  • 連結は、複数の引数を連結したものを返します。
  • 文字列リテラルを使用すると、文字列リテラルを入力できます。

ノード

「ノード」メニューには、次の関数が含まれています。

  • ローカル名は、ドキュメント順の最初にある引数ノードセット内のノードの拡張名から、そのローカル部分だけを返します。拡張名は、ローカル部分と名前空間 URI からなります。
  • 名前は、ドキュメント順の最初にある引数ノードセット内のノードの拡張名を表す修飾名を返します。拡張名は、ローカル部分と名前空間 URI からなります。
  • 名前空間 URI は、ドキュメント順の最初にある引数ノードセット内のノードの拡張名から、名前空間 URI だけを返します。拡張名は、ローカル部分と名前空間 URI からなります。
  • 位置は、コンテキストの位置を返します。
  • 最後は、コンテキストのサイズを返します。
  • は、引数ノードセット内のノードの数を返します。

数値

「数値」メニューには、次の関数が含まれています。

  • 数値は、引数を数値に変換します。ロジックの詳細については、XPath 1.0 仕様を参照してください。
  • 数値リテラルを使用すると、数値リテラルを入力できます。
  • 丸めは、引数にもっとも近い整数を返します。
  • 総和は、引数ノードセット内の各ノードについて、ノードの文字列値を数値に変換した結果の合計を返します。
  • 床関数は、引数を上回らない最大の整数を返します。
  • 天井関数は、引数を下回らない最小の整数を返します。

日付と時刻

「日時」メニューには、次の関数が含まれています。

  • 現在日付は、現在の日付を提供します。
  • 現在時間は、現在の時刻を提供します。
  • 現在日時は、現在の日付と時刻を提供します。
  • 期間リテラルを使用すると、期間のリテラルを入力できます。XML スキーマ仕様で指定されているフォーマットを使用してください。

BPEL

「BPEL」メニューには、次の XPath 拡張関数が含まれます。

  • doXslTransform。WS-BPEL 仕様で定義されている XPath 拡張関数です。BPEL 代入アクティビティー内で XSLT 変換を呼び出すために使用できます。
  • サービス参照でラップ。doXslTransform 関数の特殊なケースで、データを ServiceRefType に変換するために使用します。この関数は、動的アドレス指定を使用しやすくします。
  • doMarshal はオブジェクトのシリアライズを行います。
  • doUnMarshal はオブジェクトのシリアライズを解除します。

マッピングの例

次の例にいくつかのマッピングシナリオを示します。

代入アクティビティーシナリオ

パートナーから受信したデータを BPEL プロセスでコピーすると仮定します。次の作業を実行します。

  1. 受信アクティビティーのあとに代入アクティビティーを追加します。
  2. デザインビューで代入アクティビティーを選択し、BPEL マッパーを使用して 1 つまたは複数のコピー代入を定義します。マッパーを開くには、代入アクティビティーをダブルクリックするか、ツールバーの「マッパー」タブを選択します。

    次の例は、XPath 関数を使用しないコピー代入を示しています。入力変数の値が出力変数にコピーされます。右の区画と左の区画に同じツリーコンポーネントが入っています。

    代入アクティビティーの直接マッピング

  3. XPath 関数をいくつか使用してみましょう。作成したリンクの削除
    • マッピング区画でリンクをクリックし (緑色に変わる)、「削除」を押します。
  4. マッパーのメニューで「文字列」>「連結」を選択します。マッピング区画に関数ボックスが表示されます。
  5. マッパーのメニューで「文字列」>「文字列リテラル」を選択すると、マッピング区画に別の関数ボックスが表示されます。
  6. 文字列リテラル関数ボックスをダブルクリックし、そこに「THE VALUE」と入力します。
  7. 文字列リテラル関数ボックスから連結関数ボックスの内向きコネクタに、接続を引きます。
  8. ソースツリーの変数から連結ボックスへ、別の接続を引きます。
  9. 連結ボックスから宛先ツリーの変数へ、外向きの接続を引きます。宛先変数が、文字列リテラルとソース変数の値を連結した値になります。

    次の例は、連結 XPath 関数を使用するコピー代入を示しています。入力変数値が文字列リテラル THE VALUE: の末尾に連結され、出力変数にコピーされます。

    連結 XPath 関数を使用した代入アクティビティーのマッピングのスクリーンキャプチャ

If アクティビティーシナリオ

特定の条件が真の場合だけ一連の手順を実行すると仮定します。次の作業を実行します。

  1. If アクティビティーを BPEL プロセスに追加します。
  2. If アクティビティー内に手順を追加します。
  3. デザインビューで If アクティビティーを選択し、BPEL マッパーを使用して論理条件を定義します。マッパーを開くには、If アクティビティーをダブルクリックするか、ツールバーの「マッパー」タブを選択します。

次の例は、条件のマッピングを示しています。このマッピングでは、メニューバーの「論理」ノードにある否定 XPath 関数を使用します。itinerary に航空便の予約がある場合、 否定 XPath 関数は真を返します。結果は右の区画の「結果」ノードにマップされます。

If アクティビティーのマッピング

述語シナリオ

2 人以内の顧客グループの旅程から、BPEL プロセスで旅程データをコピーすると仮定します。入力レコードは顧客の一行の乗客数を指定する変数を含みます。次の作業を実行します。

  1. 「BPEL マッパー」ウィンドウの左区画で、アスタリスク (*) が表示されている反復ノードを右クリックし、「新規述語」を選択します。

    「述語エディタ」ウィンドウが開きます。

  2. より小さい XPath 関数を中央の区画に追加します。
  3. 数値リテラル XPath 関数を中央の区画に追加します。値を 3 に設定します。
  4. 変数ノードを より小さい XPath 関数の最初の引数にマップします。
  5. 数値リテラル XPath 関数の結果をより小さい XPath 関数の 2 番目の引数にマップします。
  6. より小さい XPath 関数の結果を右の区画の「結果」ノードにマップします。
  7. 「閉じる」をクリックします。

次の例は、「述語」ウィンドウにマッピングが表示される方法を示しています。「了解」をクリックすると、コピー代入の中で述語ノードを使用できます。

述語のマッピングのスクリーンショット

BPEL プロセスが次の XML を受信した場合、述語は最初の Air タグを選択します。

<Air>
    <NumberInParty>2</NumberInParty>
</Air>
<Air>
    <NumberInParty>4</NumberInParty>
</Air>
<Air>
    <NumberInParty>6</NumberInParty>
</Air>

ページの先頭へ


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