ヘッダーをスキップ
Oracle BPEL Process Manager Order Bookingチュートリアル
10g (10.1.3.1.0)
B31877-01
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

10 データ挿入のためのデータベース・アダプタの設計

この章では、データベース・アダプタを使用して、データを1対多(1:M)マスター/ディテール関係でデータベース表にコミットする方法について説明します。

この章の内容は次のとおりです。

10.1 概要

チュートリアルのこのフェーズでは、第9章「ファイル・アダプタの書込み機能の使用」で設計したプロセスに処理を追加します。このフェーズを実行する前に、前のフェーズが正常に完了したことを確認してください。この章では、データベース・アダプタを使用して、データを1対多(1:M)マスター/ディテール関係でデータベース表にコミットする方法について説明します。次の主要タスクを実行します。

10.2 データベース表に受注および受注項目データを挿入するための1対多(1:M)マスター/ディテール関係のデータベース・アダプタの設計

この項では次のタスクを実行します。

10.2.1 受注フルフィルメント・プロセスの作成およびスキーマのインポート

Oracle JDeveloperから、次の手順に従って受注フルフィルメント・プロセスを作成してスキーマをインポートします。


注意:

プロジェクト、アクティビティまたは要素の名前に特殊文字(ピリオドなど)を使用しないでください。特殊文字を使用すると、プロジェクトのコンパイル時にエラーが発生します。

  1. 「OrderBookapplication」を右クリックして「新規プロジェクト」を選択します。

  2. 「カテゴリ」の下で、「General」を開いて「Projects」をクリックします。

  3. 「項目」の下で、「BPELプロセス・プロジェクト」をクリックして「OK」をクリックします。

  4. BPELプロジェクト作成ウィザード - プロジェクトの設定ウィンドウで、次の詳細を入力して「次へ」をクリックします。

    フィールド
    名前 FulfillOrder
    ネームスペース デフォルト・パスを使用します。
    デフォルトのプロジェクト設定を使用 BPELプロセスとBPELプロジェクトに同じ名前を使用し、デフォルトのプロジェクト・ディレクトリを使用するために、選択した状態にしておきます。
    テンプレート 非同期BPELプロセス

    bpel.xmlFulfillOrder.bpelおよびFulfillOrder.wsdlファイルが作成されます。

  5. 「入力スキーマ要素」フィールドの右側にある懐中電灯アイコンをクリックします。

  6. スキーマの選択ウィンドウで、SOA_Oracle_Home\bpel\samples\tutorials\127.OrderBookingTutorial\PracticeFilesディレクトリからOrderBookingPO.xsdを選択し、「開く」をクリックします。

    タイプの選択ウィンドウが表示されます。

  7. 「インポートしたスキーマ」「OrderBookingPO.xsd」「PurchaseOrder」の順に開いて選択します。

  8. 「OK」をクリックします。

    OrderBookingRequestMessageメッセージ・タイプに、入力メッセージ・パート名のpayloadとメッセージ・パート要素のPurchaseOrderが自動的に割り当てられます。

  9. 「出力スキーマ要素」フィールドの右側にある懐中電灯アイコンをクリックします。

    タイプの選択ウィンドウが表示されます。

  10. 「インポートしたスキーマ」「OrderBookingPO.xsd」「Purchase Order」の順に開いて選択します。

  11. 「OK」をクリックします。

    OrderBookingResponseMessage メッセージ・タイプに、出力メッセージ・パート名のpayloadとメッセージ・パート要素のPurchaseOrderが自動的に割り当てられます。

  12. 「終了」をクリックします。

    これで、GlobalCompanyスキーマがプロジェクトにインポートされます。このスキーマでは、送信する注文の構造を定義します。

    次のファイルがOracle JDeveloperの「アプリケーション・ナビゲータ」セクションに表示されます。

    • bpel.xmlFulfillOrder.bpelおよびFulfillOrder.wsdlファイルが、「FulfillOrder」「インテグレーション・コンテンツ」の下に表示されます。

    • OrderBookingPO.xsdファイルが、「FulfillOrder」「インテグレーション・コンテンツ」「スキーマ」の下に表示されます。

  13. OrderBooking.bpelをダブルクリックして、ウィンドウの左下に「構造」セクションを表示します。


    注意:

    「構造」セクションを表示するには、「ダイアグラム」タブを有効にする必要があります。

  14. 「ファイル」メイン・メニューから「保存」を選択します。

10.2.2 データベース接続およびサンプル表の作成


概要:

ここでは、Oracle BPEL Process Managerとともにインストールされたデータベース・インスタンスに接続するように、Oracle JDeveloperおよびOracle BPEL Serverを構成します。

ここでは、データベース接続およびデータベース・サンプル表を作成する必要があります。

この項では次のタスクを実行します。

10.2.2.1 JDeveloperデータベース接続の作成

  1. 「表示」メイン・メニューから「接続ナビゲータ」を選択します。

  2. 「接続 - ナビゲータ」ウィンドウで「データベース」を右クリックし、「データベース接続の作成」を選択します。

    これにより、データベース接続の作成ウィザードが起動します。

  3. ようこそウィンドウで「次へ」をクリックします。

  4. 接続名フィールドで、myConnectionと入力します。

  5. 「接続タイプ」リストから「サード・パーティJDBCドライバ」を選択し、「次へ」をクリックします。

  6. 認証ウィンドウの「ユーザー名」フィールドにsystemと入力します。

  7. 「パスワード」フィールドにmanagerと入力します。

  8. 他のフィールドはそのままで、「次へ」をクリックします。

  9. 接続ウィンドウで「ドライバ・クラス」フィールドの右側の「新規」をクリックします。

    JDBCドライバの登録ウィンドウが表示されます。

  10. 「ドライバ・クラス」フィールドにoracle.lite.poljdbc.POLJDBCDriverと入力します。このエントリの最後に空白がないか確認してください。

  11. 「ライブラリ」フィールドの右側の「参照」をクリックします。

    ライブラリの選択ウィンドウが表示されます。

  12. 「新規」をクリックします。

    ライブラリの作成ウィンドウが表示されます。

  13. 「エントリの追加」をクリックします。

    パス・エントリの選択ウィンドウが表示されます。

  14. SOA_Oracle_Home/bpel/lib/olite40.jarに移動します。

  15. 「選択」をクリックします。

  16. 「OK」をクリックして、ライブラリの選択ウィンドウおよびJDBCドライバの登録ウィンドウを閉じます。

  17. 接続ウィンドウの「URL」フィールドにjdbc:polite4@localhost:1531:orabpelと入力します。

  18. 「次へ」をクリックします。

  19. テスト・ウィンドウで「接続のテスト」をクリックします。

    接続に成功すると、次のメッセージが表示されます。

    Success!
    
    
  20. 「終了」をクリックします。

10.2.2.2 サンプル表の作成

  1. Oracle BPEL Serverが実行中であることを確認します。

  2. 「スタート」「すべてのプログラム」「Oracle - Oracle_Home「Oracle BPEL Process Manager」Developer Promptの順に選択してオペレーティング・システムのコマンド・プロンプトを起動します。


    注意:

    このOrder Bookingチュートリアルのすべてのフェーズにおいて、オペレーティング・システムのコマンド・プロンプトを起動する場合は、常にDeveloper Promptを使用してください。他の方法でオペレーティング・システムのコマンド・プロンプトを開いて、チュートリアルのコマンドを実行することはできません。

  3. tutorials\127.OrderBookingTutorialディレクトリに移動します。

    cd tutorials\127.OrderBookingTutorial
    
    
  4. 次のコマンドを入力します。

    polsql.cmd  @PracticeFiles\insertTable.sql
    
    

    表が作成され、デフォルトのOracle Liteインスタンスにサンプル行が挿入されたことを示すメッセージが表示されます。

10.2.2.3 データベース接続のテスト

  1. 「表示」メイン・メニューから「接続ナビゲータ」を選択します。

  2. 「データベース」を開きます。

  3. 「myConnection」を右クリックし、「SQLワークシート」を選択します。

  4. 「SQL文の入力」フィールドにSELECT * FROM system.orders;と入力します。

  5. この文を右クリックし、「SQL文の実行」を選択します。

    作成されたデータを含むサンプル表が「結果」フィールドに表示されます。

    obph10database.gifの説明
    図obph10database.gifの説明

10.2.3 データベース・アダプタのパートナ・リンクの作成


概要:

ここでは、データベース・アダプタを使用して、データを1対多(1:M)関係でデータベース表にコミットするパートナ・リンクを作成します。

  1. 「表示」メイン・メニューから「アプリケーション・ナビゲータ」を選択します。

  2. FulFillOrder.bpelをダブルクリックします。

  3. Designerのウィンドウの右側に、PartnerLinkアクティビティをドラッグ・アンド・ドロップします。

  4. 「名前」フィールドにDBInsertと入力します。

  5. 上にある3番目のアイコン(「アダプタ・サービスの定義」アイコン)をクリックします。これにより、アダプタ構成ウィザードが起動します。

    adapter_service.gifの説明
    図adapter_service.gifの説明

  6. ようこそウィンドウで「次へ」をクリックします。

  7. アダプタ・タイプ・ウィンドウで「データベース・アダプタ」を選択し、「次へ」をクリックします。

  8. サービス名ウィンドウの「サービス名」フィールドにwriteDBと入力し、「次へ」をクリックします。

  9. このリストから、「データベース接続およびサンプル表の作成」で作成したmyConnectionデータベース接続設定を選択します。

  10. 「データベース・サーバーのJNDI名」フィールドにeis/DB/BPELSamplesと入力します。この名前では、大/小文字が区別されます。接続名と大/小文字が正しく一致していることを確認してください。

  11. 「次へ」をクリックします。

  12. 「表に対して操作を実行」を選択します。

  13. 「削除」の選択を解除します。

  14. 「次へ」をクリックします。

  15. 「表のインポート」をクリックします。

  16. 「問合せ」をクリックします。

  17. ORDERSおよびORDERITEMSを選択します。

  18. 「>」をクリックして両方の表を「選択」フィールドに移動します。

  19. 「OK」をクリックします。ウィザードの表の選択ウィンドウに戻ります。

  20. SYSTEM.ORDERSを選択し、「次へ」をクリックします。

    関係の定義が自動的に1:Mとして作成および表示されます。

  21. 「ORDERITEMS (orders)とORDERSのリレーションシップは1対1」を選択し、「リレーションシップの削除」をクリックします。これにより、「ORDERS(orderitemsCollection)とORDERITEMSのリレーションシップは1対多」のみが表示されます。

  22. 「次へ」をクリックします。

  23. ページで問合せから属性が返されるようにするには、すべての属性をデフォルトのままにします。

  24. 「次へ」を2度クリックします。

  25. 「終了」をクリックします。

    パートナ・リンク・ウィンドウの全フィールドの値が自動的に入力されます。表示されるウィンドウは、次のような形式になります。

    フィールド
    名前 DBInsert
    WSDLファイル file:/c:/oraJDev/jdev/mywork/OrderBookapplication/FulFillOrder/writeDB.wsdl

    注意: このドライブ文字を含んだディレクトリ・パスは、Windowsオペレーティング・システムの場合の例です。このチュートリアルをUNIXオペレーティング・システム上で実行している場合、ディレクトリ・パスは異なります。 また、oraJDevは、この例でのOracle JDeveloperのホーム・ディレクトリを表します。

    パートナ・リンク・タイプ writeDB_plt
    パートナ・ロール writeDB_role
    マイ・ロール 何も指定しません。

  26. 「OK」をクリックします。

  27. 「ファイル」メイン・メニューから「保存」を選択します。

    writeDB.wsdl「FulFillOrder」「インテグレーション・コンテンツ」「writeDB」の下に表示されます。このファイルには、アダプタ構成ウィザードで指定したパラメータが含まれています。

10.2.4 Invokeアクティビティの作成

  1. 「receiveInput」Receiveアクティビティの下にInvokeアクティビティをドラッグ・アンド・ドロップします。

  2. InvokeアクティビティをダブルクリックしてInvokeウィンドウを表示します。

  3. 次の詳細を入力します。

    フィールド
    名前 writeDBrecord
    パートナ・リンク DBInsert

    「操作」フィールドには、値(merge)が自動的に入力されます。

  4. 「入力変数」フィールドの右側にある最初のアイコンをクリックします。これは変数自動作成アイコンです。

  5. 表示される変数の作成ウィンドウで「OK」をクリックします。

    writeDBrecord_merge_InputVariableという変数が、「入力変数」フィールドに自動作成されます。この変数は、OrdersCollection_msgというメッセージ・タイプに自動的に割り当てられます。

  6. 「OK」をクリックします。

  7. 「ファイル」メイン・メニューから「保存」を選択します。

10.2.5 Transformアクティビティおよびデータベース・レコード変換の作成


概要:

ここでは、変換ロジックを定義します。

  1. 「receiveInput」Receiveアクティビティの下にTransformアクティビティをドラッグ・アンド・ドロップします。

  2. TransformアクティビティをダブルクリックしてTransformウィンドウを表示します。

  3. 「一般」タブをクリックします。

  4. 「名前」フィールドにtransformDBRecordと入力します。

  5. 「トランスフォーメーション」タブをクリックします。

  6. 「ソース変数」フィールドで「inputVariable」「ソース・パート」フィールドで「payload」をそれぞれ選択します。

  7. 「ターゲット変数」フィールドでwriteDBrecord_merge_InputVariable「ターゲット・パート」フィールドでOrdersCollectionをそれぞれ選択します。

  8. 「マッパー・ファイル」フィールドは「Transformation_1」を選択したままにしておきます。

  9. 「マッパー・ファイル」フィールドの右側にある2番目のアイコン(「マッピングの作成」アイコン)をクリックします。

    create_mapping.gifの説明
    図create_mapping.gifの説明

    ソース要素とターゲット要素のグラフィカル・マッピングを可能にする変換用ウィンドウが表示されます。このウィンドウでは、ソース要素をターゲット要素にドラッグ(マップ)できます。ファイルがすでに存在するというメッセージが表示された場合は、3番目のアイコンをクリックして変換用ウィンドウにアクセスします。

  10. ソースおよびターゲット・スキーマ(両方のリスト内の上位要素)を右クリックし、「すべて開く」を選択します。

  11. 次のソース要素をターゲット要素にドラッグ・アンド・ドロップします。

    ソース ターゲット
    po:ID id
    po:SupplierName suppliername
    po:SupplierPrice supplierprice
    po:OrderDate orderdate
    po:OrderPrice orderprice
    po:OrderStatus orderstatus

  12. 「コンポーネント・パレット」セクションから「String Functions」を選択します。

  13. 変換用ウィンドウの中央にconcat関数をドラッグ・アンド・ドロップします。

  14. 「po:ShipTo」ソース・セクションに移動します。

  15. このセクションの「po:Name」サブ要素に移動します。

  16. 「po:First」および「po:Last」ソース・サブ要素をconcat関数にドラッグ・アンド・ドロップします。これにより、concat関数との間に2本のソース・ラインが引かれます。

  17. 「Orders」ターゲット・セクションに移動します。

  18. 「company」ターゲット・サブ要素をconcat関数にドラッグします。これにより、concat関数にターゲット・ラインが引かれ、ソース要素の姓と名が連結されて、ターゲット要素内に1つの名前として表示されます。

    obph9trans3.gifの説明
    図obph9trans3.gifの説明

  19. ターゲットの「Orderitems」を右クリックし、「XSLノードの追加」「for-each」の順に選択します。

    ターゲット・スキーマで、for-eachノードが「orderitemsCollection」「OrderItems」の間に表示されます。

    obph9trans4.gifの説明
    図obph9trans4.gifの説明

  20. ソースの「po:OrderItems:Item」for-eachノードにドラッグ・アンド・ドロップします。これで、1:M関係が確立されます。

  21. ソースの「po:OrderItems:Item」Orderitemsにドラッグ・アンド・ドロップします。

  22. マッピングの確認を求めるプロンプトが表示されたら、「OK」をクリックします。これにより、すべての一致するサブ要素間で自動マッピングが確立します。

    obph9trans6.gifの説明
    図obph9trans6.gifの説明

  23. 「ファイル」メイン・メニューから「保存」を選択します。

10.2.6 変換ロジックのテスト

  1. 変換マッピング用ウィンドウで右クリックし、「テスト」を選択します。

    XSLマップのテスト・ウィンドウが表示されます。

  2. 「ソースXMLファイルの生成」が選択されていることを確認します。

    これでサンプルのXMLテスト・ファイルが作成されます。

  3. その他のデフォルト設定をすべて使用し、「OK」をクリックします。

    サンプルのテスト結果が表示されます。 ソースXMLとターゲットXMLが並んでデータを表示し、その下にXSLのマップ・データが一緒に表示されます。 これがテスト結果のデフォルトのレイアウトです。

  4. 結果を確認します。

  5. 「ファイル」メイン・メニューから「保存」を選択します。

  6. 変換の詳細を保存するかどうかを尋ねるプロンプトが表示されたら「はい」をクリックします。

  7. Transformation_1-Source.xmlTransformation_1-Target.xmlおよびTransformation_1.xslファイルを、それぞれのタイトル・タブの「x」ボタンをクリックして閉じます。

    obph9trans7.gifの説明
    図obph9trans7.gifの説明

    Transformation_1.xslという名前の変換ファイルが、「アプリケーション・ナビゲータ」セクションの「POAcknowledge」「インテグレーション・コンテンツ」の下に表示されます。

10.2.7 FulFillOrderプロセスの検証、コンパイルおよびデプロイ

  1. 「アプリケーション・ナビゲータ」セクションに移動します。

  2. 「FulfillOrder」を右クリックします。

  3. 「デプロイ」my_integration_server_connection「defaultドメインにデプロイ」の順に選択します。

    これでBPELプロセスがコンパイルされます。 ウィンドウ下部のボタンをクリックしてエラーの有無を確認します。エラーが発生していなければ、デプロイは成功しています。 デプロイに失敗した場合は、手順4を参照してください。

10.2.8 FulFillOrderプロセスの実行

  1. 「スタート」「すべてのプログラム」「Oracle - Oracle_Home「Oracle BPEL Process Manager」「BPEL Control」の順に選択し、Oracle BPEL Controlにログインします(すでに開いている場合はページをリフレッシュします)。

  2. Oracle BPEL Controlにログインするために次の情報を入力して「ログイン」をクリックします。

    フィールド
    ユーザー名 oc4jadmin
    パスワード password

    passwordは、インストール時に入力した値です。

    Oracle BPEL Controlの「ダッシュボード」タブが表示されます。 作業中のBPELプロセスであるFulfillOrderが、「デプロイ済のBPELプロセス」リスト内に表示されます。必要に応じてリフレッシュします。

  3. FulfillOrderをクリックします。

  4. 次のいずれかの方法で情報を入力します。

    • 「HTMLフォーム」のすべてのフィールドに詳細を入力し、「XMLメッセージの転送」をクリックします。

    • 「XMLソース」ラジオ・ボタンをクリックします。テキスト・エディタを使用して、OrderBookingPO_1.xmlファイルのコンテンツを表示されるフィールド内にコピーし、貼り付けます。「XMLメッセージの転送」をクリックします。

  5. Oracle BPEL Controlをリフレッシュします。

  6. 画面上部の「インスタンス」タブをクリックします。

  7. FulfillOrderインスタンスをクリックします。

  8. 「監査」リンクをクリックして、変換ロジックおよびデータベース表に書き込まれた出力を確認します。

  9. アクティビティの詳細を表示するには、各シーケンスの「詳細」リンクをクリックします。(同様のインスタンス管理は、「フロー」リンクの下でグラフィカルに行うこともできます。)

10.2.9 プロセスの確認

  1. Oracle JDeveloperに戻ります。

  2. 「表示」メイン・メニューから「接続ナビゲータ」を選択します。

  3. 「データベース」を開きます。

  4. 「myConnection」を右クリックし、「SQLワークシート」を選択します。接続名が正しくない場合、接続名は右クリックできません。

  5. 手順4で入力したSQL文を右クリックし、「SQL文の実行」(例: SELECT * FROM system.orders;)を選択するか、または手動でSELECT * FROM orderitems WHERE ordid = 'your_order_number'と入力します。

    これにより、データベース表が適切に挿入されたかどうかが確認されます。

    obph9dbout.gifの説明
    図obph9dbout.gifの説明

10.2.10 Order Bookingプロセスの拡張

このフェーズでは、メインのOrderBookingプロセスを拡張し、新規作成したFulFillOrderプロセスを(定義済のWSDLファイルを使用して)データベース表に挿入するため、Webサービスとしてコールします。

この項では次のタスクを実行します。

10.2.10.1 受注フルフィルメント・パートナ・リンクの作成


概要:

ここでは、FulfillOrderサービス用のパートナ・リンクを作成します。

  1. 「アプリケーション・ナビゲータ」セクションのOrderBookingプロセスに移動します。

  2. 「OrderBooking.bpel」をダブルクリックします。

  3. 「コンポーネント・パレット」セクションから「Services」を選択します。

  4. 「コンポーネント・パレット」セクションからDesignerのウィンドウの右側にPartnerLinkアクティビティをドラッグ・アンド・ドロップします。

  5. 次の値を入力して、Order Bookingプロセス用パートナ・リンクを作成します。


    注意:

    次の「WSDLファイル」フィールドでは、懐中電灯(左から2番目にある「サービス・エクスプローラ」という名前のアイコン)をクリックしてサービス・エクスプローラ・ウィンドウにアクセスすると、FulFillOrderプロセスがサービスとして自動的に選択されます。

    フィールド
    名前 FulfillOrder
    WSDLファイル 「サービス・エクスプローラ」の懐中電灯アイコンをクリックし、BPELサービスmy_ integration_server_connection「プロセス」「デフォルト」→「FulfillOrder」の順に開いて選択することで次のURLにアクセスします。

    http://localhost:8888/orabpel/default/FulfillOrder/FulfillOrder?wsdl

    関連項目: サービス・エクスプローラ・ウィンドウでWSDLファイルを追加しようとして解析エラーが表示された場合は、「Oracle JDeveloperのWebブラウザ設定でのホスト名の設定」を参照してください。

    パートナ・リンク・タイプ FulfillOrder
    パートナ・ロール FulfillOrderProvider
    マイ・ロール FulfillOrderRequester

  6. 「OK」をクリックします。

  7. 「ファイル」メイン・メニューから「保存」を選択します。

10.2.10.2 Scopeアクティビティの作成


概要:

ここでは、Scopeアクティビティを作成して、実行する論理的な手順を形成するすべてのアクティビティをグループ化します。

  1. 「コンポーネント・パレット」セクションから「Process Activities」を選択します。

  2. 「コンポーネント・パレット」セクションから「SelectSupplier」Switchアクティビティの下にScopeアクティビティをドラッグ・アンド・ドロップします。

  3. scopeアイコンをダブルクリックして、Scopeウィンドウを表示します。

  4. 「一般」タブの「名前」フィールドにOrderFulFillmentと入力します。

  5. 「OK」をクリックします。

    このフェーズでは、このScopeアクティビティの中にInvokeReceiveおよびAssignアクティビティを作成します。

  6. +記号をクリックして、Scopeアクティビティを開きます。

  7. 「ファイル」メイン・メニューから「保存」を選択します。

10.2.10.3 InvokeおよびReceiveアクティビティの作成


概要:

ここでは、InvokeおよびReceiveアクティビティを作成します。

  1. 「コンポーネント・パレット」セクションから「OrderFulFillment」Scopeアクティビティの中にInvokeアクティビティをドラッグ・アンド・ドロップします。

  2. Invokeアイコンをダブルクリックして、Invokeウィンドウを表示します。

  3. 次の詳細を入力します。

    フィールド
    名前 invokeFulfillOrder
    パートナ・リンク FulfillOrder

    「操作」フィールドには、値(initiate)が自動的に入力されます。

  4. 「入力変数」フィールドの右側にある最初のアイコンをクリックします。これは変数自動作成アイコンです。

  5. 表示される変数の作成ウィンドウで「OK」をクリックします。

    invokeFulfillOrder_initiate_InputVariableという変数が、「入力変数」フィールドに自動作成されます。この変数は、FulfillOrderRequestMessageというメッセージ・タイプに自動的に割り当てられます。

  6. 「OK」をクリックします。

  7. 「コンポーネント・パレット」セクションから「OrderFulFillment」Scopeアクティビティの中の「invokeFulfillOrder」Invokeアクティビティの下にReceiveアクティビティをドラッグ・アンド・ドロップします。

  8. Receiveアイコンをダブルクリックして、Receiveウィンドウを表示します。

  9. 次の詳細を入力します。

    フィールド
    名前 receiveFulfillOrder
    パートナ・リンク FulfillOrder

    「操作」フィールドには、値(onResult)が自動的に入力されます。

  10. 「変数」フィールドの右側にある最初のアイコンをクリックします。これは変数自動作成アイコンです。

  11. 表示される変数の作成ウィンドウで「OK」をクリックします。

    receiveFulfillOrder_onResult_InputVariableという変数が、「変数」フィールドに自動作成されます。この変数は、FulfillOrderResponseMessageというメッセージ・タイプに自動的に割り当てられます。

  12. 「OK」をクリックします。

  13. 「ファイル」メイン・メニューから「保存」を選択します。

10.2.10.4 第1のAssignアクティビティの作成

  1. 「コンポーネント・パレット」セクションから「OrderFulFillment」Scopeアクティビティの中の「invokeFulfillOrder」Invokeアクティビティの上にAssignアクティビティをドラッグ・アンド・ドロップします。

  2. assignアイコンをダブルクリックして、割当てウィンドウを表示します。

  3. 「一般」タブをクリックします。

  4. 「名前」フィールドにassignDBInと入力します。

  5. 「適用」をクリックします。

  6. 「コピー操作」タブをクリックします。

  7. 「作成」をクリックし「コピー操作」を選択して、コピー操作の作成ウィンドウを表示します。

  8. 次の詳細を入力します。

    フィールド
    送信元
    • タイプ
    変数
    • 変数
    「変数」「inputVariable」「ペイロード」の順に開いて選択します。
    宛先
    • タイプ
    変数
    • 変数
    「変数」「invokeFulFillOrder_initiate_InputVariable」「ペイロード」の順に開いて選択します。

  9. 「OK」をクリックして、コピー操作の作成ウィンドウおよび割当てウィンドウを閉じます。

  10. 「ファイル」メイン・メニューから「保存」を選択します。

10.2.10.5 第2のAssignアクティビティの作成

  1. 「コンポーネント・パレット」セクションから「OrderFulFillment」Scopeアクティビティの中の「receiveFulfillOrder」Receiveアクティビティの下にAssignアクティビティをドラッグ・アンド・ドロップします。

  2. assignアイコンをダブルクリックして、割当てウィンドウを表示します。

  3. 「一般」タブをクリックします。

  4. 「名前」フィールドにassignDBWriteCommentsと入力します。

  5. 「適用」をクリックします。

  6. 「コピー操作」タブをクリックします。

  7. 「作成」をクリックし「コピー操作」を選択して、コピー操作の作成ウィンドウを表示します。

  8. 次の詳細を入力します。


    注意:

    式を手動で入力するかわりに、「式」フィールドで[Ctrl]キーを押しながら[Space]バーを押して入力することもできます。表示される値のリストをスクロールし、該当する値をダブルクリックします。必要に応じて値を編集します。情報を入力すると、末尾にスラッシュが表示される場合があります。これは、追加情報の入力が求められていることを意味します。追加情報を入力するか、[Esc]キーを押して末尾のスラッシュを削除し、情報の入力を終了します。

    フィールド
    送信元
    • タイプ
    concat(bpws:getVariableData('inputVariable','payload','/ns1:PurchaseOrder/ns1:OrderInfo/ns1:OrderComments'), ' - Order FulFillment Complete')
    宛先
    • タイプ
    変数
    • 変数
    「変数」「inputVariable」「ペイロード」「ns1:PurchaseOrder」「ns1:OrderInfo」「ns1:OrderComments」の順に開いて選択します。

  9. 「OK」をクリックして、コピー操作の作成ウィンドウおよび割当てウィンドウを閉じます。

    完了後、Designerのウィンドウには次のように表示されます。

    obph9.gifの説明
    図obph9.gifの説明

  10. -記号をクリックして、「OrderFulfillment」Scopeアクティビティを閉じます。

  11. 「ファイル」メイン・メニューから「保存」を選択します。

10.2.10.6 データベース例外処理の追加


概要:

ローカル変数を作成し、Scopeアクティビティ内に「writeDBRecord」Invokeアクティビティを配置して、FulFillOrderプロセスでデータベースの例外処理タスクを実行します。ローカル変数は、false(0)に設定します。ローカル変数が満たされる(1になる)まで、Whileループで外部のパートナ・サービスをコールします。Whileアクティビティは、最大5回ループを実行するよう設定されています。例外が発生した場合は、フラグをfalse(0)にリセットします。

  1. FulFillOrderプロセスが選択されていることを確認してください。 このプロセスを選択していない場合は、Designerウィンドウの「アプリケーション・ナビゲータ」セクションで「FulFillOrder.bpel」をダブルクリックします。

  2. 「コンポーネント・パレット」セクションから「transformDBRecord」Transformアクティビティの下にScopeアクティビティをドラッグ・アンド・ドロップします。

  3. Scopeアイコンをダブルクリックして、Scopeウィンドウを表示します。

  4. 「一般」タブの「名前」フィールドにdb_write_scopeと入力します。

  5. 「OK」をクリックします。

  6. +記号をクリックして、Scopeアクティビティを開きます。

  7. 「writeDBrecord」Invokeアクティビティを「db_write_scope」Scopeアクティビティ内にドラッグ・アンド・ドロップします。

  8. db_write_scopeの左側のアイコンから「CatchAllブランチの追加」をクリックします。

    obph9catchall.gifの説明
    図obph9catchall.gifの説明

  9. +記号をクリックして、新しいブランチを開きます。

    「アクティビティをここにドロップ」と書かれた、アスタリスクつきの新しいボックスが右側に表示されます。

  10. 「構造」セクションで、「変数」「プロセス」「変数」の順に選択します。

  11. 「変数」を右クリックし、「作成 変数」を選択します。

  12. 「名前」フィールドにdbStatusと入力します。

  13. 「単純型」を選択し、「単純型」の右側にある懐中電灯のアイコンをクリックします。

  14. 「int」を選択します。

  15. 「OK」をクリックしてタイプの選択ウィンドウおよび変数の作成ウィンドウを閉じます。

  16. 「コンポーネント・パレット」セクションから「db_write_scope」Scopeアクティビティの上にAssignアクティビティをドラッグ・アンド・ドロップします。

  17. Assignアイコンをダブルクリックして、割当てウィンドウを表示します。

  18. 「一般」タブをクリックします。

  19. 「名前」フィールドにassign_db_0と入力します。

  20. 「適用」をクリックします。

  21. 「コピー操作」タブをクリックします。

  22. 「作成」をクリックし「コピー操作」を選択して、コピー操作の作成ウィンドウを表示します。

  23. 次の詳細を入力します。

    フィールド
    送信元
    • タイプ
    '0'
    宛先
    • タイプ
    変数
    • 変数
    「変数」「dbStatus」の順に開いて選択します。

  24. 「OK」をクリックして、コピー操作の作成ウィンドウおよび割当てウィンドウを閉じます。

  25. 「コンポーネント・パレット」セクションから「db_write_scope」Scopeアクティビティの中の「writeDBrecord」Invokeアクティビティの下に別のAssignアクティビティをドラッグ・アンド・ドロップします。

  26. Assignアイコンをダブルクリックして、割当てウィンドウを表示します。

  27. 「一般」タブをクリックします。

  28. 「名前」フィールドにassign_db_1と入力します。

  29. 「適用」をクリックします。

  30. 「コピー操作」タブをクリックします。

  31. 「作成」をクリックし「コピー操作」を選択して、コピー操作の作成ウィンドウを表示します。

  32. 次の詳細を入力します。

    フィールド
    送信元
    • タイプ
    '10'
    宛先
    • タイプ
    変数
    • 変数
    「変数」「dbStatus」の順に開いて選択します。

  33. 「OK」をクリックして、コピー操作の作成ウィンドウおよび割当てウィンドウを閉じます。

  34. 「コンポーネント・パレット」セクションから「db_write_scope」Scopeアクティビティの右側の「Catch All」ブランチに第3のAssignアクティビティをドラッグ・アンド・ドロップします。

  35. Assignアイコンをダブルクリックして、割当てウィンドウを表示します。

  36. 「一般」タブの「名前」フィールドにassign_db_errorと入力します。

  37. 「適用」をクリックします。

  38. 「コピー操作」タブをクリックします。

  39. 「作成」をクリックし「コピー操作」を選択して、コピー操作の作成ウィンドウを表示します。

  40. 次の詳細を入力します。

    フィールド
    送信元
    • タイプ
    bpws:getVariableData('dbStatus') + 1
    宛先
    • タイプ
    変数
    • 変数
    「変数」「dbStatus」の順に開いて選択します。

  41. 「OK」をクリックして、コピー操作の作成ウィンドウおよび割当てウィンドウを閉じます。

  42. 「コンポーネント・パレット」セクションから「assign_db_error」Assignアクティビティの下の「Catch」ブランチにWaitアクティビティをドラッグ・アンド・ドロップします。

  43. WaitアクティビティをダブルクリックしてWaitウィンドウを表示します。

  44. 「名前」フィールドにwaitDBと入力します。

  45. 「HH:mm:ss」フィールドの値を30秒に設定します。これにより、このブロックは、FulFillOrderプロセスが成功する(dbStatus1になる)まで30秒間隔で再試行が行われます。

  46. 「OK」をクリックします。

  47. 「コンポーネント・パレット」セクションから「db_write_scope」Scopeアクティビティのすぐ上にWhileアクティビティをドラッグ・アンド・ドロップします。

    Designerのウィンドウには次のように表示されます。

    obph9except.gifの説明
    図obph9except.gifの説明

  48. -記号をクリックして、「db_write_scopeScopeアクティビティを閉じます。

  49. Whileアクティビティを開きます。

  50. 「db_write_scope」ScopeアクティビティをWhileアクティビティの中にドラッグします。

  51. Whileアクティビティをダブルクリックし、[Ctrl]キーを押しながら[Space]バーを押して「式」フィールドに次の値を入力します。

    bpws:getVariableData('dbStatus') < 5
    
    
  52. 「OK」をクリックします。

  53. 「ファイル」メイン・メニューから「保存」を選択します。

10.2.10.7 OrderBookingプロセスの検証、コンパイルおよびデプロイ

  1. 「アプリケーション・ナビゲータ」セクションに移動します。

  2. 「OrderBooking」を右クリックします。

  3. 「デプロイ」my_integration_server_connection「defaultドメインにデプロイ」の順に選択します。

  4. 要求に応じてプロジェクトのバージョン番号を増やし(たとえば、1.6と入力)、「OK」をクリックします。

    これでBPELプロセスがコンパイルされます。 ウィンドウ下部のボタンをクリックしてエラーの有無を確認します。エラーが発生していなければ、デプロイは成功しています。 デプロイに失敗した場合は、手順4を参照してください。

10.2.10.8 Order Bookingプロセスの実行

  1. 「スタート」「すべてのプログラム」「Oracle - Oracle_Home「Oracle BPEL Process Manager」「BPEL Control」の順に選択し、Oracle BPEL Controlにログインします(すでに開いている場合はページをリフレッシュします)。

  2. Oracle BPEL Controlにログインするために次の情報を入力して「ログイン」をクリックします。

    フィールド
    ユーザー名 oc4jadmin
    パスワード password

    Oracle BPEL Controlの「ダッシュボード」タブが表示されます。作業中のBPELプロセスであるOrderBookingが、「デプロイ済のBPELプロセス」リスト内に表示されます。

  3. 「BPELプロセス」タブをクリックします。

  4. バージョン番号の隣にアスタリスクが表示されているOrderBookingのバージョンを確認します。これがデフォルトのバージョンです。

  5. OrderBookingプロセスの最新のバージョン番号をクリックします。これまでの章で説明どおりにバージョン番号を増分している場合、これが最大の数値です。

    このBPELプロセスを管理中ウィンドウが表示されます。

  6. 下にスクロールし、「デフォルトとしてマーク」をクリックして、これをOrderBookingのデフォルトのバージョンに指定します。

  7. プロンプトが表示されたら「終了」をクリックします。このOrderBookingのバージョン番号の横にアスタリスクが表示され、デフォルトのバージョンであることが示されます。

  8. 「ダッシュボード」タブをクリックします。

  9. 次のいずれかの方法で、適切なOrderBookingバージョンのインスタンスを起動します。

    • 「デプロイ済のBPELプロセス」リストでOrderBookingをクリックします。

      • 「HTMLフォーム」のすべてのフィールドに詳細を入力し、「XMLメッセージの転送」をクリックします。

        または

      • 「XMLソース」ラジオ・ボタンをクリックします。テキスト・エディタを使用して、OrderBookingPO_1.xmlファイルの内容をコピーし、表示されるフィールドに貼り付けます。「XMLメッセージの転送」をクリックします。


        注意:

        Internet ExplorerまたはMozilla Firefoxからコピーして貼り付けないでください。このタスクは、テキスト・エディタを使用して実行する必要があります。

    • オプションで、OrderBookingPO_1.xmlファイルをtempディレクトリにコピーしてプロセス・インスタンスを呼び出します(これは、第8章「ファイル・アダプタの読取り機能の使用」が完了していることが前提です)。

  10. 手順11で説明したグラフィカル・ユーザー・インタフェースJSPページを使用して、SelectManufacturingの手動価格見積りタスクを完了します。

  11. Oracle BPEL Controlに戻ります。

  12. Oracle BPEL Controlをリフレッシュします。

  13. 画面上部の「インスタンス」タブをクリックします。

  14. OrderBookingインスタンスをクリックします。

  15. 「監査」リンクをクリックして、変換ロジックおよび指定した一時ディレクトリ(Windowsオペレーティング・システムの場合はdrive_letter:\temp、UNIXオペレーティング・システムの場合は/temp)に書き込まれた出力ファイルを確認します。

  16. アクティビティの詳細を表示するには、各シーケンスの「詳細」リンクをクリックします。(同様のインスタンス管理は、「フロー」リンクの下でグラフィカルに行うこともできます。)

  17. tempディレクトリのコンテンツを確認します。po_timestamp.xmlという名前の出力ファイルが作成されます。属性を確認します(姓と名の連結など)。

  18. Oracle JDeveloperの「表示」メイン・メニューから「接続ナビゲータ」を選択します。

  19. 「データベース」を開きます。

  20. 「myConnection」を右クリックし、「SQLワークシート」を選択します。

  21. SELECT * FROM system.orderitems;という文を入力し、「SQL文の実行」を右クリックして選択して、注文がデータベース内に存在しているかどうか確認します。

    obph9dbitems.gifの説明
    図obph9dbitems.gifの説明

10.3 まとめ

データベース・アダプタを使用して、データを1対多(1:M)マスター/ディテール関係でデータベース表にコミットしました。次の主要タスクを実行しました。