この章では、BPELトランスポートの概要と、サービスでの使用および構成方法について説明します。BPELトランスポートを使用すると、Service Busを使用してサービス指向アーキテクチャ(SOA)環境にOracle BPEL Process Manager (Oracle BPEL PM)を導入できます。
注意:
BPELトランスポート(ユーザー・インタフェースではbpel-10g)は、Oracle SOA Suite 10g リリース3のみとのメッセージングに対応します。SOA Suite 11g以上で使用するためには、Service BusによってSOA-DIRECTトランスポートが提供されます。詳細は、「SOA-DIRECTトランスポートの使用」を参照してください。
この章の構成は、次のとおりです。
Service Busでは、Oracle BPEL Process Managerとの通信をサポートしており、サービス指向アーキテクチャ(SOA)にBPELプロセスを含めることができます。Service BusのOracle BPEL PM用ネイティブBPELトランスポートを使用して、BPELプロセスをWebサービスとしてサービス・バス・レイヤーに公開し、他のサービスからBPELプロセスを呼び出すことができます。同様に、Oracle BPEL PMからサービス・バス・レイヤーにあるサービスを呼び出して、Oracle BPEL PM自体のプロセスで使用できます。
Service Bus APIレベルでは、Service BusとOracle BPEL Process Managerの組込み統合が有効になっています。この章では、このタイプの統合に重点を置いていますが、このようなソリューションに限定されるわけではありません。Service Busに用意されている他の標準の通信プロトコル(HTTP、JMS、Fileなど)を使用することもできます。
Oracle BPEL Process Managerの詳細は、http://www.oracle.com/technetwork/middleware/bpel/overview/index.html
を参照してください。
Oracle BPEL Process ManagerとService Busの間の通信は、SOAPのみを介して行われます。Service BusおよびOracle BPEL PMはSOAP RPCエンコーディングを完全サポートしていません。BPELトランスポートはSOAP RPCエンコーディングのバインディングを受け入れますが、multiRefなど一部のエンコーディング・メカニズムではランタイム・エラーが発生する場合があります。
BPELトランスポートは次の機能をサポートしています。
SOAP 1.1。SOAP 1.2は、Service BusからOracle BPEL PMへの同期通信でのみサポートされています。
SOAPヘッダー
BPELトランスポートには次の制限があります。
添付ファイルなし
WS-SecurityまたはWS-RMなし
Oracle BPEL PMは、APIを使用したトランザクション伝播をサポートしており、BPELトランスポートはトランザクション対応です。そのため、Oracle WebLogic ServerにOracle BPEL PMがデプロイされている場合はトランザクション伝播がサポートされます。たとえば、Oracle BPEL PM以外のサービスでプロセスが始まった場合、Service BusはBPELトランスポートを通じてそのトランザクションをOracle BPEL PMに伝播し、トランザクションを完了できます。
Oracle BPEL PMからSBトランスポート・ベースのプロキシ・サービスを使用したService Busへのトランザクション伝播もサポートされています。
注意:
トランザクション伝播は、OracleサーバーOC4JおよびOracle ASではまだサポートされておらず、IBM WebSphereではまだ認証されていません。
Service BusからOracle BPEL PMへの呼出しはRMIを使用して行われるので、BPELトランスポートは一方向SSLを使用した呼出しレベルのセキュリティをサポートしています。詳細は、「BPELトランスポートのエンドポイントURI」を参照してください。
BPELトランスポートは、次の表に示す環境変数(各変数は、BPELトランスポートの構成時に指定するプロパティに対応)を宣言します。環境変数の値は、Service Busプロジェクトを様々なデプロイメント環境間で移動するときに、トランスポート構成自体を更新することなく更新できます。環境値の詳細は、『Oracle Service Busの管理』のOracle Service Bus環境のカスタマイズに関する項を参照してください。
表34-1 BPELトランスポートの環境変数
環境変数 | 説明 |
---|---|
ディスパッチ・ポリシー |
このエンドポイントのディスパッチ・ポリシーに使用するWebLogic Serverワーク・マネージャのインスタンスを選択します。デフォルトのワーク・マネージャは、他にワーク・マネージャがない場合に使用されます。 ワーク・マネージャの詳細は、次の説明を参照してください。
|
サービス・アカウント |
JNDIコンテキスト・セキュリティの場合に、Oracle BPEL Process Manager配信サービスへのアクセスに使用されるService Busサービス・アカウント・リソース。 |
エンドポイントURI |
サービスのURI。 |
この項では、Service Busを介したOracle BPEL Process Managerとの通信の最も一般的な使用例を説明します。これらは簡単な一方向またはリクエスト/レスポンス型の同期通信を表します。
図34-1に、Service Busを介したクライアントとOracle BPEL Process Managerの同期通信パターンを示します。
次のガイドラインに従って、クライアントからOracle BPEL Process Managerプロセスを呼び出します。
呼び出すBPELプロセスに相当するService Busビジネス・サービスを作成します。
WSDLベースのビジネス・サービスを作成します。WSDLファイルは、Oracle BPEL Process Managerから生成します。
ビジネス・サービスの構成で bpel-10g トランスポートを選択します。
表34-2の説明に従ってエンドポイントURIを設定します。
ビジネス・サービスの残りの部分を構成します。「BPELトランスポート構成のリファレンス」を参照してください。
クライアントからのメッセージを受け入れるプロキシ・サービスをService Busで作成します。
プロキシ・サービスからビジネス・サービスを呼び出すパイプラインをService Busで作成します。
メッセージを正しい会話に関連付けるには、「メッセージと正しい会話の関連付け」を参照してください。
図34-2は、Service Busを介したOracle BPEL Process Managerとサービス・プロバイダの同期通信パターンを示します。
図34-2 Service Busを介してサービスを同期的に呼び出すOracle BPELプロセス
次のガイドラインに従って、Oracle BPEL Process Managerから外部サービスを呼び出します。
呼び出したい外部サービスを表すService Busでのビジネス・サービスを作成します。
ビジネス・サービスを呼び出すプロキシ・サービスとその関連パイプラインをService Busで作成します。
ビジネス・サービスを呼び出すには、SOAP WSDLファイルを使用してプロキシ・サービスを作成する必要があります。プロキシ・サービスを定義する際に、WSDLサービス・タイプを選択し、目的のポートまたはバインディングを選択します。
プロキシ・サービスの構成でSBトランスポートを選択します。
Oracle BPEL Process Managerからプロキシ・サービスを呼び出すために、プロキシ・サービスの有効なWSDLファイルをエクスポートし、Oracle BPEL Process Manager開発環境にインポートします。通常どおり、Oracle BPEL Process Managerからプロキシ・サービスを呼び出します。
構成情報については、Service Busで提供されるオンライン・ヘルプを参照してください。
メッセージを正しい会話に関連付けるには、「メッセージと正しい会話の関連付け」を参照してください。
ステートフル・メッセージを使用する場合、Service BusとOracle BPEL Process Managerの間で同期的に送信されるメッセージは、会話と呼ばれます。Oracle BPEL Process Managerは、メッセージを会話の一部として相互に正しく関連付けるために、次のメカニズムをサポートしています。これらのメカニズムは互いに独立していて、正しい関連付けを実現するために両方とも使用するように指定できます。
BPEL相関: BPEL相関はBPEL仕様に含まれています。Service BusのWSDLベースのビジネス・サービスからBPELプロセスにメッセージを送信すると、BPELエンジンによってメッセージが調べられ、ターゲットのBPELプロセス・インスタンスが検出されます。
WS-Addressingを使用した不明瞭な相関: クライアントからService Busを介してBPELプロセスへの会話を開始すると、BPELエンジンによってWS-Addressing SOAPヘッダーのmessageIDの値が調べられ、新しい会話のIDとして使用されます。会話IDは、「RelatesTo」の値としてその会話が終わるまで維持されます。
WS-Addressingの詳細は、「WS-Addressingのリファレンス」にある「MessageID / RelatesTo」を参照してください。会話IDの設定例は、「会話IDの例」を参照してください。
この節では、Service Busを介したOracle BPEL Process Managerとの非同期通信のより高度な使用例を説明します。
図34-3は、Service Busを介したOracle BPEL Process Managerとサービス・プロバイダの非同期通信パターンを示します。
非同期のメッセージ交換では、リクエストとは別の接続でコールバックが送信されます。
次のガイドラインに従って、クライアントからService Busを介してOracle BPEL Process Managerプロセスを非同期的に呼び出します。
2つのプロキシ・サービスとその関連パイプラインをService Busで作成します。ビジネス・サービスを呼び出すプロキシ・サービスと、コールバックを処理するプロキシ・サービスになります。
リクエスト・プロキシ・サービスおよびパイプライン: 非同期通信では別の接続でコールバックが送信されるので、リクエスト・プロキシでコールバック・アドレスを設定する必要があります。このコールバック・アドレスは、メッセージが正しいクライアントに戻るように、コールバック・プロキシ・サービスとコールバック・ビジネス・サービスに渡されます。
ビジネス・サービスの構成で、コールバック・プロキシを選択します。実行時に、BPELトランスポートでこのプロキシをコールバック・プロキシとして使用します。ビジネス・サービスでコールバック・プロキシを選択しない場合のコールバック・アドレスの設定方法は、「WS-Addressingのリファレンス」および「Service Busを介したBPEL間非同期通信の例」を参照してください。
コールバック・プロキシ・サービスおよびパイプライン: WSDL SOAPまたは任意のSOAPサービス・タイプとSBまたはHTTPトランスポートを使用するようにプロキシを構成します。Oracle BPEL Process ManagerからService Busへのトランザクション伝播を行う場合はSBトランスポートを使用します。
このプロキシ・サービスをビジネス・サービスのコールバック・プロキシとして選択すると、実行時にBPELトランスポートにより正しいコールバックURIが提供されます。
Service Busで、対話相手のOracle BPEL Process Managerプロセスへのリクエストを行うサービスと、コールバックを処理するサービスの、2つのビジネス・サービスを作成します。
リクエスト・ビジネス・サービス: WSDLベースのビジネス・サービスを作成します。WSDLファイルは、Oracle BPEL Process Managerから生成します。WSDLサービス・タイプを選択し、WSDLファイルで適切なバインディングまたはポートを選択します。
ビジネス・サービスの構成で bpel-10g トランスポートを選択します。
ロールを「非同期クライアント」に設定します。
表34-2に記載されているエンドポイントURIを指定します。
BPELトランスポート構成ページの「コールバック・プロキシ」フィールドを使用して、作成したコールバック・プロキシを選択します。
コールバック・ビジネス・サービス: コールバックの処理に必要なビジネス・プロセスを構成します。
このガイドで説明していない構成情報については、Service Busで提供されるオンライン・ヘルプを参照してください。
この項では、Service Busを介したサービスの呼出しを行うためにOracle BPEL Process Managerで必要な手順と構成について説明します。
図34-4は、Service Busを介したOracle BPEL Process Managerとサービス・プロバイダの非同期通信パターンを示します。
図34-4 Service Busを介してサービスを非同期的に呼び出すOracle BPELプロセス
非同期のメッセージ交換では、リクエストとは別の接続でコールバックが送信されます。
次のガイドラインに従って、Oracle BPEL Process ManagerからService Busを介して外部サービスを非同期的に呼び出します。
2つのプロキシ・サービスとその関連パイプラインをService Busで作成します。1つは、ビジネス・サービスを呼び出すリクエストのプロキシ・サービス、もう1つは、コールバックを処理するプロキシ・サービスです。
リクエスト・プロキシ・サービスおよびパイプライン: SBトランスポートを使用するようにプロキシ・サービスを構成します。非同期通信では別の接続でコールバックが送信されるので、メッセージが正しいクライアントに戻るようにコールバック・アドレスを設定する必要があります。
コールバック・アドレスの設定の詳細は、「WS-Addressingのリファレンス」にある「ReplyTo」と、「Service Busを介したBPEL間非同期通信の例」を参照してください。
コールバック・プロキシ・サービスおよびパイプライン: コールバック・アドレスをビジネス・サービスに渡すようにプロキシ・サービスを構成します。コールバックURIはリクエスト内で指定されます。URI再書込みを使用してコールバックURIを抽出し、ビジネス・サービスに転送します。
プロキシ構成の詳細は、「プロキシ・サービスの作成と構成」および「SBトランスポートの使用」を参照してください。
Service Busで、外部サービスを呼び出すリクエスト・ビジネス・サービスと、コールバック・ビジネス・サービスの、2つのビジネス・サービスを作成します。
リクエスト・ビジネス・サービス: ビジネス・サービスが外部サービスを呼び出すように構成します。
コールバック・ビジネス・サービス: コールバック・ビジネス・サービスは、コールバック・プロキシからコールバック・アドレスを受け取ります。コールバック・プロキシ・サービスで実行されるURI再書込みによって、レスポンスの送信先のBPELプロセスを判断します。
WSDLベースのビジネス・サービスを作成します。WSDLファイルは、Oracle BPEL Process Managerから生成します。WSDLサービス・タイプを選択し、WSDLファイルで適切なバインディングまたはポートを選択します。
ビジネス・サービスの構成で bpel-10g トランスポートを選択します。
エンドポイントURIをbpel://callback
に設定します(表34-2の説明に従ってください)。コールバックURIは、コールバック・プロキシ・サービスによって提供されます。
注意:
トレーディング・パートナ契約によってクライアントとBPELサービスがリンクしている場合など、コールバック・アドレスが常にわかっている場合は、bpel://callback
を使用するのではなく、そのコールバック・アドレスをコールバック・ビジネス・サービスに設定できます。
bpel-10gトランスポートの構成ページでロールを「サービス・コールバック」に設定します(表34-3の説明に従ってください)。
ビジネス・サービスの残りの部分を構成します。このドキュメントで説明していない構成情報については、Service Busで提供されるオンライン・ヘルプを参照してください。
Oracle BPEL Process Managerのセキュリティは、EJBレベルで扱われます。BPELトランスポートは、表34-3で説明したように、JNDIコンテキストの作成およびEJBルックアップに使用するJNDIのサービス・アカウント・オプションをサポートしています。BPELトランスポートは、サービス・アカウントからユーザー名とパスワードを取得します。サービス・アカウントが構成されていない場合は、匿名サブジェクトが仮定されます。
BPELトランスポートは、呼出しレベルのセキュリティもサポートしており、Service BusからOracle BPEL Process ManagerへのURIのプロトコル部分で一方向SSLを指定できます。詳細は、「BPELトランスポートのエンドポイントURI」を参照してください。
(ormisおよびopmnsプロトコルを使用した)Service BusからOC4JおよびOracle ASサーバーへの通信にSSLを使用するには、Service Busサーバーで、ドメインのsetDomainEnv
スクリプトに次のプロパティを追加してSSLを構成する必要があります。
-Djavax.net.ssl.trustStorePassword=passphrase
-Djavax.net.ssl.trustStore=file path to a keystore of trust certificate
BPELトランスポートでは、Oracle BPEL Process Managerの例外を複数の方法で処理します。
BPELプロセスの返信にフォルトがあった場合、BPELトランスポートはAPIでそのフォルト・メッセージをインターセプトし、SOAPフォルトに変換します。BPELトランスポートのアプリケーション・エラー自動処理機能により、アプリケーション・エラーが発生した場合に自動的にアプリケーション・エラー(この場合はBPELフォルト)を再試行するかどうかを指定できます。たとえば、問題が解決するまでアプリケーション・エラーで必ず失敗するように指定できます。アプリケーションの再試行を有効または無効にするには、「トランスポート構成」・ページの「アプリケーション・エラーの再試行」オプションを使用します。
Oracle BPEL Process Managerは、エラーではない次の例外をスローすることがあります。BPELトランスポートでは、これらの例外を自動的にTransportException接続エラーとして分類します。
NamingException
RemoteException
トランスポートの接続エラー自動処理機能により、接続エラーを再試行するかどうか、および接続エラーの再試行頻度を指定できます。再試行回数、および接続エラー時に次の再試行まで待機する秒数を指定するには、「トランスポート構成」ページの「再試行回数」オプションと「再試行の反復間隔」オプションを使用します。「再試行の反復間隔」を0に設定すると、接続エラーは再試行されません。
ここでは、BPELトランスポートとOracle BPEL Process Managerの通信に使用する特定のWS-Addressingプロパティについて説明します。また、「高度な使用例(同期)」のガイドラインで取り上げた、非同期通信でコールバック・アドレスを指定する方法についても説明します。
WS-Addressingの例については、「BPELトランスポートを使用するXMLメッセージングの例」を参照してください。
非同期通信では、リクエストとは別の接続でコールバックが送信されます。サービス開発者は、非同期のやり取りで正しいコールバック・アドレスを提供してコールバックが正しいクライアントに送信されるようにする必要があります。
BPELトランスポートには、正しいコールバック・アドレスを指定するためのメカニズムが組み込まれています。Service BusでBPELビジネス・サービスを作成するときに、コールバックを処理するコールバック・プロキシを選択でき、BPELトランスポートによって正しいコールバック・アドレスが自動的に設定されます。手動で「ReplyTo」を指定する必要はありません。
詳細は、「非同期: Oracle BPEL Process Managerのプロセスの呼出し」を参照してください。
Oracle BPEL Process ManagerからService Busを介して外部サービスを呼び出す場合は、コールバック・アドレスを手動で設定する必要があります。WS-Addressingでこれを行うには、リクエスト・プロキシ・サービスでコールバック・アドレスを「ReplyTo」の値として設定します。そのURIがビジネス・サービスのBPELトランスポートによってコールバック・アドレスとして使用されます。
詳細は、「非同期: 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を設定する方法の詳細は、 「メッセージと正しい会話の関連付け」および「会話IDの例」を参照してください。
Service BusとOracle BPEL Process Managerの間のXMLメッセージングの問題の例を次に示します。
この項では、Service BusとOracle BPEL Process Managerの会話内のメッセージに共通IDを設定する様々な例をあげます。
図34-5では、クライアントがOracle BPEL Process Managerのプロセスを同期的に呼び出しています。ビジネス・サービス(BS1)は、BPELトランスポートを使用してプロセスを呼び出します。パイプライン(PP1)は、必要な会話IDマッピングを処理して、メッセージをプロキシ・サービス(PS1)からビジネス・サービスに渡します。
この項の例では、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>
Put操作
<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>
として挿入されました。プロセス側では、create
操作は一方向の操作なので、クライアントに応答する前にSOAPレスポンスが作成される必要があります。プロキシ・サービスで生成されたIDがレスポンスによって返送されます。
Put操作
クライアントからプロキシ・サービス
<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>
Put操作
クライアントからプロキシ・サービス
<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>
次の例は、Service Busを介して別のBPELプロセスを非同期的に呼び出すBPELプロセスに関係するSOAPヘッダーを示します。図34-6のPP1とPP2は、PS1およびPS2プロキシ・サービスからBS1およびBS2ビジネス・サービスにメッセージを渡し、変換を実行するパイプラインです。ビジネス・サービスは、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のサポートのために定義された標準または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変数にコピーされます。
この項では、ビジネスおよびプロキシ・サービスを対象とした、BPELトランスポート固有のプロパティについて説明します。
BPELトランスポートのURIフォーマット(表34-2を参照)は、JDeveloperまたはOracle Service Busコンソールのビジネス・サービスのメインの「トランスポート」ページで構成します。
表34-2 エンドポイントURIの指定
トランスポートのロール | エンドポイントURIフォーマット |
---|---|
同期クライアントまたは非同期クライアント・ロール |
次のエンドポイントURIフォーマットで、大カッコで囲まれているのはオプションの要素です。 protocol://host[:port][/protocol-path]/domain/process[/version[/partnerlink/role エンドポイントURIの他の要素の説明は次のとおりです。
クラスタの場合、次のURIフォーマットを使用して、そのクラスタ内の特定のノードをターゲットとすることもできます。 protocol://host1:port1,host2:port2/<remainder_of_URI> |
サービス・コールバック |
トレーディング・パートナ契約によってクライアントとBPELサービスがリンクしている場合など、コールバック・アドレスが常にわかっている場合は、次のフォーマットを使用するのではなく、そのコールバック・アドレスをエンドポイントURIに設定できます。 bpel://callback |
表34-3に、JDeveloperとOracle Service Busコンソールの両方のビジネス・サービスのBPELトランスポートの構成ページで使用可能なオプションを示します。詳細は、「ビジネス・サービスの作成と構成」を参照してください。
表34-3 ビジネス・サービス用のBPELトランスポート・プロパティ
プロパティ | 説明 |
---|---|
ロール |
ビジネス・サービス用に、次のいずれかのロールを選択します。BPELトランスポートは、Service BusからOracle BPEL PMにリクエスト・メッセージを送信するために使用します。ロールごとに特定の構成が必要になります。ビジネス・サービスでは、次のロールを処理できます。
注意: サービス・コールバック・ビジネス・サービスでは、ロード・バランシングまたはフェイルオーバーはサポートされません。 サービス・コールバックの使用方法は、表34-2の「サービス・コールバック」と、「非同期: Oracle BPEL Process Managerからのサービス・プロバイダの呼出し」を参照してください。 |
コールバック・プロキシ |
非同期クライアントの場合のみ、リクエストを行ったService Busクライアントへのコールバックのルーティングに使用されるプロキシ・サービスを入力します。このプロキシ・サービスは、サービス・タイプが「任意のSOAP」のSBまたはHTTPプロキシ・サービスである必要があります。詳細は、「高度な使用例(非同期)」のガイドラインを参照してください。 このフィールドは、非同期クライアント・ロールでのみ使用可能です。 |
サービス・アカウント |
JNDIコンテキスト・セキュリティがOracle BPEL Process Manager配信サービスへのアクセスに使用するサービス・アカウントを入力します。サービス・アカウントを指定しない場合は、匿名サブジェクトが使用されます。静的またはパススルーなど、構成できるサービス・アカウントのタイプに制限はありませんが、ランタイムはユーザー名とパスワードにアクセスできる必要があります。 詳細は、「サービス・アカウントの操作」を参照してください。 |
トランザクションを中断 |
このオプションを選択すると、ビジネス・サービスがトランザクションによって呼び出された場合でも、ビジネス・サービスは非トランザクションになります。 「トランザクションを中断」を選択しない場合は、次のルールが適用されます。
BPELトランスポートでは、次の状況で「トランザクションを中断」設定が無視されます。
トランザクション伝播の説明については、「BPELトランスポートでのトランザクション伝播」を参照してください。 |
ディスパッチ・ポリシー |
このエンドポイントのディスパッチ・ポリシーに使用するWebLogic Serverワーク・マネージャのインスタンスを選択します。デフォルトのワーク・マネージャは、他にワーク・マネージャがない場合に使用されます。 ワーク・マネージャの詳細は、次の説明を参照してください。
|