この章では、SOA-DIRECTトランスポートの概要と、サービスでの使用および構成方法について説明します。
Oracle Service Busで提供されるSOA-DIRECTトランスポートを使用すると、Oracle SOA Suiteサービス・コンポーネント(BPELプロセス、ヒューマン・タスク、ルール、およびOracle Mediatorコンポーネントなど)を呼び出すことができます。
注意: SOA-DIRECTトランスポートはOracle SOA Suite 11g以上のサービス・コンポーネントと通信するためのものです。Oracle Service Busは、Oracle SOA Suite 10g リリース3との通信用にbpel-pmトランスポートを備えています。詳細は、第34章「Oracle BPEL Process Managerトランスポート(Oracle SOA Suite 10gで使用する場合のみ)」を参照してください。 |
この章の内容は次のとおりです。
SOA-DIRECTトランスポートにより、Oracle Service BusとOracle SOA Suiteサービス・コンポーネントの間にネイティブの接続が提供されます。Oracle SOA Suiteでは、「ダイレクト・バインディング」フレームワークにより、Oracle SOA Suiteサービス・コンポーネントをコンポジット・アプリケーションで公開できます。Oracle Service Bus SOA-DIRECTトランスポートは、公開されたそれらのサービスとSOAダイレクト・バインディング・フレームワークを介してやりとりします。こうすることで、これらのサービス・コンポーネントがサービス・バス・レイヤーとやりとりし、Oracle Service Busの機能を活用できます。
SOAバインディング・コンポーネントの詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』のバインディング・コンポーネントの導入およびダイレクト・バインディング呼出しAPIに関する項を参照してください。
注意: 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トランスポートは次の機能をサポートしています。
Javaリモート・メソッド呼出し(RMI)を介した任意のSOAバインディング・コンポーネント・サービスの呼出し
WS-Addressing(非同期コールバックのReplyToプロパティのオプション自動生成を含む)
ID伝播
トランザクション伝播
添付ファイル
SOAサービスの呼出し用に最適化されたRMIトランスポート
高可用性とクラスタリングのサポート
フェイルオーバーとロード・バランシング(サービス・コールバック・ロールのサービスでは使用不可)
エラー時の接続とアプリケーションの再試行
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の例は、24.4項「WS-Addressingのリファレンス」を参照してください。
WS-Addressingの他のすべてのプロパティのうち、SOA-DIRECTビジネス・サービスのパススルーで使用できないプロパティまたは適していないプロパティは、Oracle Service Busプロキシ・サービス・メッセージ・フローで追加または変換する必要があります。
WS-Addressing以外の相関メカニズムまたはコールバック・メカニズムを使用する場合は、Oracle Service BusとSOAフレームワーク・サービス・コンポーネントの間のWS-Addressingをサポートするように、プロキシ・サービス・パイプラインでメッセージを変換する必要があります。
SOA-DIRECTトランスポートにおけるWS-Addressingの例は、24.4項「WS-Addressingのリファレンス」および24.5例「XMLの例」を参照してください。
SOA-DIRECTトランスポートでは一方向SSLがサポートされます。SSLを使用するには、ドメインでSSLを有効にし、エンドポイントURIでセキュアなプロトコル(HTTPS、iiops、t3sなど)を使用し、URIでセキュアなポートを参照します。SOA-DIRECT URIの詳細は、24.3.1項「SOA-DIRECTのエンドポイントURI」を参照してください。
SOA-DIRECTトランスポートでは、呼出し元のサブジェクトをサービスを介して渡すか、サービスにバインドされたサービス・アカウントによって、ID伝播を行うことができます。SOA-DIRECTトランスポートは標準化された抽象メッセージのみを扱うため、WS-Securityをサポートしていません。セキュリティ設定の詳細は、24.3.2項「ビジネス・サービスのためのSOA-DIRECTトランスポートの構成」を参照してください。
SOA-DIRECTトランスポートでは、SOA-DIRECTサービスのために次の環境値が格納されています。
「JNDIサービス・アカウント」(セキュリティ・カテゴリ)
「呼出し元のサブジェクトを渡す」(セキュリティ・カテゴリ)
「呼出しサービス・アカウント」(セキュリティ・カテゴリ)
「ワーク・マネージャ」(環境カテゴリ)
これらの値の詳細は、24.3.2項「ビジネス・サービスのためのSOA-DIRECTトランスポートの構成」を参照してください。
SOA-DIRECTトランスポートは、接続およびアプリケーションのエラーを認識します。したがって、トランスポートの構成で適切な再試行設定を構成できます。トランスポートは、接続やアプリケーションに関連しないエラーについては一般エラーをスローします。
SOA-DIRECTトランスポートでは、次の状況で接続エラーが発生します。
ターゲット・サービスが存在していない場合。
RMIのルックアップまたは呼出し中にネーミング例外が発生した場合(一般エラーのjavax.naming.NamingSecurityException例外を伴います)。
RMIのルックアップまたは呼出し中にリモート例外が発生した場合。
SOA-DIRECTトランスポートでは、アウトバウンド・ビジネス・サービスがSOAPフォルトを受信すると、アプリケーション・エラーが発生します。
サービスの構成ページで「アプリケーション・エラーの再試行」を選択解除すると、アプリケーション・エラー(再試行を行ってもエラーが継続する可能性がある)の際の再試行を停止できます。
ここでは、Oracle Service BusとOracle SOA Suiteコンポジットの間の同期および非同期通信パターンについて説明します。
ここでは、Oracle Service Busを介してSOAコンポジットとネイティブに通信する、簡単で最も一般的な使用例(同期通信)について説明します。
Oracle Service Bus SOA-DIRECTトランスポートは、ダイレクト・バインディング・サービスとして公開されているSOAコンポジットのすべてのコンポーネントを呼び出すことができます。
図24-1に、Oracle Service Busを介したクライアントとOracle SOAサービス・コンポーネントの間の同期通信パターンを示します。SOA-DIRECTビジネス・サービスとダイレクト・バインディング・サービスが使用されます。
次のガイドラインに従って、Oracle SOAダイレクト・バインディング・サービスをOracle Service Busを介してクライアントから呼び出します。
Oracle Service Busに、呼び出すSOAサービス・コンポーネントに相当するSOA-DIRECTビジネス・サービスを作成します。
Oracle Service Busで、対応するOracle SOAダイレクト・バインディング・サービスをWSDLに基づいてWSDLリソースを作成します。
SOAダイレクト・バインディング・サービスWSDLは、SOAリソース・ブラウザを使用してOracle JDeveloperで探すことができます。手順は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』のOracle SOA SuiteでのSOAコンポジット・アプリケーションの開発に関する項を参照してください。
新しいビジネス・サービスを作成します。
「サービス・タイプ」として「WSDL Webサービス」を選択します。
作成したWSDLリソースを選択し、適切なポートまたはバインドを選択します。
注意: ポートを選択すると、トランスポート・タイプとURIは次の構成ページに自動的に伝播されます。 |
ビジネス・サービスの構成でsoa-directトランスポートを選択します。
24.3.1項「SOA-DIRECTのエンドポイントURI」の説明に従って、エンドポイントURIを設定します。
24.3.2項「ビジネス・サービスのためのSOA-DIRECTトランスポートの構成」に従って、ビジネス・サービスの他の設定を構成します。
ビジネス・サービスを呼び出すOracle Service Busでのプロキシ・サービスを作成します。クライアントで使用されるトランスポート・タイプを選択します。プロキシの構成の詳細は、4.3項「プロキシ・サービスの構成」および第3章「トランスポート構成」を参照してください。
ステートフル・サービスを使用してメッセージを正しい会話に関連付ける場合は、24.2.1.3項「メッセージと正しい会話の関連付け」を参照してください。
SOAコンポジットは、任意のOracle Service Bus SB WSDLベース・プロキシ・サービスを呼び出すことができます。SBプロキシ・サービスを呼び出すには、SOAサービス・コンポーネントはターゲット・タイプが「Oracle Service Bus」のダイレクト・バインディング参照を使用する必要があります。(ターゲット・タイプの詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』を参照してください。)
表24-0に、Oracle Service Busを介したOracle SOAサービス・コンポーネントと外部サービスの間の同期通信パターンを示します。
次のガイドラインに従って、ダイレクト・バインディング参照を使用してSOAコンポジットから外部サービスを呼び出します。
呼び出したい外部サービスを表すOracle Service Busでのビジネス・サービスを作成します。このサービスでサポートされるトランスポート・タイプを選択します。ビジネス・サービス構成の詳細は、4.2項「ビジネス・サービスの構成」および第3章「トランスポート構成」を参照してください。
Oracle Service Busで、ビジネス・サービスを呼び出すSBプロキシ・サービスを作成します。
ビジネス・サービスを呼び出すプロキシで使用されるWSDLリソースを作成します。
新しいプロキシ・サービスを作成します。
「サービス・タイプ」として「WSDL Webサービス」を選択します。
プロキシ・サービスのWSDLを選択し、必要なポートまたはバインドを選択します。
プロキシ・サービスの構成でsbトランスポートを選択します。
プロキシ・サービスの他の設定を構成します。詳細は、4.3項「プロキシ・サービスの構成」および第27章「SBトランスポート」を参照してください。
注意: SBプロキシ・サービス対応のWSDLとポート・タイプを使用して、Oracle Service Busを呼び出すダイレクト・バインディング参照を定義します。このWSDLをOracle SOA Suiteプロジェクトにインポートできます。 |
ステートフル・サービスを使用している場合は、メッセージを正しい会話に関連付ける必要があります。24.2.1.3項「メッセージと正しい会話の関連付け」を参照してください。
ステートフル・メッセージを使用する場合、Oracle Service BusとOracle SOAの間で同期的に送信されるメッセージは、会話と呼ばれます。メッセージを会話の一部として相互に正しく関連付けるために、Oracle Service Bus SOA-DIRECTトランスポートではWS-Addressingの組込みサポートが提供されます。
WS-Addressingの詳細は、24.4.2項「MessageID/RelatesToヘッダー」を参照してください。会話IDの設定例は、24.5.1項「会話IDの例」を参照してください。
ここでは、SOAコンポジットとOracle Service Busの間のSOA-DIRECTトランスポートを使用する非同期通信について説明します。
注意: WS-Addressingを使用する非同期会話が現在サポートされているSOAサービス・コンポーネントは、BPELプロセス、Mediatorおよびヒューマン・タスクのみです。 |
Oracle Service Bus SOA-DIRECTトランスポートは、ダイレクト・バインディング・サービスとして公開されている非同期SOAサービス・コンポーネントを呼び出すことができます。
図24-3に、Oracle Service Busを介したクライアントとOracle SOAコンポジットの間の非同期通信パターンを示します。ダイレクト・バインディング・サービス、SOA-DIRECTトランスポートおよびSBトランスポートが使用されます。
次のガイドラインに従って、SOAダイレクト・バインディング・サービスをOracle Service Busを介してクライアントから非同期に呼び出します。
インバウンド・クライアント側で、クライアントと対話するOracle Service Busアーティファクト(アウトバウンドSOA-DIRECTビジネス・サービスを呼び出すリクエスト・プロキシ・サービス、およびクライアントへのコールバックを処理するコールバック・ビジネス・サービス)を作成します。クライアントによって使用されるトランスポート・タイプを使用します。
リクエスト・プロキシ・サービス
クライアント・リクエストを受信するプロキシ・サービスを構成します。このプロキシ・サービスはアウトバウンド・リクエストのSOA-DIRECTビジネス・サービスを呼び出します。
コールバックは別の接続に送信されるため、Oracle Service Busは、クライアントにコールバックするときに元のコールバック場所を記憶しておく必要があります。WS-Addressingを使用すると、コールバック・アドレスがReplyToアドレス・ヘッダーでリクエスト・プロキシ・サービスに送信されます。SOA-DIRECTビジネス・サービスを呼び出す前に、リクエスト・プロキシはこのアドレスをReplyToヘッダー内のreferenceParameterプロパティとして渡すことができます。WS-Addressingの指定に従い、referenceParameterプロパティはコールバックのSOAPヘッダー・ブロックに挿入されます。その後、コールバックのSBプロキシがこのコールバック・アドレスを抽出し、コールバック・ビジネス・サービスURIを設定できます。
コールバック・アドレスの設定の詳細は、24.4.1項「ReplyToヘッダー」および24.5.2項「Oracle Service Busを介したコンポジット間非同期ネイティブ通信の例」を参照してください。
コールバック・ビジネス・サービス
コールバックを処理するために必要なビジネス・サービスを構成します。このビジネス・サービスはアウトバウンド・コールバックSBプロキシ・サービスによって呼び出されます。
サービスおよびトランスポートの構成方法は、4.2項「ビジネス・サービスの構成」および第3章「トランスポート構成」を参照してください。
Oracle Service Busのアウトバウンド側で、SOAコンポジットと対話するためのアーティファクト(呼び出す非同期サービス・コンポーネントを公開するOracle SOAダイレクト・バインディング・サービスへのリクエストを行うリクエストSOA-DIRECTビジネス・サービス、およびダイレクト・バインディング・サービスからのコールバックを処理し、インバウンド・コールバック・ビジネス・サービスを呼び出すコールバックSBプロキシ・サービス)を作成します。
リクエストSOA-DIRECTビジネス・サービス
Oracle Service Busで、対応するOracle SOAダイレクト・バインディング・サービスをWSDLに基づいてWSDLリソースを作成します。
SOAダイレクト・バインディング・サービスWSDLは、SOAリソース・ブラウザを使用してOracle JDeveloperで探すことができます。手順は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』のOracle SOA SuiteでのSOAコンポジット・アプリケーションの開発に関する項を参照してください。
新しいビジネス・サービスを作成します。
「サービス・タイプ」として「WSDL Webサービス」を選択します。作成したWSDLリソースを参照して選択し、ダイレクト・バインディング・サービスのために適切なポートまたはバインドを選択します。
ポートを選択すると、トランスポート・タイプとURIは次の構成ページに自動的に伝播されます。
ビジネス・サービスの構成でsoa-directトランスポートを選択します。
24.3.1項「SOA-DIRECTのエンドポイントURI」の説明に従って、URIを設定します。
トランスポートの構成ページで、「ロール」を「非同期クライアント」に設定します。
オプションとして、「コールバック・プロキシ」オプションを使用して、作成したSBコールバック・プロキシ・サービスを選択します。
コールバック・プロキシを選択すると、SOA-DIRECTトランスポートによってWS-Addressingヘッダーが自動的に生成され、非同期コールバック・レスポンスの指定コールバック・プロキシへの送信を予定していることがSOAダイレクト・バインディング・サービスに知らされます。
SOA-DIRECTビジネス・サービスでコールバック・プロキシを選択しない場合のコールバック・アドレスの設定方法については、24.4項「WS-Addressingのリファレンス」および24.5.2項「Oracle Service Busを介したコンポジット間非同期ネイティブ通信の例」を参照してください。
ビジネス・サービスの残りの部分を構成します。詳細は、24.3項「トランスポート構成のリファレンス」および4.2項「ビジネス・サービスの構成」を参照してください。
リクエスト・プロキシ・サービスからこのビジネス・サービスを呼び出します。
コールバックSBプロキシ・サービス
新しいプロキシ・サービスを作成します。
「サービス・タイプ」として「WSDL Webサービス」を選択します。
ダイレクト・バインディング・サービスのWSDLに対応するWSDLを参照して選択し、適切なポートまたはバインドを選択します。
プロキシ・サービスの構成でsbトランスポートを選択します。
プロキシ・サービスの構成を完了します。詳細は、4.3項「プロキシ・サービスの構成」および第27章「SBトランスポート」を参照してください。
SOAコンポジットの非同期SOAサービス・コンポーネントは、Oracle Service Busを介して外部サービスを呼び出すことができます。このためには、SOAサービス・コンポーネントはターゲット・タイプが「Oracle Service Bus」のダイレクト・バインディング参照を使用する必要があります。(ターゲット・タイプの詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』を参照してください。)
図24-4に、Oracle Service Busを介したOracle SOAサービス・コンポーネントと外部サービスの間の非同期通信パターンを示します。ダイレクト・バインディング参照、SBトランスポートおよびSOA-DIRECTトランスポートが使用されます。
次のガイドラインに従って、Oracle Service Busを介して外部サービスをOracle SOAダイレクト・バインディング参照から非同期で呼び出します。
Oracle Service Busのインバウンド側で、SOAコンポジットと対話するためのアーティファクト(SOAダイレクト・バインディング参照リクエストを受信するリクエストSBプロキシ・サービス、およびSOAダイレクト・バインディング参照へのコールバックを処理するコールバックSOA-DIRECTビジネス・サービス)を作成します。
リクエストSBプロキシ・サービス
ダイレクト・バインディング参照との対話に使用されるインタフェースに相当するWSDLリソースを作成します。
新しいプロキシ・サービスを作成します。
「サービス・タイプ」として「WSDL Webサービス」を選択します。
作成したWSDLを参照して選択し、適切なポートまたはバインドを選択します。
プロキシ・サービスの構成ページでsbトランスポートを選択します。
プロキシ・サービスの構成を完了します。詳細は、4.3項「プロキシ・サービスの構成」および第27章「SBトランスポート」を参照してください。
コールバックは別の接続に送信されるため、Oracle Service Busは、クライアントにコールバックするときに元のコールバック場所を記憶しておく必要があります。WS-Addressingを使用すると、コールバック・アドレスがReplyToアドレス・ヘッダーでリクエスト・プロキシ・サービスに送信されます。外部サービスを呼び出す前に、リクエスト・プロキシ・サービスはこのアドレスをReplyToヘッダー内のreferenceParameterプロパティとして渡すことができます。WS-Addressingの指定に従い、referenceParameterプロパティはコールバックのSOAPヘッダー・ブロックに挿入されます。その後、コールバック・プロキシ・サービスがこのコールバック・アドレスを抽出し、コールバック・ビジネス・サービスURIを設定できます。
コールバック・アドレスの設定の詳細は、24.4.1項「ReplyToヘッダー」および24.5.2項「Oracle Service Busを介したコンポジット間非同期ネイティブ通信の例」を参照してください。
コールバック・ビジネス・サービス
新しいビジネス・サービスを作成します。
「サービス・タイプ」として「WSDL Webサービス」を選択します。
ダイレクト・バインディング参照に対するコールバック・インタフェースに相当するWSDLを参照して選択し、適切なポートまたはバインドを選択します。
ビジネス・サービスの構成でsoa-directトランスポートを選択します。
24.3.1項「SOA-DIRECTのエンドポイントURI」の説明に従って、サービスURIを"callback"に設定します。
一般的に、コールバックURIはURI再書込みを使用して呼出し側プロキシで動的に設定されます。ただし、コールバック・アドレスが常に認識されている場合は、"callback"のかわりに正確なコールバック・アドレスを指定できます。
SOA-DIRECTトランスポートの構成ページでロールを「サービス・コールバック」に設定します。
24.3.2項「ビジネス・サービスのためのSOA-DIRECTトランスポートの構成」および4.2項「ビジネス・サービスの構成」に従って、ビジネス・サービスの他の設定を構成します。
Oracle Service Busのアウトバウンド側で、外部サービスと対話するためのアーティファクト(外部サービスへのリクエストを作成するリクエスト・ビジネス・サービス、およびこのサービスからのコールバックを処理するコールバック・プロキシ・サービス)を作成します。
リクエスト・ビジネス・サービス
ビジネス・サービスが外部サービスを呼び出すように構成します。このビジネス・サービスはリクエストSBプロキシ・サービスによって呼び出されます。このサービスでサポートされるトランスポート・タイプを選択します。ビジネス・サービス構成の詳細は、4.2項「ビジネス・サービスの構成」および第3章「トランスポート構成」を参照してください。
コールバック・プロキシ・サービス
コールバック・アドレスをビジネス・サービスに渡すようにプロキシ・サービスを構成します。コールバックURIはリクエスト内で指定されます。URI再書込みを使用してコールバックURIを抽出し、SOA-DIRECTビジネス・サービスに転送します。このサービスでサポートされるトランスポート・タイプを選択します。プロキシ・サービスの構成の詳細は、4.3項「プロキシ・サービスの構成」および第3章「トランスポート構成」を参照してください。
WS-Addressingを使用したコールバック・アドレス設定の詳細は、24.4項「WS-Addressingのリファレンス」を参照してください。
ここでは、SOA-DIRECTトランスポートのエンドポイントURLの形式と構成オプションを説明します。
SOA-DIRECTトランスポートのURIパターンについて説明します。省略可能な要素は大カッコ[]で囲んでいます。
callback - これは、インバウンド・リクエストを処理するサービス・コールバック・ロールのSOA-DIRECTビジネス・サービスのURIです。実際のURIは、実行時にプロキシ・サービス・パイプラインで動的に指定されます。ただし、コールバック・アドレスが常に認識されている場合は、正確なコールバック・アドレスを指定できます。
他のすべてのSOA-DIRECTビジネス・サービス・ロールの場合:
[protocol://authority]/default/compositeName[!versionNumber[*label]]/serviceName
protocol
次のいずれかのRMI/JNDIプロトコルを使用します。
iiop / iiops -サーバーにとらわれない汎用プロトコルです。
t3 / t3s - Oracle WebLogic Serverで使用されます。
http / https -トンネリングおよびOracle WebLogic Serverで使用します。
HTTP(S)プロトコルの場合は、サーバーでHTTPトトンネリングを有効にします。SSLプロトコルの場合は、サーバーでSSLを有効にします。
SOAサービスがOracle Service Busと同じサーバーに配置されている場合、protocolとauthorityは省略できます。
エンドポイントURIの他の要素の説明は次のとおりです。
authority - IPアドレスまたはホスト名と、SOAサービス・コンポーネントをホストするSOAサーバーまたはクラスタのポート。
SOAサービスがOracle Service Busと同じサーバーに配置されている場合、protocolとauthorityは省略できます。
default - このドメイン名の値は常に"default"です。
compositeName - バインディング・コンポーネント・サービスが定義されるコンポジット・アプリケーションの名前です。
!versionNumber - オプション。コンポジット・アプリケーションのバージョン番号。バージョンを指定しないと、最新バージョンが使用されます。
*label - オプション。!versionNumberと一緒に使用します。SOAサービスWSDLで使用されるラベル・ハッシュです。
serviceName - SOAバインディング・コンポーネント・サービスの名前です。
ロード・バランシングとフェイルオーバーのために1つのサービスに複数のURIを指定できますが、表24-1に示すように、サービス・コールバック・ロールではサービスに対して1つの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
Oracle Service Busと同じサーバーに配置されているサービスを指します。
t3://soaserver.example.com:7001/default/VacationRequest!1.0*ec2dd6c5-1667-4885-a634-2364547beb2d/directclient
バージョンとハッシュ・コードを使用して単一サーバーにデプロイされているサービスを指します。これは、SOAバインディング・コンポーネント・サービスWSDLでのデフォルトの形式です。
t3://example_managed1:8001,example_managed2:8002/default/myComposite/myService
"myService"として識別されるクラスタSOAフレームワーク環境を指します。特定のバージョンが指定されていないため、サービスの最新バージョンが使用されます。
表24-1に、SOA-DIRECTトランスポートのトランスポート固有の構成オプションを示します。
表24-1 SOA-DIRECTトランスポート構成
プロパティ | 説明 |
---|---|
JNDIサービス・アカウント |
オプション。ターゲットSOAサービスのJNDIルックアップのためのセキュリティ資格証明を指定します。サービス・アカウントは静的であることが必要です。「参照」をクリックして、サービス・アカウントを選択します。サービス・アカウントを指定しない場合は、匿名サブジェクトが使用されます。 |
ロール |
必須。サービスが使用する通信パターンを指定します。次のいずれかのオプションを選択します。
ロード・バランシングとフェイルオーバーはサービス・コールバック・ロールのサービスでは使用できません。 |
コールバック・プロキシ |
オプション。「非同期クライアント」ロールのみで有効になります。 このオプションでは、コールバックを受信するプロキシ・サービスを指定できます。コールバック・プロキシを選択したとき、リクエストまたはプロキシ・サービス・パイプラインによってWS-Addressingが提供されない場合、Oracle 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バージョンが異なる場合、プロキシ・サービス・パイプラインで必要な変換を実行します。詳細は、24.5.1.4項「変換の例」を参照してください。 |
ディスパッチ・ポリシー |
このエンドポイントのディスパッチ・ポリシーに使用するOracle WebLogic Serverワーク・マネージャのインスタンスを選択します。デフォルトのワーク・マネージャは、他にワーク・マネージャがない場合に使用されます。 ワーク・マネージャの詳細は、次の説明を参照してください。
|
呼出し元のサブジェクトを渡す |
オプション。このオプションを選択すると、SOAサービスを呼び出すときに、Oracle Service Busがプロキシ・サービスの認証済サブジェクトを渡します。「呼出し元のサブジェクトを渡す」の代替オプションである「呼出しサービス・アカウント」オプションは、このオプションを選択すると無効になります。 注意: クライアントとターゲット・サーバーが別のドメインにある場合、それらの間でドメインの信頼が有効になっていることを確認します。詳細は、『Oracle Fusion Middleware Oracle WebLogic Serverの保護』のドメイン間セキュリティ・サポートの重要事項に関する項を参照してください。 |
呼出しサービス・アカウント |
オプション。「呼出し元のサブジェクトを渡す」の代替オプションです。RMI呼出しのサービス・アカウントを選択することで、カスタム・セキュリティ資格証明を指定できます。任意のタイプのサービス・アカウントを指定できます(「パス・スルー」、静的、「マッピング)。 「参照」をクリックして、サービス・アカウントを選択します。サービス・アカウントを指定しない場合は、匿名サブジェクトが使用されます。 |
ここでは、SOA-DIRECTトランスポートとOracle SOAコンポジットのネイティブ通信に使用する特定のWS-Addressingプロパティについて説明します。また、24.2.2項「高度な使用例 - 非同期」のガイドラインで取り上げた、非同期通信でコールバック・アドレスを指定する方法についても説明します。
WS-Addressingの例は、24.5項「XMLの例」を参照してください。
非同期通信では、リクエストとは別の接続でコールバックが送信されます。サービス開発者は、非同期のやり取りで正しいコールバック・アドレスを提供してコールバックが正しいクライアントに送信されるようにする必要があります。WS-Addressing相関によるSOA-DIRECTトランスポートを使用するとき、コールバック・アドレスはWS-AddressingのReplyToヘッダーに指定されます。
SOA-DIRECTビジネス・サービスは、オプションでReplyToヘッダーを生成できます。ビジネス・サービスの構成で、コールバックを処理するために「コールバック・プロキシ」を選択すると、SOA-DIRECTトランスポートは、このコールバック・プロキシに対応する正しいコールバック・アドレスをReplyToヘッダーに設定します。このヘッダーが生成されるのは、着信メッセージにすでにReplyToヘッダーが含まれない場合のみです。
詳細は、24.2.2.1項「SOAコンポジットの非同期呼出し」を参照してください。
Oracle Service Busを介して外部サービスをOracle SOAコンポジットから呼び出すとき、コールバック・アドレスを手動で設定する必要があります。このためには、コールバックSOA-DIRECTビジネス・サービスを呼び出すプロキシ・サービスにReplyToの値としてコールバック・アドレスを設定します。
詳細は、24.2.2.2項「SOAコンポジットからの非同期呼出し」を参照してください。
WS-AddressingのMessageIDヘッダーとRelatesToヘッダーは、Oracle Service BusとOracle SOAサービス・コンポーネントの会話で会話IDの格納に使用され、関連するメッセージが同じ会話内に維持されるようにします。
ReplyToとは異なり、SOA-DIRECTトランスポートでは、MessageIDヘッダーまたはRelatesToヘッダーの組込みサポートは提供されません。かわりに、SOA-DIRECTビジネス・サービスを呼び出すプロキシ・サービスのパイプラインにこれらのヘッダーの正しい値を設定する必要があります。
次に、同期会話と非同期会話でMessageIDヘッダーとRelatesToヘッダーがいつ使用されるかを説明します。
同期会話: MessageIDヘッダーの値により、最初のリクエストで会話IDが決まります。同じ会話内のその後のリクエストでは、この会話IDをRelatesToヘッダーに提供する必要があります。
非同期コールバック: MessageIDヘッダーの値により、最初のリクエストで会話IDが決まります。その後、コールバックではこの会話IDをRelatesToヘッダーに提供する必要があります。
メッセージが正しい会話に関連付けられるように会話IDを設定する方法の詳細は、 24.2.1.3項「メッセージと正しい会話の関連付け」および24.5.1項「会話IDの例」を参照してください。
次に、Oracle Service BusとOracle SOAサービス・コンポーネントの間のXMLメッセージの例を示します。
ここでは、Oracle Service BusとOracle SOAコンポジットの会話内のメッセージに会話IDを設定する様々な例を示します。
図24-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を設定する方法を示しています。
図24-5に通信パターンが示されています。
作成操作
<soap:Envelope>
<soap:Header>
<wsa03:MessageID>uuid:123456789</wsa03:MessageID>
</soap:Header>
<soap:Body>
<create/>
</soap:Body>
</soap:Envelope>
プット操作
<soap:Envelope>
<soap:Header>
<wsa03:MessageID>uuid:111111111</wsa03:MessageID>
<wsa03:RelatesTo>uuid:123456789</wsa03:RelatesTo>
</soap:Header>
<soap:Body>
<put>
<key>key</key>
<value>
<PO/>
</value>
</put>
</soap:Body>
</soap:Envelope>
<soap:Envelope>
<soap:Body>
<putResponse>
<value/>
</putResponse>
</soap:Body>
</soap:Envelope>
<put>操作にもMessageIDがありますが、RelatesToに会話IDを示す値があるので無視されます。
この例は、メッセージ・ペイロード・データを使用して会話内のメッセージに会話IDを設定する方法を示しています。
これらの例では、プロキシ・サービスがIDをMessageID/RelatesTo SOAPヘッダーにマッピングします。
図24-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がレスポンスによって返送されます。
プット操作
クライアントからプロキシ・サービス
<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ヘッダーの変換を行う必要があります。プロキシ・サービス開発者はトランスフォーメーションを構成します。
図24-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>
プット操作
クライアントからプロキシ・サービス
<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>
次の例は、Oracle Service Busを介して別のSOAコンポジットを非同期で呼び出すSOAコンポジットに関連するSOAPヘッダーです。最初のSOAコンポジットは、ダイレクト・バインディング参照として公開されたBPEL Processを使用して、Oracle Service Busを呼び出します。2番目のSOAコンポジットは、ダイレクト・バインディング参照として公開されたBPEL Processを使用して、Oracle Service Busからのリクエストを受信します。
図24-6では、P1とP2はプロキシ・サービスであり、B1およびB2ビジネス・サービスにメッセージを渡します(そして、変換を実行します)。B1およびB2、Oracle Service Bus SOA-DIRECTトランスポートを使用してSOAコンポジットを呼び出すために必要です。
図24-6 Oracle Service Busを介してSOAコンポジットを呼び出すSOAコンポジット
次のSOAPヘッダー例については、図24-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によって設定されます。24.3.2項「ビジネス・サービスのためのSOA-DIRECTトランスポートの構成」で説明したように、この値はSOA-DIRECTトランスポートの構成の「コールバック・プロキシ」フィールドから取得されます。B1のコールバック・プロキシはP2です。
元のreplyTo情報は、(後に続く) onResultコールバック・メッセージに反映されるように、ラップして参照プロパティとして送信する必要があります。
注意: このサンプルでは、説明のためにosb:Callbackとosb:Addressを使用しています。WS-Addressingのサポートのために定義された標準またはOracle Service Bus標準の要素はありません。 |
<soap:Envelope> <soap:Header> <wsa03:RelatesTo>AmericanLoanClient~1.0/60007</wsa03:RelatesTo> <osb:Callback> <osb:Address> 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変数にコピーされます。