注意: BPEL Process Managerトランスポート(ユーザー・インタフェースではbpel-10g)は、Oracle SOA Suite 10g リリース3のみとのメッセージングに対応します。Oracle SOA Suite 11g以上で使用するためには、Oracle Service BusによってSOA-DIRECTトランスポートが提供されます。詳細は、第24章「Oracle SOA Suiteトランスポート(SOA-DIRECT)」を参照してください。 |
このドキュメントでは、Oracle Service Busを使用してサービス指向アーキテクチャ(SOA)環境にOracle BPEL Process Managerを導入する方法について説明します。内容は以下のとおりです。
Oracle Service Busでは、Oracle BPEL Process Managerとの通信をサポートしており、サービス指向アーキテクチャ(SOA)にBPELプロセスを含めることができます。Oracle Service BusのOracle BPEL Process Manager用ネイティブ・トランスポート(BPELトランスポート)を使用して、BPELプロセスをWebサービスとしてサービス・バス・レイヤーに公開し、他のサービスからBPELプロセスを呼び出せるようにできます。
同様に、Oracle BPEL Process Managerからサービス・バス・レイヤーにあるサービスを呼び出して、Oracle BPEL Process Manager自体のプロセスで使用できます。
このガイドでは、Oracle Service BusとOracle BPEL Process Managerの組込みの統合(Oracle Service Bus APIレベルで有効な統合)に重点を置いていますが、ソリューションはこのガイドで提供されるものだけではありません。Oracle Service Busに用意されている他の標準の通信プロトコル(HTTP、JMS、Fileなど)を使用することもできます。
Oracle BPEL Process Managerの詳細は、http://www.oracle.com/technology/products/ias/bpel/index.html
を参照してください。
Oracle BPEL Process ManagerとOracle Service Busの間の通信は、SOAPだけを介して行われます。
Oracle Service BusおよびOracle BPEL Process ManagerはSOAP RPCエンコーディングを完全サポートしていません。BPELトランスポートはSOAP RPCエンコーディングのバインディングを受け入れますが、multiRefなど一部のエンコーディング・メカニズムでは実行時エラーが発生する場合があります。
BPELトランスポートは次の機能をサポートしています。
SOAP 1.1。SOAP 1.2は、Oracle Service BusからOracle BPEL Process Managerへの同期通信でのみサポートされています。
SOAPヘッダー
BPELトランスポートには次の制限があります。
添付ファイルなし
WS-SecurityまたはWS-RMなし
Oracle BPEL Process Managerは、APIを使用したトランザクション伝播をサポートしており、BPELトランスポートはトランザクション対応です。そのため、Oracle WebLogic ServerにOracle BPEL Process Managerがデプロイされている場合はトランザクション伝播がサポートされます。たとえば、Oracle BPEL Process Manager以外のサービスでプロセスが始まった場合、Oracle Service BusはBPELトランスポートを通じてそのトランザクションをOracle BPEL Process Managerに伝播し、トランザクションを完了できます。
BPEL Process ManagerからSBトランスポート・ベースのプロキシ・サービスを介したOracle Service Busへのトランザクション伝播もサポートされています。
注意: トランザクション伝播は、OracleサーバーOC4JおよびOracle ASではまだサポートされておらず、IBM WebSphereではまだ認証されていません。 |
Oracle Service BusからOracle BPEL Process Managerへの呼出しはRMIを使用して行われるので、BPELトランスポートは一方向SSLを使用した呼出しレベルのセキュリティをサポートしています。詳細は、34.4.1項「エンドポイントURI」を参照してください。
この項では、Oracle Service Busを介してOracle BPEL Process Managerと通信する簡単で最も一般的な使用例(一方向またはリクエスト/レスポンスの同期通信)について説明します。
図34-1は、Oracle Service Busを介したクライアントとOracle BPEL Process Managerの同期通信パターンを示します。
図34-1 Oracle Service Busを介したOracle BPELプロセスの同期呼出し
以下のガイドラインに従って、クライアントからOracle BPEL Process Managerプロセスを呼び出します。
Oracle Service Busで、呼び出すBPELプロセスに相当するビジネス・サービスを作成します。
WSDLベースのビジネス・サービスを作成します。WSDLは、Oracle BPEL Process Managerから生成します。
ビジネス・サービスの構成で bpel-10g トランスポートを選択します。
表34-2の説明に従ってエンドポイントURIを設定します。
ビジネス・サービスの残りの部分を構成します。34.4項「トランスポート構成のリファレンス」を参照してください。
Oracle Service Busでビジネス・サービスを呼び出すプロキシ・サービスを作成します。2.3項「プロキシ・サービスの操作」を参照してください。
メッセージを正しい会話に関連付けるには、34.2.3項「メッセージと正しい会話の関連付け」を参照してください。
図34-2は、Oracle Service Busを介したOracle BPEL Process Managerとサービス・プロバイダの同期通信パターンを示します。
図34-2 Oracle Service Busを介してサービスを同期的に呼び出すOracle BPELプロセス
以下のガイドラインに従って、Oracle BPEL Process Managerから外部サービスを呼び出します。
呼び出す外部サービスを表すビジネス・サービスをOracle Service Busで作成します。2.2項「ビジネス・サービスの操作」を参照してください。
Oracle Service Busで、ビジネス・サービスを呼び出すプロキシ・サービスを作成します。
ビジネス・サービスを呼び出すために、SOAP WSDLを使用してプロキシを作成する必要があります。プロキシ・サービスを定義するときに、サービス・タイプとして「WSDL Webサービス」を選択し、目的のポートまたはバインディングを選択します。
プロキシ・サービスの構成で sb トランスポートを選択します。
Oracle BPEL Process Managerからプロキシ・サービスを呼び出すために、プロキシ・サービスの有効なWSDLをエクスポートし、Oracle BPEL Process Manager開発環境にインポートします。通常どおり、Oracle BPEL Process Managerからプロキシ・サービスを呼び出します。
構成の詳細は、2.3項「プロキシ・サービスの操作」および第27章「SBトランスポート」を参照してください。
メッセージを正しい会話に関連付けるには、34.2.3項「メッセージと正しい会話の関連付け」を参照してください。
ステートフル・メッセージを使用する場合、Oracle Service BusとOracle BPEL Process Managerの間で同期的に送信されるメッセージは、会話と呼ばれます。Oracle BPEL Process Managerは、メッセージを会話の一部として相互に正しく関連付けるために、以下のメカニズムをサポートしています。これらのメカニズムは互いに独立していて、正しい関連付けを実現するために両方とも使用するように指定できます。
BPEL相関 – BPEL相関はBPEL仕様に含まれています。Oracle Service BusのWSDLベースのビジネス・サービスからBPELプロセスにメッセージを送信すると、BPELエンジンによってメッセージが調べられ、対象のBPELプロセス・インスタンスが検出されます。
WS-Addressingを使用した不明瞭な相関 –クライアントからOracle Service Busを介してBPELプロセスへの会話を開始すると、BPELエンジンによってWS-Addressing SOAPヘッダーの「messageID」の値が調べられ、新しい会話のIDとして使用されます。会話IDは、「RelatesTo」の値としてその会話が終わるまで維持されます。
WS-Addressingの詳細は、「WS-Addressingのリファレンス」にある34.7.2項「MessageID / RelatesTo」を参照してください。会話IDの設定例は、34.8.1項「会話IDの例」を参照してください。
この項では、Oracle Service Busを介したOracle BPEL Process Managerとの非同期通信のより高度な使用例を説明します。
図34-3は、Oracle Service Busを介したOracle BPEL Process Managerとサービス・プロバイダの非同期通信パターンを示します。
図34-3 Oracle Service Busを介したOracle BPELプロセスの非同期呼出し
非同期のメッセージ交換では、リクエストとは別の接続でコールバックが送信されます。
以下のガイドラインに従って、クライアントからOracle Service Busを介してOracle BPEL Process Managerプロセスを非同期的に呼び出します。
Oracle Service Busで2つのプロキシ・サービスを作成します。ビジネス・サービスを呼び出すサービスと、コールバックを処理するサービスです。
リクエスト・プロキシ・サービス
非同期通信では別の接続でコールバックが送信されるので、リクエスト・プロキシでコールバック・アドレスを設定する必要があります。このコールバック・アドレスは、メッセージが正しいクライアントに戻るように、コールバック・プロキシ・サービスとコールバック・ビジネス・サービスに渡されます。
ビジネス・サービスの構成で、「コールバック・プロキシ」を選択します。実行時に、BPELトランスポートでこのプロキシをコールバック・プロキシとして使用します。
ビジネス・サービスでコールバック・プロキシを選択しない場合のコールバック・アドレスの設定方法は、34.7項「WS-Addressingのリファレンス」および34.8.2項「Oracle Service Busを介したBPEL間非同期通信の例」を参照してください。
コールバック・プロキシ・サービス
サービス・タイプとしてWSDL SOAPまたは任意のSOAPサービス、およびSBまたはHTTPトランスポートを使用するようにプロキシを構成します。Oracle BPEL Process ManagerからOracle Service Busへのトランザクション伝播を行う場合はSBトランスポートを使用します。
このプロキシ・サービスをビジネス・サービスのコールバック・プロキシとして選択すると、実行時にBPELトランスポートにより正しいコールバックURIが提供されます。
プロキシ構成の詳細は、2.3項「プロキシ・サービスの操作」を参照してください。
Oracle Service Busで2つのビジネス・サービスを作成します。対話相手のOracle BPEL Process Managerプロセスへのリクエストを行うサービスと、コールバックを処理するサービスです。
リクエスト・ビジネス・サービス
WSDLベースのビジネス・サービスを作成します。WSDLは、Oracle BPEL Process Managerから生成します。サービス・タイプとして「WSDL Webサービス」を選択し、WSDLで適切なバインディングまたはポートを選択します。
ビジネス・サービスの構成で bpel-10g トランスポートを選択します。
ロールを「非同期クライアント」に設定します。
表34-2の説明に従ってエンドポイントURIを設定します。
bpel-10gトランスポート構成ページの「コールバック・プロキシ」フィールドを使用して、作成したコールバック・プロキシを選択します。
コールバック・ビジネス・サービス
コールバックの処理に必要なビジネス・プロセスを構成します。
34.4項「トランスポート構成のリファレンス」を参照してください。ここで説明していない構成情報については、4.2.4項「ビジネス・サービスの「トランスポート構成」ページ」も参照してください。
この項では、Oracle Service Busを介したサービスの呼出しを行うためにOracle BPEL Process Managerで必要な手順と構成について説明します。
図34-4は、Oracle Service Busを介したOracle BPEL Process Managerとサービス・プロバイダの非同期通信パターンを示します。
図34-4 Oracle Service Busを介してサービスを非同期的に呼び出すOracle BPELプロセス
非同期のメッセージ交換では、リクエストとは別の接続でコールバックが送信されます。
以下のガイドラインに従って、Oracle BPEL Process ManagerからOracle Service Busを介して外部サービスを非同期的に呼び出します。
Oracle Service Busで2つのプロキシ・サービスを作成します。ビジネス・サービスを呼び出すリクエスト・サービスと、コールバックを処理するサービスです。
リクエスト・プロキシ・サービス
sbトランスポートを使用するようにプロキシ・サービスを構成します。
非同期通信では別の接続でコールバックが送信されるので、メッセージが正しいクライアントに戻るようにコールバック・アドレスを設定する必要があります。
コールバック・アドレスの設定の詳細は、「WS-Addressingのリファレンス」にある34.7.1項「ReplyTo」と、34.8.2項「Oracle Service Busを介したBPEL間非同期通信の例」を参照してください。
コールバック・プロキシ・サービス
ビジネス・サービスにコールバック・アドレスを渡すようにプロキシ・サービスを構成します。コールバックURIはリクエストに指定されています。URI再書込みを使用してコールバックURIを抽出し、ビジネス・サービスに転送します。
プロキシ構成の詳細は、2.3項「プロキシ・サービスの操作」および第27章「SBトランスポート」を参照してください。
Oracle Service Busで2つのビジネス・サービスを作成します。外部サービスを呼び出すリクエスト・ビジネス・サービスと、コールバック・ビジネス・サービスです。
リクエスト・ビジネス・サービス
外部サービスを呼び出すようにビジネス・サービスを構成します。
コールバック・ビジネス・サービス
コールバック・ビジネス・サービスは、コールバック・プロキシからコールバック・アドレスを受け取ります。コールバック・プロキシ・サービスで実行されるURI再書込みによって、レスポンスの送信先のBPELプロセスを判断します。
WSDLベースのビジネス・サービスを作成します。WSDLは、Oracle BPEL Process Managerから生成します。サービス・タイプとして「WSDL Webサービス」を選択し、WSDLで適切なバインディングまたはポートを選択します。
ビジネス・サービスの構成で bpel-10g トランスポートを選択します。
エンドポイントURIをbpel://callbackに設定します(表34-2の説明に従ってください)。コールバックURIは、コールバック・プロキシ・サービスによって提供されます。
注意: トレーディング・パートナ契約によってクライアントとBPELサービスがリンクしている場合など、コールバック・アドレスが常にわかっている場合は、bpel://callbackを使用するのではなく、そのコールバック・アドレスをコールバック・ビジネス・サービスに設定できます。 |
bpel-10gトランスポートの構成ページでロールを「サービス・コールバック」に設定します(表34-2の説明に従ってください)。
ビジネス・サービスの他の設定を構成します。34.4項「トランスポート構成のリファレンス」を参照してください。ここで説明していない構成情報については、4.2.4項「ビジネス・サービスの「トランスポート構成」ページ」も参照してください。
ここでは、BPELトランスポート固有の構成オプションについて説明します。ビジネス・サービスの他の構成オプションは、2.2項「ビジネス・サービスの操作」を参照してください。
BPELトランスポートのURIフォーマットは表34-2で説明します。これらは、EclipseまたはOracle Service Busコンソールのビジネス・サービスのメインの「トランスポート」ページで構成します。
表34-2 エンドポイントURIの指定
トランスポートのロール | エンドポイントURIフォーマット |
---|---|
同期クライアントまたは非同期クライアント・ロール |
次のエンドポイントURIフォーマットで、大カッコで囲まれているのはオプションの要素です。その次に説明を示します。 protocol://host[:port][/protocol-path]/domain/process[/version[/partnerlink/role]] protocol 以下のいずれかのRMI/JNDIプロトコルを使用します。
エンドポイントURIの他の要素の説明は次のとおりです。
クラスタの例 クラスタ内の特定のノードを対象とする場合は、次のURIフォーマットを使用することもできます。 protocol://host1:port1,host2:port2/<remainder_of_URI> |
サービス・コールバック |
bpel://callback トレーディング・パートナ契約によってクライアントとBPELサービスがリンクしている場合など、コールバック・アドレスが常にわかっている場合は、bpel://callbackを使用するのではなく、そのコールバック・アドレスをエンドポイントURIに設定できます。 |
表34-2に、EclipseまたはOracle Service BusコンソールにおけるBPELトランスポートの構成ページに含まれるオプションを示します。
表34-3 BPELトランスポート構成
プロパティ | 説明 |
---|---|
ロール |
BPELトランスポートは、Oracle Service BusからOracle BPEL Process Managerにリクエスト・メッセージを送信するために使用します。ビジネス・サービスでは、次のロールを処理できます。
|
コールバック・プロキシ |
このオプションのフィールドは、非同期クライアント・ロールでのみ使用可能です。このフィールドでは、リクエストを行ったOracle Service Busクライアントへのコールバックのルーティングに使用されるプロキシ・サービス(WSDL SOAPまたは任意のSOAPタイプのSBまたはHTTPプロキシである必要があります)を選択します。詳細は、34.3項「高度な使用例(非同期)」のガイドラインを参照してください。 |
サービス・アカウント |
JNDIコンテキスト・セキュリティの場合は、Oracle BPEL Process Manager配信サービスへのアクセスに使用されます。「参照」をクリックし、サービス・アカウントを選択します。サービス・アカウントを指定しない場合は、匿名サブジェクトが使用されます。 静的またはパススルーなど、構成できるサービス・アカウントのタイプに制限はありませんが、ランタイムはユーザー名とパスワードにアクセスできる必要があります。 |
トランザクションを中断 |
「トランザクションを中断」を選択すると、ビジネス・サービスがトランザクションによって呼び出された場合でも、ビジネス・サービスは非トランザクションになります。 「トランザクションを中断」を選択しない場合は、次のようになります。
BPELトランスポートでは、次の状況で「トランザクションを中断」オプションが無視されます。
トランザクション伝播の説明については、34.1.2項「トランザクション伝播」を参照してください。 |
ディスパッチ・ポリシー |
このエンドポイントのディスパッチ・ポリシーに使用するOracle WebLogic Serverワーク・マネージャのインスタンスを選択します。デフォルトのワーク・マネージャは、他にワーク・マネージャがない場合に使用されます。 ワーク・マネージャの詳細は、『Oracle Fusion Middleware Oracle WebLogic Serverサーバー環境の構成』のワーク・マネージャを使用したスケジューリング済作業の最適化に関する項を参照してください。 |
Oracle BPEL Process Managerのセキュリティは、EJBレベルで扱われます。
BPELトランスポートは、表34-2で説明したように、JNDIコンテキストの作成およびEJBルックアップに使用するJNDIの「サービス・アカウント」オプションをサポートしています。BPELトランスポートはユーザー名とパスワードを取得します。サービス・アカウントが構成されていない場合は、匿名サブジェクトが仮定されます。
BPELトランスポートは、呼出しレベルのセキュリティもサポートしており、Oracle Service BusからOracle BPEL Process ManagerへのURIのプロトコル部分で一方向SSLを指定できます。詳細は、34.4.1項「エンドポイントURI」を参照してください。
(ormisおよびopmnsプロトコルを使用した)Oracle Service BusからOC4JおよびOracle ASサーバーへの通信にSSLを使用するには、Oracle Service Busサーバーで、ドメインのsetDomainEnvスクリプトに次のプロパティを追加してSSLを構成する必要があります。
-Djavax.net.ssl.trustStorePassword=passphrase
-Djavax.net.ssl.trustStore=<信頼性のある証明書のキーストアへのファイル・パス>
BPELトランスポートでは、Oracle BPEL Process Managerの例外を複数の方法で処理します。
BPELプロセスの返信にフォルトがあった場合、BPELトランスポートはAPIでそのフォルト・メッセージをインターセプトし、SOAPフォルトに変換します。
BPELトランスポートのアプリケーション・エラー自動処理機能により、アプリケーション・エラーが発生した場合に自動的にアプリケーション・エラー(この場合はBPELフォルト)を再試行するかどうかを指定できます。たとえば、問題が解決するまでアプリケーション・エラーで必ず失敗するように指定できます。アプリケーションの再試行を有効または無効にするには、「トランスポート構成」・ページの「アプリケーション・エラーの再試行」オプションを使用します。
Oracle BPEL Process Managerは、エラーではない以下の例外を送出することがあります。BPELトランスポートでは、これらの例外を自動的にTransportException接続エラーとして分類します。
NamingException
RemoteException
BPELトランスポートの接続エラー自動処理機能により、接続エラーを再試行するかどうか、および接続エラーの再試行頻度を指定できます。再試行回数、および接続エラー時に次の再試行まで待機する秒数を指定するには、「トランスポート構成」ページの「再試行回数」オプションと「再試行の反復間隔」オプションを使用します。「再試行の反復間隔」を0に設定すると、接続エラーは再試行されません。
ここでは、BPELトランスポートとOracle BPEL Process Managerの通信に使用する特定のWS-Addressingプロパティについて説明します。また、34.3項「高度な使用例(同期)」のガイドラインで取り上げた、非同期通信でコールバック・アドレスを指定する方法についても説明します。
WS-Addressingの例は、34.8項「XMLの例」を参照してください。
非同期通信では、リクエストとは別の接続でコールバックが送信されます。サービス開発者は、非同期のやり取りで正しいコールバック・アドレスを提供してコールバックが正しいクライアントに送信されるようにする必要があります。
BPELトランスポートには、正しいコールバック・アドレスを指定するためのメカニズムが組み込まれています。Oracle Service BusでBPELビジネス・サービスを作成するときに、コールバックを処理するコールバック・プロキシを選択でき、BPELトランスポートによって正しいコールバック・アドレスが自動的に設定されます。手動で「ReplyTo」を指定する必要はありません。
詳細は、34.3.1項「非同期: Oracle BPEL Process Managerのプロセスの呼出し」を参照してください。
Oracle BPEL Process ManagerからOracle Service Busを介して外部サービスを呼び出す場合は、コールバック・アドレスを手動で設定する必要があります。WS-Addressingを使用して設定するには、リクエスト・プロキシ・サービスでコールバック・アドレスを「ReplyTo」の値として設定します。そのURIがビジネス・サービスのBPELトランスポートによってコールバック・アドレスとして使用されます。
詳細は、34.3.2項「非同期: Oracle BPEL Process Managerからのサービス・プロバイダの呼出し」を参照してください。
「MessageID」および「RelatesTo」は、Oracle Service BusとOracle BPEL Process Managerの会話で会話IDの格納に使用され、関連するメッセージが同じ会話内に維持されるようにします。
BPELトランスポートでは、特定の操作が開始操作か続行操作かを指定できません。かわりに、BPELトランスポートでは、「MessageID」および「RelatesTo」プロパティを検索し、それぞれ設定します。
次に、同期会話と非同期会話で「MessageID」と「RelatesTo」がどのように使用されるかを説明します。
同期会話:最初のリクエストで、「MessageID」によって会話IDが決定されます。残りの通信で、会話IDはRelatesToの値として提供されます。
「MessageID」または「RelatesTo」に値が割り当てられていない場合、BPELトランスポートは、会話が発生していないか、またはOracle BPEL Process Managerが相関付けを処理中であると想定します。
非同期コールバック: 最初のリクエストで、「MessageID」によって会話IDが決定されます。残りの通信で、会話IDはコールバックの「RelatesTo」の値として提供されます。
「MessageID」または「RelatesTo」に値が割り当てられていない場合、BPELトランスポートは、会話が発生していないか、またはOracle BPEL Process Managerが相関付けを処理中であると想定します。
メッセージが正しい会話に関連付けられるように会話IDを設定する方法の詳細は、 34.2.3項「メッセージと正しい会話の関連付け」および34.8.1項「会話IDの例」を参照してください。
Oracle Service BusとOracle BPEL Process Managerの間のXMLメッセージングの問題の例を以下に示します。
この項では、Oracle Service BusとOracle BPEL Process Managerの会話内のメッセージに共通IDを設定する様々な例を挙げます。
図34-5では、クライアントがOracle BPEL Process Managerのプロセスを同期的に呼び出しています。ビジネス・サービス(B1)は、BPELトランスポートを使用してプロセスを呼び出します。プロキシ・サービス(P1)は、必要な会話IDマッピングを処理します。
この項の例では、WSDLで定義された以下のポートおよびメッセージ定義を使用します。
<wsdl:types> <xsd:schema targetNamespace="http://www.sample.org/spec/samples/types" elementFormDefault="qualified"> <xsd:complexType name="ValueHolder"> <xsd:all> <xsd:any minOccurs="1"/> </xsd:all> </xsd:complexType> </xsd:schema> </wsdl:types> <message name="create"/> <message name="putRequest"> <part name="key" type="xsd:string"/> <part name="value" type="types:ValueHolder"/> </message> <message name="putResponse"> <part name="value" type="types:ValueHolder"/> </message> ... <message name="dispose"/> <portType name="ServiceMap"> <operation name="create"> <input message="tns:create"/> </operation> <operation name="put"> <input message="tns:putRequest"/> <output message="tns:putResponse"/> </operation> ... <operation name="dispose"> <input message="tns:dispose"/> </operation> </portType>
この例は、WS-Addressingを使用して会話内のメッセージに会話IDを設定する方法を示しています。
図34-5に通信パターンが示されています。
作成操作
<soap:Envelope>
<soap:Header>
<wsa03:MessageID>uuid:123456789</wsa03:MessageID>
</soap:Header>
<soap:Body>
<create/>
</soap:Body>
</soap:Envelope>
プット操作
<soap:Envelope>
<soap:Header>
<wsa03:MessageID>uuid:111111111</wsa03:MessageID>
<wsa03:RelatesTo>uuid:123456789</wsa03:RelatesTo>
</soap:Header>
<soap:Body>
<put>
<key>key</key>
<value>
<PO/>
</value>
</put>
</soap:Body>
</soap:Envelope>
<soap:Envelope>
<soap:Body>
<putResponse>
<value/>
</putResponse>
</soap:Body>
</soap:Envelope>
<put>操作にもMessageIDがありますが、RelatesToに会話IDを示す値があるので無視されます。
この例は、メッセージ・ペイロード・データを使用して会話内のメッセージに会話IDを設定する方法を示しています。
これらの例では、プロキシ・サービスがIDをMessageID/RelatesTo SOAPヘッダーにマッピングします。
図34-5に通信パターンが示されています。
作成操作
クライアントからプロキシ・サービス
<soap:Envelope>
<soap:Body>
<create/>
</soap:Body>
</soap:Envelope>
<soap:Envelope>
<soap:Body>
<createResponse>
<mapID>uuid:123456789</mapID>
</createResponse>
</soap:Body>
</soap:Envelope>
プロキシ・サービスからBPELプロセス(ビジネス・サービスを経由)
<soap:Envelope> <soap:Header> <wsa03:MessageID>uuid:123456789</wsa03:MessageID> </soap:Header> <soap:Body> <create/> </soap:Body> </soap:Envelope>
説明なし: IDはプロキシ・サービス・パイプラインのリクエストで生成され、プロセスを呼び出す前に<wsa03:MessageID>として挿入されました。プロセス側では、作成操作は一方向の操作なので、クライアントに応答する前にSOAPレスポンスが作成される必要があります。プロキシ・サービスで生成されたIDがレスポンスによって返送されます。
プット操作
クライアントからプロキシ・サービス
<soap:Envelope>
<soap:Body>
<put>
<mapID>uuid:123456789</mapID>
<key>key</key>
<value>
<PO/>
</value>
</put>
</soap:Body>
</soap:Envelope>
<soap:Envelope>
<soap:Body>
<putResponse>
<value/>
</putResponse>
</soap:Body>
</soap:Envelope>
プロキシ・サービスからBPELプロセス(ビジネス・サービスを経由)
<soap:Envelope> <soap:Header> <wsa03:RelatesTo>uuid:123456789</wsa03:RelatesTo> </soap:Header> <soap:Body> <put> <key>key</key> <value> <PO/> </value> </put> </soap:Body> </soap:Envelope> <soap:Envelope> <soap:Body> <putResponse> <value/> </putResponse> </soap:Body> </soap:Envelope>
破棄操作
クライアントからプロキシ・サービス
<soap:Envelope>
<soap:Body>
<dispose>
<mapID>uuid:123456789</mapID>
</dispose>
</soap:Body>
</soap:Envelope>
プロキシ・サービスからBPELプロセス(ビジネス・サービスを経由)
<soap:Envelope>
<soap:Header>
<wsa03:RelatesTo>uuid:123456789</wsa03:RelatesTo>
</soap:Header>
<soap:Body>
<dispose/>
</soap:Body>
</soap:Envelope>
これらの例では、クライアントがWS-Addressing仕様の新しいバージョン(wsa04接頭辞)を使用します。プロキシ・サービスで、wsa03接頭辞を使用するようにSOAPヘッダーの変換を行う必要があります。プロキシ・サービス開発者はトランスフォーメーションを構成します。
図34-5に通信パターンが示されています。
作成操作
クライアントからプロキシ・サービス
<soap:Envelope> <soap:Header> <wsa04:MessageID>uuid:123456789</wsa04:MessageID> </soap:Header> <soap:Body> <create/> </soap:Body> </soap:Envelope>
プロキシ・サービスからBPELプロセス(ビジネス・サービスを経由)
<soap:Envelope> <soap:Header> <wsa03:MessageID>uuid:123456789</wsa03:MessageID> </soap:Header> <soap:Body> <create/> </soap:Body> </soap:Envelope>
プット操作
クライアントからプロキシ・サービス
<soap:Envelope> <soap:Header> <wsa04:MessageID>uuid:111111111</wsa04:MessageID> <wsa04:RelatesTo>uuid:123456789</wsa04:RelatesTo> </soap:Header> <soap:Body> <put> <key>key</key> <value> <PO/> </value> </put> </soap:Body> </soap:Envelope> <soap:Envelope> <soap:Body> <putResponse> <value/> </putResponse> </soap:Body> </soap:Envelope>
プロキシ・サービスからBPELプロセス(ビジネス・サービスを経由)
<soap:Envelope> <soap:Header> <wsa03:MessageID>uuid:111111111</wsa03:MessageID> <wsa03:RelatesTo>uuid:123456789</wsa03:RelatesTo> </soap:Header> <soap:Body> <put> <key>key</key> <value> <PO/> </value> </put> </soap:Body> </soap:Envelope> <soap:Envelope> <soap:Body> <putResponse> <value/> </putResponse> </soap:Body> </soap:Envelope>
次の例は、Oracle Service Busを介して別のBPELプロセスを非同期的に呼び出すBPELプロセスに関係するSOAPヘッダーを示します。
図34-6では、P1とP2はプロキシ・サービスであり、B1およびB2ビジネス・サービスにメッセージを渡します(そして、変換を実行します)。B1およびB2、Oracle Service Bus BPELトランスポートを使用してBPELプロセスを呼び出すために必要です。
図34-6 Oracle Service Busを介して別のBPELプロセスを呼び出すBPELプロセス
次のSOAPヘッダー例は、図34-6を参照してください。
<message name="LoanServiceRequestMessage"> <part name="payload" element="types:loanApplication"/> </message> <message name="LoanServiceResultMessage"> <part name="payload" element="types:loanOffer"/> </message> <portType name="LoanService"> <operation name="initiate"> <input message="tns:LoanServiceRequestMessage"/> </operation> </portType> <portType name="LoanServiceCallback"> <operation name="onResult"> <input message="tns:LoanServiceResultMessage"/> </operation> </portType>
<soap:Envelope> <soap:Header> <wsa03:ReplyTo> <wsa03:Address> ormi://serverB:7001/default/AmericanLoanClient/1.0/service/LoanServiceRequester </wsa03:Address> </wsa03:ReplyTo> <MessageID>AmericanLoanClient~1.0/60007</MessageID> </soap:Header> <soap:Body > <loanApplication> ... </loanApplication> </soap:Body> </soap:Envelope>
<soap:Envelope> <soap:Header> <wsa03:ReplyTo> <wsa03:Address>http://serverB:7001/P2</wsa03:Address> <wsa03:ReferenceProperties> <osb:Callback> <osb:Address> ormi//localhost/default/AmericanLoanClient/1.0/service/LoanServiceRequester </osb:Address> </osb:Callback> </wsa03:ReferenceProperties> </wsa03:ReplyTo> <MessageID>AmericanLoanClient~1.0/60007</MessageID> </soap:Header> <soap:Body > <loanApplication> ... </loanApplication> </soap:Body> </soap:Envelope>
ReplyToコールバック・アドレスはB1で設定されます。B1は、表34-2の説明にあるように、BPELトランスポート構成の「コールバック・プロキシ」フィールドから値を取得します。B1のコールバック・プロキシはP2です。
元のreplyTo情報は、(後に続く) onResultコールバック・メッセージに反映されるように、ラップして参照プロパティとして送信する必要があります。
注意: このサンプルでは、説明のためにosb:Callbackとosb:Addressを使用しています。WS-Addressingのサポートのために定義された標準またはOracle Service Bus標準の要素はありません。 |
<soap:Envelope> <soap:Header> <wsa03:RelatesTo>AmericanLoanClient~1.0/60007</wsa03:RelatesTo> <osb:Callback> <osb:Address> ormi//localhost/default/AmericanLoanClient/1.0/service/LoanServiceRequester </osb:Address> </osb:Callback> </soap:Header> <soap:Body > <loanOffer> ... </loanOffer> </soap:Body> </soap:Envelope>
参照プロパティosb:Callbackは、Oracle BPEL Process ManagerエンジンによってSOAPヘッダーとして返送されます。
<soap:Envelope>
<soap:Header>
<wsa03:RelatesTo>AmericanLoanClient~1.0/60007</wsa03:RelatesTo>
</soap:Header>
<soap:Body >
<loanOffer>
...
</loanOffer>
</soap:Body>
</soap:Envelope>
この一時的なosb:Callbackヘッダーはプロキシ・サービスP2で削除されますが、このヘッダーを削除する前に、ビジネス・サービスB2のBPELトランスポートがコールバック・メッセージを正しいBPELプロセスに送信できるようにreplyToアドレス値が$outbound変数にコピーされます。