この章では、非同期Webサービスのコール方法について説明します。非同期メッセージ形式は、サービス(融資処理など)でクライアント・リクエストの処理に時間がかかる環境で非常に役に立ちます。また、非同期サービスは、同期サービスよりも優れた耐障害性を持ち、かつスケーラブルなアーキテクチャも提供します。
この章の内容は次のとおりです。
United Loanは、クライアントの融資申請を処理して融資提案を返す非同期Webサービスを公開します。このユースケースでは、BPELプロセスとこの非同期融資申請承認Webサービスを統合する方法について説明します。
このユースケースでは、非同期サービスからの情報をリクエストし、レスポンスを受け取るための基本的な設計概念について説明します。この例のUnited Loanの非同期サービスは、別のBPELプロセスです。しかし、適切に設計されたWebサービスであれば、同じBPELコールで対話できます。対象のWebサービスのWSDLファイルに、必要な情報をリクエストして受け取るために必要な情報が含まれます。
このBPELプロセスが非同期融資処理Webサービスと対話する方法の概要を図5-1に示します。
非同期Webサービス(BPELプロセスのreceiveアクティビティとreplyアクティビティの間にある点線の枠内)では、次のアクションが実行されます。
assignアクティビティ(LoanAppの準備)により、融資申請が準備されます。
invokeアクティビティ(サービスの開始)により、融資申請が開始されます。この申請の内容は、request変数に格納されます。このrequest変数は、非同期融資処理Webサービスに送信されます。
融資申請が開始されると、このリクエストを開始するクライアントとパートナ・リンクに一意の相関IDも、融資処理Webサービスに送信されます。相関IDにより、適切な融資提案レスポンスが、対応する融資申請のリクエスト元に確実に返されます。
融資処理Webサービスは次に、適切なレスポンスをreceiveアクティビティ(コールバックの待機)に送信します。このアクティビティは相関IDで追跡されています。
assignアクティビティ(提案の読取り)により、融資申請提案が読み取られます。
この後の各項で、図5-1に示す非同期機能の詳細を説明します。
関連項目: BPELプロセス以外の非同期Webサービスの例は、次のサンプル・ファイルを参照してください。
|
この項では、融資申請承認WebサービスのLoanService.wsdl
ファイル(コールされるWebサービス)、およびクライアントのLoanBroker.bpel
ファイルとbpel.xml
デプロイメント・ディスクリプタ・ファイルでの非同期機能の定義方法を説明します。内容は次のとおりです。
関連項目: この章では、次のファイルを例として使用しています。
|
WebサービスのLoanService.wsdl
ファイルの次のセクションを使用して、WebサービスをBPELプロセスと連携させることができます。
LoanService.wsdlファイルのportTypeセクション
LoanService.wsdl
ファイルのportType
セクションは、非同期サービスに使用するポートを定義しています。
非同期サービスにはポート・タイプが2つ定義されます。各ポート・タイプは一方向の操作を実行します。1つのポート・タイプが非同期プロセスを開始し、もう1つのポート・タイプがクライアントをコールバックして非同期レスポンスを返します。この例では、portType
LoanService
がクライアントの融資申請を受け取り、portType
LoanServiceCallback
が融資提案レスポンスをクライアントに非同期にコールバックします。
<!-- portType implemented by the LoanService BPEL process --> <portType name="LoanService"> <operation name="initiate"> <input message="tns:LoanServiceRequestMessage"/> </operation> </portType> <!-- portType implemented by the requester of LoanService BPEL process for asynchronous callback purposes --> <portType name="LoanServiceCallback"> <operation name="onResult"> <input message="tns:LoanServiceResultMessage"/> </operation> </portType>
LoanService.wsdlファイルのpartnerLinkTypeセクション
LoanService.wsdl
ファイルのpartnerLinkType
セクションは、BPELプロセスと融資申請承認Webサービスの間の対話について次のような特性を定義しています。
それぞれが果たすロール(操作)
対話のコンテキスト内でメッセージを受信するためにそれぞれが提供するportType
非同期サービスのパートナ・リンク・タイプには、Webサービス・プロバイダに対するロールとクライアント・リクエスタに対するロールの2つのロールがあります。
この対話では、LoanServiceProvider
ロールおよびLoanService
portType
は、クライアント・リクエスト・メッセージに使用され、LoanServiceRequester
ロールおよびLoanServiceCallback
portType
はレスポンス・メッセージをクライアントに非同期に返す(コールバックする)ために使用されます。
<!-- the LoanService partnerLinkType binds the service and requestor portType into an asynchronous conversation. --> <plnk:partnerLinkType name="LoanService"> <plnk:role name="LoanServiceProvider"> <plnk:portType name="tns:LoanService"/> </plnk:role> <plnk:role name="LoanServiceRequester"> <plnk:portType name="tns:LoanServiceCallback"/> </plnk:role> </plnk:partnerLinkType>
2つのポート・タイプ(invoke
アクティビティのportType="services:LoanService"
とreceive
アクティビティのportType="services:LoanServiceCallback"
)は、この1つの非同期BPELプロセスに結合されます。基本的に、ポート・タイプは実行される一連の操作です。このBPELプロセスの場合、実行する操作は2つ(invoke
アクティビティのinitiate
とreceive
アクティビティのonResult
)あります。
サービスをBPELからコールするには、プロセスとWebサービスの連携方法を次のファイルで定義する必要があります。
.bpelファイルのpartnerLinksセクション
LoanBroker.bpel
ファイルのpartnerLinks
セクションを見てみます。プロセスが相互作用するサービスはパートナ・リンクとして設計されます。各パートナ・リンクは、partnerLinkType
によって定義されます。
各パートナ・リンクには名前が付けられています。この名前は、そのパートナ・リンクによるすべてのサービス相互作用に使用されます。これは、レスポンスを、同じタイプの同時リクエストに対する異なるパートナ・リンクに相関する場合に重要です。
非同期プロセスは、クライアントへのコールバックに2番目のパートナ・リンクを使用します。この例では、2番目のパートナ・リンクLoanService
が融資申請承認Webサービスによって使用されます。
<!-- This process invokes the asynchronous LoanService. --> <partnerLink name="LoanService" partnerLinkType="services:LoanService" myRole="LoanServiceRequester" partnerRole="LoanServiceProvider"/> </partnerLinks>
属性myRole
は、クライアントのロールを示します。属性partnerRole
は、この対話におけるパートナのロールを示します。非同期プロセスでは、各partnerLinkType
にmyRole
属性とpartnerRole
属性があります。
デプロイメント・ディスクリプタ・ファイル
samples¥tutorials¥105.AsyncCompositeLoanBroker
のbpel.xml
デプロイメント・ディスクリプタ・ファイルを開きます。融資申請承認Webサービスが表示されます。このproperties
id
情報が、2番目のパートナ・リンク・タイプの作成時に、ファイルに追加されます。
<?xml version="1.0"?>
<bpel-process id="LoanBroker" src="LoanBroker.bpel"
wsdlLocation="LoanBroker.wsdl">
<properties id="LoanService">
<property name="wsdlLocation">
http://hslattertest-pc:9700/orabpel/default/UnitedLoan/UnitedLoan?wsdl</property>
</properties>
LoanBroker.bpel
ファイルのvariables
およびsequence
セクションを見てみます。特に注目すべき2つの領域は、invoke
アクティビティとreceive
アクティビティです。
invoke
アクティビティは同期Webサービスを起動(第4章「同期Webサービスの起動」を参照)、または非同期サービスを開始します。
invoke
アクティビティにはvariable
セクションで定義されたrequest
グローバル入力変数が含まれます。request
グローバル入力変数は融資申請承認Webサービスで使用されます。この変数には、最初の融資申込書の内容が格納されます。
融資申請承認Webサービスからの非同期コールバックを待機するreceive
アクティビティ。receive
アクティビティにはvariables
セクションで定義されたresponseグローバル出力変数が含まれます。この変数には、融資提案レスポンスが格納されます。receive
アクティビティは、サービスからのコールバック・メッセージを非同期に待機します。BPELプロセスは、コールバック・メッセージの到着を待機中、デハイドレートされるか、または圧縮されて格納されます。
<variables> <variable name="request" messageType="services:LoanServiceRequestMessage"/> <variable name="response" messageType="services:LoanServiceResultMessage"/> </variables>
<sequence> <!-- initialize the input of LoanService --> <assign> <!-- initiate the remote process --> <invoke name="invoke" partnerLink="LoanService" portType="services:LoanService" operation="initiate" inputVariable="request"/> <!-- receive the result of the remote process --> <receive name="receive_invoke" partnerLink="LoanService" portType="services:LoanServiceCallback" operation="onResult" variable="response"/>
invoke
アクティビティによって非同期サービスが開始されると、WS-Addressing(「WS-Addressing」で説明)を使用して、クライアント・リクエストに対して一意の相関IDも送信されます。複数のプロセスがサービス・コールバックを待機している可能性があるため、Oracle BPEL Serverでは、どのBPELプロセス・インスタンスが融資申請承認Webサービスからのコールバック・メッセージを待機しているかを把握する必要があります。相関IDにより、Oracle BPEL Serverは、レスポンスを適切なリクエスト・インスタンスと関連付けることができます。
関連項目: invokeアクティビティおよびreceiveアクティビティの作成手順は、次の項を参照してください。 |
createInstance属性による新しいインスタンスの起動
LoanBroker.bpel
ファイルのsequence
セクションの最初のreceive
アクティビティに、createInstance
属性があります。この最初のreceive
アクティビティでは、createInstance
要素はyes
に設定されています。これにより、新しいBPELプロセス・インスタンスが起動されます。対話のためには、少なくとも1つのインスタンスが起動している必要があります。このため、2番目のreceive
アクティビティではcreateInstance
変数をno
に設定します。
createInstance
属性のソース・コードは次のとおりです。
<!-- receive input from requestor -->
<receive name="receiveInput" partnerLink="client"
portType="tns:LoanBroker"
operation="initiate" variable="input"
createInstance="yes"/>
ある時点でアクティブなインスタンスは多数存在する可能性があるため、Oracle BPEL ServerはWebサービス・レスポンスに、対応する適切なBPELプロセス・インスタンスを指示する必要があります。次の相関方法を使用すると、非同期メッセージを特定して、非同期コールバックが適切なクライアントを確実に検出できるようにすることができます。
Web Services Addressing(WS-Addressing)は公開されている仕様であり、Oracle BPEL Process Managerでサポートされるデフォルトの相関方法です。WS-Addressingを使用するために、.bpel
ファイルおよび.wsdl
ファイルを編集する必要はありません。WS-Addressingは、非同期メッセージの相関にSimple Object Access Protocol(SOAP)ヘッダーを使用します。メッセージは、使用されるトランスポートまたはアプリケーションに依存しません。図5-2に概要を示します。
図5-2は、レスポンスが正しい宛先に送信されるように、メッセージがWSヘッダーとともに渡される方法を示しています。
この章の例では、相関にWS-Addressingを使用しています。メッセージの表示には、TCPトンネリングを使用できます。TCPトンネリングについては、「プログラム間で交換されるメッセージのTCPトンネリングによる表示」で説明します。
WS-Addressingは、通常は通信プロトコルおよびメッセージ・システムで提供される次の情報を定義します。この情報は、トランスポートまたはアプリケーションに依存せずに処理されます。
エンドポイントの位置(リプライ先アドレス): リプライ先アドレスは、BPELクライアントがコールバック・メッセージをリスニングしている位置を指定します。
対話ID: TCPトンネリングを使用して、BPELプロセス・フローとWebサービスの間で交換されたSOAPメッセージ(相関IDを含むメッセージなど)を表示します。BPELプロセス・フローの通信先のサービスに対して送受信される正確なSOAPメッセージを確認できます。
BPELプロセス・フローとWebサービスの間にソフトウェア・リスナーを挿入します。BPELプロセス・フローはリスナー(TCPトンネル)と通信します。リスナーはメッセージをWebサービスに転送し、表示します。Webサービスからのレスポンスはトンネルに返され、トンネルはレスポンスを表示して、BPELプロセスに返します。
プログラム間で交換されるメッセージのTCPトンネリングによる表示
プログラムとサービスの間で交換されるメッセージは、TCPトンネリングにより表示できます。これは、WebサービスとBPELプロセスにおいて、BPELプロセス・フローとWebサービスの間で交換される正確なSOAPメッセージを表示する場合に、特に役立ちます。
SOAPメッセージを監視するには、フローとサービスの間にソフトウェア・リスナーを挿入します。フローはリスナー(TCPトンネル)と通信し、リスナーはサービスへのメッセージの転送、およびメッセージの表示を行います。同様に、サービスからのレスポンスはトンネルに返され、トンネルはレスポンスを表示してフローに返します。
Oracle BPEL ServerとWebサービスの間で交換されたすべてのメッセージを表示する場合、該当するすべてのメッセージがサービスとの間で1回のリクエスト/リプライのやり取りで交換されるため、同期サービスに対して必要なTCPトンネルは1つのみです。非同期サービスの場合、2つのトンネル(サービスの起動用に1つ、フローのコールバック・ポート用に1つ)を設定する必要があります。
Oracle BPEL Process Managerプロセスで開始される同期サービス用のTCPリスナーを設定するには、次の手順に従います。
1234
などのポートでリスニングを行い、9700
などのポートで送信を行うTCPリスナーを起動します(この例で使用しているポート9700
は、Oracle BPEL Process Manager for Developersインストール後のデフォルト・ポートです)。Oracle BPEL Process ManagerをOracle Application Server SOAインストール・タイプの一部としてインストールした場合は、以降の手順のポート番号を適切なポート番号に置き換えてください。たとえば、オペレーティング・システムのコマンド・プロンプトから次のコマンドを実行すると、Oracle BPEL Process ManagerにバンドルされているApache Axisに付属のTCPトンネルを使用できます。
prompt> obsetenv prompt> java -classpath %OB_CLASSPATH% orabpel.apache.axis.utils.tcpmon 1234 localhost 9700
フローに対するlocation
プロパティをbpel.xml
デプロイメント・ディスクリプタ・ファイルに追加し、サービスのエンドポイントをオーバーライドします。たとえば、LoanFlowデモ・サンプルとこれがコールするCreditRatingServiceの間で交換されるメッセージを表示するには、SOA_Oracle_Home
¥bpel¥samples¥demos¥LoanDemo¥LoanFlow¥bpel.xml
のLoanFlowデプロイメント・デスクリプタでCreditRatingServiceの位置の定義を次のように変更します。
<partnerLinkBinding name="creditRatingService"> <property name="wsdlLocation"> http://localhost:9700/orabpel/default/CreditRatingService/ CreditRatingService?wsdl </property> <property name="location"> http://localhost:1234/orabpel/default/CreditRatingService </property> </partnerLinkBinding>
オペレーティング・システムのコマンド・プロンプトで、LoanDemoをコンパイルしてデプロイします。
prompt> cd SOA_Oracle_Home¥bpel¥samples¥demos¥LoanDemo
prompt> ant
CreditRatingServiceもBPELプロセスなので、Axisや.NETなど別のツール・キットからBPELプロセスをWebサービスとして起動するために渡されるSOAPメッセージを同じ手順で表示できます。
関連項目: 次のディレクトリにあるTCPモニター・ツールSOA_Oracle_Home¥bpel¥bin¥obtunnel.bat
|
非同期サービスからのコールバックのSOAPメッセージを表示するTCPリスナーを設定するには、次の手順に従います。
9710
などのポートでリスニングを行い、Oracle BPEL Process Managerポートで送信を行うTCPリスナーを起動します(たとえば、9700
はOracle BPEL Process Manager for Developersのインストール後のデフォルト・ポートです)。
Oracle BPEL Process Managerが実行するローカルSOAPコールの最適化をオフにして、コールバック・ポートの変更による影響を確認します。
Oracle BPEL Controlの右上にある「BPELドメインの管理」をクリックします。
下にスクロールしてoptSoapShortcutプロパティを見つけます。
値をtrueからfalseに変更します。
次の場所にあるOracle BPEL Admin Consoleにアクセスします。
http://localhost:port/BPELAdmin
「構成」タブで、下方向にスクロールしてSoapServerUrlプロパティを見つけます。
このプロパティをhttp://localhost:9710
に変更します。
「適用」ボタンをクリックします。
Oracle BPEL Serverを再起動してこれらの変更を初期値として設定し、非同期Webサービスを起動するいずれかのフロー(LoanFlowデモンストレーションなど)を開始します。これを同期TCPトンネリング構成と組み合せると、UnitedLoanサービス開始リクエストを最初のTCPトンネル経由で送信できます。
非同期サービスからのコールバックは、TCPリスナーに「UnitedLoanサービス・コールバック」などと表示されます。
Oracle JDeveloperを使用する場合は、組込みパケット・モニターを使用して、同期サービスと非同期サービスの両方についてSOAPメッセージを表示することもできます。
関連項目:
|
相関セットは、メッセージ本体の内容に基づいて非同期メッセージの相関を可能にするBPELメカニズムです。この方法を使用するには、.bpel
ファイルに相関セットを定義します。この方法は、WS-Addressingをサポートしないサービス用、または対話がA > B > A
ではなくA > B > C > A
という形式の場合など、一定の高度な対話パターン用に設計されています。
関連項目: 次の相関セットの例を参照してください。
|
reply
アクティビティを使用すると、ビジネス・プロセスはreceive
アクティビティによって受け取ったメッセージのリプライとしてメッセージを送信できます。receiveとreplyを組み合せると、プロセスに対するWSDL portType
でのリクエスト/レスポンス操作となります。
<reply partnerLink="ncname" portType="qname" operation="ncname" variable="ncname"? faultName="qname"? standard-attributes> standard-elements <correlations>? <correlation set="ncname" initiate="yes|no"?>+ </correlations> </reply>
非同期コールバックの待機中、長期間にわたる非同期プロセスとその現在の状態の情報をデータベース内に自動的に保存するには、データベースをデハイドレーション・ストアとして使用します。データベースにプロセスを格納することにより、プロセスを維持し、システムの停止やネットワークの問題が発生した場合の状態や信頼性の低下を防ぎます。この機能により、BPELプロセスの信頼性とスケーラビリティの両方が向上します。また、クラスタリングおよびフェイルオーバーのサポートにもこの機能を使用できます。
このポイントは、invokeアクティビティとreceiveアクティビティの間に挿入します。融資申請承認Webサービスのデハイドレーション・ポイントの例は、図5-1を参照してください。
非同期機能をBPELプロセスに追加するには、この項のタスクを実行します。
融資申請承認Webサービスに、LoanServiceという名前のパートナ・リンクを作成する方法について説明します。
アプリケーション・ナビゲータで「LoanBroker.bpel」をダブルクリックします。
「ダイアグラム」ウィンドウで、BPELプロセス(「サービス」の下)の右側または左側を右クリックします。
「パートナ・リンクの作成」を選択します。
「パートナ・リンクの作成」ウィンドウが表示されます。
次の詳細を入力して、2つ目のパートナ・タイプを作成し、融資申請承認Webサービスを選択します。
名前: パートナ・リンクの名前を入力します。
プロセス: BPELプロセス名です。
WSDLファイル: 使用するWSDLファイルの名前を入力します。このフィールドの上にある「サービス・エクスプローラ」アイコンをクリックして、適切なWSDLを検索します。
パートナ・リンク・タイプ: BPELプロセスと連携する外部サービスです。リストから選択します。
パートナ・ロール: 外部ソースのロールです(プロバイダなど)。リストから選択します。
マイ・ロール: この連携におけるBPELプロセスのロールです(リクエスタなど)。リストから選択します。
「OK」をクリックします。
融資申請承認Webサービス(United Loan)の新しいパートナ・リンクが.bpel
ファイルの「ダイアグラム」ウィンドウの「サービス」領域に表示されます。
次の手順に従って、invokeアクティビティとrequestという名前のグローバル入力変数を作成します。このアクティビティは、融資申請承認Webサービス(United Loan)を使用して、非同期BPELプロセス・アクティビティを開始します。融資申請承認Webサービスは、request入力変数を使用してクライアントからの融資申請を受け取ります。
コンポーネント・パレットのinvokeアクティビティをreceiveアクティビティの下にドラッグします。
.bpel
ファイルの「ダイアグラム」ウィンドウで、BPELプロセスの右側または左側を右クリックして、メニューから「表示」→「変数」を選択します。
「変数」ウィンドウが表示されます。
「変数」ウィンドウのナビゲーション・ツリーで2番目の「変数」フォルダを選択して「作成」をクリックします。
「変数の作成」ダイアログ・ボックスが表示されます。
変数名を入力し、表示されたオプションから「メッセージ・タイプ」を選択します。
単純型: このオプションでは、XMLスキーマの単純型(文字型やブール型など)を選択できます。
メッセージ・タイプ: このオプションでは、パートナ・リンクまたは現在のBPELプロセスのプロジェクトWSDLファイルに対するWSDLメッセージ・ファイル定義を選択できます(レスポンス・メッセージやリクエスト・メッセージなど)。メッセージ・タイプと関連付けられている変数をinvoke、receiveまたはreplyアクティビティの入力変数または出力変数として指定できます。
メッセージ・タイプを表示するには、「メッセージ・タイプ」オプションを選択し、懐中電灯アイコンを選択して「タイプの選択」ウィンドウを表示します。ここから、「メッセージ・タイプ」ナビゲーション・ウィンドウを開いて「メッセージ・タイプ」→「パートナ・リンク」→「Loan Service」→「United Loan」→「メッセージ・タイプ」→「LoanServiceRequest Message」を選択します。
要素: このオプションでは、現在のBPELプロセスのプロジェクト・スキーマ・ファイルまたはプロジェクトWSDLファイルのXMLスキーマ要素、またはパートナ・リンクのXMLスキーマ要素を選択できます。
「OK」→「閉じる」をクリックします。
invokeアクティビティをダブルクリックし、「起動」ウィンドウを表示します。
「起動」ウィンドウで、「パートナ・リンク」リストから「LoanService」パートナ・リンクを、「操作」リストから「initiate」を選択します。
「入力変数」フィールドの右側の2番目のアイコンをクリックして、手順4で作成した入力変数を選択します。
「変数の選択」ウィンドウが表示され、変数の選択が可能になります。
出力変数はreceive操作で返されるため、指定していません。invokeアクティビティとグローバル入力変数が作成されます。
「OK」をクリックします。
次の手順に従って、receiveアクティビティとresponseという名前のグローバル出力変数を作成します。このアクティビティは、融資申請承認Webサービスのコールバック処理を待機します。融資申請承認Webサービスは、この出力変数を使用して、融資提案結果をクライアントに送信します。
コンポーネント・パレットのreceiveアクティビティを、「手順2: invokeアクティビティの追加」で作成したinvokeアクティビティの直後にドラッグします。
前の手順2〜5と同様の手順で、「変数の作成」ウィンドウを開き、受信情報を格納する変数を作成します。
receiveアクティビティをダブルクリックし、名前をreceive_invokeに変更します。
「パートナ・リンク」リストから「LoanService」を、「操作」リストから「onResult」を選択します。「インスタンスの作成」チェック・ボックスは選択しないでください。
「OK」をクリックします。
receiveアクティビティと出力変数が作成されます。LoanBroker.bpelファイル内の最初のreceiveアクティビティが最初のBPELプロセス・インスタンスを作成したため、2つ目のインスタンスを作成する必要はありません。
このチュートリアルでは、Oracle JDeveloperを使用して非同期サービスで相関セットを使用する方法について説明します。相関セットでは、メッセージ本体の内容に基づいて非同期メッセージを関係付けることができます。相関セットは、連携が単純なinvokeとreceiveアクティビティでない場合に定義します。この例では、invokeアクティビティが関連付けられていないreceiveアクティビティを3つ含むプロセスに相関セットを使用する方法を示します。
この項の内容は次のとおりです。
Designerウィンドウの「アプリケーション・ナビゲータ」セクションでアプリケーションを右クリックします。
「新規プロジェクト」を選択します。
「項目」ウィンドウで「BPELプロセス・プロジェクト」をダブルクリックして、「BPELプロジェクト作成ウィザード」ウィンドウを表示します。
「名前」フィールドに適切な名前を入力します(この例ではMyCorrelationSetを使用)。
「テンプレート」リストで「非同期BPELプロセス」を選択します。
「終了」をクリックします。
次に、アダプタ・サービスを使用する3つのパートナ・リンクを作成します。
この項の内容は次のとおりです。
融資申請読取り用のアダプタ・サービスを持つ初期パートナ・リンクを作成します。
2番目のパートナ・リンクとファイル・アダプタ・サービスの作成
申請レスポンス読取り用のアダプタ・サービスを持つ2番目のパートナ・リンクを作成します。
3番目のパートナ・リンクとファイル・アダプタ・サービスの作成
顧客レスポンス読取り用のアダプタ・サービスを持つ3番目のパートナ・リンクを作成します。
コンポーネント・パレットから「サービス」を選択します。
最初のPartnerLinkアクティビティを、Designerウィンドウの右側にあるヘッダー「サービス」の下の任意の場所にドラッグ・アンド・ドロップします。
「名前」フィールドにFirstReceivePLと入力します。
一番上の3番目のアイコン(「アダプタ・サービスの定義」アイコン)をクリックします。これにより、「アダプタ構成ウィザード」が起動されます。
「ようこそ」ウィンドウで「次へ」をクリックします。
「アダプタ・タイプ」ウィンドウで「ファイル・アダプタ」を選択し、「次へ」をクリックします。
「サービス名」ウィンドウの「サービス名」フィールドにFirstReceiveと入力し、「次へ」をクリックします。
「操作」ウィンドウの「操作タイプ」から「Read File」を選択し、「次へ」をクリックします。「操作名」フィールドには、Readが自動的に入力されます。
「ディレクトリ名は物理パスとして指定されます」を選択します。
「着信ファイル用のディレクトリ(物理パス)」フィールドの横にある「参照」をクリックします。
ファイルの読取り元のディレクトリを選択します(この例ではC:¥files¥receiveprocess¥FirstInputDirを選択)。
「選択」をクリックします。
「次へ」をクリックします。
「ファイルのフィルタ処理」ウィンドウで、適切なファイル・フィルタ処理パラメータを入力します。
「次へ」をクリックします。
「ファイル・ポーリング」ウィンドウで、適切なファイル・ポーリング・パラメータを入力します。
「次へ」をクリックします。
「メッセージ」ウィンドウの「スキーマの場所」フィールドの横にある「参照」をクリックして、「タイプの選択」ウィンドウを表示します。
適切なXSDスキーマ・ファイルを選択します。この例では、スキーマとしてBook1_4.xsdを、スキーマ要素としてLoanApplを選択しています。
「OK」をクリックします。
「スキーマの場所」フィールドと「スキーマ要素」フィールドに値が入力されます(この例ではそれぞれBook1_4.xsdとLoanAppl)。
「次へ」をクリックします。
「終了」をクリックします。
「パートナ・リンク」ウィンドウが再び表示されます。その他すべてのフィールドには値が自動的に入力されます。このウィンドウには次が表示されます。
フィールド | 値 |
---|---|
名前 | FirstReceive |
WSDLファイル | file:/c:OraJDev/jdev/mywork/myapplication/MyCorrelationSet/bpel/FirstReceive.wsdl
c:/OraJDevは、この例で使用しているOracle JDeveloperホームディレクトリ |
パートナ・リンク・タイプ | Read_plt |
パートナ・ロール | 未指定のまま |
マイ・ロール | Read_role |
「OK」をクリックします。
2番目のPartnerLinkアクティビティをFirstReceivePLパートナ・リンク・アクティビティの下にドラッグ・アンド・ドロップします。
「名前」フィールドにSecondReceivePLと入力します。
一番上の3番目のアイコン(「アダプタ・サービスの定義」アイコン)をクリックします。
「ようこそ」ウィンドウで「次へ」をクリックします。
「アダプタ・タイプ」ウィンドウで「ファイル・アダプタ」を選択し、「次へ」をクリックします。
「サービス名」ウィンドウの「サービス名」フィールドにSecondFileReadと入力し、「次へ」をクリックします。この名前は、手順7で入力した名前とは異なる必要があります。
「操作」ウィンドウで「操作タイプ」として「Read File」を選択します。
「操作名」フィールドの名前をRead1に変更します。
「次へ」をクリックします。
「ディレクトリ名は物理パスとして指定されます」を選択します。
「着信ファイル用のディレクトリ(物理パス)」フィールドの横にある「参照」をクリックします。
ファイルの読取り元のディレクトリを選択します(この例ではC:¥files¥receiveprocess¥SecondInputDirを入力)。
「選択」をクリックします。
「次へ」をクリックします。
「ファイルのフィルタ処理」ウィンドウで、適切なファイル・フィルタ処理パラメータを入力します。
「次へ」をクリックします。
「ファイル・ポーリング」ウィンドウで、適切なファイル・ポーリング・パラメータを入力します。
「次へ」をクリックします。
「メッセージ」ウィンドウの「スキーマの場所」フィールドの横にある「参照」をクリックして、「タイプの選択」ウィンドウを表示します。
適切なXSDスキーマ・ファイルを選択します。この例では、スキーマとしてBook1_5.xsdを、スキーマ要素としてLoanAppResponseを選択しています。
「OK」をクリックします。
「スキーマの場所」フィールドと「スキーマ要素」フィールドに値が入力されます(この例ではそれぞれBook1_5.xsdとLoanAppResponse)。
「次へ」をクリックします。
「終了」をクリックします。
「パートナ・リンク」ウィンドウが再び表示されます。その他すべてのフィールドには値が自動的に入力されます。このウィンドウには次が表示されます。
フィールド | 値 |
---|---|
名前 | SecondReceive |
WSDLファイル | file:/c:OraJDev/jdev/mywork/myapplication/MyCorrelationSet/bpel/SecondFileRead.wsdl
c:/OraJDevは、この例で使用しているOracle JDeveloperホームディレクトリ |
パートナ・リンク・タイプ | Read1_plt |
パートナ・ロール | 未指定のまま |
マイ・ロール | Read1_role |
「OK」をクリックします。
3番目のPartnerLinkアクティビティをSecondReceivePLパートナ・リンク・アクティビティの下にドラッグ・アンド・ドロップします。
「名前」フィールドにThirdReceivePLと入力します。
一番上の3番目のアイコン(「アダプタ・サービスの定義」アイコン)をクリックします。
「ようこそ」ウィンドウで「次へ」をクリックします。
「アダプタ・タイプ」ウィンドウで「ファイル・アダプタ」を選択し、「次へ」をクリックします。
「サービス名」ウィンドウの「サービス名」フィールドにThirdFileReadと入力し、「次へ」をクリックします。この名前は、手順7および手順6で入力した名前とは異なる必要があります。
「操作」ウィンドウで「操作タイプ」として「Read File」を選択します。
「操作名」フィールドの名前をRead2に変更します。この名前は一意である必要があります。
「次へ」をクリックします。
「ディレクトリ名は物理パスとして指定されます」を選択します。
「着信ファイル用のディレクトリ(物理パス)」フィールドの横にある「参照」をクリックします。
ファイルの読取り元のディレクトリを選択します(この例ではC:¥files¥receiveprocess¥ThirdInputDirを入力)。
「選択」をクリックします。
「次へ」をクリックします。
「ファイルのフィルタ処理」ウィンドウで、適切なファイル・フィルタ処理パラメータを入力します。
「次へ」をクリックします。
「ファイル・ポーリング」ウィンドウで、適切なファイル・ポーリング・パラメータを入力します。
「次へ」をクリックします。
「メッセージ」ウィンドウの「スキーマの場所」フィールドの横にある「参照」をクリックして、「タイプの選択」ウィンドウを表示します。
適切なXSDスキーマ・ファイルを選択します。この例では、スキーマとしてBook1_6.xsdを、スキーマ要素としてCustResponseを選択します。
「OK」をクリックします。
「スキーマの場所」フィールドと「スキーマ要素」フィールドに値が入力されます(この例ではそれぞれBook1_6.xsdとCustResponse)。
「次へ」をクリックします。
「終了」をクリックします。
「パートナ・リンク」ウィンドウが再び表示されます。その他すべてのフィールドには値が自動的に入力されます。このウィンドウには次が表示されます。
フィールド | 値 |
---|---|
名前 | ThirdReceive |
WSDLファイル | file:/c:OraJDev/jdev/mywork/myapplication/MyCorrelationSet/bpel/ThirdFileRead.wsdl
c:/OraJDevは、この例で使用しているOracle JDeveloperホームディレクトリ |
パートナ・リンク・タイプ | Read2_plt |
パートナ・ロール | 未指定のまま |
マイ・ロール | Read2_role |
「OK」をクリックします。
完成したDesignerウィンドウは次のようになります。
次に、3つのreceiveアクティビティ(各パートナ・リンクにつき1つずつ)を作成します。receiveアクティビティでは、情報の送信元のパートナ・リンクを指定します。
この項の内容は次のとおりです。
「コンポーネント・パレット」セクションの「プロセス・アクティビティ」リストから、ReceiveアクティビティをDesignerウィンドウにドラッグ・アンド・ドロップします。
Receiveアイコンをダブルクリックし、Receiveウィンドウを表示します。
次の詳細を入力して、最初のパートナ・リンク(FirstReceivePL)を最初のreceiveアクティビティと関連付けます。
フィールド | 値 |
---|---|
名前 | receiveFirst |
パートナ・リンク | FirstReceivePL |
インスタンスの作成 | このチェック・ボックスを選択 |
「操作」(Read)フィールドには自動的に入力が行われます。
「変数」フィールドの右側にある最初のアイコンをクリックします。これは、変数を自動作成するアイコンです。
表示された「変数の作成」ウィンドウで「OK」をクリックします。
receiveFirst_Read_InputVariableという名前の変数が「変数」フィールドに自動的に作成されます。
手順3で説明したように、「インスタンスの作成」チェック・ボックスが選択されていることを確認します。
「OK」をクリックします。
「コンポーネント・パレット」セクションの2番目のReceiveアクティビティをreceiveFirst receiveアクティビティの下にドラッグ・アンド・ドロップします。
Receiveアイコンをダブルクリックし、Receiveウィンドウを表示します。
次の詳細を入力して、2番目のパートナ・リンク(SecondReceivePL)を2番目のreceiveアクティビティと関連付けます。
フィールド | 値 |
---|---|
名前 | receiveSecond |
パートナ・リンク | SecondReceivePL |
インスタンスの作成 | このチェック・ボックスは非選択 |
「操作」(Read1)フィールドには自動的に入力が行われます。
「変数」フィールドの右側にある最初のアイコンをクリックします。
表示された「変数の作成」ウィンドウで「OK」をクリックします。
receiveSecond_Read1_InputVariableという名前の変数が「変数」フィールドに自動的に作成されます。
「OK」をクリックします。
「コンポーネント・パレット」セクションの3番目のReceiveアクティビティをreceiveSecond receiveアクティビティの下にドラッグ・アンド・ドロップします。
Receiveアイコンをダブルクリックし、Receiveウィンドウを表示します。
次の詳細を入力して、3番目のパートナ・リンク(ThirdReceivePL)を3番目のreceiveアクティビティと関連付けます。
フィールド | 値 |
---|---|
名前 | receiveThird |
パートナ・リンク | ThirdReceivePL |
インスタンスの作成 | このチェック・ボックスは非選択 |
「操作」(Read2)フィールドには自動的に入力が行われます。
「変数」フィールドの右側にある最初のアイコンをクリックします。
表示された「変数の作成」ウィンドウで「OK」をクリックします。
receiveThird_Read2_InputVariableという名前の変数が「変数」フィールドに自動的に作成されます。
「OK」をクリックします。
各receiveアクティビティが、特定のパートナ・リンクに関連付けられました。
次に、相関セットを作成します。相関トークンのセットは、相関グループのすべてのメッセージで共有されるプロパティのセットです。
この項の内容は次のとおりです。
Oracle JDeveloperの「構造」ウィンドウで、「相関セット」を右クリックして「すべての子ノードを開く」を選択します。
「相関セット」を右クリックして、「相関セットの作成」を選択します。
「相関セットの作成」ウィンドウの「名前」フィールドにCorrelationSet1と入力します。
「プロパティ」セクションで「追加」をクリックして、「プロパティの選択」ウィンドウを表示します。
「プロパティ」を選択し、「作成」(上の最初のアイコン)をクリックして「CorrelationSetプロパティの作成」ウィンドウを表示します。
「名前」フィールドにNameCorrと入力し、「タイプ」フィールドの右側にある懐中電灯アイコンをクリックします。
「タイプの選択」ウィンドウで「string」を選択し、「OK」をクリックします。
「OK」をクリックして、「CorrelationSetプロパティの作成」ウィンドウ、「プロパティの選択」ウィンドウおよび「相関セットの作成」ウィンドウを閉じます。
Oracle JDeveloperの「構造」ウィンドウの「相関セット」セクションに戻ります。
「相関セット」を右クリックして、「相関セットの作成」を選択します。
「相関セットの作成」ウィンドウの「名前」フィールドにCorrelationSet2と入力します。
「プロパティ」セクションで「追加」をクリックして、「プロパティの選択」ウィンドウを表示します。
「プロパティ」を選択し、「作成」をクリックして「CorrelationSetプロパティの作成」ウィンドウを表示します。
「名前」フィールドにIDCorrと入力し、「タイプ」フィールドの右側にある懐中電灯アイコンをクリックします。
「タイプの選択」ウィンドウで「long」を選択し、「OK」をクリックします。
「OK」をクリックして、「CorrelationSetプロパティの作成」ウィンドウ、「プロパティの選択」ウィンドウおよび「相関セットの作成」ウィンドウを閉じます。
次に、相関セットをreceiveアクティビティと関連付けます。次の相関セットのタスクを実行します。
最初の相関グループで、最初と2番目のreceiveアクティビティをCorrelationSet1相関セットと関連付けます。
2番目の相関グループで、2番目と3番目のreceiveアクティビティをCorrelationSet2相関セットと関連付けます。
この項の内容は次のとおりです。
receiveFirst receiveアクティビティをダブルクリックし、Receiveウィンドウを表示します。
「相関」タブをクリックします。
「追加」をクリックして「CorrelationSet1」を選択し、「OK」をクリックします。
「開始」列をyesに設定します。yesに設定すると、このセットが、交換するメッセージに含まれるプロパティの値で開始されます。
「OK」をクリックします。
receiveSecond receiveアクティビティをダブルクリックし、Receiveウィンドウを表示します。
「相関」タブをクリックします。
「追加」をクリックして「CorrelationSet2」を選択し、「OK」をクリックします。
「開始」列をyesに設定します。
「追加」をクリックして「CorrelationSet1」を選択します。
「OK」をクリックします。
CorrelationSet1の「開始」列を「いいえ」に設定します。
「OK」をクリックします。
これにより、最初と2番目のreceiveアクティビティが1つの相関グループにまとめられます。
receiveThird receiveアクティビティをダブルクリックし、Receiveウィンドウを表示します。
「相関」タブをクリックします。
「追加」をクリックして「CorrelationSet2」を選択します。
「OK」をクリックします。
CorrelationSet2の「開始」列を「いいえ」に設定します。
「OK」をクリックします。
これにより、2番目と3番目のreceiveアクティビティが2番目の相関グループにまとめられます。
プロパティ・エイリアスを使用すると、グローバル・プロパティを特定のメッセージ・パートのフィールドにマップできます。これにより、プロパティ名を、メッセージのパートと場所を表すエイリアスにできます。このエイリアスは、XPath式で使用できます。
この項の内容は次のとおりです。
NameCorr相関セットに次の2つのプロパティ・エイリアスを作成します。
NameCorrをreceiveFirst receiveアクティビティのLoanApplメッセージ・タイプ・パートにマップします。このreceiveアクティビティをFirstReceivePLパートナ・リンク(FirstReceive.wsdlファイルで定義)と関連付けます。
NameCorrをreceiveSecond receiveアクティビティの受信メッセージ・タイプ・パートLoanAppResponseにマップします。このreceiveアクティビティをSecondReceivePLパートナ・リンク(SecondFileRead.wsdlファイルで定義)と関連付けます。
Oracle JDeveloperの「構造」セクションで「プロパティ・エイリアス」を右クリックします。
「プロパティ・エイリアスの作成」を選択します。
「プロパティ」リストで「NameCorr」を選択します。
「メッセージ・タイプ」→「パートナ・リンク」→「FirstReceivePL」→「FirstReceive.wsdl」→「メッセージ・タイプ」→「LoanAppl_msg」→Part - LoanApplの順に展開して選択します。
「問合せ」フィールドで[Ctrl]を押してから[Space]キーを押して、次のXPath式を定義します。
/ns2:LoanAppl/ns2:Name
「OK」をクリックします。
「メッセージ・タイプ」→「プロジェクトのWSDLファイル」→「SecondFileRead.wsdl」→「メッセージ・タイプ」→「LoanAppResponse_msg」→Part - LoanAppResponseの順に展開して選択します。
「問合せ」フィールドで[Ctrl]を押してから[Space]キーを押して、次のXPath式を定義します。
/ns4:LoanAppResponse/ns4:APR
IDCorr相関セットに次の2つのプロパティ・エイリアスを作成します。
IDCorrをreceiveSecond receiveアクティビティのLoanAppResponseメッセージ・タイプ・パートにマップします。このreceiveアクティビティをSecondReceivePLパートナ・リンク(SecondFileRead.wsdlファイルで定義)と関連付けます。
IDCorrをreceiveThird receiveアクティビティのCustResponseメッセージ・タイプ・パートにマップします。このreceiveアクティビティをThirdReceivePLパートナ・リンク(ThirdFileRead.wsdlファイルで定義)と関連付けます。
「構造」セクションで「プロパティ・エイリアス」を右クリックします。
「プロパティ・エイリアスの作成」を選択します。
「プロパティ」リストで「IDCorr」を選択します。
「メッセージ・タイプ」→「プロジェクトのWSDLファイル」→「SecondFileRead.wsdl」→「メッセージ・タイプ」→「LoanAppResponse_msg」→Part - LoanAppResponseの順に展開して選択します。
「問合せ」フィールドで[Ctrl]を押してから[Space]キーを押して、次のXPath式を定義します。
/ns4:LoanAppResponse/ns4:APR
「OK」をクリックします。
「メッセージ・タイプ」→「プロジェクトのWSDLファイル」→「ThirdFileRead.wsdl」→「メッセージ・タイプ」→「CustResponse_msg」→Part - CustResponseの順に展開して選択します。
「問合せ」フィールドで[Ctrl]を押してから[Space]キーを押して、次のXPath式を定義します。
/ns6:CustResponse/ns6:APR
これで、設計は完了します。
NameCorr
およびIDCorr
相関セット・プロパティは、Oracle JDeveloperのアプリケーション・ナビゲータにおいてMyCorrelationSet_Properties.wsd
l
ファイルに定義されています。
<definitions name="properties" targetNamespace="http://xmlns.oracle.com/MyCorrelationSet/correlationset" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/" xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <bpws:property name="NameCorr" type="xsd:string"/> <bpws:property name="IDCorr" type="xsd:double"/> </definitions>
プロパティ・エイリアスは、MyCorrelationSet.wsdl
ファイルに定義されています。
<bpws:propertyAlias propertyName="ns1:NameCorr" messageType="ns3:LoanAppl_msg" part="LoanAppl" query="/ns2:LoanAppl/ns2:Name"/> <bpws:propertyAlias propertyName="ns1:NameCorr" messageType="ns5:LoanAppResponse_msg" part="LoanAppResponse" query="/ns4:LoanAppResponse/ns4:APR"/> <bpws:propertyAlias propertyName="ns1:IDCorr" messageType="ns5:LoanAppResponse_msg" part="LoanAppResponse" query="/ns4:LoanAppResponse/ns4:APR"/> <bpws:propertyAlias propertyName="ns1:IDCorr" messageType="ns7:CustResponse_msg" part="CustResponse" query="/ns6:CustResponse/ns6:APR"/>
この例では、BPELプロセスはWebサービス・プロバイダとしては作成されていないので、MyCorrelationSet.wsdl
ファイルはBPELプロセスでは参照されません。このため、相関セットを参照するには、MyCorrelationSet.wsdl
ファイルをFirstReceive.wsdl
ファイル内にインポートする必要があります。
<import namespace="http://xmlns.oracle.com/MyCorrelationSet" location="MyCorrelationSet.wsdl"/>