この章では、条件分岐について説明します。条件分岐により、BPELプロセスの実行フローを制御するための判断ができるようになります。
この章の内容は次のとおりです。
第6章「パラレル・フロー」で作成したBPELプロセスでは、2つの融資提案(United Loanの条件とStar Loanの条件)を収集しました。この章では、年率(APR)が最も低い融資を自動的に選択するようにBPELプロセスを設計する方法について説明します。
|
関連項目: 次のサンプルを参照してください。
|
BPELは、条件分岐によって選択するロジックを利用します。次のいずれかのアクティビティを使用すると、条件分岐に基づいて異なるアクションを選択するコードを設計できます。
switchアクティビティ: この方法では、2つ以上のブランチを設定し、各ブランチをXPath式の形式にします。式がtrueの場合、そのブランチが実行されます。式がfalseの場合、BPELプロセスは有効なブランチ条件が見つかるか、otherwiseブランチに達するか、ブランチがなくなるまで次のブランチ条件に進みます。複数のブランチ条件がtrueの場合は、最初にtrueと判断されたブランチがBPELにより実行されます。「switchアクティビティによる条件分岐の定義」では、switchアクティビティの作成方法について説明しています。
whileアクティビティ: whileアクティビティを使用すると、2つのアクション間で選択を行うwhileループを作成できます。「whileアクティビティによる条件分岐の定義」では、whileアクティビティについて説明しています。
いくつかのブランチが設定され、各ブランチにはXPath式形式の条件が指定されます。
条件分岐には、タイムアウトを設定できます。つまり、指定の期間内にレスポンスを生成できない場合、BPELフローは待機を中止し、そのアクティビティを再開できます。第10章「イベントおよびタイムアウト」では、この機能の詳細を説明しています。
第6章では、BPELプロセスのflowアクティビティは2つの融資提案を同時に収集しましたが、どちらの条件も比較していません。各条件は、それぞれのグローバル変数に格納されています。2つの条件を比較し、その比較に基づいて決定するには、BPELフローにswitchアクティビティが必要です。
switchアクティビティに定義されたBPEL条件分岐プロセスの概観を図7-1に示します。
flowアクティビティと同様に、switchアクティビティは複数のブランチを持ちます。この例では、ブランチが2つだけあります。最初のブランチは、United Loanからの融資提案を選択するブランチであり、XPathブール式を含むcase条件が適合した場合に実行されます。適合しなかった場合は、Star Loanの融資提案を選択する2番目のブランチが実行されます。デフォルトでは、switchアクティビティに含まれるSwitch Caseは2つですが、必要に応じて追加できます。
<switch name="switch-1">
<case condition="bpws:getVariableData('loanOffer1','payload',
'/autoloan:loanOffer/autoloan:APR') <;
bpws:getVariableData('loanOffer2','payload','/autoloan:loanOffer/autoloan:APR
')">
<assign name="selectUnitedLoan">
<copy>
<from variable="loanOffer1" part="payload">
</from>
<to variable="selectedLoanOffer" part="payload"/>
</copy>
</assign>
</case>
<otherwise>
<assign name="selectStarLoan">
<copy>
<from variable="loanOffer2" part="payload">
</from>
<to variable="selectedLoanOffer" part="payload"/>
</copy>
</assign>
</otherwise>
</switch>
Oracle JDeveloperでswitchアクティビティをBPELフローに追加するには、次のようにします。
コンポーネント・パレットの「プロセス・アクティビティ」リストからswitchアクティビティをBPELフローにドラッグします。
「+」記号をクリックしてswitchアクティビティを開きます。
switchアクティビティにはデフォルトで、それぞれ機能要素用のボックスを持つ2つのSwitch Caseブランチがあります。ブランチを追加するには、switchアクティビティ全体を選択して右クリックし、メニューから「Switch Caseの追加」を選択します。
最初のブランチを右クリックして、メニューから「編集」を選択します。
Switch Caseウィンドウが表示されます。
[Ctrl]キーを押しながら[Space]バーを押してXPathビルディング・アシスタントを起動し、「式」フィールドにXPathブール式を入力します。たとえば、次のようになります。
bpws:getVariableDate('loanOffer1','payload','/loanOffer/APR') >
bpws:getVariableData('loanOffer2','payload','/loanOffer/APR')
この式は1行で入力します。XPath式ビルダーを使用するには、「式」フィールドの上にある「XPath式ビルダー」アイコンをクリックします。
LoanFlowチュートリアルで使用する2つの融資提案は、グローバル変数loanOffer1およびloanOffer2に格納されています。それぞれの融資提案変数には、融資提案のAPRが格納されます。BPELフローは、APRが最も低い融資を選択する必要があります。次のいずれかのswitchアクティビティを実行します。
|
関連項目: Oracle JDeveloperでのswitchアクティビティの作成例は、次のドキュメントを参照してください。
|
複数のアクション間で選択を行うようにBPELコードを設計する別の方法としては、whileアクティビティを使用したwhileループの作成があります。whileループは、指定の条件が適合するまで、アクティビティを繰り返します。たとえば、重要なWebサービスでリクエストに対してサービス・ビジー・メッセージを返している場合、そのサービスが使用可能になるまで、whileアクティビティを使用してポーリングし続けることができます。このときのwhileアクティビティの条件はサービスから受け取った最新のメッセージがビジーであることで、whileアクティビティ内の操作はサービスを再チェックすることです。Webサービスからサービス・ビジー以外のメッセージが返されると、whileアクティビティは終了し、理想的にはWebサービスからの有効なレスポンスを使用して、BPELプロセスが続行されます。
Oracle JDeveloperでwhileアクティビティを作成するには、次のようにします。
コンポーネント・パレットの「プロセス・アクティビティ」リストからwhileアクティビティをBPELフローにドラッグ・アンド・ドロップします。
whileアクティビティには、条件式の作成を行うアイコンとwhile定義の検証を行うアイコンがあります。また、アクティビティをドロップしてwhileループを定義する領域も用意されます。
while条件の定義に使用するアクティビティをwhileアクティビティの「アクティビティをここにドロップ」領域にドラッグします。
このアクティビティとしては、既存のアクティビティや新しいアクティビティを使用できます(タスクを起動するinvokeアクティビティなど)。
|
関連項目: Oracle JDeveloperでのwhileアクティビティの定義例は、次のドキュメントを参照してください。
|