コールバックを使用したBPELプロセスからの非同期的なOracle Data Integratorシナリオの起動

このチュートリアルでは、コールバックを使用してOracle Data Integratorシナリオを非同期的に起動することで、BPELプロセスから長時間実行されるOracle Data Integratorシナリオを管理するために必要な手順を説明します。 Oracle Data IntegratorシナリオをJavaサービスでラップすることで、BPELプロセスを使用して、非同期通信を管理する高度なアプローチを示します。

 

約1時間半

トピック

このOBEチュートリアルでは、以下のトピックについて説明します。

このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。 (警告: すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)

注: 各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順 にある各アイコンの上にカーソルを置いてください。

スクリーンショットは、ご使用の環境を反映したものではありません。 Oracle Data Integratorの特定の機能がどこにあるのかをわかりやすくするために提供されています。

概要

Oracle Data Integratorは、Oracle Data Integratorシナリオの起動を簡単におこなうための同期Webサービスと非同期Webサービスのインタフェースをアプリケーションに提供します。 現 在、Oracle Data Integratorは、Webサービスを非同期的に実行できますが、Webサービスの終了時にOracle Data Integratorジョブへ参照を返すことやサービスが正常終了したか失敗したかを送信することは不可能です。 コールバック参照を使用することで、Oracle Data IntegratorはWebサービスを非同期でコールできます。また、Webサービスは、ジョブの終了時に、ジョブの結果を送信するためにOracle Data Integratorのどこにコールバックするかを把握できます。 BPELビジネス・プロセスがこのインタフェースを使用して、大規模な長時間実行されるロードを起動する場合、同期的な起動は、Oracle Data Integratorのロードが完了する前に、タイムアウトする傾向があります。 この例では、Java Webサービス(ODIInvokerService)をBPELとOracle Data Integratorの仲介役としてデプロイします。 BPELは、Javaサービスを起動し、Oracle Data Integratorシナリオの詳細を渡します。Javaサービスは次に、Oracle Data Integrator APIを介してOracle Data Integratorロードを起動します。 ロードが完了すると、Javaサービスは、BPEL PMのJava APIを介して非同期でBPELインスタンスにコールバックするか、Webサービスの起動に関するパラメータを変更することで、WSアドレッシングを使用 してコールバックします。 このようにBPELは、長時間実行されるOracle Data Integratorロードと非同期でやり取りできます。 Javaサービスは、任意のOracle Data Integratorシナリオが任意のWebサービス・プロセスからコールできるように汎用的に構築されます。

 

 

トピック・リスト に戻る

シナリオ

Lindaは、Global Enterpriseのデータベース管理者です。 社内のデータベースの管理やさまざまなリソースに関連するタスクの統合を担当しています。 具体的には、データのロード、変換、および検証をおこなっています。 Lindaは、長時間実行されるOracle Data IntegratorシナリオをBPELプロセスから管理する必要があります。 そのようなBPELビジネス・プロセスがこのインタフェースを使用して長時間におよぶ大規模なロードを起動する場合、同期的な起動は、Oracle Data Integratorロードが完了する前にタイムアウトします。 このため、Lindaはコールバックを使用してOracle Data Integratorシナリオを非同期で起動することを決定しました。

トピック・リスト に戻る

前提条件の確認

タスクを開始する前に、システム環境が以下の前提条件を満たしていることを確認してください。

ソフトウェア要件

システムには次のインストール済み製品が含まれている必要があ ります。

システムには次の構成が含まれている必要があります。

トピック・リストに戻る

 

Oracle JDeveloperでの新しいアプリケーションの作成とOracle Data Integratorラッパー・サービスのOracle Application Serverへのデプロイ


ここでは、Javaラッパー・サービス(ODIInvokerService)をOracle Application Serverにデプロイします。 JDeveloperで新しいアプリケーションを作成し、Oracle Data Integratorラッパー・サービスをOracle Application Serverへデプロイするには、以下の手順に従います。

1.

G:\jdevStudio10131jdeveloper.exeを クリックし、JDeveloperを起動します。 デスクトップにあるSOA Suite JDeveloperショートカットからも起動できます。 以前のバージョンのJDeveloperから移行するかどうかを確認するダイアログ・ボックスが開いたら、「NO」を クリックします。 左側のアプリケーション・ナビゲータで「Applications」 を右クリックし、「New Application」を選択します。

 

2.

開かれたウィンドウのApplication Nameフィールドに、BPEL2ODIAsyncと 入力します。 「OK」をクリックします。

 

3.

Create projectウィンドウが開かれます。「Cancel」 を選択します。 BPEL2ODIAsyncアプリケーションがアプリケーション・ナビゲータに表示されます。

 

4.

メイン・メニューから「File」→「Open」を選択しま す。 G:\ODIInvokerService_generation2ディレクトリに移動して、「ODIInvokerService.jpr」 ファイルを選択します。 「Open」をクリックします。ODIInvokerServiceが アプリケーション・ナビゲータに表示されます。

注:この時点で、BPELOracle Data Integratorの仲介役として機能するJavaラッパー・サービス(ODIInvokerService) をインポートしています。 これがどのように動作するかを理解するために、クラスとサービスの詳細について参照することを推奨します。 Javaアプリケーションには、同期Webサービス・インタフェース(ODIAsyncStarterWebService) とスタンドアロンJavaインタフェース(odi-async-standalone.jar)の2つのインタフェー スが含まれていることに注意してください。 Webサービス・インタフェースを起動します。このインタフェースがBPEL API経 由で適切なBPELインスタンスにコールバックするためには、コールバック情報を渡す必要があります。また、ODI API経 由で適切なOracle Data Integratorシナリオを起動するためには、Oracle Data Integrator情報を渡す必要があります。

 

6.

ランタイムのためにライブラリの場所を設定するには、アプリケーション・ナビゲータで「ODIInvokerService」 を右クリックして、「Project Properties」を選択します。 開かれたウィンドウの左側にあるExplorerで、「Libraries」を選択します。 Librariesリ ストで、「Orabpel.jar」ライブラリを選択し、「Edit」をクリック します。 Edit Library Definitionウィンドウで、現在のClass Path値をハイライトして、「Remove」 をクリックします。

 

 

7.

Class Path」をハイライトして「Add Entry」 をクリックします。 SOA_HOME/bpel/libディレクトリ(E:\SOASuite10131\bpel\lib) に移動し、「orabpel.jar」を選択します(このライブラリをほかの場所で取得している場合は、インストール したSOA Suiteのものと同じバージョンであることを確認してください)。 「Select」をクリックしま す。 Edit Library Definitionページで、Deployed By Defaultオプションが選択されていることを確認し、「OK」をクリックします。

8.

同様に、Librariesリストで、「Orabpel-common.jar」ライブラリを選択 し、「Edit」をクリックします。 ウィンドウで、現在のClass Path値をハイライトして「Remove」 をクリックします。次に、「Class Path」をハイライトし、「Add Entry」 をクリックします。 SOA_HOME/bpel/libディレクトリ(E:\SOASuite10131\bpel\lib) に移動し、「orabpelcommon.jar」を選択します(このライブラリをほかの場所で取得している場合は、 インストールしたSOA Suiteのものと同じバージョンであることを確認してください)。 Edit Library Definitionページで、Deployed By Defaultが選択されていることを確認し、「OK」 をクリックします。

9.

Project Propertiesページで、3つのライブラリすべてのExportが選択され ていることを確認し、「OK」をクリックします。 アプリケーション・ナビゲータで「ODIInvokerService」 を右クリックし、「Rebuild」を選択します。

10.

Javaサービスをデプロイするには、JDeveloperでアプリケーション・サーバーへの接続が確立されており、アプリケーショ ン・サーバーが稼働していることを確認します。 アプリケーション・ナビゲータで、「Applications」→「BPEL2ODIAsync」 →「ODIInvokerService」→「Resources」を展開しま す。 「WebServices.deploy」を右クリックし、「Deploy to」 を展開します。次に、アプリケーション・サーバー接続(スクリーンショットに示されているSoademoApplicationServerな ど)を選択します。 表示されたウィンドウで、「OK」をクリックします。 Deployment Logがページの下部に表示され、次の図のように、デプロイメントが完了したことを示すメッセージが示されます。

11. サービスがデプロイされ、アクセス可能なことを確認するために、ブラウザでApplication Server Controlhttp://localhost:8888/em/) を開きます。 管理者資格証明(Usernameにoc4jadmin、Passwordにwelcome1を 入力)を使用してログインします。 Enterprise Managerページで、ODIInvokerService(Home JVM)をデプロイした「oc4j」コンテナを選択します。 OC4J Homeペー ジで、「Applications」タブを選択します。 Applicationsタブのdefaultの 下で、「odi-webservice」アプリケーションを見つけ、選択します。

12.

odi-webserviceページで、「Web Services」 タブを選択して「Test Service」ボタンをクリックします。

13. 新しいページで、デフォルトのURLを そのままにして、「Test Web Service」をクリックします。 「Test Service」ボタンをクリックします。 WSDLサービス定義およびWSDLドキュメントへ のリンクとODIInvokerServiceを起動するためのHTMLフォームが 含まれているODIAsyncStarterWebserviceページが表示されます。 「Service Description」リンクをクリックします。 JDeveloperのメイン・メニューで、「File」 →「Save All」を選択して作業内容を保存します。

注:次のセクションで、WSDLのURLをコピーする必要があるため、ブラウザで最後に開いたペー ジは閉じないでください。 この時点でサービスのテストはおこないませんが、Oracle Data Integratorシナリオをコールし、BPELプロセスにコールバックするために使用する入力フィールドは確認できます。 これでODIINvokerServiceがデプロイされ、実行準備が整いました。

トピック・リストに戻る

新しいBPELプロセス の作成

新しいBPELプロセスを作成するには、以下の手順を実行します。

1.

左側のアプリケーション・ナビゲータで「BPEL2ODIAsync」 を右クリックし、「New Project」を選択します。 ウィンドウが表示されたら、「BPEL Process Project」を選択し、「OK」をクリックします。

 

 

2.

BPEL Project Creationウィザードで、プロジェクトにAsyncODICallと 名前をつけ、「Asynchronous BPEL process」が選択されていることを確認します。 「Next」 をクリックします。 Input Schema Elementのとなりにある懐中電灯型ア イコンを選択します。 OBE_LABディレクトリに移動し、「ODIService.xsd」 を選択します。 「Open」をクリックします。

 

 

3.

Type Chooserウィンドウで、「Imported Schemas」 →「ODIService.xsd」を展開し、「ODIProcessRequest」 を選択します。 「OK」を選択します。

 

4.

Output Schema Elementフィールドのとなりにある懐中電灯型ア イコンを選択します。 Type Chooserウィンドウで、「Imported Schemas」→「ODIService.xsd」を展開し、「ODIProcessResponse」 を選択します。 「OK」をクリックします。

 

 

5.

BPEL Project Creationウィザードで、「Finish」 をクリックします。 JDeveloperのメイン・ウィンドウに、新しいAsyncODICallプロジェクトが開 かれます。 プロジェクトを保存します(メイン・メニューから「File」→「Save All」 を選択します)。

 

トピック・リストに戻る

BPELプロセス・イン タフェースの更新

次の手順では、デフォルトで作成されるBPELプロセス・インタフェースを変更し、2つの新しいオペレーションが含まれるようにします。 これらの2つのオペレーションは、WSDLのインバウンド・ポート・タイプに追加されます。 これらは、先ほどデプロイしたODIInvokerServiceからの非同期応答を受け取るために使用されます。

 

BPELプロセス・インタフェースを更新するには、以下の手順を実行します。

1.

左側のアプリケーション・ナビゲータで、「BPEL2ODIAsync」 →「AsyncODICall」→「Integration Content」を 展開し、「AsyncODICall.wsdl」をダブルクリックして開きます。 AsyncODICall.wsdlファ イルで、左上のSwitch Viewボタン「」 をクリックします。 メイン・ペインでAsyncODICall.wsdlファイルを開いた状態でStructure ペインに移動します(「View」→「Structure」をクリックする必要があります)。 「Definitions」 を展開し、「Messages」を右クリックします。 「Insert message」 をクリックします。 ウィンドウで、メッセージにODIInvokerServiceResponseMessageと 名前をつけます。 「OK」を選択します。

 

3.

ODIInvokerServiceResponceMessage」を右クリックし、「Insert Inside message」→「ODIInvokerServiceResponseMessage」 →「http://schemas.xmlsoap.org/wsdl/」を展開して「Part」 を選択します。 ウィンドウが表示されたら、Partにpayloadと名前をつけます。 Reference Typeとして「element」を選択します。Part Typeにns1:ODIInvokerServiceResponseと 入力します。 「OK」をクリックします。


 

4.

同様に、Structureペインで、「Definitions」 を展開し、「Messages」を右クリックします。 「Insert message」 を選択します。 ウィンドウで、メッセージにODIInvokerServiceFaultMessageと名前をつ けます。 「OK」を選択します。 「ODIInvokerServiceFaultMessage」 を右クリックし、「Insert Inside message」→「ODIInvokerServiceFaultMessage」 →「http://schemas.xmlsoap.org/wsdl/」を展開して「Part」 を選択します。Partにpayloadと名前をつけ、Reference Typeとしてelementを選択します。Part Typeにns1:ODIInvokerServiceFaultと 入力し、「OK」をクリックします。


 

 

5.

AsyncODICall.wsdlが以下の図のような構造になっていることを確認します。

 

6.

Port Typesの下で、「AsyncODICall」を 選択し、右クリックします。 「Insert Inside AsyncODICall」→「http://schemas.xmlsoap.org/wsdl/」 を展開して「Operation」を選択します。 ウィンドウが表示されたら、オペレーションにonODIResultと 名前をつけます。 Operation Typeドロップダウン・メニューから「One Way」 を選択します。 Inputドロップダウン・メニューから「client:ODIInvokerServiceResponseMessage」 を選択し、次に、「OK」をクリックします。 新しいオペレーションがinitiateの下に表示されます。

7.

再度Port Typesの下で、「AsyncODICall」 を選択し、右クリックします。 「Insert Inside AsyncODICall」→「http://schemas.xmlsoap.org/wsdl/」 を展開して「Operation」を選択します。 ウィンドウが表示されたら、オペレーションにonODIResultと 名前をつけます。 Operation Typeドロップダウン・メニューから「One Way」 を選択します。 Inputドロップダウン・メニューから「client:ODIInvokerServiceFaultMessage」 を選択し、「OK」をクリックします。 新しいオペレーションがinitiateの 下に表示されます。

8.

AsyncODICall.wsdlが以下の図のような構造になっていることを確認します。 プロジェクトを保存(「File」→「Save all」をクリック)し、AsynchODICall.wsdlファ イルを閉じます。 「AsynchODICall.bpel」ファイル・タブをクリックし、ページの上にある緑 色に点滅しているボタンをクリックします。 これにより、先ほどの変更とともにBPELプロセスが更新されます(変更を有効にするためには、BPELファイルを閉じ、再度開く必要がある場合がありま す)。

注:これで、onODIResultとonODIErrorの2つのオペレーションが作成され、 BPELインタフェースが更新されました。

トピック・リストに戻る

ODIInvokerService のパートナー・リンクの作成

次の手順では、Javaラッパー・サービスのODIInvokerServiceを示すBPELパートナー・リンクを作成します。 ODIInvokerServiceのパートナー・リンクを作成するには、以下の手順を実行します。

1.

コンポーネント・パレットで、「PartnerLink」 を選択し、ダイアグラムの右にある灰色のServicesスイムレーンまでドラッグします。 Create Partner Linkウィ ンドウで、パートナー・リンクにODIAsyncStarterWebserviceという名前をつけます。 デプロイしたODIInvokerServiceのためにWSDLのURLを Oracle Application Server Controlページ(先ほどブラウザで開いたままにしておいたページ)からコピーし、Create Partner LinkウィンドウのWSDL Fileフィールドに貼りつけます。 青 色の2つの矢印からなるボタンをクリックし、ページを更新します。 パートナー・リンクを作成するかを確認するウィンドウが表示されます。 「Yes」をクリックします。

2.

Partner Link Typeドロップダウン・メニューから「ODIAsyncStarterWebservice_PL」 を選択します。 Partner Roleドロップダウン・メニューから「ODIAsyncStarterWebservice_Role」 を選択します。 そのほかのフィールドはデフォルトのまま変更せず、「OK」をクリックします。 ODIAsyncStarterWebserviceパー トナー・リンクがプロセス・ダイアグラムに表示されます。

 

4.

コンポーネント・パレットのドロップダウン・メニューから「Process Activities」 を選択し、「Invoke activity」アクティビティをreceiveInputア クティビティとcallbackClientアクティビティ間にあるプロセスにドラッグします。 新しいInvoke activityからODIAsyncStarterWebserviceパートナー・リンクへ矢 印を1つドラッグします。

5.

Edit Invokeウィンドウで、アクティビティにInvoke_ODIという名前をつけま す。 Input Variableフィールドのとなりにある魔法の杖型ボタン をクリックします。 Create Variableウィンドウで、変数にstartOdiPlan_InputVariableと いう名前をつけます。 「OK」をクリックします。

6. Output Variableフィー ルドのとなりにある魔法の杖型ボタンをクリックします。 Create Variableウィ ンドウで、変数にstartOdiPlan_OutputVariableという名前をつけます。 「OK」 を選択します。 Edit Invokeページで、「OK」をクリックします。 プロセス・ダイアグラムは以下のようになります。 プロジェクトを保存します。

トピック・リストに戻る

プロセス・レベル値を動 的に更新するBPELプリファレンスの作成

このセクションでは、5つのBPELプリファレンス(プロセス・レベルでのグローバル変数セット)を作成します。これにより、これらの値を変更する際にプ ロセスを再コンパイルする必要がなくなります。 BPELプロセスは、コールバック情報をODIINvokerServiceに渡します。これによりODIINvokerServiceは、その後非同期 でコールバックできるようになります。この情報はサーバー固有のものです。これらのプリファレンスを作成することで、新しいサーバーにデプロイする際にプ ロセスを再コンパイルする必要がなくなります。

プロセス・レベル値を動的に更新するBPELプリファレンスを作成するには、以下の手順を実行します。

1.

AsynchODICall.bpelプロセスでダイアグ ラムの左上にある「Deployment Descriptor Properties」ボタンをクリックします。 開かれたウィンドウの「Preferences」タブで、「Create」を選択 します。 Create Preferenceウィンドウで、プリファレンスにretryCountと いう名前をつけます。 「OK」をクリックします。

 

 

2.

Property Valueウィンドウで、1と入力します。 Encryptionフィールドで、「Plain Text」を選択します。 「Create」 ボタンをクリックし、プリファレンスのための上述の手順を以下の表の内容で繰り返します。 Deployment Descriptor Propertiesは、以下のスクリーンショットのようになります。 「OK」をクリックします。

注:いくつかのプロパティ値は、使用している環境に固有のものになります。ここに示されている値 は、基本的なSOAインストールによる一般的なものです。
値を確認してください。

Property Name Property Value Encryption

java.naming.factory.initial

com.evermind.server.rmi.RMIInitialContextFactory Plain Text

java.naming.provider.url

opmn:ormi://localhost:6003:home/orabpel Plain Text
OC4JUser oc4jadmin Plain Text
Credentials welcome1 Encrypt on server
on deploy
Platform ias_10g Plain Text

 

トピック・リストに戻る

ODIStarterWebservice の入力値の割当て

ODIStarterWebserviceの入力値を割り当てるには、以下の手順を実行します。

1.

右側のコンポーネント・パレットから、Receive_InputInvoke_ODIア クティビティの間にあるプロセス・ダイアグラムへ「Assign」アクティビティをドラッグ・アンド・ドロップしま す。

 

 

2.

新しい「Assign_1」アクティビティをダブルクリックします。 「General」 タブを選択し、アクティビティにAssign_ODIValuesという名前をつけます。 「Copy Operation」タブをクリックし、Createドロップダウン・メニューから「Copy Operation」を選択します。


 

3.

開かれたウィンドウのFrom欄で、「Process」 →「Variables」→「inputVariable」→「payload」 →「ODIProcessRequest」を展開し、「ODI_Info」を選択 します。
To欄で、「Process」→「Variables」 →「startOdiPlan_InputVariable」→「Parameters」 →「StartOdiPlanElement」を展開し、「OdiInformationDTO_1」 を選択します。 「OK」をクリックします。

 

4.

ここで、先ほどのセクションのプリファレンスを設定します。 Createドロップダウン・メ ニューから、「Copy Operation」を選択します。 新しいダイアログ・ボックスが表示されます。 「From」 欄で、Typeドロップダウン・メニューから「Expression」を選択しま す。 From欄の右上にある「Xpath Expression Builder」 ボタンをクリックします。

5.

Expression BuilderウィンドウのFunctionsヘッ ダーの下で、ドロップダウン・メニューから「BPEL Xpath Extension Functions」を選択 します。 更新されたリストから「getPreference」を選択し、「Insert Into Expression」ボタンをクリックします。 この時点で、Expressionウィンドウにはora:getPreference()と 表示されていますが、ora:getPreference("retryCount")に変更します。retryCountは、 先ほど設定したプリファレンスのうちの1つの名前です。 「OK」をクリックします。

6.


To欄で、「Process」→「Variables」 →「startOdiPlan_InputVariable」→「Parameters」 →「StartOdiPlanElement」→「CallbackInformationDTO_2」 を展開し、「retryAttempts」を選択します。 「OK」をクリックし ます。

7.

上述の(retryCountコピー・ルールをプリファレンスから作成した)手順を繰り返し、ほかのプリファレンスのためのコピー・ ルールを作成します。 FromフィールドとToフィールドは、以下の表に記載 されています。 この時点で、Assignアクティビティと6つのコピー・ルールは、次のスクリーンショットと一致す る必要があります。

From To

ora:getPreference("java.naming.factory.initial")

jndiInitialCtxFactory

ora:getPreference("java.naming.provider.url")

jndiURL
ora:getPreference("OC4JUser") user
ora:getPreference("Platform") jndiPlatform

 

さらに8つのコピー・ルールを作成する必要があります。 以下の表のそれぞれの行にそって、コピー・ルールを作成します。From欄 の「Expression」を選択し、対応する値を入力します。
To欄で、「Process」→「Variables」 →「startOdiPlan_InputVariable」→「Parameters」 →「StartOdiPlanElement」→「CallbackInformationDTO_2」 を展開し、表から一致する値を選択します。 この時点で、Copy Operationには、以下のスクリーンショットのように14のコピー・ルールが存在する必要があります。 「OK」 をクリックします。

From To

string("callback.bpel")

callbackHandlerType

string("onODIResult")

callbackSuccessOperationName
string("onODIError") callbackErrorOperationName
ora:getProcessURL() SOAPUrl
ora:getDomainId() domainName
ora:getProcessId() processName
ora:getProcessVersion() revision
ora:getConversationId() conversationID

トピック・リストに戻る

コール バックのためのパスワードの暗号化と設定

ODIInvokerServiceでは、プロセス対話IDを使用し て、送られてくるパスワードが暗号化およびハッシュされていることが要求されます。 Java Embeddingア クティビティを使用して、パスワードを暗号化します。 コールバックのためにパスワードを暗号化して設定するには、以下の手順に従います。

1.

コンポーネント・パレットから「Java Embedding」 アクティビティをAssign_ODIValuesアクティビティの下にあるダイアグラムにドラッグします。 新しい「Java_Embedding_1」をダブルクリックして開きます。

 

 

2.

Code Snippetフィールドに、以下のコードを切り取り、貼りつけます。 「File」 →「Save All」を選択し、プロジェクトを保存します。

/* The following code appends the Credentials preference
with the instance conversation ID,then encrypts and
assigns to the ODIInvokerService input message.
*/
String pw = (String)getPreference("Credentials");
try {
String encryptedPW =
com.collaxa.cube.util.CXPasswordUtils.encrypt(pw + "||" + getConversationId());
addAuditTrailEntry("Credentials Encrypted");
setVariableData ("startOdiPlan_InputVariable","parameters",
"/ns1:startOdiPlanElement/ns1:CallbackInformationDTO_2/ns1:pw", encryptedPW);
} catch(Exception e) {
e.printStackTrace();
addAuditTrailEntry("Encryption failed: " + e.getMessage());
javax.xml.namespace.QName qname = new
javax.xml.namespace.QName
("http://bpel.oracle.com/", "EncryptionFailure");
throw new com.oracle.bpel.client.BPELFault (qname);
}
addAuditTrailEntry ("Added encrypted credentials successfully");

 


 

トピック・リストに戻る

非 同期応答の受信

Pickアクティビティを使用して、ODIInvokerServiceか らのコールバックを処理します。 Timeoutアクティビティと同様にonODIResponseonODIErrorの 両方の応答メッセージにハンドラを設定する必要があります。 非同期応答を受信するには、以下の手順を実行します。

1.

右側のコンポーネント・パレットから「Pick」アクティビ ティをInvoke_ODIアクティビティの次にあるダイアグラムにドラッグします。 新しい「Pick_1」 アクティビティを展開します。 「Add OnMessage Branch」ボタンをクリックします。

 

 

2.

Pickアクティビティの一番左のメッセージ・ブランチをダブルクリックします。 ポップアップ・ウィンドウで、Partner Linkフィールドのとなりにある懐中電灯型アイコンをクリックします。 「Process」 →「Partner Links」を展開し、「Client」を選択します。 「OK」 をクリックします。


 

3.

Operationドロップダウン・メニューから「onODIResult」を選択します。 Variableフィー ルドのとなりにある魔法の杖型アイコンをクリックします。 変数にOnMessage_onODIResultと 名前をつけ、「OK」をクリックします。 OnMessage Branchで 「OK」ボタンをクリックします。

4.

Pickアクティビティの残りの(右の)メッセージ・ブランチをダブルクリックします。 表示されたウィンドウで、Partner Linkフィールドのとなりにある魔法の杖型アイコンを選択します。 「Process」 →「Partner Links」を展開し、「Client」を選択します。 「OK」 をクリックします。

5.

Operationドロップダウン・メニューから「onODIError」を選択します。 Variableフィー ルドのとなりにある魔法の杖型アイコンをクリックします。 変数にOnMessage_onODIErrorと 名前をつけ、「OK」をクリックします。 OnMessage Branchで 「OK」ボタンをクリックします。

6.

on Alarm」ブランチをダブルクリックします。 以下の図のように、タイムアウトを1日から1時間に変更します(または、ロードの所要時間に最適な時間に設定します)。 「OK」 をクリックします。

 

7.

3つのブランチをすべて展開します。 以下の図のように、コンポーネント・パレットから「Assign」 アクティビティを3つすべてのブランチにドラッグします。

 

8.

最初の(onODIResponseonMessageブ ランチで「Assign_1」を開きます。 以下の表に示されているように、次の変数と式を出力変数にマップする新しいコピー・ルールを作成します(以下のスクリーンショットの例を参照してくださ い)。

From Type From To
Variable

Variable OnMessage_onODIResult > Payload > ODIInvokerServiceResponse > odiPlan

OutputVariable > Payload > ODIProcessResponse > odiPlan

Variable

OnMessage_onODIResult > Payload > ODIInvokerServiceResponse > elapsedTime

OutputVariable > Payload > ODIProcessResponse > elapsedTime

Expression ‘Success’

OutputVariable > Payload > ODIProcessResponse > result

Expression ora:getConversationId()

OutputVariable > Payload > ODIProcessResponse> ConversationId

 

 

9.

General」タブを選択し、アクティビティにAssign_ODIResponseと いう名前をつけます。 「OK」をクリックします。

10.

2番目の(onODIErroronMessageブランチ で「Assign_2」を開きます。 以下の表に示されているように、次の変数と式を出力変数にマップする新しいコピー・ルールを作成します。 Assign_2ア クティビティは、スクリーンショットのようになります。 「General」タブを選択し、アクティビティにAssign_ODIErrorと いう名前をつけます。「OK」を選択します。

From Type From To
Variable

OnMessage_onODIError > Payload >ODIInvokerServiceFault> odiPlan

 

OutputVariable > Payload > ODIProcessResponse > odiPlan

 

Variable

OnMessage_onODIError > Payload > ODIInvokerServiceFault> elapsedTime

 

OutputVariable > Payload > ODIProcessResponse> elapsedTime

Variable

OnMessage_onODIError > Payload > ODIInvokerServiceFault> errorMessage

OutputVariable > Payload > ODIProcessResponse> result

Expression ora:getConversationId()

OutputVariable > Payload > ODIProcessResponse> ConversationId

 

 

11.

3番目のonAlarmブランチで「Assign_3」を開き ます。 以下の表に示されているように、次の変数と式を出力変数にマップする新しいコピー・ルールを作成します。 Assign_3ア クティビティは、以下のようになります。 「General」タブを選択し、アクティビティにAssign_TimeOutと いう名前をつけます。 「OK」をクリックします。

From Type From To
Expression

'Timeout waiting for ODI to complete load'

OutputVariable > Payload > ODIProcessResponse > result

Expression

ora:getConversationId()

OutputVariable > Payload > ODIProcessResponse > ConversationId

Expression

ora:getContentAsString(bpws:getVariableData('inputVariable', 'payload',
'/ns2:ODIProcessRequest/ns2:ODI_Info'))

OutputVariable > Payload > ODIProcessResp onse > odiPlan

 

 

12.

プロセス・ダイアグラムが次の図に一致するかを確認します。 プロセス・ダイアグラムの上部にあるValidate Processボタン「」 をクリックし、プロセスを更新して確認します。 プロジェクトを保存します(「File」→「Save All」)。

トピック・リストに戻る

考えられるリモート・フォルトの把握

何らかの理由により、ODIINvokerServiceが利用できない 場合、エラーを把握し、結果を返す必要があります。

考えられるリモート・フォルトを把握するには、以下の手順を実行します。

1.

メイン・プロセス・スコープで、「Add Catch Branch」 アイコンをクリックします。 右にスクロールし、右のダイアグラムにある新しい「Catch Branch」 アイコンをダブルクリックします。 Fault Qnameセクション内にある懐中電灯型ア イコンをクリックします。

 

2.

ブラウザで、「System Faults」を展開して「remoteFault」 を選択します。 「OK」をクリックします。

3.

Fault Variableフィールドのとなりにある魔 法の杖型アイコンをクリックし、新しい変数を作成します。 変数の名前としてRemoteFaultVarを 入力し、「OK」をクリックします。 Catch Branchウィンドウで「OK」 をクリックします。

4.

Catch」アクティビティを展開します。 右側のコンポーネント・パレットから「Invoke」アクティビティを空のCatchブランチ内にあるダイアグラムに ドラッグします。 新しい「Invoke」アクティビティをダブルクリックします。

5.

アクティビティにInvoke_Callbackという名前を つけます。 Partner Linkフィールドのとなりにある懐中電灯型アイ コンをクリックします。 「Client」を選択して、「OK」をクリックしま す。

6.

Input Variableフィールドのとなりにある魔 法の杖型アイコンをクリックします。 新しい変数にErrorOutputという名前をつけます。 「OK」をクリックします。 Invoke activityウィンドウで、「OK」 をクリックします。

7.

コンポーネント・パレットから「Assign」アクティビティ をInvoke_Callbackアクティビティの上のCatchブランチにド ラッグします。 新しい「Assign」アクティビティをダブルクリックして開きます。 以下の表に示されているように、次の変数と式をErrorOutput変数にマップする新しいコピー・ルールを作成し ます。

From Type From To
Variable

RemoteFaultVar > summary

ErrorOutput > Payload >ODIProcessResponse > result

Expression

ora:getConversationId()

ErrorOutput > Payload > ODIProcessResponse >ConversationId

Expression

ora:getContentAsString( bpws:getVariableData('inputVariable',
'payload','/ns2:ODIProcessRequest/ns2:ODI_Info'))

ErrorOutput > Payload > ODIProcessResponse > odiPlan

 

8.

Assignアクティビティが次のようになっていることを確認 します。 「General」タブを選択し、アクティビティにAssign_CallbackErrorと いう名前をつけます。 「OK」をクリックします。 プロジェクトを保存します。 この時点でプロセス・ダイアグラムは次の図に一致する必要があります。

トピック・リストに戻る

 

 

プ ロセスを起動するためのデフォルト入力の設定


次の手順では、あとでBPEL Consoleからプロセスをテストするためのデフォルト入力を設定します。 これにより、データの再入力を回避できます。 プロセス起動のためのデフォルト入力を設定するには、以下の手順に従います。

1.

メイン・ダイアグラムの上部にある「Deployment Descriptor Properties」ボタンをクリックします。 ウィンドウが表示されたら、「Configurations」 タブを選択します。

 

2.

Create」ボタンをクリックし、ドロップダウン・メニューから「defaultInput」 を選択します。 「OK」をクリックします。

 

3.

以下のXMLコードをコピーし、Property Valueフィールドに貼りつけます。 「OK」 をクリックします。 プロジェクトを保存します。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body xmlns:ns1="http://xmlns.oracle.com/ODIService">
<ns1:ODIProcessRequest>
<ns1:ODI_Info>
<ns1:odiHostname>localhost</ns1:odiHostname>
<ns1:jdbcDriver>oracle.jdbc.driver.OracleDriver</ns1:jdbcDriver>
<ns1:logLevel>5</ns1:logLevel>
<ns1:sessionNumber>SCEN_IMPORTXFORMEXPORTXML</ns1:sessionNumber>
<!-- Include when ODI scenario expects parameters
<ns1:odiParameters>
<ns1:value></ns1:value>
<ns1:name></ns1:name>
</ns1:odiParameters> -->
<ns1:scenarioName>SCEN_IMPORTXFORMEXPORTXML</ns1:scenarioName>
<ns1:jdbcUrl>jdbc:oracle:thin:@localhost:1521:XE</ns1:jdbcUrl>
<ns1:scenarioVersion>001</ns1:scenarioVersion>
<ns1:jdbcPassword>oracle1</ns1:jdbcPassword>
<ns1:workRepositoryCode>WORKREP</ns1:workRepositoryCode> <ns1:syncMode>1</ns1:syncMode>
<ns1:odiHostPort>20910</ns1:odiHostPort>
<ns1:context>GLOBAL</ns1:context>
<ns1:odiPassword>SUNOPSIS</ns1:odiPassword>
<ns1:odiUser>SUPERVISOR</ns1:odiUser>
<ns1:jdbcUser>snpm</ns1:jdbcUser>
</ns1:ODI_Info>
</ns1:ODIProcessRequest>
</soap:Body>
</soap:Envelope>

注:上述のXMLには、特定のOracle Data Integratorシナリオ(SCEN_IMPORTXFORMEXPORTXML) をコールするための詳細が含まれています。これは、OBEの『Developing an Oracle Data Integrator XML Transformation that can be executed within a BPEL process』において特定のOracle Data Integratorリポジトリ(WORKREP)に作成されています。 独自のシナリオを起動したい場合は、Oracle Data Integratorシナリオの詳細を示す適切な値で、上述のXMLを更新してください。 このケースでは、いかなるパラメータも渡していない場合は、独自のOracle Data Integratorシナリオを起動するようにXMLの値を更新し、コメント・セクションを削除します。

トピック・リストに戻る

BPEL プロジェクトのデプロイ

BPELプロセスをデプロイするには、以下の手順を実行します。

1.

左側のアプリケーション・ナビゲータで、「BPEL2ODIAsync」 を展開します。 「AsyncODICall」プロジェクトを右クリックし、「Deploy」 → 「SoademoIntegConnection」 → 「Deploy to Default Domain」を選択します。

 

 

2.

Logウィンドウで、ページの下部にある「Apache Ant」タブを選択します。 プロセスがデプロイを完了した際に、Build Successfulと緑色に表示されていることを確認します。

注: エラーが表示されているか、デプロイ・プロセスが失敗している場合(または両方の場合) は、上述の手順を再実行し、エラーを修正してください。

 

トピック・リストに戻る

プ ロセスのテスト


次の手順では、BPELプロセスをBPEL Consoleから起動し、Oracle Data Integratorシナリオが実行されているかを確認します。プロセスをテストするには、以下の手順に従います。

1.

ブラウザを開いて、URLにhttp://localhost:8888/BPELConsoleを 入力します。 ログイン・ページが表示されます。 Usernameフィールドにoc4jadminPasswordフィー ルドにwelcome1と、アプリケーション・サーバーの資格証明を入力します。 「Login」 をクリックします。 メインのBPEL Dashboardが表示されます。 BPELプロジェクトのAsyncODICallが 左側のDeployed BPEL Processes列に表示されていることを確認します。

 

 

2.

左側のプロセス・リストにある「AsyncODICall」を 選択します。 「Descriptor」タブを選択します。 このタブでは、上述の手順で作成したプリファレンスを確認し、設定できます。 これらの値を確認し、正しくない場合は、 修正して更新します。

.

 

 

 

3.

Initiateタブに戻ります。 Operationド ロップダウン・メニューから、「Initiate」を選択します。 Oracle Data Integratorエージェントが実行されており、Oracle Data Integratorシナリオの起動準備が完了していることを確認します。 「Post XML Message」ボ タンをクリックし、プロセスを開始します。 ページが更新されたら、「Visual Flow」リンクをクリックし て、プロセスの実行を確認します。

4.

Invoke_ODIアクティビティ・ウィンドウをクリックして開き、リクエストの受信に成功したODIInvokerServiceか らの同期応答を表示します。 Invoke_ODIアクティビティ・ウィンドウを閉じます。

5.

Refresh viewリンク「」をク リックします。 この更新により、ロードが更新した際に、ページは非同期コールバックを受信します。 「callbackClient」 アクティビティを開き、実行結果を表示します。 ODI Operatorを開き、Oracle Data Integratorシナリオが起動され、正常に完了したことを確認します。

トピック・リストに戻る

このレッスンで学習した内容は次のとおりです。

トピック・リストに戻る

このアイコンの上にカーソルを置くと、すべてのスクリーンショットが 非表示になります。