BPEL マッパーを使用した BPEL プロセスの編集
最終更新日: 2006 年 12 月 15 日
寄稿者 Victoria Zhukovskaya、保守管理者 Irina Filippova
このチュートリアルでは、BPEL マッパーを使用して XPath 式を操作する方法について説明します。BPEL マッパーは、NetBeans Enterprise Pack の BPEL デザイナー機能のコンポーネントです。BPEL マッパーの豊富な機能を使用することにより、ビジネスプロセス内で述語の操作、XPath 関数の使用、および変数のコピーを行うことができます。
BPEL マッパーでは、代入、If、If の ElseIf 要素、ForEach、RepeatUntil、While、待機など、一部のビジネスプロセス要素に固有の関数を追加、編集できます。これらの各要素には、コピー代入、条件式、時間の関数など、特定の種類の式を指定できます。たとえば、If、If の ElseIf 要素、および RepeatUntil の各アクティビティーには条件式、代入要素にはコピーの式、待機要素には期間の式、ForEach アクティビティーには整数値を使用した式をそれぞれ指定できます。BPEL マッパーのグラフィカルなインタフェースを使用すると、XPath の操作と関数を、変数や、XSD 要素、属性、および部品に割り当てることで、計算を行うこともできます。
前提条件
このチュートリアルは、SOA 技術および NetBeans IDE についての基本的な知識またはプログラミング経験を持つユーザーを想定しています。
システム要件
このチュートリアルでは、ユーザーのシステムが、『NetBeans Enterprise Pack 5.5 リリースノート』の「システム要件」の項で指定された要件を満たしていることを想定しています。
チュートリアルに必要なソフトウェア
開始する前に、次のソフトウェアをコンピュータにインストールしてください。
- NetBeans IDE 5.5 と NetBeans Enterprise Pack 5.5 (ダウンロード)
目次
ページの先頭へ
チュートリアル環境の構成
アプリケーションを配備する前に、Sun Java System Application Server と JBI 実行環境を正しく構成して、実行してください。
Application Server の起動方法については、チュートリアル『単純な同期 BPEL プロセス』の「チュートリアル環境の構成」の節を参照してください。
ページの先頭へ
SynchronousSample プロジェクトの作成
このチュートリアルでは、「同期 BPEL プロセス」サンプルプロジェクトを使用します。
- IDE のメインメニューから、「ファイル」>「新規プロジェクト」を選択します。
- 「カテゴリ」リストで、「サンプル」ノードを展開し、「サービス指向アーキテクチャー」ノードを選択します。
- 「プロジェクト」リストで、「同期 BPEL プロセス」を選択します。
- 「次へ」をクリックします。
- プロジェクト名、SynchronousSample、およびプロジェクトの場所のデフォルト値を受け入れるか、必要に応じて値を変更します。
- 「完了」をクリックします。
これで、「プロジェクト」ウィンドウに 2 つのプロジェクトノードが含まれます。「SynchronousSample」という BPEL モジュールプロジェクトと「SynchronousSampleApplication」という複合アプリケーションプロジェクトです。
ページの先頭へ
「BPEL マッパー」ウィンドウの操作
- 「プロジェクト」ウィンドウで、「SynchronousSample」プロジェクトノードと「プロセスファイル」ノードを展開します。
- 「SynchronousSample.bpel」ファイルをダブルクリックします。
BPEL ファイルのデザインビューが表示されます。
- 図で Assign1 要素を選択します。
IDE の下部に Assign1 要素の「BPEL マッパー」ウィンドウが表示されます。
- 「BPEL マッパー」ウィンドウの左側で「inputVar」ノードを展開し、右側で「outputVar」ノードを展開します。
Assign1 要素の入力パラメータの値が出力パラメータにコピーされます。

クリックして拡大
ここで、コピー操作のソースコードを見てみます。ソースコードを表示するには、図の
Assign1 要素を右クリックし、ポップアップメニューから「ソースへ」を選択します。
ソースビューに、入力の paramA の値を出力の paramA にコピーする次のコードが表示されます。
<copy>
<from>$inputVar.inputType/paramA</from><to>$outputVar.resultType/paramA</to>
</copy>
次の手順を実行して、この操作を「BPEL マッパー」ウィンドウから削除します。
- 「デザイン」タブをクリックしてデザインビューを表示し、図の Assign1 要素を選択します。
- 「BPEL マッパー」ウィンドウで、入力パラメータと出力パラメータをつなぐ線をクリックし、「削除」ボタンをクリックします。
ソースビューで、次のようにコピー操作を含むコードが削除されていることを確認できます。 <assign name="Assign1"></assign>
- 「保存」をクリックします。
ページの先頭へ
BPEL マッパーを使用した同期 BPEL プロジェクトの編集
次の例では、current-date 関数と、concat および substring の各文字列関数を操作する方法を示します。また、string および number リテラルを使用して、count や last などのノードセット関数を使用する方法を学びます。例では、sum と equal の各操作の使い方を示します。
最後に、変更したビジネスプロセスをテストするための、2 つのテストケースも作成します。
- テストケース 0 では、入力パラメータは任意の文字列とテスト番号で、出力は現在の日付とタイムゾーンを含む文字列です。
- テストケース 1 では、入力パラメータはテスト番号とノードセットで、出力は要素の数、その合計、および最後の要素を含む文字列です。
変数の追加
この手順では、文字列型の todayIs 変数をビジネスプロセスに追加します。この変数は、current-date 関数の戻り値を格納するために使用します。
- IDE 内で SynchronousSample.bpel ファイルが開かれていない場合は、この時点で開いてください。
- デザインビューで、SynchronousSample プロセス要素を右クリックし、「追加」>「変数」を選択します。
- 「名前」フィールドに「todayIs」と入力します。
- 「組み込み型」ノードを展開し、「string」型を選択します。
- 「了解」をクリックします。
図で Assign1 要素を選択します。「BPEL マッパー」ウィンドウの両方のツリー区画に todayIs 変数が表示されます。
XML スキーマの変更
この手順では、既存の XML スキーマ要素のプロパティーを変更し、新しい nTest 要素を追加します。nTest 要素は、どの If 分岐を実行するかを定義するために使用します。あとで、nTest 要素をテストケースで使用します。
- 「プロジェクト」ウィンドウで、「SynchronousSample」プロジェクトノードと「ProcessFiles」ノードを展開します。
- 「SynchronousSample.xsd」ノードをダブルクリックします。
XML スキーマファイルのスキーマビューが表示されます。
- スキーマビューの各列で「複合型」>「simpleProcess」>「sequence」>「paramA」をそれぞれ選択します。
列ボタン
をクリックすると、ビューを列モードにできます。
- 「プロパティー」ウィンドウで、「最大件数」パラメータの値を「unbounded」に設定して、1 以上の値を使用できるようにします。
「プロパティー」ウィンドウが表示されていない場合は、「ウィンドウ」>「プロパティー」を選択するか、Ctrl-Shift-7 を押します。
クリックして拡大
- スキーマビューの第 3 列で、シーケンス要素を右クリックし、ポップアップメニューから「追加」>「要素」を選択します。
- 「要素」ダイアログの「名前」フィールドに「nTest」と入力し、「既存の型を使用」オプションを選択します。
- 「組み込み型」ノードを展開し、「int」型を選択します。
- 「了解」をクリックします。

クリックして拡大
- 「ファイル」>「すべてを保存」を選択します。
BPEL プロセスの編集
この手順では、If アクティビティーと Assign アクティビティーをビジネスプロセスに追加します。
- IDE 内で SynchronousSample.bpel ファイルが開かれていない場合は、この時点で開いてください。
- デザインビューで、パレットで If アイコンを選択し、デザイン領域にドラッグして、図の start 要素と Assign1 要素の間にドロップします。
- Assign1 要素を If1 要素内に移動し、メインの分岐上にドロップします (ストロークなし)。
- パレットで Assign アイコンを選択し、図で If 要素内にある Assign1 要素の下にドロップします。
この要素はラベルが Assign2 になります。
- If 要素を右クリックし、ポップアップメニューから「Else If を追加」を選択します。
- パレットで Assign アイコンを選択し、図で ElseIf 分岐の中にドロップします。
この要素はラベルが Assign3 になります。
作成したビジネスプロセス図が次の図のようになっていることを確認してください。

クリックして拡大
If 要素への条件の追加
If アクティビティーを実行するための条件を指定するには、次の手順に従います。nTest パラメータで、どの If 分岐が真であるかを定義します。If 分岐では nTest は 1、ElseIf 分岐では nTest は 2 です。
If1 要素の条件を指定するには、次の手順に従います。
- 図で If1 要素を選択します。
- 「BPEL マッパー」ウィンドウのメニューバーで、「数値」>「数値リテラル」および「演算子」>「等しい」を選択します。
マッピング区画に 2 つの関数ボックスが表示されます。操作しやすいように、「数値リテラル」関数ボックスを左側に、「等しい」関数ボックスを右側にドラッグして配置します。
- 「BPEL マッパー」ウィンドウの左側のツリー区画で、「inputVar」ノードと「inputType」ノードを展開します。
- 左側のツリー区画で「nTest」ノードを選択し、「等しい」関数ボックスの any1 パラメータにポインタをドラッグします。
- 「数値リテラル」関数ボックスで入力フィールドをダブルクリックし、「1」と入力します。
- 「数値リテラル」関数ボックスを選択し、「等しい」関数ボックスの any2 パラメータにポインタをドラッグします。
- 「等しい」関数ボックスで return boolean パラメータを選択し、「BPEL マッパー」ウィンドウの右側のツリー区画にある「結果」ノードにポインタをドラッグします。
- 「ファイル」>「保存」をクリックします。

クリックして拡大
ElseIf 要素の条件を指定するには、次の手順に従います。
- 図で ElseIf 要素を選択します。
- 前の If 要素の場合と同じ手順に従いますが、「数値リテラル」関数ボックスの値として「2」を入力します。

クリックして拡大
代入要素への式の追加
この手順では、ソースエディタと BPEL マッパーを使用して、Assign1、Assign2、および Assign3 の各要素に式を追加します。
Assign1 要素に式を追加するには、次の手順に従います。
- 図で Assign1 要素を選択します。
- 「BPEL マッパー」ウィンドウのメニューバーで、「日時」>「現在日付」を選択します。
マッピング区画に「現在日付」関数ボックスが表示されます。
- 「現在日付」関数ボックスで return string パラメータを選択し、「BPEL マッパー」ウィンドウの右側のツリー区画にある「todayIs」ノードにポインタをドラッグします。
- 「ファイル」>「保存」をクリックします。

クリックして拡大
- 図で Assign1 要素を右クリックし、ポップアップメニューから「ソースへ」を選択します。
ソースビューでは、次のように Assign1 要素の copy 演算子を使用して、return string パラメータの値を todayIs 変数にコピーしています。
<assign name="Assign1">
<copy>
<from>current-date()</from>
<to variable="todayIs"/>
</copy>
</assign>
Assign2 要素に式を追加するには、次の手順に従います。
Assign2 要素は次の出力文字列を作成します。Hello! Today is 2006-11-17. Time zone is 03:00.
現在の日付を YYYY-MM-DD ZZ:ZZ の形式で表す todayIs 変数を使用します。YYYY は年、MM は月、DD は日、ZZ:ZZ はタイムゾーンをそれぞれ表します。
- 図で Assign2 要素を選択します。
- 「BPEL マッパー」ウィンドウのメニューバーで、「文字列」>「連結」を選択し、「文字列」>「部分文字列」を 2 回選択します。
マッピング区画に 3 つの関数ボックスが表示されます。操作しやすいように、2 つの「部分文字列」関数ボックスを左側に、「連結」関数ボックスを右側にドラッグして配置します。
- todayIs 変数から、日付だけを含み、タイムゾーンを含まない文字列を作成するには、次の手順に従います。
- 左側のツリー区画で「todayIs」ノードを選択し、最初の「部分文字列」関数ボックスの string パラメータにポインタをドラッグします。
- 関数ボックス内で number をダブルクリックし、「1」と入力します。
これは、todayIs 文字列のコピーを開始する位置です。
- 関数ボックス内で number? をダブルクリックし、「10」と入力します。
これは、コピーする文字数です。
- todayIs 変数から、タイムゾーンだけを含み、日付を含まない文字列を作成するには、次の手順に従います。
- 左側のツリー区画で「todayIs」ノードを選択し、2 つ目の「部分文字列」関数ボックスの string パラメータにポインタをドラッグします。
- 関数ボックス内で number をダブルクリックし、「11」と入力します。
これは、todayIs 文字列のコピーを開始する位置です。
注: ここでは、number? パラメータは部分文字列関数に必須ではありません。パラメータを指定しなかった場合、部分文字列関数では文字列が開始位置から末尾までコピーされます。
- この節の最初に述べた出力の連結文字列を作成するには、次の手順に従います。
- 「BPEL マッパー」ウィンドウの左側のツリー区画で、「inputVar」ノードと「inputType」ノードを展開します。
- 左側のツリー区画で「paramA」ノードを選択し、「連結」関数ボックスの string1 パラメータにポインタをドラッグします。
これで、入力パラメータに含まれる文字列がコピーされます。
- 「連結」関数ボックス内で string2 をダブルクリックし、「Today is」と入力します。
この操作は出力用の文字列を作成するために使用します。この文字列は出力文字列に追加されます。
- 最初の「部分文字列」関数ボックスで、return string パラメータを選択し、「連結」関数ボックスの string3 にポインタをドラッグします。
これで、現在の日付がタイムゾーンなしでコピーされます。
- 「連結」関数ボックス内で string4 をダブルクリックし、「. Time zone is」と入力します。
この文字列は現在の日付に続きます。
- 2 つ目の「部分文字列」関数ボックスで、return string パラメータを選択し、「連結」関数ボックスの string5 にポインタをドラッグします。
これで、タイムゾーンが現在の日付なしでコピーされます。
- 「連結」関数ボックス内で string6 をダブルクリックし、「. 」と入力します。
この文字列はタイムゾーンの後ろに追加されます。
- 「BPEL マッパー」ウィンドウの右側のツリー区画で、「outputVar」ノードと「resultType」ノードを展開します。
- 「連結」関数ボックスで return string パラメータを選択し、「BPEL マッパー」ウィンドウの右側のツリー区画にある「paramA」ノードにポインタをドラッグします。
これで、連結関数の結果が出力にコピーされます。
- 「ファイル」>「保存」をクリックします。

クリックして拡大
- 図で Assign2 要素を右クリックし、ポップアップメニューから「ソースへ」を選択します。
ソースビューでは、次のように Assign2 要素の copy 演算子を使用して、現在の日付とタイムゾーンを含む文字列を作成しています。
<assign name="Assign2">
<copy>
<from>concat($inputVar.inputType/ns0:paramA, ' Today is ', substring($todayIs, 1, 10), '. Time zone is ', substring($todayIs, 11), '.')</from>
<to>$outputVar.resultType/ns0:paramA</to>
</copy>
</assign>
Assign3 要素に式を追加するには、次の手順に従います。
Assign3 要素には、ソースエディタを使用して式を追加します。
注: ソースエディタを使用して式を追加したあと、必要に応じて BPEL マッパーで要素を編集できます。
- BPEL 図で Assign3 要素を右クリックし、ポップアップメニューから「ソースへ」を選択します。
- 文字列 <assign name="Assign3"/> を次の文字列に置き換えます。
<assign name="Assign3">
<copy>
<from>concat('There are/is ', count($inputVar.inputType/ns0:paramA, ' element(s) in nodeset.', 'Sum of element(s) is ', sum($inputVar.inputType/ns0:paramA), '. Last element is ', $inputVar.inputType/ns0:paramA[last()], '.')</from>
<to>$outputVar.resultType/ns0:paramA</to>
</copy>
</assign>
- 「ファイル」>「保存」をクリックします。
- エディタツールバーの「デザイン」ボタンをクリックしてデザインビューに切り替え、「BPEL マッパー」ウィンドウで結果を表示します。
- BPEL 図で Assign3 要素を選択します。

クリックして拡大
Assign3 要素の式は、paramA にコピーされたノードの数を表示し、すべてのノードの合計を計算して、最後のノードの値を示します。出力文字列の例を次に示します。There are/is 3 element(s) in nodeset. Sum of element(s) is 6. Last element is 3.
ページの先頭へ
Application Server へのプロジェクトの配備
ビジネスプロセスのテストを開始する前に、BPEL モジュールプロジェクトを JBI モジュールとして追加し、Application Server に配備する必要があります。
配備するには、チュートリアル『単純な同期 BPEL プロセス』の「アプリケーション サーバーへのプロジェクトの配備」の節で説明されている手順に従います。
ページの先頭へ
テストケースの作成
変更した BPEL プロセスをテストするには、次の手順に従ってテストケース (TestCase0 と TestCase1) を作成します。TestCase0 では、入力パラメータは文字列とテスト番号で、出力は現在の日付とタイムゾーンを含む文字列です。 TestCase1 では、入力パラメータはテスト番号とノードセットで、出力は要素の数、その合計、および最後の要素を含む文字列です。
TestCase0 を作成するには、次の手順に従います。
- 「プロジェクト」ウィンドウで、「SynchronousSampleApplication」、「テスト」、「TestCase0」の各ノードを順に展開します。
「TestCase0」ノードには、入力用の「入力」と出力用の「出力」の 2 つの XML ファイルがあります。
- 「入力」ファイルノードをダブルクリックし、デフォルトの内容を次に置き換えます。
<soapenv:Envelope xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:syn="http://xml.netbeans.org/schema/SynchronousSample">
<soapenv:Body>
<syn:typeA>
<syn:paramA>Hello!</syn:paramA>
<syn:nTest>1</syn:nTest>
</syn:typeA>
</soapenv:Body>
</soapenv:Envelope>
このテストの入力パラメータは、テスト番号 1 と文字列「Hello!」です。
- 「TestCase0」ノードの下の「出力」ファイルノードをダブルクリックします。
- 出力ファイルからデフォルトのテキストを削除します。
TestCase1 を作成するには、次の手順に従います。
- 「プロジェクト」ウィンドウで、「SynchronousSampleApplication」プロジェクトノードを展開し、「テスト」ノードを右クリックし、ポップアップメニューから「新規テストケース」を選択します。
「新規テストケース」ウィザードが開きます。
- 名前を TestCase1 のままにして、「次へ」をクリックします。
- 「SynchronousSample - プロセスファイル」を展開し、「SynchronousSample.wsdl」を選択して「次へ」をクリックします。
- 「operation1」を選択し、「完了」をクリックします。
- 「テスト」ノードで、「TestCase1」ノードを展開し、「入力」をダブルクリックします。
- デフォルトの内容を次に置き換えます。
<soapenv:Envelope xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/
http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:syn="http://xml.netbeans.org/schema/SynchronousSample">
<soapenv:Body>
<syn:typeA>
<syn:paramA>1</syn:paramA>
<syn:paramA>2</syn:paramA>
<syn:paramA>3</syn:paramA>
<syn:nTest>2</syn:nTest>
</syn:typeA>
</soapenv:Body>
</soapenv:Envelope>
このテストの入力パラメータは、3 つのノード (1、2、3) とテスト番号 2 です。
- 「TestCase1」ノードの下の「出力」ファイルノードをダブルクリックし、このファイルのデフォルトのテキストを削除します。
- 「ファイル」>「すべてを保存」を選択して変更を保存します。
ページの先頭へ
アプリケーションのテスト
テストケースを実行するには、次の手順に従います。
- 「プロジェクト」ウィンドウで「SynchronousSampleApplication」プロジェクトノードを右クリックし、ポップアップメニューから「プロジェクトをテスト」を選択します。
- 最初の実行では出力ファイルが空なので、2 つのダイアログで「了解」をクリックして、空の出力を上書きすることを確認します。
- テストが失敗したことを示すメッセージが表示されることに注目してください。これは特殊なケースで、最初の実行では、Output.xml が空であり、出力が出力ファイルに書き込まれるためです。
- 手順 1 を繰り返します。
- テストが成功したことを示すメッセージが表示されます。
それぞれのテストケースの Output.xml ファイルを開いて、テスト結果を確認できます。
TestCase0 の場合、Output.xml ファイルには、現在の日付とタイムゾーンを示す文字列 (「Hello! Today is 2006-11-17. Time zone is 03:00.」など) が出力されています。
TestCase1 の場合、Output.xml ファイルには「There are/is 3 element(s) in nodeset. Sum of element(s) is 6. Last element is 3.」という文字列が出力されています。
ページの先頭へ
まとめ
このチュートリアルでは、NetBeans Enterprise Pack に含まれる BPEL デザイナーの BPEL マッパーコンポーネントを操作しました。サンプルの同期アプリケーションプロジェクトを変更し、BPEL マッパーの機能を使用してビジネスプロセスに式と関数を追加しました。また、アプリケーションをテストし、式が有効な値を返すことを確認しました。
ページの先頭へ