第3章では、注文を発行し、SOA Order Bookingビジネス・フローを介してその注文が処理される様子を見てきました。 この章では、JDeveloper BPEL DesignerおよびESB Designerを使用して、BPEL要素およびESB要素を追加する方法について学習します。
項目は次のとおりです。
この項では、JDeveloper BPEL Designerの概要を簡単に説明します。 次の項の第4.2項「SOAOrderBookingプロセスへの与信評価サービスの追加」では、SOAOrderBooking BPELプロセスに変更を加えます。
JDeveloper BPEL Designerを理解するための手順は、次のとおりです。
JDeveloperのアプリケーション・ナビゲータで、「SOADEMO」→「SOAOrderBooking」→「インテグレーション・コンテンツ」の順に開きます。
「SOAOrderBooking.bpel
」をダブルクリックします。
JDeveloper BPEL Designerにプロセスが表示されます。
スコープの上部にある「開始」アイコンを右クリックし、「すべての子を閉じる」を選択します。
BPELプロセスのメイン・ロジックは、「main」と呼ばれるスコープに組み込まれています。 「client:OrderBookingFault」の直下にある他のアクティビティは、プロセスに関する主要な例外ハンドラであり、ここでは無視してかまいません。
メイン・ウィンドウの左右にある黄色のスイムレーンには、様々なサービスが配置されます。 これらのサービスは、BPELプロセスの様々な段階で起動されるサービスです。 中央の白い領域には、BPELロジックが配置されます。
「開く」アイコン(「+」)をクリックして「main」スコープを開きます。
このスコープの最初にある「receiveInput」という名前の青い丸のアイコンは、何かがこのBPELプロセスを起動していることを表しています。 このプロセスへの入力は、このreceiveアクティビティに渡されます。
「main」スコープの最下部までスクロールして、「callbackClient」という青い四角のinvokeアクティビティを表示します。
このアクティビティは、このBPELプロセスの終了を表し、このプロセスを起動したクライアントに結果データを戻します。 (BPELプロセスではデータを戻す必要はありません。 BPELプロセスは単に終了となります。)
「receiveInput」と「callbackClient」の間のすべてのアクティビティには、BPELプロセスのロジックが格納されます。
BPEL言語には、複数のコンテナ・アクティビティ(つまり、他のアクティビティを格納できるアクティビティ)があります。 最も一般的に使用されるのはscopeアクティビティです。 scopeアクティビティは、実際には何も実行しません。このアクティビティは、単に、他のスコープも含めて他のアクティビティを保持します。 スコープは、Javaの中カッコに類似しています。 スコープを使用すると、プロセスを複数の論理的なチャンクに分割できます。
「開く」アイコン(「+」)をクリックして、プロセスの最初のほうにある「CustomerService」スコープを開きます。
「Sequence_9」が表示されます。 多くのスコープには内部シーケンスが含まれています。 シーケンスがある場合は、単純に開いて、含まれているアクティビティを表示します。
「開く」アイコン(「+」)をクリックして、「Sequence_9」シーケンスを開きます。
このBPELプロセスが起動された場合、注文を発行している顧客の顧客IDがプロセスへの入力の一部となります。 ビジネス・プロセスはこのIDを使用して、住所やクレジット・カード番号など、顧客の詳細を取得します。 このビジネス・プロセスは、「GetCustInfo」invokeアクティビティを使用して表示できます。 invokeアクティビティはサービスを起動します。 「GetCustInfo」から出ている青い線に従うと、「CustomerService」が起動されることがわかります。
ここでは、「CustomerService」は同期して起動されるため、BPELプロセスは、サービスが結果を戻すまで待機してから、先に進みます。
「GetCustInfo」invokeアクティビティの前後には、assignアクティビティがあります。 assignアクティビティはデータを変数に割り当てます。 ここでは、顧客IDが変数に割り当てられ、「CustomerService」への入力として送信されます。もう1つのassignアクティビティは、そのサービスから戻ったデータを変数にコピーします。この変数は、その後、BPELプロセスで使用および参照できます。
このスコープのすべてのアクティビティは、顧客情報の取得にはあまり関係がないため、1つのスコープにまとめてグループ化されています。 スコープは、開発を簡素化し、プロセスの読取りと使用を容易にするために、プロセスを複数の論理的なチャンクに分割します。
「CustomerService」スコープの「閉じる」アイコン(「-」)をクリックしてスコープを閉じます。
「requiresApproval」switchアクティビティまで下にスクロールし、「開く」アイコン(「+」)をクリックします。
「case」文の「開く」アイコン(「+」)をクリックします。
シーケンスが表示されます。
シーケンスの「開く」アイコン(「+」)をクリックします。
緑色の「ApproveOrder」アクティビティは、このBPELプロセスの一部としてヒューマン・ワークフロー・アクティビティを起動することを表します。
「ApproveOrder」をダブルクリックします。
「ヒューマン・タスク」ダイアログが表示されます。
「タスク定義の編集」アイコンをクリックします。 このアイコンは、「タスク定義」フィールドの右にある3番目のアイコン(鉛筆のようなアイコン)です。
ApproveOrder.taskページが表示されます。 この画面を使用すると、ヒューマン・ワークフローの動作を定義できます。
ここでは、リクエストが承認または却下されることが「結果」フィールドに表示されています。 「割当ておよびルーティング・ポリシー」セクションでは、ルーティング・ポリシーを定義できます。 ここでは、承認を得るために、タスクがSupervisorグループに発行されます。 実際には、一連の複雑なルーティング・ルールを指定できます。 たとえば、ワークフローによって、営業の承認、次に営業マネージャの承認、最後にFredという個人の承認を得るように指定できます。
その他にも、タスクの有効期限、ワークフローの関係者への通知、エスカレーション・ルールなど、様々な設定を指定できます。
ApproveOrder.taskページを閉じるには、マウスをタブの上に置き、「X」を押します。
「ヒューマン・タスク」ダイアログに戻り、「取消」をクリックします。
「taskSwitch」switchアクティビティの「開く」アイコン(「+」)をクリックします。
switchアクティビティは、他の言語でのif-then-else
、case
、switch
文に類似しています。
「taskSwitch」アクティビティには、ヒューマン・ワークフロー・タスクが却下、承認またはその他の状況(期限切れなど)になった場合の処理があります。
「REJECT」case文の「条件式の表示」アイコンをクリックしてXPath評価式を表示し、表示を終了する際に、[Esc]キーを押します。
同じ「REJECT」case文の「開く」アイコン(「+」)をクリックし、次に内部シーケンスをクリックします。
ワークフロー・タスクが却下された場合に実行するアクティビティが表示されます。 ここでは、データがいくつかの変数に割り当てられ、例外がスローされます。
BPELプロセスの先頭までスクロールして、スコープの上部にある「開始」アイコンを右クリックし、「すべての子を閉じる」を選択します。
BPELの長所の1つは、ビジネス・プロセスを記述するための、実装とは独立した言語であることです。 ビジネス・プロセスのロジックは、コードから分離しているため、ビジネス・プロセスの変更時に、BPELフローを簡単に組込み直すことができます。
たとえば、既存のBPELプロセスをデプロイした後で、与信評価が低く結果的に損失となる顧客に対してGlobal Companyが製品を販売していたことが判明したとします。 この場合は、製品を販売する前に購入者の与信評価を確認するように、ビジネス・プロセスを調整できます。
SOAOrderBooking BPELプロセスでは、顧客のクレジット・カードを確認することで、その顧客の与信評価を実行しています。この与信評価は、次の手順で確認できます。
「main」スコープの「開く」アイコン(「+」)をクリックします。
「Sequence_5」という内部シーケンスを開きます。
「InvokeCreditService」というinvokeアクティビティに注目してください。このアクティビティは、「CreditValidatingService」というサービスを起動します。 ここでは、プロセスがクレジット・カード情報を与信検証サービスに送信し、このサービスがクレジット・カードの有効性を判断することで対応しています。
「CreditService」スコープの「閉じる」アイコン(「-」)をクリックしてスコープを閉じます。
顧客のクレジット・カードの有効性の確認に加え、顧客の与信評価を確認するようにプロセスを変更できます。 プロセスで利用できる「CreditRatingService」というWebサービスがあります。 このWebサービスは、社会保障番号を入力として取得し、その社会保障番号に対する与信評価を戻します。
BPELプロセスでは、顧客の社会保障番号を取得する必要があります。 BPELプロセスの先頭付近で、顧客の詳細情報を取得するためのCustomerServiceがコールされますが、この情報には社会保障番号は含まれていません。 社会保障番号の情報は別のデータベースに格納されています。 通常のデプロイメントでは、企業が複数の場所にデータを格納します。 BPELを使用すると、これらの異なるデータを簡単に取得し、ビジネス・プロセスに応じてまとめることができます。
ここでは、既存のBPELプロセスを変更して、別のデータベースから顧客sking
の社会保障番号を取得します。 変更したBPELプロセスは、その社会保障番号をCreditRatingServiceサービスに渡し、顧客の与信評価を取得します。 次のタスクを実行します。
社会保障番号情報にアクセスするには、その情報が格納されているデータベースへのデータベース接続を作成します。 ここでは、接続soademo
はすでに使用されているため、SOADEMO
スキーマへのもう1つの接続を作成します。 現実のデプロイメントでは、これが異なるデータベースへの接続になります。 ただし、ここではデモ用に同じデータベース内の別の表を使用します。
データベース接続を作成する手順は、次のとおりです。
JDEV_HOME
¥jdeveloper.exe
を実行してJDeveloperを起動します。
SOADEMO
スキーマを使用して、データベースへの接続を作成します。
「接続」タブをクリックします。このタブが表示されていない場合は、「表示」→「接続ナビゲータ」の順に選択します。
「データベース」フォルダをダブルクリックして、データベース接続の作成ウィザードを開きます。
次の項目を設定し、ウィザードを完成します。
- ステップ1/4: タイプ・ページで、「接続名」に「soademo_ssn
」と入力します。
- ステップ2/4: 認証ページで、「ユーザー名」および「パスワード」の各フィールドに「soademo
」と入力し、「パスワードを配布」をクリックします。
- スキーマをインストールしたデータベースに対する適切な値を入力します。
このタスクでは、SOADEMO
スキーマのSSN
表を問い合せるために、データベース・アダプタを使用するサービスを作成します。
コンポーネント・パレットで、ドロップダウンからServicesを選択します。
コンポーネント・パレットでDatabase Adapterアイコンをクリックし、SOAOrderBooking.bpelページの黄色の「サービス」スイムレーンのいずれかにドラッグ・アンド・ドロップします。
アダプタ構成ウィザードが表示されます。
ようこそページで、「次へ」をクリックします。
ステップ1/2: サービス名ページで、「名前」フィールドに「getSsn
」と入力し、「次へ」をクリックします。
ステップ2/2: サービス接続ページで、次の操作を実行します。
接続: 「soademo_ssn
」データベース接続を選択します。
JNDI名: 名前が「eis/DB/soademo_ssn」に設定されていることを確認します。 名前は大文字/小文字が区別されます。 接続名の大文字/小文字に正しく一致していることを確認してください。
「次へ」をクリックします。
ステップ3/3: 操作タイプ・ページで、「表に対して操作を実行」を選択し、「選択」(これは必要)以外のすべての操作の選択を解除します。
「次へ」をクリックします。
表の選択ページで、「表のインポート」をクリックします。
「表のインポート」ダイアログが表示されます。
「問合せ」をクリックして表を表示します。
「SSN」を選択し、「>」をクリックしてこの表を「選択済」領域に移動します。
「OK」をクリックして設定内容を保存し、ウィザードに戻ります。
ステップ4/7: 表の選択ページに、SOADEMO.SSN表が表示されます。 「次へ」をクリックします。
ステップ5/8: 主キーの定義ページで、「CUSTOMERID」を選択し、「次へ」をクリックします。
ステップ6/8: リレーションシップ・ページで、「次へ」をクリックします(リレーションシップがないため)。
ステップ7/8: オブジェクトのフィルタ・ページで、そのままの設定で「次へ」をクリックします。
ステップ8/8: 選択条件の定義ページで、SQL問合せが次のように設定されていることを確認します。
SELECT CUSTOMERID, SSN FROM SSN
ステップ8/8: 選択条件の定義ページの「パラメータ」セクションで、「追加」をクリックしてパラメータを追加します。
「パラメータ名」ダイアログが表示されます。
「custIdToGet
」と入力し、「OK」をクリックします。
このパラメータは、実行時に移入されます。
ステップ8/8: 選択条件の定義ページに戻り、「SQL」セクションで、「編集」をクリックします。
「式ビルダー」ダイアログが表示されます。
「追加」をクリックし、where
句を追加します。
「第2引数」セクションで、選択を「リテラル」から「パラメータ」に変更し、移入されたリストの下部に「custIdToGet
」が指定されていることを確認してから、「OK」をクリックします。
ステップ8/8: 選択条件の定義ページに戻り、SQL問合せが次のように変更されていることを確認します。
SELECT CUSTOMERID, SSN FROM SSN WHERE (CUSTOMERID =#custIdToGet)
「次へ」をクリックします。
終了ページで、「終了」をクリックし、データベース・アダプタのパートナ・リンクを作成します。
「パートナ・リンクの作成」ダイアログが表示され、各要素が次のように自動的に表示されます。
要素 | 値 |
---|---|
名前 | getSsn |
WSDLファイル | file: DEMO_HOME /SOAOrderBooking/bpel/getSsn.wsdl |
パートナ・リンク・タイプ | getSsn_plt |
パートナ・ロール | getSsn_role |
マイ・ロール | (未指定) |
「OK」をクリックします。
SOAOrderBooking.bpelページが「getSsn」サービスによって更新されます。 このデータベース・アダプタをサービスにすることで、その内容がSOAOrderBookingプロセスに対するWebサービスとして表示されるようになりました。 このサービスは、他のWebサービスの場合と同様に起動することができ、データベースの行を戻します。
ここでは、scopeアクティビティを作成して、実行される論理ステップを形成するアクティビティすべてをグループ化します。
コンポーネント・パレットで、ドロップダウンからProcess Activitiesを選択します。
コンポーネント・パレット・セクションから「Scope」アクティビティをドラッグして、「CreditService」アクティビティと「RequiresManualApproval」アクティビティの間にドロップします。
アイコンの下の名前をダブルクリックして、アクティビティの名前を変更します。 アクティビティ・アイコン自体をダブルクリックしないでください。
「開く」(「+」)アイコンをクリックして「getCreditRating」スコープを開きます。
BPELからサービスをコールするには、invokeアクティビティを使用します。 invokeアクティビティは、サービスをコールしてデータを渡します。この場合、サービスからのレスポンスと戻りデータを待機します。
invokeアクティビティを作成する手順は、次のとおりです。
コンポーネント・パレット・セクションからInvokeアクティビティをドラッグして、「getCreditRating」scopeアクティビティ内にドロップします。
アイコンの下の名前をダブルクリックして、アクティビティの名前を変更します。 invokeアクティビティ・アイコン自体をダブルクリックしないでください。
編集フィールドで、名前を「invokeGetSsn
」に変更します。
マウスを「invokeGetSsn」の左側から「getSsn」データベース・アダプタ・サービスまでドラッグします。
編集 Invokeダイアログが表示され、次の情報が自動的に表示されます。
要素 | 値 |
---|---|
名前 | invokeGetSsn |
パートナ・リンク | getSsn |
操作 | getSsnSelect_custIdToGet |
「入力変数の自動作成」アイコンをクリックします。 このアイコンは、「入力変数」フィールドの右にある最初のアイコンです。
「変数の作成」ダイアログに入力変数が表示されます。 「invokeGetSsn_getSsnSelect_custIdToGet_InputVariable」という名前の変数が「名前」フィールドに自動的に作成されます。 この変数には、メッセージ・タイプが自動的に割り当てられます。
変数名は、invokeアクティビティ(invokeGetSsn)、データベース・アダプタ(getSsn)およびデータベース・アダプタ・パラメータ(custIdToGet)に基づいています。
「グローバル変数」が選択されている状態で、「OK」をクリックします。
編集 Invokeダイアログの「入力変数」フィールドに変数が移入されます。
「出力変数の自動作成」アイコンをクリックします。 このアイコンは、「出力変数」フィールドの右にある最初のアイコンです。
「変数の作成」ダイアログに出力変数が表示されます。 「invokeGetSsn_getSsnSelect_custIdToGet_OutputVariable」という名前の変数が「名前」フィールドに自動的に作成されます。 この変数には、メッセージ・タイプが自動的に割り当てられます。
「グローバル変数」が選択されている状態で、「OK」をクリックします。
編集 Invokeダイアログの「出力変数」フィールドに変数が移入されます。
これらの変数は、getSsnサービスに対して入出力データを提供します。
「OK」をクリックして、変数設定を保存します。
ここでは、顧客IDを取得し、その内容を入力変数invokeGetSsn_getSsnSelect_custIdToGet_InputVariableに割り当てるassignアクティビティを作成します。その後、リクエストがgetSsnサービスに送信されます。
コンポーネント・パレット・セクションからAssignアクティビティをドラッグして、「invokeGetSsn」invokeアクティビティの上および「getCreditRating」scopeアクティビティ内にドロップします。
assignアクティビティは、invokeアクティビティ内の変数を参照します。このため、invokeアクティビティを作成した後に作成します。
アイコンの下の名前をダブルクリックして、アクティビティの名前を変更します。 invokeアクティビティ・アイコン自体をダブルクリックしないでください。
編集フィールドに、「assignCustID
」と入力します。
「assignCustID」アクティビティをダブルクリックします。
Assignウィンドウが表示されます。
ヒント: JDeveloperでこの種のウィンドウを使用する場合は、変更を適用する際に「X」アイコンをクリックしないでください。 この「X」アイコンによって、変更内容が削除されます。 変更内容を適用するには、「OK」をクリックする必要があります。 「OK」ボタンが表示されていない場合は、表示されるまで下にスクロールしてください。 |
「作成」メニューから「コピー操作」を選択します。
「コピー操作の作成」ダイアログが表示されます。 ここでコピー・ルールを作成できます。 このダイアログでは、CustIDを使用してデータベース・アダプタ・パラメータ(custIdToGet)を入力変数invokeGetSsn_getSsnSelect_custIdToGet_InputVariableに移入するためのルールを指定します。
「From」側で、「変数」→「inputVariable」→「payload」→「client:SOAOrderBookingProcessRequest」→「ns4:PurchaseOrder」の順に開きます。
「ns4:CustID」を選択します。 「ns4」とは異なる接頭辞が表示される可能性があります。
「To」側で、「変数」→「invokeGetSsn_getSsnSelect_custIdToGet_InputVariable」→「getSsnSelect_custIdToGet_inparameters」→「ns32:getSsnSelect_custIdToGetInputParameters」の順に開きます。
「ns32:custIdToGet」を選択します。 「ns32」とは異なる接頭辞が表示される可能性があります。
「OK」をクリックします。
Assignウィンドウの「コピー操作」タブが更新され、ルールが表示されます。
Assignウィンドウに戻り、下にスクロールして「OK」をクリックします。
SOAOrderBooking.bpelページが次のように表示されていることを確認します。
要約: これまでに、「getCreditRating」scopeアクティビティを作成しました。このアクティビティは、SOAOrderBookingプロセスが提供する顧客IDを取得し、入力変数(invokeGetSsn_getSsnSelect_custIdToGet_InputVariable)に割り当てます。 この入力変数はgetSsnサービスへの入力として渡され、このサービスは、その後、社会保障番号を出力変数(invokeGetSsn_getSsnSelect_custIdToGet_OutputVariable)に戻します。 次は、CreditRatingServiceを作成し、この出力変数を、該当するWebサービスへの入力として割り当てます。 |
ここまでの手順で、顧客の社会保障番号をデータベースから抽出するために、BPELプロセスを変更しました。 次のステップでは、社会保障番号を与信評価サービスに渡します。このサービスは与信評価を戻します。
このタスクでは、与信評価サービスをインストールします。 このサービスは「CreditRatingService」という名前で、Oracle SOA Suiteをインストールする際に付属しているサンプルの1つです。 次の手順は、付属している他の多くのサンプルをインストールする際にも使用できます。
「スタート」→「すべてのプログラム」→「Oracle - Oracle - soademo」→「Oracle BPEL Process Manager」→「Developer Prompt」の順に選択します。
コマンド・プロンプトが表示されます。 カレント・ディレクトリはsamples
ディレクトリであることに注意してください。
次のコマンドを入力します。
cd utils¥CreditRatingService
次のコマンドを入力します。
ant
このコマンドによって、ant
スクリプトが実行され、CreditRatingServiceサービスがインストールされます。 このスクリプトの実行には、30秒から60秒かかります。
ant
を実行すると、このスクリプトはカレント・ディレクトリ内でbuild.xml
ファイルを検索します。このファイルには、サンプルをインストールするためのant
スクリプトが格納されています。 ユーザーは、samples
ディレクトリとその下のディレクトリを検索できます。 build.xml
ファイルがあるディレクトリでは、ant
を実行して簡単にサンプルをインストールできます。
「exit
」と入力して、コマンド・ウィンドウを閉じます。
CreditRatingServiceは、1つのBPELプロセスとして実装されます。 BPELプロセスを作成する際は、このCreditRatingServiceがサービスとして公開されます。 これは、サービスの起動が可能なすべてのものが起動できる、CreditRatingServiceというサービスがあることを意味します。 次のタスクでは、このサービスをSOAOrderBookingプロセスから起動します。
ant
の実行時に認証エラーが発生した場合は、welcome1
以外のパスワードを使用している可能性があります。 この問題を解決する手順は、次のとおりです。
テキスト・エディタを使用して、次のファイルを開きます。
ORACLE_HOME¥bpel¥utilities¥ant-orabpel.properties
admin.password
の値をwelcome1
から現在使用しているパスワードに変更します。
このタスクでは、社会保障番号に対する評価を保持するWebサービスへのパートナ・リンクを作成します。
PartnerLinkをドラッグして、SOAOrderBooking.bpelページの黄色い「サービス」スイムレーンのいずれかにドロップします。
「パートナ・リンクの作成」ダイアログが表示されます。
次のように各要素に値を指定します。
要素 | 値 |
---|---|
名前 | CreditRatingService |
WSDLファイル |
|
パートナ・リンク・タイプ | CreditRatingService |
パートナ・ロール | CreditRatingServiceProvider |
マイ・ロール | (未指定) |
「OK」をクリックします。
SOAOrderBooking.bpelページが「CreditRatingService」パートナ・リンクによって更新されます。
このタスクでは、SOAOrderBookingプロセスから「CreditRatingService」パートナ・リンクにリクエスト・データを送信し、レスポンスを受信するinvokeアクティビティを作成します。
invokeアクティビティを作成する手順は、次のとおりです。
コンポーネント・パレット・セクションからInvokeアクティビティをドラッグして、「getCreditRating」scopeアクティビティ内の「invokeGetSsn」アクティビティの下にドロップします。
アイコンの下の名前をダブルクリックして、アクティビティの名前を変更します。 invokeアクティビティ・アイコン自体をダブルクリックしないでください。
編集フィールドで、名前を「invokeCreditRatingService
」に変更します。
マウスを「invokeCreditRatingService」の左側から「CreditRatingService」パートナ・リンクまでドラッグします。
編集 Invokeダイアログが表示され、次の情報が自動的に表示されます。
要素 | 値 |
---|---|
名前 | invokeCreditRatingService |
パートナ・リンク | CreditRatingService |
操作 | process |
「入力変数の自動作成」アイコンをクリックします。 このアイコンは、「入力変数」フィールドの右にある最初のアイコンです。
「変数の作成」ダイアログに入力変数が表示されます。 「invokeCreditRatingService_process_InputVariable」という名前の変数が「名前」フィールドに自動的に作成されます。 この変数には、メッセージ・タイプが自動的に割り当てられます。
変数名は、invokeアクティビティ(invokeCreditRatingService)および操作(process)に基づいています。 この変数はCreditRatingServiceサービスに入力データを提供します。
「グローバル変数」が選択されている状態で、「OK」をクリックします。
編集 Invokeダイアログの「入力変数」フィールドに変数が移入されます。
「出力変数の自動作成」アイコンをクリックします。 このアイコンは、「出力変数」フィールドの右にある最初のアイコンです。
「変数の作成」ダイアログに出力変数が表示されます。 「invokeCreditRatingService_process_OutputVariable」という名前の変数が「名前」フィールドに自動的に作成されます。 この変数には、メッセージ・タイプが自動的に割り当てられます。
「グローバル変数」が選択されている状態で、「OK」をクリックします。
編集 Invokeダイアログの「出力変数」フィールドに変数が移入されます。
この変数はCreditRatingServiceサービスからの出力データを提供します。
編集 Invokeダイアログで、「OK」をクリックし、変数設定を保存します。
ここでは、invokeGetSsn_getSsnSelect_custIdToGet_OutputVariable変数から社会保障番号を取得し、入力変数invokeCreditRatingService_process_InputVariableに割り当てるassignアクティビティを作成します。その後、その社会保障番号についてCreditRatingServiceにリクエストが送信されます。
コンポーネント・パレットセクションからAssignアクティビティをドラッグして、「invokeCreditRatingService」invokeアクティビティと「invokeGetSsn」invokeアクティビティの間にドロップします。
アイコンの下の名前をダブルクリックして、アクティビティの名前を変更します。 assignアクティビティ・アイコン自体をダブルクリックしないでください。
編集フィールドに、「assignSsn
」と入力します。
「assignSsn」アクティビティをダブルクリックします。
Assignウィンドウが表示されます。
「作成」メニューから「コピー操作」を選択します。
「コピー操作の作成」ダイアログが表示されます。 以前は、データベース・アタプタを使用してデータベースから社会保障番号を取得しました。 この社会保障番号を使用し、その番号をCreditRatingServiceに渡すには、「From」側で、getSsnが戻した変数から社会保障番号を取得するように指定します。
「From」側で、「変数」→(データベース・アダプタの)「invokeGetSsn_getSsnSelect_custIdToGet_OutputVariable」→「SsnCollection」→「ns32:SsnCollection」の順に開きます。 「ns32」とは異なる接頭辞が表示される可能性があります。
「ns32:ssn」を選択します。この「ssn」は、SOADEMO
スキーマのSSN
表にある「ssn
」列を表します。
「To」側で、「変数」→「invokeCreditRatingService_process_InputVariable」→「payload」の順に開きます。
「ns33:ssn」を選択します。 「ns32」とは異なる接頭辞が表示される可能性があります。
「OK」をクリックします。
Assignウィンドウの「コピー操作」タブが更新され、ルールが表示されます。
Assignウィンドウに戻り、下にスクロールして「OK」をクリックします。
SOAOrderBooking.bpelページが次のように表示されていることを確認します。
「ファイル」→「保存」の順に選択して、作業内容を保存します。
要約: これまでに、「getCreditRating」scopeアクティビティを作成しました。このアクティビティは、SOAOrderBookingプロセスが提供する顧客IDを取得し、入力変数(invokeGetSsn_getSsnSelect_custIdToGet_InputVariable)に割り当てます。 この入力変数はgetSsn サービスへの入力として渡され、このサービスは、その後、社会保障番号を出力変数(invokeGetSsn_getSsnSelect_custIdToGet_OutputVariable)に戻します。 次に、この変数をCreditRatingService Webサービスへの入力として割り当てました。このWebサービスは、社会保障番号の評価を出力変数(invokeCreditRatingService_process_OutputVariable)に戻します。 |
すでにBPELプロセスは変更および保存されています。次は、そのBPELプロセスをテストします。 そのためには、プロセスをサーバーにデプロイして新しい注文を発行します。これによって、更新されたBPELプロセスが使用されます。
SOAOrderBookingを再デプロイする手順は、次のとおりです。
アプリケーション・ナビゲータで、「SOAOrderBooking」→「リソース」の順に開きます。
アプリケーション・ナビゲータで、「build.xml
」を右クリックし、「Antを実行」を選択します。
「Antを実行」ダイアログが表示されます。
「プロパティ」タブをクリックし、プロパティがあった場合は、それらを削除します。
「プロパティ・ファイル」セクションで、「追加」をクリックし、「build.properties
」ファイルを選択します。
「開く」をクリックし、次に「OK」をクリックします。
デプロイメント・プロセスが開始します。実行には30秒から60秒かかります。 進行状況は、「Apache Ant - ログ」タブの「Apache Ant」サブタブにある「メッセージ」ペインで監視できます。 テキストBUILD SUCCESSFUL
の表示は、デプロイメントが完了したことを示します。
Webクライアントで注文を発行する手順は、次のとおりです。
「Browse products and create a new order」リンクをクリックします。
Browse and Select Itemsページが表示されます。 このページには、販売可能な電子機器がリストされています。
$199.00の「PlayStation 2 Video Game System」を選択し、「View Details」をクリックします。
Item Detailsページが表示されます。 製品に関する詳細情報が表示されます。ユーザーは、数量を選択し、その製品をカートに追加できます。
「Quantity」リストで「1」を選択し、「Add to cart」をクリックします。
「Go to Shopping Cart」をクリックします。
Shopping Cart Contentsページが表示されます。
「Place order」をクリックし、注文を発行します。
ようこそページが更新され、「Order Submitted
」メッセージが表示されます。
Oracle BPEL Controlが実行されていない場合は、「スタート」→「すべてのプログラム」→「Oracle - Oracle - soademo」→「Oracle BPEL Process Manager」→「BPEL Control」の順に選択します。
プロンプトが表示された場合は、「ユーザー名」フィールドに「oc4jadmin
」、「パスワード」フィールドに「welcome1
」と入力します。
「ダッシュボード」タブが更新され、注文の完了が表示されます。
作成した「CreditRatingService」が追加されていることに注意してください。
「インスタンス」タブをクリックします。
「SOAOrderBooking」の最後のインスタンスをクリックします。
「フロー」サブタブをクリックし、「getCreditRating」スコープまでスクロールします。
「invokeCreditRatingService」をクリックします。
アクティビティ監査証跡ウィンドウが表示されます。 このウィンドウでは、顧客ID(customerid)10に対する社会保障番号(ssn)123456789が、前のアクティビティから戻されています。 このアクティビティでは、CreditRatingServiceから「560」の評価が戻っています。
アクティビティ監査証跡ウィンドウを閉じます。
「ダッシュボード」タブをクリックし、メイン・ビューに戻ります。
この項では、JDeveloper ESB Designerの概要を簡単に説明します。 次の第4.4項では、FulfillmentESBプロジェクトに変更を加えます。
JDeveloper ESB Designerを理解するための手順は、次のとおりです。
JDeveloperのアプリケーション・ナビゲータで、「SOADEMO」→「FulfillmentESB」→「リソース」の順に開きます。
「FulfillmentESB.esb」をダブルクリックします。
JDeveloper ESB Designerでは、次の要素がフローに表示されます。
「OrderFulfillment」ルーティング・サービス。このサービスは、メッセージを「Shipment」および「FulfillmentBatch」にルーティングします。
「Shipment」ルーティング・サービス。このサービスは、出荷情報をUSPS(USPSShipment)またはFedex(FedexShipment)のいずれかに送信します。
「Shipment」で、マウスをフィルタ・アイコンの上に置きます。
最初のフィルタには、注文がFedexで出荷されるように、次の指定が表示されます。
/inp1:PurchaseOrder/inp1:OrderInfo/inp1:OrderPrice >= 500
2番目のフィルタには、注文がUSPSで出荷されるように、次の指定が表示されます。
/inp1:PurchaseOrder/inp1:OrderInfo/inp1:OrderPrice < 500
前の各章で説明されているように、注文が承認されると、その注文は、Fulfillmentによって適切な出荷先に送信されます。 これらのフィルタを使用して、$500未満の注文はUSPSに、$500以上の注文はFedexにルーティングされます。 USPS注文は、ファイル・アダプタを介して送信され、ファイルに書き込まれます。 Fedex注文は、データベース・アダプタを介して送信され、データベース内のFEDEX
表に書き込まれます。
JDeveloper ESB DesignerでのESB要素の設計を理解するために、第3の出荷先(DHL)を作成します。この出荷先は、$1000を超える注文に対してSOAPサービスを使用します。
このシナリオでは、次のタスクを実行します。
DHLShipmentサービスを作成する手順は、次のとおりです。
「Shipment」ルーティング・サービスをダブルクリックします。
Fullfillent_Shipment.esbsvcページに「ルーティング・サービス」情報が表示されます。
「ルーティング・ルール」セクションで、「ルーティング・ルールを拡張します。」アイコン(「+」)をクリックしてセクションを開きます。
右端までスクロールし、緑色の「+」アイコンをクリックして別のルーティング・ルールを追加します。
「ターゲット・サービス操作の参照」ダイアログが表示されます。
「ESBサーバー接続のサービス: OracleBookingIS」→「BPEL System」→「default」→「DHLShipment」→「DHLShipment_1_0」の順に開きます。
「DHLShipment」は、第2章でデプロイしたサービスです。
「DHLShipment_1_0」の下の「Initiate」をクリックします。
「ターゲット・サービス操作の参照」ダイアログで、「OK」をクリックします。
「ルーティング・ルール」セクションは、次のように表示されます。
$1000以上の注文をDHLShipmentに送信するためのフィルタを作成します。
DHLShipmentルールのフィルタ・アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。
「WSDLメッセージ」セクションで、「PurchaseOrder」→「inp1:PurchaseOrder」→「inp1:OrderInfo」の順に開き、「inp1:OrderPrice」を選択します。
「コンテンツのプレビュー」ボックスにも、パス「/inp1:PurchaseOrder/inp1:OrderInfo/inp1:OrderPrice
」が表示されます。
「式に挿入」をクリックします。
パスが、ダイアログの上部の「式」ボックスに表示されます。
「式」ボックスで、パスに「>= 1000
」を追加します。これで、この「式」ボックスは「/inp1:PurchaseOrder/inp1:OrderInfo/inp1:OrderPrice >= 1000
」となります。
「式ビルダー」で、「OK」をクリックします。
「ルーティング・ルール」セクションは、次のように表示されます。
DHLShipment SOAPサービスによって適切な情報が取得されるように、トランスフォーメーションを作成します。
「ルーティング・ルール」セクションで、トランスフォーメーション・アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「既存のマッパー・ファイルの使用」を選択し、懐中電灯アイコンをクリックします。
「XSLトランスフォーメーション・ファイルの選択」ダイアログが表示されます。
「プロジェクトのXSLファイル」を開き、「PurchaseOrder_To_DHLShipmentProcessRequest.xsl」を選択します。
「OK」をクリックして「リクエスト・トランスフォーメーション・マップ」ダイアログに戻ります。
「リクエスト・トランスフォーメーション・マップ」ダイアログで、「OK」をクリックします。
下の右端までスクロールし、「非同期」をクリックします。
「ルーティング・ルール」セクションは、次のように表示されます。
「ファイル」→「保存」の順に選択し、作業内容を保存します。
マウスをタブの上に置き、「X」を押して、Fulfillment_Shipment.esbsvcウィンドウを閉じます。
FulfillmentESB.esbページが更新されます。 「Shipment」から3本の矢印が伸びていることを確認します(第1の矢印は「FedexShipment」に、第2の矢印は「USPSShipment」に、第3の矢印は「DHLShipment」にそれぞれ接続しています)。
マウスを「Shipment」の第3のフィルタ・アイコンの上に置くと、DHLによって出荷される注文に対して使用するフィルタが表示されます。
/inp1:PurchaseOrder/inp1:OrderInfo/inp1:OrderPrice >= 1000
すでにFulfillmentESBは変更および保存されています。次は、そのFulfillmentESBをテストします。 そのためには、FulfillmentESBをサーバーにデプロイして、$1000を超えるの新しい注文を発行し、DHLに送信されるかどうかを確認します。
FulfillmentESBを再デプロイする手順は、次のとおりです。
アプリケーション・ナビゲータで、「FulfillmentESB」を右クリックし、ESBに登録→「OrderBookingIS」の順に選択します。
「サマリー」ダイアログで、「OK」をクリックします。
Webクライアントで注文を発行する手順は、次のとおりです。
ようこそページで、「Browse products and create a new order」リンクをクリックします。
Browse and Select Itemsページが表示されます。
「Next 10」リンクをクリックし、「Ipod Mini 2 Gb」を選択します。
「View Details」をクリックします。
Item Detailsページが表示されます。 製品に関する詳細情報が表示されます。ユーザーは、数量を選択し、その製品をカートに追加できます。
「Quantity」リストで「10」を選択し、「Add to cart」をクリックします。
「Go to Shopping Cart」をクリックします。
Shopping Cart Contentsページが表示されます。
「Place order」をクリックし、注文を発行します。
ようこそページが更新され、「Order Submitted
」メッセージが表示されます。
Oracle BPEL Controlが実行されていない場合は、「スタート」→「すべてのプログラム」→「Oracle - Oracle - soademo」→「Oracle BPEL Process Manager」→「BPEL Control」の順に選択します。
プロンプトが表示された場合は、「ユーザー名」フィールドに「oc4jadmin
」、「パスワード」フィールドに「welcome1
」と入力します。
「ダッシュボード」タブに完了した注文が表示されます。
承認金額は、第3.2項「$1000から$2000への承認注文額の引上げと注文の再発行」で変更しました。 したがって、注文は承認なしで完了します。 第3.2項を完了していない場合は、ワークリスト・アプリケーションを使用して注文を承認する必要があります。 ワークリスト・アプリケーションの使用方法については、第3.2項を参照してください。
Oracle ESB Controlが実行されていない場合は、「スタート」→「すべてのプログラム」→「Oracle - Oracle - soademo」→「Oracle ESB」→「ESB Control」の順に選択します。
プロンプトが表示された場合は、「ユーザー名」フィールドに「oc4jadmin
」、「パスワード」フィールドに「welcome1
」と入力します。
画面上部の右側にある「インスタンス」アイコンをクリックします。
「インスタンス」ペインが左側に表示されます。 「ステータス」列に、「OrderBooking」および「Fulfillment」インスタンスが正常に完了したことが表示されます。
リストの1番上のインスタンスをクリックします。
このビューでは、緑色の線が示すように、「Shipment」サービスが、$1000を超える注文を新しい「DHLShipment」サービスにルーティングしたことが表示されます。 ただし、緑色の線は「Shipment」から「FedexShipment」にも伸びていることに注意してください。 つまり、この製品は異なる2つのベンダーによって出荷されます。 このクイック・スタートでは、Fedexのルーティング・ルールを調整していません。したがって、Fedexは$500以上の注文を受け入れます。 このような予定外の結果を回避するために、ESB要素の追加は慎重に行う必要があります。
現実の企業では、$500以上$1000未満の注文がFedexにルーティングされるように、Fedexのフィルタ・ルールを変更する必要があります。 この変更によって、$1000以上の注文はDHLのみにルーティングされるようになります。 ESBの知識を深めるために、次の変更を実行してみてください。
「Fulfillment」インスタンスの下部で、「開く」アイコンをクリックします。
「DHLShipment」サービスをクリックします。
「BPELインスタンスに移動」リンクをクリックし、Oracle BPEL Controlとの統合を確認します。
Oracle BPEL Controlが、DHLShipmentサービスの「フロー」ビューとともに表示されます。
Oracle SOA Suiteについて学習するには、次のリソースを参照してください。
オラクル社のService-Oriented Architecture Technology Center
http://www.oracle.com/technology/soa
Oracle Application Serverのチュートリアル: SOA Order Bookingアプリケーションを作成するための段階的なアプローチが説明されています。
『Oracle SOA Suite開発者ガイド』: SOA Order Bookingアプリケーションを使用したSOAアプリケーションの設計と開発に関する詳細が説明されています。