この章では、データベース・アダプタを使用して、データを1対多(1:M)マスター/ディテール関係でデータベース表にコミットする方法について説明します。
この章の内容は次のとおりです。
チュートリアルのこのフェーズでは、第9章「ファイル・アダプタの書込み機能の使用」で設計したプロセスに処理を追加します。このフェーズを実行する前に、前のフェーズが正常に完了したことを確認してください。この章では、データベース・アダプタを使用して、データを1対多(1:M)マスター/ディテール関係でデータベース表にコミットする方法について説明します。次の主要タスクを実行します。
FulfillOrderという名前のBPELプロセスを新規作成します。
データベース接続を構成し、サンプルのデータベース表を作成します。
DBInsertという名前のデータベース・アダプタを使用するパートナ・リンクを作成し、データベース表にデータを1対多関係でコミットします。
DBInsertを呼び出すBPELプロセスを設計します。
データベース・アダプタに必要な変換ロジックを追加するBPELプロセスを設計します。
OrderBooking BPELプロセスに戻り、FulfillOrderと相互作用するFulfillOrderという名前のパートナ・リンクを作成します。
FulfillOrderを呼び出すBPELプロセスを設計します。
フォルト処理および例外管理を追加します。
OrderBooking BPELプロセスをデプロイします。
Oracle BPEL ControlからOrderBookingを実行して、データを受信し、データベースに送信します。
この項では次のタスクを実行します。
Oracle JDeveloperから、次の手順に従って受注フルフィルメント・プロセスを作成してスキーマをインポートします。
「OrderBookapplication」を右クリックして「新規プロジェクト」を選択します。
「カテゴリ」の下で、「General」を開いて「Projects」をクリックします。
「項目」の下で、「BPELプロセス・プロジェクト」をクリックして「OK」をクリックします。
BPELプロジェクト作成ウィザード - プロジェクトの設定ウィンドウで、次の詳細を入力して「次へ」をクリックします。
| フィールド | 値 |
|---|---|
| 名前 | FulfillOrder |
| ネームスペース | デフォルト・パスを使用します。 |
| デフォルトのプロジェクト設定を使用 | BPELプロセスとBPELプロジェクトに同じ名前を使用し、デフォルトのプロジェクト・ディレクトリを使用するために、選択した状態にしておきます。 |
| テンプレート | 非同期BPELプロセス |
bpel.xml、FulfillOrder.bpelおよびFulfillOrder.wsdlファイルが作成されます。
「入力スキーマ要素」フィールドの右側にある懐中電灯アイコンをクリックします。
スキーマの選択ウィンドウで、SOA_Oracle_Home\bpel\samples\tutorials\127.OrderBookingTutorial\PracticeFilesディレクトリからOrderBookingPO.xsdを選択し、「開く」をクリックします。
タイプの選択ウィンドウが表示されます。
「インポートしたスキーマ」→「OrderBookingPO.xsd」→「PurchaseOrder」の順に開いて選択します。
「OK」をクリックします。
OrderBookingRequestMessageメッセージ・タイプに、入力メッセージ・パート名のpayloadとメッセージ・パート要素のPurchaseOrderが自動的に割り当てられます。
「出力スキーマ要素」フィールドの右側にある懐中電灯アイコンをクリックします。
タイプの選択ウィンドウが表示されます。
「インポートしたスキーマ」→「OrderBookingPO.xsd」→「Purchase Order」の順に開いて選択します。
「OK」をクリックします。
OrderBookingResponseMessage メッセージ・タイプに、出力メッセージ・パート名のpayloadとメッセージ・パート要素のPurchaseOrderが自動的に割り当てられます。
「終了」をクリックします。
これで、GlobalCompanyスキーマがプロジェクトにインポートされます。このスキーマでは、送信する注文の構造を定義します。
次のファイルがOracle JDeveloperの「アプリケーション・ナビゲータ」セクションに表示されます。
bpel.xml、FulfillOrder.bpelおよびFulfillOrder.wsdlファイルが、「FulfillOrder」→「インテグレーション・コンテンツ」の下に表示されます。
OrderBookingPO.xsdファイルが、「FulfillOrder」→「インテグレーション・コンテンツ」→「スキーマ」の下に表示されます。
OrderBooking.bpelをダブルクリックして、ウィンドウの左下に「構造」セクションを表示します。
|
注意: 「構造」セクションを表示するには、「ダイアグラム」タブを有効にする必要があります。 |
「ファイル」メイン・メニューから「保存」を選択します。
|
概要: ここでは、Oracle BPEL Process Managerとともにインストールされたデータベース・インスタンスに接続するように、Oracle JDeveloperおよびOracle BPEL Serverを構成します。 |
ここでは、データベース接続およびデータベース・サンプル表を作成する必要があります。
この項では次のタスクを実行します。
「表示」メイン・メニューから「接続ナビゲータ」を選択します。
「接続 - ナビゲータ」ウィンドウで「データベース」を右クリックし、「データベース接続の作成」を選択します。
これにより、データベース接続の作成ウィザードが起動します。
ようこそウィンドウで「次へ」をクリックします。
接続名フィールドで、myConnectionと入力します。
「接続タイプ」リストから「サード・パーティJDBCドライバ」を選択し、「次へ」をクリックします。
認証ウィンドウの「ユーザー名」フィールドにsystemと入力します。
「パスワード」フィールドにmanagerと入力します。
他のフィールドはそのままで、「次へ」をクリックします。
接続ウィンドウで「ドライバ・クラス」フィールドの右側の「新規」をクリックします。
JDBCドライバの登録ウィンドウが表示されます。
「ドライバ・クラス」フィールドにoracle.lite.poljdbc.POLJDBCDriverと入力します。このエントリの最後に空白がないか確認してください。
「ライブラリ」フィールドの右側の「参照」をクリックします。
ライブラリの選択ウィンドウが表示されます。
「新規」をクリックします。
ライブラリの作成ウィンドウが表示されます。
「エントリの追加」をクリックします。
パス・エントリの選択ウィンドウが表示されます。
SOA_Oracle_Home/bpel/lib/olite40.jarに移動します。
「選択」をクリックします。
「OK」をクリックして、ライブラリの選択ウィンドウおよびJDBCドライバの登録ウィンドウを閉じます。
接続ウィンドウの「URL」フィールドにjdbc:polite4@localhost:1531:orabpelと入力します。
「次へ」をクリックします。
テスト・ウィンドウで「接続のテスト」をクリックします。
接続に成功すると、次のメッセージが表示されます。
Success!
「終了」をクリックします。
Oracle BPEL Serverが実行中であることを確認します。
「スタート」→「すべてのプログラム」→「Oracle - Oracle_Home」→「Oracle BPEL Process Manager」→Developer Promptの順に選択してオペレーティング・システムのコマンド・プロンプトを起動します。
tutorials\127.OrderBookingTutorialディレクトリに移動します。
cd tutorials\127.OrderBookingTutorial
polsql.cmd @PracticeFiles\insertTable.sql
表が作成され、デフォルトのOracle Liteインスタンスにサンプル行が挿入されたことを示すメッセージが表示されます。
「表示」メイン・メニューから「接続ナビゲータ」を選択します。
「データベース」を開きます。
「myConnection」を右クリックし、「SQLワークシート」を選択します。
「SQL文の入力」フィールドにSELECT * FROM system.orders;と入力します。
この文を右クリックし、「SQL文の実行」を選択します。
作成されたデータを含むサンプル表が「結果」フィールドに表示されます。
「表示」メイン・メニューから「アプリケーション・ナビゲータ」を選択します。
FulFillOrder.bpelをダブルクリックします。
Designerのウィンドウの右側に、PartnerLinkアクティビティをドラッグ・アンド・ドロップします。
「名前」フィールドにDBInsertと入力します。
上にある3番目のアイコン(「アダプタ・サービスの定義」アイコン)をクリックします。これにより、アダプタ構成ウィザードが起動します。
ようこそウィンドウで「次へ」をクリックします。
サービス名ウィンドウの「サービス名」フィールドにwriteDBと入力し、「次へ」をクリックします。
このリストから、「データベース接続およびサンプル表の作成」で作成したmyConnectionデータベース接続設定を選択します。
「データベース・サーバーのJNDI名」フィールドにeis/DB/BPELSamplesと入力します。この名前では、大/小文字が区別されます。接続名と大/小文字が正しく一致していることを確認してください。
「次へ」をクリックします。
「表に対して操作を実行」を選択します。
「削除」の選択を解除します。
「次へ」をクリックします。
「表のインポート」をクリックします。
「問合せ」をクリックします。
ORDERSおよびORDERITEMSを選択します。
「>」をクリックして両方の表を「選択」フィールドに移動します。
「OK」をクリックします。ウィザードの表の選択ウィンドウに戻ります。
SYSTEM.ORDERSを選択し、「次へ」をクリックします。
関係の定義が自動的に1:Mとして作成および表示されます。
「ORDERITEMS (orders)とORDERSのリレーションシップは1対1」を選択し、「リレーションシップの削除」をクリックします。これにより、「ORDERS(orderitemsCollection)とORDERITEMSのリレーションシップは1対多」のみが表示されます。
「次へ」をクリックします。
ページで問合せから属性が返されるようにするには、すべての属性をデフォルトのままにします。
「次へ」を2度クリックします。
「終了」をクリックします。
パートナ・リンク・ウィンドウの全フィールドの値が自動的に入力されます。表示されるウィンドウは、次のような形式になります。
| フィールド | 値 |
|---|---|
| 名前 | DBInsert |
| WSDLファイル | file:/c:/oraJDev/jdev/mywork/OrderBookapplication/FulFillOrder/writeDB.wsdl
注意: このドライブ文字を含んだディレクトリ・パスは、Windowsオペレーティング・システムの場合の例です。このチュートリアルをUNIXオペレーティング・システム上で実行している場合、ディレクトリ・パスは異なります。 また、oraJDevは、この例でのOracle JDeveloperのホーム・ディレクトリを表します。 |
| パートナ・リンク・タイプ | writeDB_plt |
| パートナ・ロール | writeDB_role |
| マイ・ロール | 何も指定しません。 |
「OK」をクリックします。
「ファイル」メイン・メニューから「保存」を選択します。
writeDB.wsdlが「FulFillOrder」→「インテグレーション・コンテンツ」→「writeDB」の下に表示されます。このファイルには、アダプタ構成ウィザードで指定したパラメータが含まれています。
「receiveInput」Receiveアクティビティの下にInvokeアクティビティをドラッグ・アンド・ドロップします。
InvokeアクティビティをダブルクリックしてInvokeウィンドウを表示します。
次の詳細を入力します。
| フィールド | 値 |
|---|---|
| 名前 | writeDBrecord |
| パートナ・リンク | DBInsert |
「操作」フィールドには、値(merge)が自動的に入力されます。
表示される変数の作成ウィンドウで「OK」をクリックします。
writeDBrecord_merge_InputVariableという変数が、「入力変数」フィールドに自動作成されます。この変数は、OrdersCollection_msgというメッセージ・タイプに自動的に割り当てられます。
「OK」をクリックします。
「ファイル」メイン・メニューから「保存」を選択します。
|
概要: ここでは、変換ロジックを定義します。 |
「receiveInput」Receiveアクティビティの下にTransformアクティビティをドラッグ・アンド・ドロップします。
TransformアクティビティをダブルクリックしてTransformウィンドウを表示します。
「一般」タブをクリックします。
「名前」フィールドにtransformDBRecordと入力します。
「トランスフォーメーション」タブをクリックします。
「ソース変数」フィールドで「inputVariable」、「ソース・パート」フィールドで「payload」をそれぞれ選択します。
「ターゲット変数」フィールドでwriteDBrecord_merge_InputVariable、「ターゲット・パート」フィールドでOrdersCollectionをそれぞれ選択します。
「マッパー・ファイル」フィールドの右側にある2番目のアイコン(「マッピングの作成」アイコン)をクリックします。
ソース要素とターゲット要素のグラフィカル・マッピングを可能にする変換用ウィンドウが表示されます。このウィンドウでは、ソース要素をターゲット要素にドラッグ(マップ)できます。ファイルがすでに存在するというメッセージが表示された場合は、3番目のアイコンをクリックして変換用ウィンドウにアクセスします。
ソースおよびターゲット・スキーマ(両方のリスト内の上位要素)を右クリックし、「すべて開く」を選択します。
次のソース要素をターゲット要素にドラッグ・アンド・ドロップします。
| ソース | ターゲット |
|---|---|
| po:ID | id |
| po:SupplierName | suppliername |
| po:SupplierPrice | supplierprice |
| po:OrderDate | orderdate |
| po:OrderPrice | orderprice |
| po:OrderStatus | orderstatus |
「コンポーネント・パレット」セクションから「String Functions」を選択します。
変換用ウィンドウの中央にconcat関数をドラッグ・アンド・ドロップします。
「po:ShipTo」ソース・セクションに移動します。
このセクションの「po:Name」サブ要素に移動します。
「po:First」および「po:Last」ソース・サブ要素をconcat関数にドラッグ・アンド・ドロップします。これにより、concat関数との間に2本のソース・ラインが引かれます。
「Orders」ターゲット・セクションに移動します。
「company」ターゲット・サブ要素をconcat関数にドラッグします。これにより、concat関数にターゲット・ラインが引かれ、ソース要素の姓と名が連結されて、ターゲット要素内に1つの名前として表示されます。
ターゲットの「Orderitems」を右クリックし、「XSLノードの追加」→「for-each」の順に選択します。
ターゲット・スキーマで、for-eachノードが「orderitemsCollection」と「OrderItems」の間に表示されます。
ソースの「po:OrderItems:Item」をfor-eachノードにドラッグ・アンド・ドロップします。これで、1:M関係が確立されます。
ソースの「po:OrderItems:Item」をOrderitemsにドラッグ・アンド・ドロップします。
マッピングの確認を求めるプロンプトが表示されたら、「OK」をクリックします。これにより、すべての一致するサブ要素間で自動マッピングが確立します。
「ファイル」メイン・メニューから「保存」を選択します。
変換マッピング用ウィンドウで右クリックし、「テスト」を選択します。
XSLマップのテスト・ウィンドウが表示されます。
「ソースXMLファイルの生成」が選択されていることを確認します。
これでサンプルのXMLテスト・ファイルが作成されます。
その他のデフォルト設定をすべて使用し、「OK」をクリックします。
サンプルのテスト結果が表示されます。 ソースXMLとターゲットXMLが並んでデータを表示し、その下にXSLのマップ・データが一緒に表示されます。 これがテスト結果のデフォルトのレイアウトです。
結果を確認します。
「ファイル」メイン・メニューから「保存」を選択します。
変換の詳細を保存するかどうかを尋ねるプロンプトが表示されたら「はい」をクリックします。
Transformation_1-Source.xml、Transformation_1-Target.xmlおよびTransformation_1.xslファイルを、それぞれのタイトル・タブの「x」ボタンをクリックして閉じます。
Transformation_1.xslという名前の変換ファイルが、「アプリケーション・ナビゲータ」セクションの「POAcknowledge」→「インテグレーション・コンテンツ」の下に表示されます。
「アプリケーション・ナビゲータ」セクションに移動します。
「FulfillOrder」を右クリックします。
「デプロイ」→「my_integration_server_connection」→「defaultドメインにデプロイ」の順に選択します。
これでBPELプロセスがコンパイルされます。 ウィンドウ下部のボタンをクリックしてエラーの有無を確認します。エラーが発生していなければ、デプロイは成功しています。 デプロイに失敗した場合は、手順4を参照してください。
「スタート」→「すべてのプログラム」→「Oracle - Oracle_Home」→「Oracle BPEL Process Manager」→「BPEL Control」の順に選択し、Oracle BPEL Controlにログインします(すでに開いている場合はページをリフレッシュします)。
Oracle BPEL Controlにログインするために次の情報を入力して「ログイン」をクリックします。
| フィールド | 値 |
|---|---|
| ユーザー名 | oc4jadmin
|
| パスワード | password
|
passwordは、インストール時に入力した値です。
Oracle BPEL Controlの「ダッシュボード」タブが表示されます。 作業中のBPELプロセスであるFulfillOrderが、「デプロイ済のBPELプロセス」リスト内に表示されます。必要に応じてリフレッシュします。
FulfillOrderをクリックします。
次のいずれかの方法で情報を入力します。
「HTMLフォーム」のすべてのフィールドに詳細を入力し、「XMLメッセージの転送」をクリックします。
「XMLソース」ラジオ・ボタンをクリックします。テキスト・エディタを使用して、OrderBookingPO_1.xmlファイルのコンテンツを表示されるフィールド内にコピーし、貼り付けます。「XMLメッセージの転送」をクリックします。
Oracle BPEL Controlをリフレッシュします。
画面上部の「インスタンス」タブをクリックします。
FulfillOrderインスタンスをクリックします。
アクティビティの詳細を表示するには、各シーケンスの「詳細」リンクをクリックします。(同様のインスタンス管理は、「フロー」リンクの下でグラフィカルに行うこともできます。)
Oracle JDeveloperに戻ります。
「表示」メイン・メニューから「接続ナビゲータ」を選択します。
「データベース」を開きます。
「myConnection」を右クリックし、「SQLワークシート」を選択します。接続名が正しくない場合、接続名は右クリックできません。
手順4で入力したSQL文を右クリックし、「SQL文の実行」(例: SELECT * FROM system.orders;)を選択するか、または手動でSELECT * FROM orderitems WHERE ordid = 'your_order_number'と入力します。
これにより、データベース表が適切に挿入されたかどうかが確認されます。
このフェーズでは、メインのOrderBookingプロセスを拡張し、新規作成したFulFillOrderプロセスを(定義済のWSDLファイルを使用して)データベース表に挿入するため、Webサービスとしてコールします。
この項では次のタスクを実行します。
|
概要: ここでは、FulfillOrderサービス用のパートナ・リンクを作成します。 |
「アプリケーション・ナビゲータ」セクションのOrderBookingプロセスに移動します。
「OrderBooking.bpel」をダブルクリックします。
「コンポーネント・パレット」セクションから「Services」を選択します。
「コンポーネント・パレット」セクションからDesignerのウィンドウの右側にPartnerLinkアクティビティをドラッグ・アンド・ドロップします。
次の値を入力して、Order Bookingプロセス用パートナ・リンクを作成します。
| フィールド | 値 |
|---|---|
| 名前 | FulfillOrder |
| WSDLファイル | 「サービス・エクスプローラ」の懐中電灯アイコンをクリックし、BPELサービス→「my_ integration_server_connection」→「プロセス」→「デフォルト」→「FulfillOrder」の順に開いて選択することで次のURLにアクセスします。
http://localhost:8888/orabpel/default/FulfillOrder/FulfillOrder?wsdl 関連項目: サービス・エクスプローラ・ウィンドウでWSDLファイルを追加しようとして解析エラーが表示された場合は、「Oracle JDeveloperのWebブラウザ設定でのホスト名の設定」を参照してください。 |
| パートナ・リンク・タイプ | FulfillOrder |
| パートナ・ロール | FulfillOrderProvider |
| マイ・ロール | FulfillOrderRequester |
「OK」をクリックします。
「ファイル」メイン・メニューから「保存」を選択します。
|
概要: ここでは、Scopeアクティビティを作成して、実行する論理的な手順を形成するすべてのアクティビティをグループ化します。 |
「コンポーネント・パレット」セクションから「Process Activities」を選択します。
「コンポーネント・パレット」セクションから「SelectSupplier」Switchアクティビティの下にScopeアクティビティをドラッグ・アンド・ドロップします。
scopeアイコンをダブルクリックして、Scopeウィンドウを表示します。
「一般」タブの「名前」フィールドにOrderFulFillmentと入力します。
「OK」をクリックします。
このフェーズでは、このScopeアクティビティの中にInvoke、ReceiveおよびAssignアクティビティを作成します。
+記号をクリックして、Scopeアクティビティを開きます。
「ファイル」メイン・メニューから「保存」を選択します。
|
概要: ここでは、InvokeおよびReceiveアクティビティを作成します。 |
「コンポーネント・パレット」セクションから「OrderFulFillment」Scopeアクティビティの中にInvokeアクティビティをドラッグ・アンド・ドロップします。
Invokeアイコンをダブルクリックして、Invokeウィンドウを表示します。
次の詳細を入力します。
| フィールド | 値 |
|---|---|
| 名前 | invokeFulfillOrder |
| パートナ・リンク | FulfillOrder |
「操作」フィールドには、値(initiate)が自動的に入力されます。
表示される変数の作成ウィンドウで「OK」をクリックします。
invokeFulfillOrder_initiate_InputVariableという変数が、「入力変数」フィールドに自動作成されます。この変数は、FulfillOrderRequestMessageというメッセージ・タイプに自動的に割り当てられます。
「OK」をクリックします。
「コンポーネント・パレット」セクションから「OrderFulFillment」Scopeアクティビティの中の「invokeFulfillOrder」Invokeアクティビティの下にReceiveアクティビティをドラッグ・アンド・ドロップします。
Receiveアイコンをダブルクリックして、Receiveウィンドウを表示します。
次の詳細を入力します。
| フィールド | 値 |
|---|---|
| 名前 | receiveFulfillOrder |
| パートナ・リンク | FulfillOrder |
「操作」フィールドには、値(onResult)が自動的に入力されます。
表示される変数の作成ウィンドウで「OK」をクリックします。
receiveFulfillOrder_onResult_InputVariableという変数が、「変数」フィールドに自動作成されます。この変数は、FulfillOrderResponseMessageというメッセージ・タイプに自動的に割り当てられます。
「OK」をクリックします。
「ファイル」メイン・メニューから「保存」を選択します。
「コンポーネント・パレット」セクションから「OrderFulFillment」Scopeアクティビティの中の「invokeFulfillOrder」Invokeアクティビティの上にAssignアクティビティをドラッグ・アンド・ドロップします。
assignアイコンをダブルクリックして、割当てウィンドウを表示します。
「一般」タブをクリックします。
「名前」フィールドにassignDBInと入力します。
「適用」をクリックします。
「コピー操作」タブをクリックします。
「作成」をクリックし「コピー操作」を選択して、コピー操作の作成ウィンドウを表示します。
| フィールド | 値 |
|---|---|
| 送信元 | |
|
変数 |
|
「変数」→「inputVariable」→「ペイロード」の順に開いて選択します。 |
| 宛先 | |
|
変数 |
|
「変数」→「invokeFulFillOrder_initiate_InputVariable」→「ペイロード」の順に開いて選択します。 |
「OK」をクリックして、コピー操作の作成ウィンドウおよび割当てウィンドウを閉じます。
「ファイル」メイン・メニューから「保存」を選択します。
「コンポーネント・パレット」セクションから「OrderFulFillment」Scopeアクティビティの中の「receiveFulfillOrder」Receiveアクティビティの下にAssignアクティビティをドラッグ・アンド・ドロップします。
assignアイコンをダブルクリックして、割当てウィンドウを表示します。
「一般」タブをクリックします。
「名前」フィールドにassignDBWriteCommentsと入力します。
「適用」をクリックします。
「コピー操作」タブをクリックします。
「作成」をクリックし「コピー操作」を選択して、コピー操作の作成ウィンドウを表示します。
| フィールド | 値 |
|---|---|
| 送信元 | |
|
式 |
|
concat(bpws:getVariableData('inputVariable','payload','/ns1:PurchaseOrder/ns1:OrderInfo/ns1:OrderComments'), ' - Order FulFillment Complete') |
| 宛先 | |
|
変数 |
|
「変数」→「inputVariable」→「ペイロード」→「ns1:PurchaseOrder」→「ns1:OrderInfo」→「ns1:OrderComments」の順に開いて選択します。 |
「OK」をクリックして、コピー操作の作成ウィンドウおよび割当てウィンドウを閉じます。
完了後、Designerのウィンドウには次のように表示されます。
-記号をクリックして、「OrderFulfillment」Scopeアクティビティを閉じます。
「ファイル」メイン・メニューから「保存」を選択します。
|
概要: ローカル変数を作成し、Scopeアクティビティ内に「writeDBRecord」Invokeアクティビティを配置して、FulFillOrderプロセスでデータベースの例外処理タスクを実行します。ローカル変数は、false(0)に設定します。ローカル変数が満たされる(1になる)まで、Whileループで外部のパートナ・サービスをコールします。Whileアクティビティは、最大5回ループを実行するよう設定されています。例外が発生した場合は、フラグをfalse(0)にリセットします。 |
FulFillOrderプロセスが選択されていることを確認してください。 このプロセスを選択していない場合は、Designerウィンドウの「アプリケーション・ナビゲータ」セクションで「FulFillOrder.bpel」をダブルクリックします。
「コンポーネント・パレット」セクションから「transformDBRecord」Transformアクティビティの下にScopeアクティビティをドラッグ・アンド・ドロップします。
Scopeアイコンをダブルクリックして、Scopeウィンドウを表示します。
「一般」タブの「名前」フィールドにdb_write_scopeと入力します。
「OK」をクリックします。
+記号をクリックして、Scopeアクティビティを開きます。
「writeDBrecord」Invokeアクティビティを「db_write_scope」Scopeアクティビティ内にドラッグ・アンド・ドロップします。
db_write_scopeの左側のアイコンから「CatchAllブランチの追加」をクリックします。
+記号をクリックして、新しいブランチを開きます。
「アクティビティをここにドロップ」と書かれた、アスタリスクつきの新しいボックスが右側に表示されます。
「構造」セクションで、「変数」→「プロセス」→「変数」の順に選択します。
「変数」を右クリックし、「作成 変数」を選択します。
「単純型」を選択し、「単純型」の右側にある懐中電灯のアイコンをクリックします。
「int」を選択します。
「OK」をクリックしてタイプの選択ウィンドウおよび変数の作成ウィンドウを閉じます。
「コンポーネント・パレット」セクションから「db_write_scope」Scopeアクティビティの上にAssignアクティビティをドラッグ・アンド・ドロップします。
Assignアイコンをダブルクリックして、割当てウィンドウを表示します。
「一般」タブをクリックします。
「名前」フィールドにassign_db_0と入力します。
「適用」をクリックします。
「コピー操作」タブをクリックします。
「作成」をクリックし「コピー操作」を選択して、コピー操作の作成ウィンドウを表示します。
| フィールド | 値 |
|---|---|
| 送信元 | |
|
式 |
|
'0' |
| 宛先 | |
|
変数 |
|
「変数」→「dbStatus」の順に開いて選択します。 |
「OK」をクリックして、コピー操作の作成ウィンドウおよび割当てウィンドウを閉じます。
「コンポーネント・パレット」セクションから「db_write_scope」Scopeアクティビティの中の「writeDBrecord」Invokeアクティビティの下に別のAssignアクティビティをドラッグ・アンド・ドロップします。
Assignアイコンをダブルクリックして、割当てウィンドウを表示します。
「一般」タブをクリックします。
「名前」フィールドにassign_db_1と入力します。
「適用」をクリックします。
「コピー操作」タブをクリックします。
「作成」をクリックし「コピー操作」を選択して、コピー操作の作成ウィンドウを表示します。
| フィールド | 値 |
|---|---|
| 送信元 | |
|
式 |
|
'10' |
| 宛先 | |
|
変数 |
|
「変数」→「dbStatus」の順に開いて選択します。 |
「OK」をクリックして、コピー操作の作成ウィンドウおよび割当てウィンドウを閉じます。
「コンポーネント・パレット」セクションから「db_write_scope」Scopeアクティビティの右側の「Catch All」ブランチに第3のAssignアクティビティをドラッグ・アンド・ドロップします。
Assignアイコンをダブルクリックして、割当てウィンドウを表示します。
「一般」タブの「名前」フィールドにassign_db_errorと入力します。
「適用」をクリックします。
「コピー操作」タブをクリックします。
「作成」をクリックし「コピー操作」を選択して、コピー操作の作成ウィンドウを表示します。
| フィールド | 値 |
|---|---|
| 送信元 | |
|
式 |
|
bpws:getVariableData('dbStatus') + 1 |
| 宛先 | |
|
変数 |
|
「変数」→「dbStatus」の順に開いて選択します。 |
「OK」をクリックして、コピー操作の作成ウィンドウおよび割当てウィンドウを閉じます。
「コンポーネント・パレット」セクションから「assign_db_error」Assignアクティビティの下の「Catch」ブランチにWaitアクティビティをドラッグ・アンド・ドロップします。
WaitアクティビティをダブルクリックしてWaitウィンドウを表示します。
「名前」フィールドにwaitDBと入力します。
「HH:mm:ss」フィールドの値を30秒に設定します。これにより、このブロックは、FulFillOrderプロセスが成功する(dbStatusが1になる)まで30秒間隔で再試行が行われます。
「OK」をクリックします。
「コンポーネント・パレット」セクションから「db_write_scope」Scopeアクティビティのすぐ上にWhileアクティビティをドラッグ・アンド・ドロップします。
Designerのウィンドウには次のように表示されます。
-記号をクリックして、「db_write_scope」Scopeアクティビティを閉じます。
Whileアクティビティを開きます。
「db_write_scope」ScopeアクティビティをWhileアクティビティの中にドラッグします。
Whileアクティビティをダブルクリックし、[Ctrl]キーを押しながら[Space]バーを押して「式」フィールドに次の値を入力します。
bpws:getVariableData('dbStatus') < 5
「OK」をクリックします。
「ファイル」メイン・メニューから「保存」を選択します。
「アプリケーション・ナビゲータ」セクションに移動します。
「OrderBooking」を右クリックします。
「デプロイ」→「my_integration_server_connection」→「defaultドメインにデプロイ」の順に選択します。
要求に応じてプロジェクトのバージョン番号を増やし(たとえば、1.6と入力)、「OK」をクリックします。
これでBPELプロセスがコンパイルされます。 ウィンドウ下部のボタンをクリックしてエラーの有無を確認します。エラーが発生していなければ、デプロイは成功しています。 デプロイに失敗した場合は、手順4を参照してください。
「スタート」→「すべてのプログラム」→「Oracle - Oracle_Home」→「Oracle BPEL Process Manager」→「BPEL Control」の順に選択し、Oracle BPEL Controlにログインします(すでに開いている場合はページをリフレッシュします)。
Oracle BPEL Controlにログインするために次の情報を入力して「ログイン」をクリックします。
| フィールド | 値 |
|---|---|
| ユーザー名 | oc4jadmin
|
| パスワード | password
|
Oracle BPEL Controlの「ダッシュボード」タブが表示されます。作業中のBPELプロセスであるOrderBookingが、「デプロイ済のBPELプロセス」リスト内に表示されます。
「BPELプロセス」タブをクリックします。
バージョン番号の隣にアスタリスクが表示されているOrderBookingのバージョンを確認します。これがデフォルトのバージョンです。
OrderBookingプロセスの最新のバージョン番号をクリックします。これまでの章で説明どおりにバージョン番号を増分している場合、これが最大の数値です。
このBPELプロセスを管理中ウィンドウが表示されます。
下にスクロールし、「デフォルトとしてマーク」をクリックして、これをOrderBookingのデフォルトのバージョンに指定します。
プロンプトが表示されたら「終了」をクリックします。このOrderBookingのバージョン番号の横にアスタリスクが表示され、デフォルトのバージョンであることが示されます。
「ダッシュボード」タブをクリックします。
次のいずれかの方法で、適切なOrderBookingバージョンのインスタンスを起動します。
「デプロイ済のBPELプロセス」リストでOrderBookingをクリックします。
「HTMLフォーム」のすべてのフィールドに詳細を入力し、「XMLメッセージの転送」をクリックします。
または
「XMLソース」ラジオ・ボタンをクリックします。テキスト・エディタを使用して、OrderBookingPO_1.xmlファイルの内容をコピーし、表示されるフィールドに貼り付けます。「XMLメッセージの転送」をクリックします。
オプションで、OrderBookingPO_1.xmlファイルをtempディレクトリにコピーしてプロセス・インスタンスを呼び出します(これは、第8章「ファイル・アダプタの読取り機能の使用」が完了していることが前提です)。
手順11で説明したグラフィカル・ユーザー・インタフェースJSPページを使用して、SelectManufacturingの手動価格見積りタスクを完了します。
Oracle BPEL Controlに戻ります。
Oracle BPEL Controlをリフレッシュします。
画面上部の「インスタンス」タブをクリックします。
OrderBookingインスタンスをクリックします。
「監査」リンクをクリックして、変換ロジックおよび指定した一時ディレクトリ(Windowsオペレーティング・システムの場合はdrive_letter:\temp、UNIXオペレーティング・システムの場合は/temp)に書き込まれた出力ファイルを確認します。
アクティビティの詳細を表示するには、各シーケンスの「詳細」リンクをクリックします。(同様のインスタンス管理は、「フロー」リンクの下でグラフィカルに行うこともできます。)
tempディレクトリのコンテンツを確認します。po_timestamp.xmlという名前の出力ファイルが作成されます。属性を確認します(姓と名の連結など)。
Oracle JDeveloperの「表示」メイン・メニューから「接続ナビゲータ」を選択します。
「データベース」を開きます。
「myConnection」を右クリックし、「SQLワークシート」を選択します。
SELECT * FROM system.orderitems;という文を入力し、「SQL文の実行」を右クリックして選択して、注文がデータベース内に存在しているかどうか確認します。
データベース・アダプタを使用して、データを1対多(1:M)マスター/ディテール関係でデータベース表にコミットしました。次の主要タスクを実行しました。
FulfillOrderという名前のBPELプロセスを新規作成しました。
データベース接続を構成し、サンプルのデータベース表を作成しました。
DBInsertという名前のデータベース・アダプタを使用するパートナ・リンクを作成し、データベース表にデータを1対多関係でコミットしました。
DBInsertを呼び出すBPELプロセスを設計しました。
データベース・アダプタに必要な変換ロジックを追加するBPELプロセスを設計しました。
OrderBooking BPELプロセスに戻り、FulfillOrderと相互作用するFulfillOrderという名前のパートナ・リンクを作成しました。
FulfillOrderを呼び出すBPELプロセスを設計しました。
フォルト処理および例外管理を追加しました。
OrderBooking BPELプロセスをデプロイしました。
Oracle BPEL ControlからOrderBookingを実行して、データを受信し、データベースに送信しました。