ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Service Busでのサービスの開発
12c (12.2.1)
E69914-01
  目次へ移動
目次

前
次
 

34 Oracle BPEL Process Managerトランスポートの使用

この章では、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トランスポートの使用」を参照してください。

この章の構成は、次のとおりです。

34.1 BPELトランスポートの概要

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を参照してください。

34.1.1 BPELトランスポートでのSOAPのサポート

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なし

34.1.2 BPELトランスポートでのトランザクション伝播

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ではまだ認証されていません。

34.1.3 BPELトランスポートでのSSLのサポート

Service BusからOracle BPEL PMへの呼出しはRMIを使用して行われるので、BPELトランスポートは一方向SSLを使用した呼出しレベルのセキュリティをサポートしています。詳細は、「BPELトランスポートのエンドポイントURI」を参照してください。

34.1.4 BPELトランスポートの環境値

BPELトランスポートは、次の表に示す環境変数(各変数は、BPELトランスポートの構成時に指定するプロパティに対応)を宣言します。環境変数の値は、Service Busプロジェクトを様々なデプロイメント環境間で移動するときに、トランスポート構成自体を更新することなく更新できます。環境値の詳細は、『Oracle Service Busの管理』のOracle Service Bus環境のカスタマイズに関する項を参照してください。

表34-1 BPELトランスポートの環境変数

環境変数 説明

ディスパッチ・ポリシー

このエンドポイントのディスパッチ・ポリシーに使用するWebLogic Serverワーク・マネージャのインスタンスを選択します。デフォルトのワーク・マネージャは、他にワーク・マネージャがない場合に使用されます。

ワーク・マネージャの詳細は、次の説明を参照してください。

サービス・アカウント

JNDIコンテキスト・セキュリティの場合に、Oracle BPEL Process Manager配信サービスへのアクセスに使用されるService Busサービス・アカウント・リソース。

エンドポイントURI

サービスのURI。

34.2 BPELトランスポートの簡単な使用例(同期)

この項では、Service Busを介したOracle BPEL Process Managerとの通信の最も一般的な使用例を説明します。これらは簡単な一方向またはリクエスト/レスポンス型の同期通信を表します。

34.2.1 同期: Oracle BPEL Process Managerのプロセスの呼出し

図34-1に、Service Busを介したクライアントとOracle BPEL Process Managerの同期通信パターンを示します。

図34-1 Service Busを介したOracle BPELプロセスの同期呼出し

「図34-1 Service Busを介したOracle BPELプロセスの同期呼出し」の説明が続きます
「図34-1 Service Busを介したOracle BPELプロセスの同期呼出し」の説明

34.2.1.1 サービスの作成と構成

次のガイドラインに従って、クライアントから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.2 同期: Oracle BPEL Process Managerからの外部サービスの呼出し

図34-2は、Service Busを介したOracle BPEL Process Managerとサービス・プロバイダの同期通信パターンを示します。

図34-2 Service Busを介してサービスを同期的に呼び出すOracle BPELプロセス

「図34-2 Service Busを介してサービスを同期的に呼び出すOracle BPELプロセス」の説明が続きます
「図34-2 Service Busを介してサービスを同期的に呼び出すOracle BPELプロセス」の説明

34.2.2.1 サービスの作成と構成

次のガイドラインに従って、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で提供されるオンライン・ヘルプを参照してください。

メッセージを正しい会話に関連付けるには、「メッセージと正しい会話の関連付け」を参照してください。

34.2.3 メッセージと正しい会話の関連付け

ステートフル・メッセージを使用する場合、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の例」を参照してください。

34.3 高度な使用例(非同期)

この節では、Service Busを介したOracle BPEL Process Managerとの非同期通信のより高度な使用例を説明します。

34.3.1 非同期: Oracle BPEL Process Managerのプロセスの呼出し

図34-3は、Service Busを介したOracle BPEL Process Managerとサービス・プロバイダの非同期通信パターンを示します。

図34-3 Service Busを介したOracle BPELプロセスの非同期呼出し

「図34-3 Service Busを介したOracle BPELプロセスの非同期呼出し」の説明が続きます
「図34-3 Service Busを介したOracle BPELプロセスの非同期呼出し」の説明

非同期のメッセージ交換では、リクエストとは別の接続でコールバックが送信されます。

34.3.1.1 サービスの作成と構成

次のガイドラインに従って、クライアントから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で提供されるオンライン・ヘルプを参照してください。

34.3.2 非同期: Oracle BPEL Process Managerからのサービス・プロバイダの呼出し

この項では、Service Busを介したサービスの呼出しを行うためにOracle BPEL Process Managerで必要な手順と構成について説明します。

図34-4は、Service Busを介したOracle BPEL Process Managerとサービス・プロバイダの非同期通信パターンを示します。

図34-4 Service Busを介してサービスを非同期的に呼び出すOracle BPELプロセス

「図34-4 Service Busを介してサービスを非同期的に呼び出すOracle BPELプロセス」の説明が続きます
「図34-4 Service Busを介してサービスを非同期的に呼び出すOracle BPELプロセス」の説明

非同期のメッセージ交換では、リクエストとは別の接続でコールバックが送信されます。

34.3.2.1 サービスの作成と構成

次のガイドラインに従って、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で提供されるオンライン・ヘルプを参照してください。

34.4 BPELトランスポートのセキュリティ

Oracle BPEL Process Managerのセキュリティは、EJBレベルで扱われます。BPELトランスポートは、表34-3で説明したように、JNDIコンテキストの作成およびEJBルックアップに使用するJNDIのサービス・アカウント・オプションをサポートしています。BPELトランスポートは、サービス・アカウントからユーザー名とパスワードを取得します。サービス・アカウントが構成されていない場合は、匿名サブジェクトが仮定されます。

BPELトランスポートは、呼出しレベルのセキュリティもサポートしており、Service BusからOracle BPEL Process ManagerへのURIのプロトコル部分で一方向SSLを指定できます。詳細は、「BPELトランスポートのエンドポイントURI」を参照してください。

34.4.1 Oracle Service BusからOracleサーバーへの通信でのSSLの使用

(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

34.5 BPELトランスポートのエラー処理

BPELトランスポートでは、Oracle BPEL Process Managerの例外を複数の方法で処理します。

34.5.1 アプリケーション・エラー

BPELプロセスの返信にフォルトがあった場合、BPELトランスポートはAPIでそのフォルト・メッセージをインターセプトし、SOAPフォルトに変換します。BPELトランスポートのアプリケーション・エラー自動処理機能により、アプリケーション・エラーが発生した場合に自動的にアプリケーション・エラー(この場合はBPELフォルト)を再試行するかどうかを指定できます。たとえば、問題が解決するまでアプリケーション・エラーで必ず失敗するように指定できます。アプリケーションの再試行を有効または無効にするには、「トランスポート構成」・ページの「アプリケーション・エラーの再試行」オプションを使用します。

34.5.2 接続エラー

Oracle BPEL Process Managerは、エラーではない次の例外をスローすることがあります。BPELトランスポートでは、これらの例外を自動的にTransportException接続エラーとして分類します。

  • NamingException

  • RemoteException

トランスポートの接続エラー自動処理機能により、接続エラーを再試行するかどうか、および接続エラーの再試行頻度を指定できます。再試行回数、および接続エラー時に次の再試行まで待機する秒数を指定するには、「トランスポート構成」ページの「再試行回数」オプションと「再試行の反復間隔」オプションを使用します。「再試行の反復間隔」を0に設定すると、接続エラーは再試行されません。

34.5.3 その他のエラー

その他の、アプリケーションおよび接続以外の例外は、一般的なTransportExceptionエラーとして再スローされます。

34.6 WS-Addressingのリファレンス

ここでは、BPELトランスポートとOracle BPEL Process Managerの通信に使用する特定のWS-Addressingプロパティについて説明します。また、「高度な使用例(同期)」のガイドラインで取り上げた、非同期通信でコールバック・アドレスを指定する方法についても説明します。

WS-Addressingの例については、「BPELトランスポートを使用するXMLメッセージングの例」を参照してください。

34.6.1 ReplyTo

非同期通信では、リクエストとは別の接続でコールバックが送信されます。サービス開発者は、非同期のやり取りで正しいコールバック・アドレスを提供してコールバックが正しいクライアントに送信されるようにする必要があります。

34.6.1.1 Service Busを介したBPELプロセスの非同期コール

BPELトランスポートには、正しいコールバック・アドレスを指定するためのメカニズムが組み込まれています。Service BusでBPELビジネス・サービスを作成するときに、コールバックを処理するコールバック・プロキシを選択でき、BPELトランスポートによって正しいコールバック・アドレスが自動的に設定されます。手動で「ReplyTo」を指定する必要はありません。

詳細は、「非同期: Oracle BPEL Process Managerのプロセスの呼出し」を参照してください。

34.6.1.2 Service Busを介して外部サービスをコールするBPELプロセス

Oracle BPEL Process ManagerからService Busを介して外部サービスを呼び出す場合は、コールバック・アドレスを手動で設定する必要があります。WS-Addressingでこれを行うには、リクエスト・プロキシ・サービスでコールバック・アドレスを「ReplyTo」の値として設定します。そのURIがビジネス・サービスのBPELトランスポートによってコールバック・アドレスとして使用されます。

詳細は、「非同期: Oracle BPEL Process Managerからのサービス・プロバイダの呼出し」を参照してください。

34.6.2 MessageID / RelatesTo

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の例」を参照してください。

34.7 BPELトランスポートを使用するXMLメッセージングの例

Service BusとOracle BPEL Process Managerの間のXMLメッセージングの問題の例を次に示します。

34.7.1 会話IDの例

この項では、Service BusとOracle BPEL Process Managerの会話内のメッセージに共通IDを設定する様々な例をあげます。

図34-5では、クライアントがOracle BPEL Process Managerのプロセスを同期的に呼び出しています。ビジネス・サービス(BS1)は、BPELトランスポートを使用してプロセスを呼び出します。パイプライン(PP1)は、必要な会話IDマッピングを処理して、メッセージをプロキシ・サービス(PS1)からビジネス・サービスに渡します。

図34-5 Service Busを介した同期的なやり取りでの操作

「図34-5 Service Busを介した同期的なやり取りでの操作」の説明が続きます
「図34-5 Service Busを介した同期的なやり取りでの操作」の説明

34.7.1.1 ポートおよびメッセージ定義

この項の例では、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>

34.7.1.2 WS-Addressingでの会話IDの設定

この例は、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を示す値があるので無視されます。

34.7.1.3 メッセージ・ペイロード・データでの会話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>

34.7.1.4 変換の例

これらの例では、クライアントが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>

34.7.2 Service Busを介したBPEL間非同期通信の例

次の例は、Service Busを介して別のBPELプロセスを非同期的に呼び出すBPELプロセスに関係するSOAPヘッダーを示します。図34-6のPP1とPP2は、PS1およびPS2プロキシ・サービスからBS1およびBS2ビジネス・サービスにメッセージを渡し、変換を実行するパイプラインです。ビジネス・サービスは、BPELトランスポートを使用してBPELプロセスのコールを行う場合に必要です。

図34-6 Service Busを介して別のBPELプロセスを呼び出すBPELプロセス

「図34-6 Service Busを介して別のBPELプロセスを呼び出すBPELプロセス」の説明が続きます
「図34-6 Service Busを介して別のBPELプロセスを呼び出すBPELプロセス」の説明

次のSOAPヘッダー例については、図34-6を参照してください。

34.7.2.1 ポートおよびメッセージ定義

<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>

34.7.2.2 BP1からP1 - 開始操作

<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>

34.7.2.3 P1/B1からBP2

<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標準の要素はありません。

34.7.2.4 BP2からP2 - onResult操作

<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ヘッダーとして返送されます。

34.7.2.5 P2/B2からBP1 - onResult操作

<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変数にコピーされます。

34.8 BPELトランスポート構成のリファレンス

この項では、ビジネスおよびプロキシ・サービスを対象とした、BPELトランスポート固有のプロパティについて説明します。

34.8.1 BPELトランスポートのエンドポイントURI

BPELトランスポートのURIフォーマット(表34-2を参照)は、JDeveloperまたはOracle Service Busコンソールのビジネス・サービスのメインの「トランスポート」ページで構成します。

表34-2 エンドポイントURIの指定

トランスポートのロール エンドポイントURIフォーマット

同期クライアントまたは非同期クライアント・ロール

次のエンドポイントURIフォーマットで、大カッコで囲まれているのはオプションの要素です。

protocol://host[:port][/protocol-path]/domain/process[/version[/partnerlink/role

エンドポイントURIの他の要素の説明は次のとおりです。

  • protocol: いずれかのRMI/JNDIプロトコルを使用します。

    iiop/iiops: サーバーにとらわれない汎用プロトコルです。

    t3/t3s: Oracle WebLogic Serverで使用されます。

    http/https: トンネリングおよびOracle WebLogic Serverで使用します。

    ormi/ormis: OC4J (Oracle Container for JEE)でのスタンドアロン開発で使用します。

  • port: オプション。サーバーがデフォルト・ポートを使用するように構成されている場合、ormiおよびopmnプロトコルでのみ使用します。

  • protocol-path: オプション。opmnおよびopmnsプロトコルでのみ使用します。protocol-pathはクラスタ内のサーバー・インスタンスです。

  • version: オプション。呼び出すプロセスのバージョンです。

  • partnerlink/role: オプション。バージョンを指定する場合、このオプションをフルパスの記述に含めます。

クラスタの場合、次のURIフォーマットを使用して、そのクラスタ内の特定のノードをターゲットとすることもできます。

protocol://host1:port1,host2:port2/<remainder_of_URI>

サービス・コールバック

トレーディング・パートナ契約によってクライアントとBPELサービスがリンクしている場合など、コールバック・アドレスが常にわかっている場合は、次のフォーマットを使用するのではなく、そのコールバック・アドレスをエンドポイントURIに設定できます。

bpel://callback

34.8.2 BPELトランスポートを使用するビジネス・サービスの構成

表34-3に、JDeveloperとOracle Service Busコンソールの両方のビジネス・サービスのBPELトランスポートの構成ページで使用可能なオプションを示します。詳細は、「ビジネス・サービスの作成と構成」を参照してください。

表34-3 ビジネス・サービス用のBPELトランスポート・プロパティ

プロパティ 説明

ロール

ビジネス・サービス用に、次のいずれかのロールを選択します。BPELトランスポートは、Service BusからOracle BPEL PMにリクエスト・メッセージを送信するために使用します。ロールごとに特定の構成が必要になります。ビジネス・サービスでは、次のロールを処理できます。

  • 同期クライアント: Service Busクライアントと同期通信を行う場合は、このロールを選択します。必要な場所情報はBPELアドレスのみです。このアドレスは、エンドポイントURIとして静的に、またはURIリライトを通じて動的に取得されます。

  • 非同期クライアント: Service Busクライアントと非同期通信を行う場合は、このロールを選択します。この場合、Oracle BPEL Process ManagerからService Busへのコールバックはリクエストと異なる接続上で送信されるため、「コールバック・プロキシ」フィールドで、正しいコールバック・アドレスを提供するようにService Busを構成する必要があります。詳細は、「高度な使用例(非同期)」のガイドラインを参照してください。

  • サービス・コールバック: ビジネス・サービスをOracle BPEL Process Managerへのサービス・コールバックとして設計する場合は、このロールを選択します(この場合、Oracle BPEL Process ManagerはService Busを介して外部サービスを非同期的に呼び出します)。コールバック・アドレスは、実行時にのみ認識されます。bpel://callbackのエンドポイントURIを使用します。

    マーカーURIでビジネス・サービスを構成する場合は、$outboundにURIを動的に設定するようにパイプライン・ロジックを構成します。たとえば、TransportHeaderアクションを使用してこれを行うことができます。

注意: サービス・コールバック・ビジネス・サービスでは、ロード・バランシングまたはフェイルオーバーはサポートされません。

サービス・コールバックの使用方法は、表34-2の「サービス・コールバック」と、「非同期: Oracle BPEL Process Managerからのサービス・プロバイダの呼出し」を参照してください。

コールバック・プロキシ

非同期クライアントの場合のみ、リクエストを行ったService Busクライアントへのコールバックのルーティングに使用されるプロキシ・サービスを入力します。このプロキシ・サービスは、サービス・タイプが「任意のSOAP」のSBまたはHTTPプロキシ・サービスである必要があります。詳細は、「高度な使用例(非同期)」のガイドラインを参照してください。

このフィールドは、非同期クライアント・ロールでのみ使用可能です。

サービス・アカウント

JNDIコンテキスト・セキュリティがOracle BPEL Process Manager配信サービスへのアクセスに使用するサービス・アカウントを入力します。サービス・アカウントを指定しない場合は、匿名サブジェクトが使用されます。静的またはパススルーなど、構成できるサービス・アカウントのタイプに制限はありませんが、ランタイムはユーザー名とパスワードにアクセスできる必要があります。

詳細は、「サービス・アカウントの操作」を参照してください。

トランザクションを中断

このオプションを選択すると、ビジネス・サービスがトランザクションによって呼び出された場合でも、ビジネス・サービスは非トランザクションになります。

「トランザクションを中断」を選択しない場合は、次のルールが適用されます。

  • プロトコルによって、WebLogic Serverでサポートされるプロトコル(t3、iiop、http)が指定されている場合は、トランザクションが伝播されます。

  • プロトコルがOC4Jサーバー(ormi、opmn)を指定している場合、OC4Jではトランザクションの伝播がサポートされないため、BPELトランスポートで例外がスローされます。

BPELトランスポートでは、次の状況で「トランザクションを中断」設定が無視されます。

  • サービスの品質(QoS)を「ベスト・エフォート」に設定してビジネス・サービスが呼び出される場合。BPELトランスポートでは、QoSをサポートしていないトランザクションが自動的に中断されます。

  • QoSを「必ず1回」に設定してビジネス・サービスが呼び出され、トランザクションが存在しない場合。

トランザクション伝播の説明については、「BPELトランスポートでのトランザクション伝播」を参照してください。

ディスパッチ・ポリシー

このエンドポイントのディスパッチ・ポリシーに使用するWebLogic Serverワーク・マネージャのインスタンスを選択します。デフォルトのワーク・マネージャは、他にワーク・マネージャがない場合に使用されます。

ワーク・マネージャの詳細は、次の説明を参照してください。