この章では、SOA-DIRECTトランスポートの概要と、サービスでの使用および構成方法について説明します。SOA-DIRECTトランスポートを使用すると、Oracle SOA Suiteサービス・コンポーネント(BPELプロセス、ヒューマン・タスク、ルール、Oracle Mediatorコンポーネントなど)を呼び出すことができます。
注意:
SOA-DIRECTトランスポートはOracle SOA Suite 11g以上のサービス・コンポーネントと通信するためのものです。Service Busは、Oracle SOA Suite 10g リリース3との通信用にbpel-10gトランスポートを備えています。このトランスポートの詳細は、「Oracle BPEL Process Managerトランスポートの使用」を参照してください。
この章の内容は次のとおりです。
SOA-DIRECTトランスポートにより、Service BusとOracle SOA Suiteサービス・コンポーネントとの間にネイティブの接続が提供されます。Oracle SOA Suiteで提供されるダイレクト・バインディング・フレームワークを使用すると、コンポジット・アプリケーション内でOracle SOA Suiteサービス・コンポーネントを公開できます。SOA-DIRECTトランスポートは、SOAダイレクト・バインディング・フレームワークを介して公開されたそれらのサービスと対話するため、サービス・バス・レイヤーでのサービス・コンポーネント間の対話が可能になり、Service Busの機能および性能を活用できます。
SOAバインディング・コンポーネントの詳細は、『Oracle SOA SuiteでのSOAアプリケーションの開発』のバインディング・コンポーネントのスタート・ガイドおよびダイレクト・バインディング呼出しAPIに関する項を参照してください。
SOA-DIRECTトランスポートは次の機能をサポートしています。
Javaリモート・メソッド呼出し(RMI)を介した任意のSOAバインディング・コンポーネント・サービスの呼出し
WS-Addressing(非同期コールバックのReplyToプロパティのオプション自動生成を含む)
ID伝播
トランザクション伝播
添付ファイル
SOAサービスの呼出し用に最適化されたRMIトランスポート
高可用性とクラスタリングのサポート
フェイルオーバーとロード・バランシング(サービス・コールバック・ロールのサービスでは使用不可)
エラー時の接続とアプリケーションの再試行
SOA-Directトランスポートでは、SOAP 1.1、SOAP 1.2またはXMLバインドを使用するWSDLタイプのサービスがサポートされます。SOAダイレクト・バインディング・フレームワークでは、ダイレクト・バインディング・サービスはSOAP 1.1およびSOAP 1.2バインドのWSDLとしてのみ公開されます。ただし、XMLバインディングを使用する必要がある場合、インポートされるSOAサービスWSDLファイルをダイレクト・バインディング・サービスのために手動でカスタマイズする必要があります。SOA-DIRECTトランスポートとSOAバインディング・コンポーネントの間のメッセージは常に抽象(バインディングなし)であるため、XMLバインドはメッセージ・ペイロードに影響しません。
SOA-DIRECTトランスポートは、同期および非同期通信でメッセージ相関のためにWS-Addressingしか使用しません。ビジネス・サービス構成でコールバック・プロキシを構成すると、このトランスポートにより、SOAPヘッダーに自動的に次のWS-Addressingプロパティが生成されます。
ReplyTo
: 非同期コールバックでのコールバック・アドレスと接続情報を設定します。
ReferenceParameters
: JNDIと接続ファクトリのプロパティなど、ReplyToのコールバック・プロパティを含みます。サポート対象の次のWS-Addressingバージョンに対応しています。
http://www.w3.org/2005/08/addressing
http://schemas.xmlsoap.org/ws/2004/08/addressing
ReferenceProperties
: JNDIと接続ファクトリのプロパティなど、ReplyToのコールバック・プロパティを含みます。サポート対象のWS-Addressingバージョン、http://schemas.xmlsoap.org/ws/2003/03/addressing
に対応しています。
ReplyToおよびReferenceParametersの例は、「WS-Addressingのリファレンス」を参照してください。WS-Addressingの他のすべてのプロパティのうち、SOA-DIRECTビジネス・サービスのパススルーで使用できないプロパティまたは適していないプロパティは、Service Busパイプラインで追加または変換する必要があります。WS-Addressing以外の相関メカニズムまたはコールバック・メカニズムを使用する場合は、Service BusとSOAフレームワーク・サービス・コンポーネントとの間のWS-Addressingをサポートするように、パイプラインでメッセージを変換する必要があります。
SOA-DIRECTトランスポートにおけるWS-Addressingの例は、「WS-Addressingのリファレンス」および「XMLメッセージングの例」を参照してください。
SOA-DIRECTトランスポートでは一方向SSLがサポートされます。SSLを使用するには、ドメインでSSLを有効にし、エンドポイントURIでセキュアなプロトコル(HTTPS、IIOPS、T3Sなど)を使用し、URIでセキュアなポートを参照します。SOA-DIRECT URIの詳細は、「SOA-DIRECTのエンドポイントURI」を参照してください。
SOA-DIRECTトランスポートでは、呼出し元のサブジェクトをサービスを介して渡すか、サービスにバインドされたサービス・アカウントによって、ID伝播を行うことができます。SOA-DIRECTトランスポートは標準化された抽象メッセージのみを扱うため、WS-Securityをサポートしていません。セキュリティ設定の詳細は、「SOA-DIRECTトランスポートを使用するビジネス・サービスの構成」を参照してください。
SOA-DIRECTトランスポートは、接続およびアプリケーションのエラーを認識します。したがって、トランスポートの構成で適切な再試行設定を構成できます。トランスポートは、接続やアプリケーションに関連しないエラーについては一般エラーをスローします。
SOA-DIRECTトランスポートでは、次の状況で接続エラーが発生します。
ターゲット・サービスが存在していない場合。
RMIのルックアップまたは呼出し中にネーミング例外が発生した場合(一般エラーのjavax.naming.NamingSecurityException例外を伴います)。
RMIのルックアップまたは呼出し中にリモート例外が発生した場合。
SOA-DIRECTトランスポートでは、アウトバウンド・ビジネス・サービスがSOAPフォルトを受信すると、アプリケーション・エラーが発生します。サービスの構成ページで「アプリケーション・エラーの再試行」を選択解除すると、アプリケーション・エラー(再試行を行ってもエラーが継続する可能性がある)の際の再試行を停止できます。
この項では、Service BusとOracle SOA Suiteコンポジットの間の同期および非同期通信パターンについて説明します。
ここでは、Service Busを介してSOAコンポジットとネイティブに通信する、簡単で最も一般的な使用例(同期通信)について説明します。
同期BPELコンポーネントでダイレクト・バインディングを使用してプロキシ・サービスと相互運用する場合、Service BusとBPELコンポーネントは、同じグローバル・トランザクションに参加することで同じトランザクション・コンテキストを共有します。パイプラインは、BPELコンポーネントで開始される同じトランザクション・コンテキスト内でバックエンド・アクティビティを実行できます。データ整合性を保証するには、処理中になんらかの不具合で状態を維持できない場合、そのトランザクションで行われたすべての内容をロールバックする必要があります。トランザクションまたはセキュリティの伝播が必要になるため、通常はダイレクト・バインディングが使用されることに注意してください。
Service Busダイレクト・バインディングの失敗は、システム・フォルトとしてBPELコンポーネントにスローされます。これは、リクエスト・パイプライン内で処理が失敗したときに、ロールバックのトランザクションをService Busで常にマーク付けするためです。そのため、Service Busダイレクト・バインディングからスローされるフォルトは、ロールバック・フォルトとなり、SOA Suite側でシステム・フォルトと解釈されます。
この動作の詳細は、Oracle SOA SuiteでのSOAアプリケーションの開発のBPELCallerで、bpel.config.transactionがrequiredに設定されたBPELCalleeをコールする場合に関する項を参照してください。この項では、同期インタフェースを備えたBPELコンポーネント間のトランザクション動作について説明しています。
SOA-DIRECTトランスポートは、ダイレクト・バインディング・サービスとして公開されているSOAコンポジットのすべてのコンポーネントを呼び出すことができます。図36-1に、Service Busを介したクライアントとOracle SOAサービス・コンポーネントとの間の同期通信パターンを示します。SOA-DIRECTビジネス・サービスとダイレクト・バインディング・サービスが使用されます。
次のガイドラインに従って、Oracle SOAダイレクト・バインディング・サービスをService Busを介してクライアントから呼び出します。
Service Busに、呼び出すSOAサービス・コンポーネントに相当するSOA-DIRECTビジネス・サービスを作成します。
Service Busで、対応するOracle SOAダイレクト・バインディング・サービスのWSDLファイルに基づいてWSDLリソースを作成します。
SOAダイレクト・バインディング・サービスのWSDLファイルは、Oracle SOA SuiteでのSOAアプリケーションの開発のOracle SOA SuiteでのSOAコンポジット・アプリケーションの開発に関する項に示すとおり、SOAリソース・ブラウザを使用してJDeveloperで探すことができます。
soa-directトランスポート・タイプおよびWSDLサービス・タイプの新しいビジネス・サービスを作成します。
作成したWSDLリソースを選択し、適切なポートまたはバインドを選択します。
注意:
ポートを選択すると、トランスポート・タイプとURIは次の構成ページに自動的に伝播されます。
「SOA-DIRECTのエンドポイントURI」の説明に従って、エンドポイントURIを設定します。
「SOA-DIRECTトランスポートを使用するビジネス・サービスの構成」に従って、ビジネス・サービスの他の設定を構成します。
ビジネス・サービスを呼び出すService Busでのプロキシ・サービスを作成します。クライアントで使用されるトランスポート・タイプを選択します。プロキシの構成情報については、Service Busで提供されるオンライン・ヘルプを参照してください。
ステートフル・サービスを使用してメッセージを正しい会話に関連付ける場合は、「メッセージと正しい会話の関連付け」を参照してください。
SOAコンポジットは、任意のService Bus SB WSDLベース・プロキシ・サービスを呼び出すことができます。SBプロキシ・サービスを呼び出すには、SOAサービス・コンポーネントはターゲット・タイプが「Oracle Service Bus」のダイレクト・バインディング参照を使用する必要があります。(ターゲット・タイプの詳細は、Oracle SOA SuiteでのSOAアプリケーションの開発を参照。)
図36-2に、Service Busを介したOracle SOAサービス・コンポーネントと外部サービスとの間の同期通信パターンを示します。
次のガイドラインに従って、ダイレクト・バインディング参照を使用してSOAコンポジットから外部サービスを呼び出します。
呼び出したい外部サービスを表すService Busでのビジネス・サービスを作成します。このサービスでサポートされるトランスポート・タイプを選択します。ビジネス・サービスの構成情報については、Service Busで提供されるオンライン・ヘルプを参照してください。
Service Busで、ビジネス・サービスを呼び出すSBプロキシ・サービスを作成します。
ビジネス・サービスを呼び出すプロキシ・サービスで使用されるWSDLリソースを作成します。
sbトランスポート・タイプおよびWSDLサービス・タイプの新しいプロキシ・サービスを作成します。
プロキシ・サービスのWSDLファイルを選択し、目的のポートまたはバインディングを選択します。
プロキシ・サービスの他の設定を構成します。詳細は、「SBトランスポートの使用」を参照してください。
注意:
SBプロキシ・サービス対応のWSDLファイルとポート・タイプを使用して、Service Busを呼び出すダイレクト・バインディング参照を定義します。このWSDLファイルをOracle SOA Suiteプロジェクトにインポートできます。
ステートフル・サービスを使用している場合は、メッセージを正しい会話に関連付ける必要があります。「メッセージと正しい会話の関連付け」を参照してください。
ステートフル・サービスを使用する場合、Service BusとOracle SOAコンポジットの間で同期的に送信されるメッセージは、会話と呼ばれます。メッセージを会話の一部として相互に正しく関連付けるために、SOA-DIRECTトランスポートではWS-Addressingの組込みサポートが提供されます。
WS-Addressingの詳細は、「MessageID/RelatesToヘッダー」を参照してください。会話IDの設定例は、「会話IDの例」を参照してください。
この項では、SOAコンポジットとService Busの間のSOA-DIRECTトランスポートを使用する非同期通信について説明します。
注意:
WS-Addressingを使用する非同期会話が現在サポートされているSOAサービス・コンポーネントは、BPELプロセス、Mediatorおよびヒューマン・タスクのみです。
SOA-DIRECTトランスポートは、ダイレクト・バインディング・サービスとして公開されている非同期SOAサービス・コンポーネントを呼び出すことができます。図36-3に、Service Busを介したクライアントとOracle SOAコンポジットとの間の非同期通信パターンを示します。ダイレクト・バインディング・サービス、SOA-DIRECTトランスポートおよびSBトランスポートが使用されます。
次のガイドラインに従って、SOAダイレクト・バインディング・サービスをService Busを介してクライアントから非同期に呼び出します。
インバウンド・クライアント側で、クライアントと対話するService Busアーティファクト(アウトバウンドSOA-DIRECTビジネス・サービスを呼び出すリクエスト・プロキシ・サービス、およびクライアントへのコールバックを処理するコールバック・ビジネス・サービス)を作成します。クライアントによって使用されるトランスポート・タイプを使用します。
リクエスト・プロキシ・サービス
クライアント・リクエストを受信するプロキシ・サービスを構成します。このプロキシ・サービスはアウトバウンド・リクエストのSOA-DIRECTビジネス・サービスを呼び出します。
コールバックは別の接続に送信されるため、Service Busは、クライアントにコールバックするときに元のコールバック場所を記憶しておく必要があります。WS-Addressingを使用すると、コールバック・アドレスがReplyToアドレス・ヘッダーでリクエスト・プロキシ・サービスに送信されます。SOA-DIRECTビジネス・サービスを呼び出す前に、リクエスト・プロキシ・サービスはこのアドレスをReplyToヘッダー内のreferenceParameterプロパティとして渡すことができます。WS-Addressingの指定に従い、referenceParameterプロパティはコールバックのSOAPヘッダー・ブロックに挿入されます。その後、コールバックのSBプロキシがこのコールバック・アドレスを抽出し、コールバック・ビジネス・サービスURIを設定できます。
コールバック・アドレスの設定の詳細は、「ReplyToヘッダー」および「Service Busを介したコンポジット間非同期通信」を参照してください。
コールバック・ビジネス・サービス
コールバックを処理するために必要なビジネス・サービスを構成します。このビジネス・サービスはアウトバウンド・コールバックSBプロキシ・サービスによって呼び出されます。
サービスとトランスポートの構成に関するガイダンスは、Service Busで提供されるオンライン・ヘルプを参照してください。
Service Busのアウトバウンド側で、SOAコンポジットと対話するためのアーティファクトを作成します。これには、呼び出す非同期サービス・コンポーネントを公開するOracle SOAダイレクト・バインディング・サービスへのリクエストを行うリクエストSOA-DIRECTビジネス・サービス、およびダイレクト・バインディング・サービスからのコールバックを処理し、インバウンド・コールバック・ビジネス・サービスを呼び出すコールバックSBプロキシ・サービスが含まれます。
リクエストSOA-DIRECTビジネス・サービス
Service Busで、対応するOracle SOAダイレクト・バインディング・サービスのWSDLファイルに基づいてWSDLリソースを作成します。
SOAダイレクト・バインディング・サービスのWSDLファイルは、$operationのOracle SOA SuiteでのSOAコンポジット・アプリケーションの開発に関する項に示すとおり、SOAリソース・ブラウザを使用してJDeveloperで探すことができます。
soa-directトランスポート・タイプおよびWSDLサービス・タイプの新しいビジネス・サービスを作成します。
WSDLファイルについては、作成したWSDLリソースを参照し、ダイレクト・バインディング・サービスのために適切なポートまたはバインディングを選択します。
ポートを選択すると、トランスポート・タイプとURIは次の構成ページに自動的に伝播されます。
「SOA-DIRECTのエンドポイントURI」の説明に従って、エンドポイントURIを設定します。
トランスポートの構成ページで、「ロール」を「非同期クライアント」に設定します。
オプションとして、「コールバック・プロキシ」オプションを使用して、作成したSBコールバック・プロキシ・サービスを選択します。
コールバック・プロキシを選択すると、SOA-DIRECTトランスポートによってWS-Addressingヘッダーが自動的に生成され、非同期コールバック・レスポンスの指定コールバック・プロキシへの送信を予定していることがSOAダイレクト・バインディング・サービスに知らされます。
SOA-DIRECTビジネス・サービスでコールバック・プロキシを選択しない場合のコールバック・アドレスの設定方法については、「WS-Addressingのリファレンス」および「Service Busを介したコンポジット間非同期通信」を参照してください。
ビジネス・サービスの残りの部分を構成します。詳細は、「SOA-DIRECTトランスポート構成のリファレンス」を参照してください。
リクエスト・プロキシ・サービスからこのビジネス・サービスを呼び出します。
コールバックSBプロキシ・サービス
sbトランスポート・タイプおよびWSDLサービス・タイプの新しいプロキシ・サービスを作成します。
ダイレクト・バインディング・サービスのWSDLファイルに対応するWSDLファイルを参照し、適切なポートまたはバインディングを選択します。
プロキシ・サービスの構成を完了します。詳細は、「SBトランスポートを使用するプロキシ・サービスの構成」を参照してください。
SOAコンポジットの非同期SOAサービス・コンポーネントは、Service Busを介して外部サービスを呼び出すことができます。このためには、SOAサービス・コンポーネントはターゲット・タイプが「Oracle Service Bus」のダイレクト・バインディング参照を使用する必要があります。(ターゲット・タイプの詳細は、Oracle SOA SuiteでのSOAアプリケーションの開発を参照。)
図36-4に、ダイレクト・バインディング参照、SBトランスポートおよびSOA-DIRECTトランスポートを使用した、Service Busを介したOracle SOAサービス・コンポーネントと外部サービスとの間の非同期通信パターンを示します。
次のガイドラインに従い、Service Busを介して外部サービスをOracle SOAダイレクト・バインディング参照から非同期で呼び出します。
Service Busのインバウンド側で、SOAコンポジットと対話するためのアーティファクト(SOAダイレクト・バインディング参照リクエストを受信するリクエストSBプロキシ・サービス、およびSOAダイレクト・バインディング参照へのコールバックを処理するコールバックSOA-DIRECTビジネス・サービス)を作成します。
リクエストSBプロキシ・サービス
ダイレクト・バインディング参照との対話に使用されるインタフェースに相当するWSDLリソースを作成します。
sbトランスポート・タイプおよびWSDLサービス・タイプの新しいプロキシ・サービスを作成します。
WSDLファイルについては、作成したWSDLファイルを参照し、適切なポートまたはバインディングを選択します。
プロキシ・サービスの構成を完了します。詳細は、「SBトランスポートを使用するプロキシ・サービスの構成」を参照してください。
コールバックは別の接続に送信されるため、Service Busは、クライアントにコールバックするときに元のコールバック場所を記憶しておく必要があります。WS-Addressingを使用すると、コールバック・アドレスがReplyToアドレス・ヘッダーでリクエスト・プロキシ・サービスに送信されます。外部サービスを呼び出す前に、リクエスト・プロキシ・サービスはこのアドレスをReplyToヘッダー内のreferenceParameterプロパティとして渡すことができます。WS-Addressingの指定に従い、referenceParameterプロパティはコールバックのSOAPヘッダー・ブロックに挿入されます。その後、コールバック・プロキシ・サービスがこのコールバック・アドレスを抽出し、コールバック・ビジネス・サービスURIを設定できます。
コールバック・アドレスの設定の詳細は、「ReplyToヘッダー」および「Service Busを介したコンポジット間非同期通信」を参照してください。
コールバック・ビジネス・サービス
soa-directトランスポート・タイプおよびWSDLサービス・タイプの新しいビジネス・サービスを作成します。
WSDLファイルについては、ダイレクト・バインディング参照に対するコールバック・インタフェースに相当するWSDLファイルを参照し、適切なポートまたはバインディングを選択します。
「SOA-DIRECTのエンドポイントURI」の説明に従って、サービスURIを「callback」に設定します。
一般的に、コールバックURIはURI再書込みを使用して呼出し側プロキシで動的に設定されます。ただし、コールバック・アドレスが常に認識されている場合は、"callback"のかわりに正確なコールバック・アドレスを指定できます。
SOA-DIRECTトランスポートの構成ページでロールを「サービス・コールバック」に設定します。
「SOA-DIRECTトランスポートを使用するビジネス・サービスの構成」に従って、ビジネス・サービスの他の設定を構成します。
Service Busのアウトバウンド側で、外部サービスと対話するためのアーティファクト(外部サービスへのリクエストを作成するリクエスト・ビジネス・サービス、およびこのサービスからのコールバックを処理するコールバック・プロキシ・サービス)を作成します。
リクエスト・ビジネス・サービス
ビジネス・サービスが外部サービスを呼び出すように構成します。このビジネス・サービスはリクエストSBプロキシ・サービスによって呼び出されます。このサービスでサポートされるトランスポート・タイプを選択します。ビジネス・サービスの構成情報については、Service Busで提供されるオンライン・ヘルプを参照してください。
コールバック・プロキシ・サービス
コールバック・アドレスをビジネス・サービスに渡すようにプロキシ・サービスを構成します。コールバックURIはリクエスト内で指定されます。URI再書込みを使用してコールバックURIを抽出し、SOA-DIRECTビジネス・サービスに転送します。このサービスでサポートされるトランスポート・タイプを選択します。プロキシ・サービスの構成情報については、Service Busで提供されるオンライン・ヘルプを参照してください。
WS-Addressingを使用したコールバック・アドレス設定の詳細は、「WS-Addressingのリファレンス」を参照してください。
ここでは、SOA-DIRECTトランスポートのエンドポイントURLの形式と構成オプションを説明します。
SOA-DIRECTサーバー用のエンドポイントURIを指定する際は、サービスのロール・タイプに応じて、特定の形式パターンに従う必要があります。
インバウンド・リクエストを処理する「サービス・コールバック」ロールのSOA-DIRECTビジネス・サービスの場合、実際のURIは、実行時にパイプラインで動的に指定されます。次のようにエンドポイントURIを入力します。
callback
または、コールバック・アドレスが常に認識されている場合は、正確なコールバック・アドレスを指定できます。
他のすべてのSOA-DIRECTビジネス・サービス・ロールの場合は、次の形式を使用します。省略可能な要素は大カッコ[]で囲んでいます。
protocol://authority]/default/compositeName[!versionNumber[*label]]/serviceName
説明:
protocol
は、使用するRMIまたはJNDIプロトコルです。以下のいずれかを使用してください。
iiop/iiops: サーバーにとらわれない汎用プロトコルです。
t3/t3s: WebLogic Serverで使用します。
http/https: トンネリングおよびWebLogic Serverで使用します。
HTTP(S)プロトコルの場合は、サーバーでHTTPトトンネリングを有効にします。SSLプロトコルの場合は、サーバーでSSLを有効にします。
SOAサービスがService Busと同じサーバーに配置される場合、protocolとauthorityは省略可能です。
authority
: IPアドレスまたはホスト名と、SOAサービス・コンポーネントをホストするSOAサーバーまたはクラスタのポート。
SOAサービスがService Busと同じサーバーに配置される場合、protocolとauthorityは省略可能です。
default
: このドメイン名の値は常にdefaultです。
compositeName
: バインディング・コンポーネント・サービスが定義されるコンポジット・アプリケーションの名前です。
!versionNumber
: コンポジット・アプリケーションのバージョン番号。これはオプションです。バージョンを指定しないと、最新バージョンが使用されます。
*label
: SOAサービスのWSDLファイルで使用されるラベル・ハッシュで、!versionNumber
と一緒に使用します。これはオプションです。
serviceName
: SOAバインディング・コンポーネント・サービスの名前です。
ロード・バランシングとフェイルオーバーのために1つのサービスに複数のURIを指定できますが、表36-1に示すように、サービス・コールバック・ロールではサービスに対して1つのURIしか指定できません。このため、サービス・コールバック・ロールのサービスではロード・バランシングおよびフェイルオーバーは使用できません。
クラスタ内で運用されるSOA-DIRECTトランスポートは、異なる形式のエンドポイントURIを使用します。クラスタ内のエンドポイントURIには、次の形式を使用します。
t3://example_managed1:port1,example_managed2:port2/service_path
このとき、t3://
example_managed1
:port1
,example_managed2
:port2
はJNDIプロバイダのURLです。
SOA-DIRECTトランスポート用のエンドポイントURIの例を、次にいくつか示します。
t3s://example:7002/default/compositeApp/1.0/myService
単一ノードにデプロイされたサービスを指します。
/default/compositeApp!1.0/myService
Service Busと同じサーバーに配置されているサービスを指します。
t3://soaserver.example.com:7001/default/VacationRequest!1.0/directclient
バージョン番号を使用して、単一ノードにデプロイされているサービスを指します。これは、SOAバインディング・コンポーネント・サービスのWSDLファイルにおける形式です。
t3://example_managed1:8001,example_managed2:8002/default/myComposite/myService
"myService"として識別されるクラスタSOAフレームワーク環境を指します。特定のバージョンが指定されていないため、サービスの最新バージョンが使用されます。
表36-1に、ビジネス・サービス用のSOA-DIRECTトランスポートの構成に使用するプロパティを示します。詳細は、「ビジネス・サービスの作成と構成」を参照してください。
表36-1 ビジネス・サービス用のSOA-DIRECTトランスポート・プロパティ
プロパティ | 説明 |
---|---|
JNDIサービス・アカウント |
ターゲットSOAサービスのJNDIルックアップのためのセキュリティ資格証明を定義する静的なサービス・アカウントを入力します。サービス・アカウントを指定しない場合は、匿名サブジェクトが使用されます。定義済サービス・アカウントのリストから選択できます。 詳細は、「サービス・アカウントの操作」を参照してください。 |
ロール |
サービスで使用する通信パターンを指定するためのオプションとして、次のいずれかを選択します。
コールバック・サービスのロード・バランシングまたはフェイルオーバーはありません。 |
コールバック・プロキシ |
コールバックを受信するプロキシ・サービスを指定します。このオプションは、「非同期クライアント」ロールの場合のみ有効です。 コールバック・プロキシを選択したとき、リクエストまたはプロキシ・サービス・パイプラインによってWS-Addressingが提供されない場合、Service BusはSOAPヘッダーのReplyToプロパティに自動的に値を設定します。SBトランスポート(RMI用)を使用するWSDLプロキシ・サービスを選択する必要があります。また、コールバック・プロキシ・サービスはWS-Addressingを認識する必要があります。 リクエストで送信されるWS-Addressingプロパティ、またはプロキシ・サービス・パイプラインで設定されるWS-Addressingプロパティが、このオプションで設定するコールバック・プロキシのかわりに使用されます。 「コールバック・プロキシ」を指定せず、リクエストにReplyToプロパティが含まれない場合は、プロキシ・サービス・パイプラインによってSOAPヘッダーにReplyToプロパティを提供する必要があります。 |
フォルト・プロキシ |
このオプションは現在サポートされていません。非同期パターンでフォルトを処理するようにコールバック・サービスを構成する必要があります。 |
WS-Addressingのバージョン |
リクエストまたはプロキシ・サービス・パイプラインでWS-Addressingが提供されないときに使用するデフォルトのWS-Addressingバージョンを指定します。このオプションは、「非同期クライアント」ロールの場合のみ有効です。 リクエストで送信されるWS-Addressingプロパティまたはパイプラインで設定されるWS-Addressingプロパティは、このオプションで設定するWS-Addressingバージョンのかわりに使用されます。環境ごとにWS-Addressingのバージョンが異なる場合、パイプラインで必要な変換を実行します。詳細は、「変換の例」を参照してください。 |
ディスパッチ・ポリシー |
このエンドポイントのディスパッチ・ポリシーに使用するWebLogic Serverワーク・マネージャのインスタンスを選択します。デフォルトのワーク・マネージャは、他にワーク・マネージャがない場合に使用されます。 ワーク・マネージャの詳細は、次の説明を参照してください。
|
呼出し元のサブジェクトを渡す |
このオプションを選択すると、SOAサービスを呼び出すときに、Service Busがプロキシ・サービスの認証済サブジェクトを渡します。「呼出し元のサブジェクトを渡す」の代替オプションである「呼出しサービス・アカウント」オプションは、このオプションを選択すると無効になります。 注意: クライアントとターゲット・サーバーが別のドメインにある場合、それらの間でドメインの信頼が有効になっていることを確認します。詳細は、『Oracle WebLogic Serverセキュリティの管理』のクロスドメイン・セキュリティのサポートに関する重要情報が記載された項を参照してください。 |
呼出しサービス・アカウント |
RMI呼出し用のサービス・アカウントを選択することにより、カスタム・セキュリティ資格証明を指定します。任意のタイプ(パス・スルー、静的またはマッピング)のサービス・アカウントを指定できます。サービス・アカウントを指定しない場合は、匿名サブジェクトが使用されます。これは、「呼出し元のサブジェクトを渡す」オプションのかわりに使用します。 詳細は、「サービス・アカウントの操作」を参照してください。 |
SOA-DIRECTトランスポートでサポートされる環境値を表36-2に示します。これらの変数に指定した値により、特定のSOA-DIRECTビジネス・サービス用に構成されたプロパティがオーバーライドされます。
表36-2 SOA-DIRECTトランスポートの環境値
環境値 | 説明 |
---|---|
「JNDIサービス・アカウント」(セキュリティ・カテゴリ) |
ターゲットSOAサービスのJNDIルックアップのためのセキュリティ資格証明を定義する静的なサービス・アカウント。サービス・アカウントを指定しない場合は、匿名サブジェクトが使用されます。 サービス・アカウントの詳細は、「サービス・アカウントの操作」を参照してください。 |
「呼出し元のサブジェクトを渡す」(セキュリティ・カテゴリ) |
これを有効にすると、SOAサービスを呼び出すときに、Service Busがプロキシ・サービスの認証済サブジェクトを渡します。次の「呼出しサービス・アカウント」変数は、「呼出し元のサブジェクトを渡す」のかわりに使用します。 |
「呼出しサービス・アカウント」(セキュリティ・カテゴリ) |
カスタム・セキュリティ資格証明を使用するRMI呼出し用のサービス・アカウント。任意のタイプ(パス・スルー、静的またはマッピング)のサービス・アカウントを指定できます。サービス・アカウントを指定しない場合は、匿名サブジェクトが使用されます。これは、「呼出し元のサブジェクトを渡す」のかわりに使用します。 |
「ワーク・マネージャ」(環境カテゴリ) |
このエンドポイントのディスパッチ・ポリシーに使用するWebLogic Serverワーク・マネージャのインスタンス。デフォルトのワーク・マネージャは、他にワーク・マネージャがない場合に使用されます。 ワーク・マネージャの詳細は、次の説明を参照してください。
|
これらの値の詳細は、「SOA-DIRECTトランスポートを使用するビジネス・サービスの構成」を参照してください。
ここでは、SOA-DIRECTトランスポートとOracle SOAコンポジットのネイティブ通信に使用する特定のWS-Addressingプロパティについて説明します。また、「高度な使用例 - 非同期」で示している非同期通信でコールバック・アドレスを指定する方法についても説明します。
WS-Addressingの例は、「XMLメッセージングの例」を参照してください。
非同期通信では、リクエストとは別の接続でコールバックが送信されます。サービス開発者は、非同期のやり取りで正しいコールバック・アドレスを提供してコールバックが正しいクライアントに送信されるようにする必要があります。WS-Addressing相関によるSOA-DIRECTトランスポートを使用するとき、コールバック・アドレスはWS-AddressingのReplyToヘッダーに指定されます。
SOA-DIRECTビジネス・サービスは、オプションでReplyToヘッダーを生成できます。ビジネス・サービスの構成で、コールバックを処理するために「コールバック・プロキシ」を選択すると、SOA-DIRECTトランスポートは、このコールバック・プロキシに対応する正しいコールバック・アドレスをReplyToヘッダーに設定します。このヘッダーが生成されるのは、着信メッセージにすでにReplyToヘッダーが含まれない場合のみであることに注意してください。
詳細は、「SOAコンポジットの非同期呼出し」を参照してください。
Service Busを介して外部サービスをOracle SOAコンポジットからコールするとき、コールバック・アドレスを手動で設定する必要があります。このためには、コールバックSOA-DIRECTビジネス・サービスを呼び出すプロキシ・サービスにReplyToの値としてコールバック・アドレスを設定します。
詳細は、「SOAコンポジットからの非同期呼出し」を参照してください。
WS-AddressingのMessageIDヘッダーとRelatesToヘッダーは、Service BusとOracle SOAサービス・コンポーネントの会話で会話IDの格納に使用され、関連するメッセージが同じ会話内に維持されるようにします。
ReplyToとは異なり、SOA-DIRECTトランスポートでは、MessageIDヘッダーまたはRelatesToヘッダーの組込みサポートは提供されません。かわりに、SOA-DIRECTビジネス・サービスを呼び出すパイプラインにこれらのヘッダーの正しい値を設定する必要があります。
次に説明するように、MessageIDヘッダーとRelatesToヘッダーを使用するための要件は、同期会話と非同期会話で少し異なります。
同期会話: MessageIDヘッダーの値により、最初のリクエストで会話IDが決まります。同じ会話内のその後のリクエストでは、この会話IDをRelatesToヘッダーに提供する必要があります。
非同期コールバック: MessageIDヘッダーの値により、最初のリクエストで会話IDが決まります。その後、コールバックではこの会話IDをRelatesToヘッダーに提供する必要があります。
メッセージが正しい会話に関連付けられるように会話IDを設定する方法の詳細は、 「メッセージと正しい会話の関連付け」および「会話IDの例」を参照してください。
次に、Service BusとOracle SOAサービス・コンポーネントの間のXMLメッセージの例を示します。
ここでは、Service BusとOracle SOAコンポジットの会話内のメッセージに会話IDを設定する例を示します。図36-5では、クライアントがOracle SOAコンポジットのBPEL Processコンポーネントを同期で呼び出しています。ビジネス・サービス(B1)は、SOA-DIRECTトランスポートを使用してプロセスを呼び出します。プロキシ・サービス(P1)によってコールされるパイプラインは、必要な会話IDマッピングを処理します。SOAコンポジットはBPEL Processをダイレクト・バインディング・サービスとして公開します。
この項の例では、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を設定する方法を示しています。
図36-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ヘッダーにマッピングします。
図36-5に通信パターンが示されています。
作成操作
クライアントからプロキシ・サービス
<soap:Envelope>
<soap:Body>
<create/>
</soap:Body>
</soap:Envelope>
<soap:Envelope>
<soap:Body>
<createResponse>
<mapID>uuid:123456789</mapID>
</createResponse>
</soap:Body>
</soap:Envelope>
プロキシ・サービスからSOAコンポジット(SOA-DIRECTビジネス・サービスを使用)
<soap:Envelope> <soap:Header> <wsa03:MessageID>uuid:123456789</wsa03:MessageID> </soap:Header> <soap:Body> <create/> </soap:Body> </soap:Envelope>
説明なし: IDはパイプラインのリクエストで生成され、プロセスを呼び出す前に<wsa03:MessageID>
として挿入されました。プロセス側では、作成操作は一方向の操作なので、クライアントに応答する前に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>
プロキシ・サービスからSOAコンポジット(SOA-DIRECTビジネス・サービスを使用)
<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>
プロキシ・サービスからSOAコンポジット(SOA-DIRECTビジネス・サービスを使用)
<soap:Envelope>
<soap:Header>
<wsa03:RelatesTo>uuid:123456789</wsa03:RelatesTo>
</soap:Header>
<soap:Body>
<dispose/>
</soap:Body>
</soap:Envelope>
これらの例では、クライアントがWS-Addressing仕様の新しいバージョン(wsa04
接頭辞)を使用します。プロキシ・サービスで、wsa03
接頭辞を使用するようにSOAPヘッダーの変換を行う必要があります。プロキシ・サービス開発者はトランスフォーメーションを構成します。
図36-5に通信パターンが示されています。
作成操作
クライアントからプロキシ・サービス
<soap:Envelope> <soap:Header> <wsa04:MessageID>uuid:123456789</wsa04:MessageID> </soap:Header> <soap:Body> <create/> </soap:Body> </soap:Envelope>
プロキシ・サービスからSOAコンポジット(SOA-DIRECTビジネス・サービスを使用)
<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>
プロキシ・サービスからSOAコンポジット(SOA-DIRECTビジネス・サービスを使用)
<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を介して別のSOAコンポジットを非同期で呼び出すSOAコンポジットに関連するSOAPヘッダーです。最初のSOAコンポジットは、ダイレクト・バインディング参照として公開されたBPELプロセスを使用して、Service Busを呼び出します。2番目のSOAコンポジットは、ダイレクト・バインディング参照として公開されたBPELプロセスを使用して、Service Busからのリクエストを受信します。
図36-6のP1とP2は、B1およびB2ビジネス・サービスにメッセージを渡し、変換を実行するパイプラインを含むプロキシ・サービスで、SOA-DIRECTトランスポートを使用したSOAコンポジットのコールに必要です。
次のSOAPヘッダー例については、図36-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> t3://soaserver:8001/default/AmericanLoanClient/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:referenceParameters> <osb:Callback> <osb:Address> t3://soaserver:8001/default/AmericanLoanClient/LoanserviceRequesterRef#LoanserviceRequesterBpel </osb:Address> </osb:Callback> </wsa03:referenceParameters> </wsa03:ReplyTo> <MessageID>AmericanLoanClient~1.0/60007</MessageID> </soap:Header> <soap:Body > <loanApplication> ... </loanApplication> </soap:Body> </soap:Envelope>
ReplyToのコールバック・アドレスは、B1が、「SOA-DIRECTトランスポートを使用するビジネス・サービスの構成」の説明に従って、SOA-DIRECTトランスポート構成の「コールバック・プロキシ」フィールドから値を取得することによって設定されます。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> t3://soaserver:8001/default/AmericanLoanClient/LoanserviceRequesterRef#LoanserviceRequesterBpel </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のSOA-DIRECTトランスポートがコールバック・メッセージを正しいSOAサービス・コンポーネントに送信できるようにreplyToのアドレス値が$outbound
変数にコピーされます。