![]() ![]() ![]() ![]() |
前の手順では、RFQ ドキュメント内の繰り返し要素のセットを反復処理する For Each ループを作成しました。この手順では、For Each ループの反復処理ごとに実行されるアクティビティを設計します。
このシナリオの価格や在庫情報の処理で行ったように、ビジネス プロセスが複数のシステムと対話するときには、パラレル ノードを使用して実行のパラレル ブランチを複数作成します。
注意 : | ビジネス プロセス内の実行のパラレル ブランチは、論理的に並行です。物理的には、各ブランチは順に実行されます。ビジネス プロセスは、外部システムとの通信で応答があるまで待機する場合に、この論理上の並行性から利益を得ます。実行の 1 つのブランチで応答を待っている間に、パラレル フローの別の実行ブランチが処理を進めることができます。 |
注意 : | 詳細については、『ビジネス プロセス構築ガイド』の「パラレル実行パスの作成」を参照してください。 |
このチュートリアルの例では、ビジネス プロセスが価格情報と在庫情報の両方を判断して、見積りを作成し、クライアントに返せるようにする必要があります。このビジネス プロセスは、価格の計算と在庫の計算を行う 2 つの外部システムと通信するため、並行実行を設定することによってスループットが向上します。ビジネス プロセスは、2 つの外部システムそれぞれから応答を受け取ります。
外部システムとは、ビジネス プロセスが必要とする情報を返すあらゆるリソース (他のビジネス プロセス、Web サービス、EJB、データベース、ファイル システムなど) を指します。ビジネス プロセスは、コントロールを介してこうしたリソースと対話します。
このチュートリアルでは 2 つの Web サービスを使用します。1 つは、クライアントから受け取った RFQ ドキュメントで指定された widgetID
ごとに価格を返す Web サービスで、もう 1 つは、要求ドキュメントで指定された widgetID
および quantity
に基づいて在庫情報を返す Web サービスです。
ビジネス プロセスが対話するコントロールは、\Tutorial_Process_ApplicationWeb\requestquote.services
フォルダに用意されています。用意されているコントロールは PriceProcessor.java
および AvailProcessor.java
です。
RequestQuote.java
) が [デザイン] ビューに表示されていることを確認します。
デフォルトのパラレル ノードでは結合条件 AND が指定されています。この結合条件はパラレル ブランチ ラインの交差点に として表示されます。このアイコンは、すべてのブランチのアクティビティが完了してからでないと、実行フローはパラレル ノードの次のノードに進まないことを示しています。
このビジネス プロセスでは、次のノードに進む前に価格の計算と在庫のチェックを完了する必要があるため、AND 結合条件をそのまま使用します。
注意 : | 結合条件 OR が指定された場合は、1 つのブランチのアクティビティがすべて完了すると、他のすべてのブランチのアクティビティの実行が終了され、実行フローはパラレル ノードの次のノードに進みます。結合条件 OR は [デザイン] ビューでは ![]() |
注意 : | [デザイン] ビューの結合条件は、[JPD コンフィグレーション] ビューの [join condition] プロパティに表示され、編集することができます。 |
価格と在庫の情報を返す 2 つの Web サービスと対話するパラレル ノードを設計するには、以下の作業を完了します。
PriceProcessor.java
コントロールと AvailProcessor.java
コントロールは、[パッケージ・エクスプローラー] ビューの Tutorial_Process_Application_Web\src\requestquote.services
フォルダにあります。
この節では、アプリケーション内に適切なコントロールを作成し、ビジネス プロセスとそれらのコントロールとの間の通信を設計します。
ビジネス プロセスが対話できるリソースを表すコントロールのリストが表示されます。
[コントロールの挿入] ダイアログ ボックスが表示されます。
priceProcessor
と入力し、[終了] をクリックします。 availProcessor
のインスタンスを作成します。
Web サービス コントロール インスタンス [priceProcessor
] および [availProcessor
] が [データ パレット] に追加されます。
ここまでのチュートリアルでは、[データ パレット] の適切なコントロールのメソッドを [デザイン] ビューのビジネス プロセスまでドラッグすることによって、ビジネス プロセスにコントロール ノードを作成できることを学びました。
また、[ノード パレット] から、[Control Send]、[Control Receive]、または [Control Send with Return] をビジネス プロセスまでドラッグしてもコントロール ノードを作成できます。その後で、作成したコントロール ノードに適切なメソッドをバインドします。この節ではこの方法を使用します。
[ノード パレット] の以下のノードを、パラレル ノードの各ブランチに追加します。
[ノード パレット] にリストされている各ノードを [デザイン] ビューまでドラッグし、パラレル ブランチ上にドロップします。
これらのノードは、次の図に示すようにビジネス プロセスに配置します。
このようにして、各ブランチに以下の実行フローが設計されます。
[メソッド] パネルに、priceProcessor で呼び出すことのできる非同期送信メソッドのリストが表示されます。
void getPrice(int itemID_arg)
] メソッドを選択します。
デフォルトでは、[データの送信] タブを開くと [変数の割り当て] ペインが表示されます。[コントロールが予期する値] フィールドには、priceProcessor Web サービスがエクスポーズする getPrice()
メソッドが予期するデータ型 (int itemID
) が表示されます。
注意 : | priceProcessor Web サービスは、要求された項目の ID を入力として受け取り、その項目の価格を返します。 |
注意 : | トランスフォーメーション モードに切り替えるのは、priceProcessor の入力として求められるデータ型が int であるのに対して、For Each ループ内の widgetId の値を保持する iter_forEach1 変数は XML 型 (WidgetRequestDocument は XML スキーマに対して有効) であるためです。 |
トランスフォーメーション ツールが開き、[iter_forEach1 (widgetRequest)
] 変数が [ソース] ペインに、[int
] が [対象] ペインに表示されます。
[widgetID] 要素と [int] 要素の間に接続線が引かれます。この線は 2 つのデータ型間のトランスフォーメーションを表します。
ソース ノード [widgetId] と対象ノード [int] のデータ型が一致しません。型変換が行われます。
注意 : | このトランスフォーメーションによって、チュートリアル アプリケーション用にプロジェクトにすでに作成され、ビルドされている RequestQuoteTransformation.java の下に、新しいメソッドが作成されます。これは、Tutorial_Process_Application_Web\requestquote フォルダ下にあります。このトランスフォーメーション メソッド用のクエリが含まれている、RequestQuotepriceProcessorGetPrice.xq という名前の新しい XQ ファイルも作成されます。 |
[void returnPrice(int itemID_arg, float price_arg)
] を選択します。
[コントロールが返す値] フィールドには、priceProcessor
Web サービスに対する returnPrice(int itemID, float price)
メソッドで返されるデータ型が表示されます。
priceProcessor
Web サービスは itemID
(int
値) を入力として受け取り、項目 ID を int
値で、価格を float
値で返します。
次に、[変数の割り当て] モードから [トランスフォーメーション] モードに切り替える必要があります。これは、priceProcessor
Web サービスで返されるデータを型付き XML 変数に割り当てる必要があるためです。これを実行するには、プロセスで、priceProcessor
Web サービスから返された Java データ型を型付き XML に変換する必要があります。
[型名] フィールドに [org.example.price.PriceRequestDocument
] と表示されます。
itemID
変数と price
変数が [ソース] ペインに、[price
] 変数が [対象] ペインに表示されます。注意 : | このトランスフォーメーションによって、Tutorial_Process_Application_Web\requestquote フォルダの RequestQuoteTransformation.java 下に新しいメソッドが作成されます。このトランスフォーメーション メソッド用のクエリが含まれている、新しい XQ ファイルも作成されます。 |
この手順では、プロジェクトに用意されているトランスフォーメーション コントロール (PriceAvailTransformations) を使用して、priceProcessor コントロールから (For Each ループでの反復処理ごとに) 返される価格データを単一の変数に追加します。
前にビジネス プロセスのノードを設計したときに、必要に応じて、1 つのトランスフォーメーションに対するトランスフォーメーション メソッドを作成しました。そのトランスフォーメーション メソッドは、ビジネス プロセスがクライアントやコントロールとやり取りしたデータをマップするためのものでした。ここでは、別の方法でトランスフォーメーションを使用します。Create PriceList ノードの場合は、クライアントやコントロールにデータが送信されません。その代わりに、トランスフォーメーションが、ビジネス プロセスからの入力として型付き XML データを受け取り、型なし XML (XmlObject
) データを返します。ビジネス プロセスは、For Each ループの反復処理ごとに返されるデータを単一の変数に追加して、XML データの繰り返しシーケンスを作成する必要があります。For Each ループ内のこのような XML データの繰り返しシーケンスを保持できる変数は、XmlObjectList
型の変数です。型付き変数と XmlObject
変数の両方とも、XmlObjectList
型の変数に追加できます。
詳細については、「XmlObjectList データ型」を参照してください。
注意 : | このトランスフォーメーションは、チュートリアル アプリケーションであらかじめ構築されています。これは、Tutorial_Process_Application_Web\requestquote フォルダ下にあります。PriceAvailTransform.java ファイルの作成方法については、このチュートリアルでは説明していません。 |
XmlObject convertPriceXMLtoXMLObj
(org.example.price.PriceRequestDocument _priceRequestDoc)
[コントロールが予期する値] フィールドには、priceAvailTransformations
コントロールに対する convertPriceXMLtoXMLObj()
メソッドが予期するパラメータのデータ型と名前 PriceRequestDocument _priceRequestDoc
が表示されます。
この場合、price
変数のデータ型 (PriceRequestDocument
) は、priceAvailTransformations
が予期するデータのデータ型と一致します。
[コントロールが返す値] フィールドには、priceAvailTransformations コントロールに対する convertPriceXMLtoXMLObj()
メソッドが返すパラメータのデータ型 XmlObject
が表示されます。
注意 : | XmlObject は、型なし XML 形式のデータ (XML スキーマに対して有効でないデータ) を指定する Java データ型です。 |
デフォルトでは [XmlObject] が選択されています。次の手順でこの選択を変更する必要があります。
priceList
変数が作成され、priceProcessor
サービスから返される XmlObject
データを受け取るように割り当てられます。
この手順により、ビジネス プロセスのパラレル ノードの Get Price ブランチの設計が終了します。
実行時にこのブランチが実行されると、For Each ループでの現在の反復処理で priceProcessor
コントロールから返されるデータを含む XmlObject
が、priceList
変数に追加されます。
availProcessor
コントロールで呼び出すことのできる非同期送信メソッドのリストが表示されます。
[void getAvail(int itemID_arg, int quantity_arg)
] を選択します。
デフォルトでは、[データの送信] タブを開くと [変数の割り当て] ペインが表示されます。[コントロールが予期する値] フィールドには、availProcessor
Web サービスがエクスポーズする getAvail()
メソッドが予期するパラメータのデータ型と名前、int itemID
および int quantity
が表示されます。
注意 : | availProcessor Web サービスは、項目の ID (int) と数量 (int) を入力として受け取ります。このサービスは、項目の ID (int)、提供可能な数量 (int)、項目が在庫にあるかどうかを示すブール値、および出荷日 (String) を返します。 |
注意 : | ここでモードを切り替えるのは、availProcessor への入力として指定するデータを変換する必要があるためです。availProcessor コントロールが int データ型の入力を必要とする一方、For Each ループの widgetId および quantity の値を保持する iter_forEach1 変数は型付き XML 変数です (WidgetRequestDocument は XML スキーマに対して有効)。 |
トランスフォーメーション ツールが開き、[iter_forEach1
] 変数が [ソース] ペインに、トランスフォーメーション メソッド availProcessor
に渡す整数の引数が [対象] ペインに表示されます。
void avail(int itemID_arg, int qty_arg, boolean avail_arg, String date_arg)
[コントロールが返す値] フィールドには、availProcessor
Web サービスに対する avail()
メソッドが返すパラメータのデータ型と名前が表示されます。
注意 : | ここでは、[データの受信] タブの [変数の割り当て] モードを [トランスフォーメーション] モードに切り替える必要があります。これは、availProcessor Web サービスが返すデータを型付き XML 変数に割り当てる必要があるためです。そのためにはプロセスで、返された Java データ型を型付き XML データに変換する必要があります。 |
[型名] フィールドに [org.example.avail.AvailRequestDocument
] と表示されます。
[変数を作成] ダイアログ ボックスが閉じ、新しい変数が作成され、[XML] 型の変数として [データ パレット] に表示されます。
availProcessor
から返されるデータ型が [ソース] ペインに、avail
変数が [対象] ペインに表示されます。
この手順では、priceAvailTransformations
コントロールでメソッドを呼び出して、在庫データを XmlObjectList
型の単一の変数に追加します。
注意 : | XmlObjectList データ型の詳細については、「XmlObjectList データ型」を参照してください。 |
priceAvailTransformations
] コントロール インスタンスを展開し、[XmlObject convertAvailXMLtoXMLObj()
] メソッドを選択します。priceAvailTransformations
] コントロールが選択され、ノードまでドラッグしたメソッドが [メソッド] フィールドで選択されていることを確認します。
[コントロールが予期する値] フィールドには、priceAvailTransformations
コントロールに対する convertAvailXMLtoXMLObj()
メソッドが予期するデータ型 AvailRequestDocument
が表示されます。
この場合、avail
変数のデータ型 (AvailRequest
) は、priceAvailTransformations
コントロールが予期するデータのデータ型と一致します。
[コントロールが返す値] には、priceAvailTransformations コントロールに対する convertAvailXMLtoXMLObj()
メソッドから返されるデータ型 XmlObject
が表示されます。
注意 : | XmlObject は、型なし XML 形式のデータ (どの XML スキーマに対しても無効なデータ) を指定する Java データ型です。 |
availList
変数が作成され、availProcessor
Web サービスから返される XmlObject
データを受け取るように割り当てられます。
実行時に、For Each ループでの現在の反復処理で availProcessor
コントロールから返されるデータを含む XmlObject
が、availList
変数に追加されます。
For Each ループでの反復処理ごとに以下の処理が行われます。
ビジネス プロセスでは、反復処理ごとに返される価格データを収集し、ループでの反復処理ごとに 1 つの項目をリストに割り当てて、価格データのリストを作成する必要があります。同様に、ループでの反復処理ごとに、パラレル ノードの Get Availability ブランチに在庫データのリストが作成されます。
XmlObjectList
は、型なし XML 形式データのシーケンスを指定する Java データ型です。このデータ型は、XML 要素のシーケンス (繰り返し要素のセット) を表します。ビジネス プロセスでは、パラレル ノードの Get Price ブランチでの各反復処理の最後の段階として、price
変数から受け取ったデータを priceList
変数 (XmlObjectList
型) に割り当てます。このようにして、For Each ループで反復処理する各項目の価格データを、単一の変数が保持します。同様に、各項目の在庫データも単一の変数が保持します。
XmlObjectList
変数の使用方法については、「Create PriceList ノードの設計」および「Create AvailList ノードの設計」を参照してください。
![]() ![]() ![]() |