ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Service Bus開発者ガイド
11gリリース1 (11.1.1.6.2)
B61435-05
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

34 Oracle BPEL Process Managerトランスポート(Oracle SOA Suite 10gで使用する場合のみ)

この章では、BPEL-10gトランスポートの概要と、サービスでの使用および構成方法について説明します。


注意:

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を導入する方法について説明します。内容は以下のとおりです。

34.1 概要

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/technetwork/middleware/bpel/overview/index.htmlを参照してください。

34.1.1 SOAPサポート

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

34.1.2 トランザクション伝播

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


34.1.3 SSLサポート

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

34.1.4 環境変数

BPELトランスポートでは次の環境変数を宣言します。これらは、異なるデプロイメント環境間でOracle Service Bus構成を移動する場合も保持できます。

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

環境変数 説明

ディスパッチ・ポリシー

サービス・エンドポイントのディスパッチ・ポリシーに使用されるOracle WebLogic Serverワーク・マネージャ・インスタンス。

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

  • 『Oracle Fusion Middleware Oracle WebLogic Serverサーバー環境の構成』のワーク・マネージャを使用したスケジューリング済作業の最適化に関する説明

  • 『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』のOracle Service Busでのワーク・マネージャの使用に関する項

サービス・アカウント

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

エンドポイントURI

サービスのURI。


34.2 簡単な使用例(同期)

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

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

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

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

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

34.2.1.1 サービスの作成と構成

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

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

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

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

34.2.2.1 サービスの作成と構成

以下のガイドラインに従って、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項「メッセージと正しい会話の関連付け」を参照してください。

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

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

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

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

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

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

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

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

34.3.1.1 サービスの作成と構成

以下のガイドラインに従って、クライアントから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項「ビジネス・サービスの「トランスポート構成」ページ」も参照してください。

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

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

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

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

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

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

34.3.2.1 サービスの作成と構成

以下のガイドラインに従って、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項「ビジネス・サービスの「トランスポート構成」ページ」も参照してください。

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

ここでは、BPELトランスポート固有の構成オプションについて説明します。ビジネス・サービスの他の構成オプションは、2.2項「ビジネス・サービスの操作」を参照してください。

34.4.1 エンドポイントURI

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プロトコルを使用します。

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

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

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

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

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

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

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

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

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

クラスタの例

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

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

サービス・コールバック

bpel://callback

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


34.4.2 bpel-10gトランスポート構成

表34-2に、EclipseまたはOracle Service Bus管理コンソールにおけるBPELトランスポートの構成ページに含まれるオプションを示します。

表34-3 BPELトランスポート構成

プロパティ 説明

ロール

BPELトランスポートは、Oracle Service BusからOracle BPEL Process Managerにリクエスト・メッセージを送信するために使用します。ビジネス・サービスでは、次のロールを処理できます。

  • 「同期クライアント」

    Oracle Service Busクライアントとの同期通信では、必要な場所情報はBPELアドレスのみです。このアドレスは、(表34-2で説明したように)エンドポイントURIとして静的に取得されるか、URI再書込みを通じて動的に取得されます。

  • 「非同期クライアント」

    Oracle Service Busクライアントとの非同期通信では、Oracle BPEL Process ManagerからOracle Service Busへのコールバックはリクエストとは別の接続で送信されます。正しいコールバック・アドレスを提供するようにOracle Service Busを構成する必要があります。詳細は、34.3項「高度な使用例(非同期)」のガイドラインを参照してください。

  • 「サービス・コールバック」

    ビジネス・サービスをOracle BPEL Process Managerへのサービス・コールバックとして設計する場合はこのロールを使用します(この場合、Oracle BPEL Process ManagerはOracle Service Busを介してサービス・プロバイダを非同期的に呼び出します)。

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

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

コールバック・プロキシ

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

サービス・アカウント

JNDIコンテキスト・セキュリティの場合は、Oracle BPEL Process Manager配信サービスへのアクセスに使用されます。「参照」をクリックし、サービス・アカウントを選択します。サービス・アカウントを指定しない場合は、匿名サブジェクトが使用されます。

静的またはパススルーなど、構成できるサービス・アカウントのタイプに制限はありませんが、ランタイムはユーザー名とパスワードにアクセスできる必要があります。

トランザクションを中断

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

「トランザクションを中断」を選択しない場合は、次のようになります。

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

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

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

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

  • ビジネス・サービスが、EXACTLY_ONCEに設定されたQoSで呼び出され、トランザクションがない場合。

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

ディスパッチ・ポリシー

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

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

  • 『Oracle Fusion Middleware Oracle WebLogic Serverサーバー環境の構成』のワーク・マネージャを使用したスケジューリング済作業の最適化に関する説明

  • 『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』のOracle Service Busでのワーク・マネージャの使用に関する項


34.5 セキュリティ

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

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

(ormisおよびopmnsプロトコルを使用した)Oracle Service BusからOC4JおよびOracle ASサーバーへの通信にSSLを使用するには、Oracle Service Busサーバーで、ドメインのsetDomainEnvスクリプトに次のプロパティを追加してSSLを構成する必要があります。

-Djavax.net.ssl.trustStorePassword=passphrase

-Djavax.net.ssl.trustStore=<信頼性のある証明書のキーストアへのファイル・パス>

34.6 エラー処理

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

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

BPELプロセスの返信にフォルトがあった場合、BPELトランスポートはAPIでそのフォルト・メッセージをインターセプトし、SOAPフォルトに変換します。

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

34.6.2 接続エラー

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

  • NamingException

  • RemoteException

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

34.6.3 その他のエラー

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

34.7 WS-Addressingのリファレンス

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

WS-Addressingの例は、34.8項「XMLの例」を参照してください。

34.7.1 ReplyTo

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

34.7.1.1 Oracle Service Busを介したBPELプロセスの非同期呼出し

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

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

34.7.1.2 Oracle Service Busを介して外部サービスを呼び出すBPELプロセス

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

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

34.7.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を設定する方法の詳細は、 34.2.3項「メッセージと正しい会話の関連付け」および34.8.1項「会話IDの例」を参照してください。

34.8 XMLの例

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

34.8.1 会話IDの例

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

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

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

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

34.8.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.8.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>

プット操作

<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.8.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>として挿入されました。プロセス側では、作成操作は一方向の操作なので、クライアントに応答する前に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>

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

プット操作

クライアントからプロキシ・サービス

<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.8.2 Oracle Service Busを介したBPEL間非同期通信の例

次の例は、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プロセス

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

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

34.8.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.8.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.8.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のサポートのために定義された標準またはOracle Service Bus標準の要素はありません。


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