説明

ウェブ・サービス・インターメディアリ用のポート・タイプ不可知プロキシ・サポート

【課題】従来技術の追加の構成の複雑さを強制し、ウェブ・サービス・インターメディアリでの改善を提供すること。
【解決手段】ウェブ・サービス・インターメディアリのポート・タイプ不可知プロキシ・サポートが、通常は、ウェブ・サービス・インターメディアリでウェブ・サービス操作の実行に関する要求を受信することであって、前記要求は、前記操作をサポートするターゲット・サービスのエンドポイントをそれから識別できるパラメータ情報を含むことと、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの前記エンドポイントを識別することと、前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成することと、前記ターゲット・サービス要求を前記ターゲット・サービスに発行することとによって提供される方法、システム、および製品を開示する。例示的実施形態に、通常は、要求−応答処理のリターン経路と、前記インターメディアリ内で前記ターゲット・サービスからの応答を受信することと、前記インターメディアリ内で、前記ターゲット・サービスからの前記応答に応じて、前記インターメディアリからの応答を作成することと、前記インターメディアリからの前記応答を前記要求するクライアントに返すこととも含まれる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の分野は、データ処理であり、より詳細には、ウェブ・サービス・インターメディアリ(intermediary)のポート・タイプ不可知プロキシ(port type agnostic proxy)サポートの方法、システム、および製品に関する。
【背景技術】
【0002】
用語「ウェブ・サービス」は、ウェブベース・アプリケーションを統合する標準化された形を指す。ウェブ・サービスは、通常、バインディングと呼ばれる標準化されたフォーマットでのデータ通信を介する要求の際にビジネス・サービスを提供する。バインディングは、データ・エンコーディング方法およびデータ通信プロトコルの指定である。ウェブ・サービスに使用される最も一般的なバインディングは、SOAPプロトコルによるXMLでのデータ・エンコーディングおよびHTTPを用いるデータ通信である。
【0003】
ブラウザ・クライアントからの要求に応答してHTML文書を供給するHTTPサーバなどの伝統的なクライアント/サーバ・モデルと異なって、ウェブ・サービスは、表示に関係しない。その代わりに、ウェブ・サービスは、ネットワークにまたがるプログラム的インターフェースを介してビジネス・ロジック、データ、およびプロセスを共用する。ウェブ・サービス・アプリケーションは、ユーザではなく、お互いとインターフェースする。ウェブ・サービスの間のすべてのデータ通信が、標準化されたバインディングに従って実行されるので、ウェブ・サービスは、1つのオペレーティング・システムまたはプログラミング言語に束縛されない。Windows(Microsoft Corporationの商標)プラットフォームで稼動するJava(Sun Microsystemの商標)クライアントが、Perlで記述されUnix(TheOpen Groupの商標)で稼動するウェブ・サービス操作を呼び出すことができる。C++で記述されたWindowsアプリケーションが、Java(SunMicrosystemの商標)サーブレットとして実装されたウェブ・サービスの動作を呼び出すことができる。
【0004】
現在、ウェブ・サービスは、多数の産業にまたがって成長しつつある。ウェブ・サービスが重要性を増すにつれて、ウェブ・サービス・インターメディアリが、ますます、多数の付加価値サービスを提供する手段として認められる。本明細書で一般に「インターメディアリ」と称するウェブ・サービス・インターメディアリは、ウェブ・サービス・クライアントとウェブ・サービス・プロバイダの間にあるウェブ・サービス・コンポーネントである。インターメディアリは、一般に、クライアントからの要求をインターセプトし、インターメディアリ・サービスを提供し、その後、クライアント要求をウェブ・サービス・プロバイダに転送することによって動作する。同様に、ウェブ・サービス・プロバイダからの応答が、インターセプトされ、操作され、その後、クライアントに返される。ウェブ・サービス・インターメディアリを実装できる市販製品の例に、IBM社のWeb Services Gateway(商標)およびIBM社のWeb Services Bus(商標)が含まれる。
【0005】
インターメディアリによって提供されるサービスに、ターゲット・サービスに関する要求のソースの認証、内容およびフォームに関するメッセージ妥当性検査、ならびに監査のためのメッセージ・ログ記録が含まれる。インターメディアリは、管理報告サービス、ウェブ・サービス・ヒットの個数、個々のクライアントによって使用されたサービスの品質およびタイミングなどを提供することができる。インターメディアリを、例えば新聞記事など、頻繁に変更されるが頻繁に要求されるデータを保管することによって、改善された性能をサポートするキャッシュとして使用することができる。インターメディアリを、複数のクライアントからのサービスに関する要求を保管し、これらをオフピーク・サービス時間中にターゲット・サービスに転送することによって、負荷平衡化の意味での性能改善に使用することができる。インターメディアリは、例えば、債務勘定、売掛金勘定に関する別々のターゲット・サービスおよび一般的な台帳サービスにその後に転送されるアカウント・ポスティングに関する要求を受け入れる会計インターメディアリとして、サービスを集約することができる。
【発明の開示】
【発明が解決しようとする課題】
【0006】
従来技術では、ウェブ・サービス・インターメディアリを実装し、その結果、これらをそのターゲット・サービスに密結合することが一般的である。すなわち、特定のインターメディアリは、特定のターゲット・ウェブ・サービスだけにインターメディアリ・サービスを提供する。これに関する必要は、例えば、インターメディアリがメッセージ妥当性検査を提供し、したがって正しいメッセージ内容およびフォームの正確な知識を有しなければならないときに、明らかである。ウェブ・サービスの用語法では、動作のグループを、「ポート・タイプ」と呼ぶ。この用語法では、密結合の制限は、一般に、従来技術で、インターメディアリ・サービスおよびそのインターメディアリ・サービスによってサービスされるすべてのターゲット・サービスが、同一のポート・タイプを有することを意味する。しかし、例えば、ポート・タイプに無関係にすべてのターゲット・サービスに向けられたメッセージに対する正確に同一の認証機能を提供すること意図されたクライアント・アイデンティティ認証機能など、インターメディアリ・サービスが、ポート・タイプにまたがって機能することが有用である状況がある。従来技術はそのような場合での追加の構成の複雑さを強制し、ウェブ・サービス・インターメディアリでの改善は引き続き必要とされている。
【課題を解決するための手段】
【0007】
第1の態様によれば、ウェブ・サービス・インターメディアリ用のポート・タイプ不可知プロキシ・サポートの方法であって、ウェブ・サービス・インターメディアリでウェブ・サービス操作の実行に関する要求を受信することであって、前記要求は、前記操作をサポートするターゲット・サービスのエンドポイントをそれから識別できるパラメータ情報を含むことと、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの前記エンドポイントを識別することと、前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成することと、前記ターゲット・サービス要求を前記ターゲット・サービスに発行することとを含む方法が提供される。
【0008】
一実施形態で、前記要求が同期応答を必要とするかどうかを判定し、前記要求が同期応答を必要とする場合に、前記ターゲット・サービスからの応答を待つ。
【0009】
通常の実施形態で、前記要求が同期応答を必要とするかどうかを判定することが、前記要求が同期応答を必要とするかどうかを前記パラメータ情報に応じて判定することによって実行される。通常の実施形態で、前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成することが、前記要求が同期応答を必要とするかどうかの判定に応じて前記ターゲット・サービス要求を作成することを含む。同期応答を必要しない要求に関して、いくつかの実施形態が、さらに、前記ターゲット・サービス要求の肯定応答を前記ターゲット・サービスから受信することと、応答メッセージを待たずに前記肯定応答をリクエスタに返すこととを含む。
【0010】
同期応答を必要とする要求に関して、いくつかの実施形態が、前記ターゲット・サービスからの応答を前記インターメディアリで同期式に受信することと、前記インターメディアリで、前記ターゲット・サービスからの前記応答に応じて、前記インターメディアリからの応答を作成することと、前記インターメディアリからの前記応答をリクエスタに返すこととによって、前記ターゲット・サービスからの応答を待つことをインプリメントする。通常の実施形態で、ターゲット・サービスからの応答をインターメディアリ内で同期式に受信することが、前記インターメディアリと前記ターゲット・サービスとの間のデータ通信接続に対してブロッキング受信関数を呼び出すことによって実行される。
【0011】
多くの実施形態で、作成され、前記ターゲット・サービスに発行される前記ターゲット・サービス要求が、前記ウェブ・サービス・インターメディアリで受信された前記要求の検査されず変更されないメッセージ内容を有する。例示的な実施形態は、通常、要求−応答処理のリターン・パスと、前記インターメディアリで前記ターゲット・サービスからの応答を受信することと、前記インターメディアリで、前記ターゲット・サービスからの前記応答に応じて、前記インターメディアリからの応答を作成することと、前記インターメディアリからの前記応答を前記要求するクライアントに返すこととをも含む。
【0012】
本発明の通常の実施形態は、前記操作をサポートするエンドポイントとして、前記ウェブ・サービス・インターメディアリのエンドポイントをリクエスタに識別することも含む。そのような実施形態で、パラメータ情報が、しばしば、前記操作のポート・タイプを含む。さらに、操作をサポートするターゲット・サービスのエンドポイントを識別することが、しばしば、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの複数のエンドポイントを識別することと、選択ルールに従って前記複数のエンドポイントから1つのエンドポイントを選択することとをも含む。操作をサポートするターゲット・サービスの複数のエンドポイントを識別することが、ポート・タイプに応じて、前記ポート・タイプに関する複数のターゲット・サービスをレジストリから識別することによって実行されることができる。前記複数のエンドポイントから1つのエンドポイントを選択することが、ターゲット・サービスの間の負荷平衡化に関する選択ルールに従って前記複数のエンドポイントから1つのエンドポイントを選択することを含むことができる。
【0013】
前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成することが、前記要求をバインディング中立インターフェースで有用なデータ構造に構成することと、前記要求を呼出しパラメータとして渡して前記バインディング中立インターフェースを呼び出すこととによって実行されることができる。前記ターゲット・サービスに前記ターゲット・サービス要求を発行することが、バインディング中立インターフェースの1つまたは複数のメンバ・メソッドを呼び出すことを含むことができる。
【0014】
第2の態様によれば、本発明は、ウェブ・サービス・インターメディアリ用のポート・タイプ不可知プロキシ・サポートのシステムであって、ウェブ・サービス・インターメディアリでウェブ・サービス操作の実行に関する要求を受信する手段であって、前記要求は、前記操作をサポートするターゲット・サービスのエンドポイントをそれから識別できるパラメータ情報を含む、手段と、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの前記エンドポイントを識別する手段と、前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成する手段と、前記ターゲット・サービス要求を前記ターゲット・サービスに発行する手段とを含むシステムを提供する。
【0015】
第3の態様によれば、ウェブ・サービス・インターメディアリ用のポート・タイプ不可知プロキシ・サポートのコンピュータ・プログラム製品であって、記録媒体と、ウェブ・サービス・インターメディアリ内でウェブ・サービス操作の実行に関する要求を受信する前記記録媒体に記録された手段であって、前記要求は、前記操作をサポートするターゲット・サービスのエンドポイントをそれから識別できるパラメータ情報を含む、前記記録媒体に記録された手段と、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの前記エンドポイントを識別する前記記録媒体に記録された手段と、前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成する前記記録媒体に記録された手段と、前記ターゲット・サービス要求を前記ターゲット・サービスに発行する前記記録媒体に記録された手段とを含むコンピュータ・プログラム製品が提供される。
【0016】
本発明を、コンピュータ・ソフトウェアでインプリメントすることができる。
【0017】
本発明の好ましい実施形態を、例としてのみ、添付図面を参照してこれから説明する。
【発明を実施するための最良の形態】
【0018】
本発明を、大体において、本明細書ではウェブ・サービス・インターメディアリのポート・タイプ不可知プロキシ・サポートの方法に関して説明する。しかし、当業者は、開示される方法に従って動作する適当なプログラミング手段を含むすべてのコンピュータ・システムも、本発明の範囲に含まれることを理解するであろう。適当なプログラミング手段に、本発明の方法のステップを実行するようにコンピュータ・システムに指示するすべての手段が含まれ、これには、例えば、データおよびプログラム命令を保管するように構成された電子回路を含むコンピュータ・メモリに、処理ユニットによる実行のために本発明の方法のプログラムされたステップをコンピュータ・メモリに保管する能力を有する、コンピュータ・メモリに結合された処理ユニットおよび算術論理回路からなるシステムが含まれる。
【0019】
本発明を、適当なデータ処理システムと共に使用される、ディスケットまたは他の記録媒体など、コンピュータ・プログラム製品で実施することもできる。コンピュータ・プログラム製品の実施形態を、磁気媒体、光媒体、または他の適当な媒体を含む機械可読情報用のすべての記録媒体の使用によってインプリメントすることができる。当業者は、適当なプログラミング手段を有するすべてのコンピュータ・システムが、プログラム製品で実施された本発明の方法のステップを実行できることを、即座に理解するであろう。当業者は、本明細書で説明される例示的実施形態のほとんどが、コンピュータ・ハードウェアにインストールされ、実行されるソフトウェアに向かうものではあるが、それでも、ファームウェアまたはハードウェアとしてインプリメントされる代替実施形態も、本発明の範囲に含まれることを即座に理解するであろう。
【0020】
定義
本明細書で使用される用語としての「ビジネス・レジストリ」は、会社およびその会社によって提供されるウェブ・サービスのリスティングを含む、ウェブ・サービスのインターネット・ディレクトリである。ウェブ・サービスのリスティングには、サポートされる操作、ポート・タイプ、エンドポイント、バインディングなどが含まれる。ビジネス・レジストリには、ebXMLなどのオープン標準規格に基づくものや、UDDIなどの産業コンソーシアムが主導する仕様に基づくものがある。会社は、レジストリにそれ自体を登録することができる。会社は、レジストリを介して共用される材料をサブミットすることができ、レジストリ・クライアントは、他者がサブミットした材料を検索することができる。ブラウザを介して手動でまたはそれ自体をウェブ・サービスとすることのできるAPIを介してプログラム的に、ビジネス・レジストリにアクセスし、検索することができる。レジストリは、会社が疎結合された形で互いに動的に協力することを可能にするので、ウェブ・サービスのますます重要なコンポーネントになりつつある。
【0021】
HTTPは、「ハイパーテキスト転送プロトコル」すなわち、ウェブ上で最も一般的なデータ通信プロトコルを意味する。しかし、本明細書では、用語「ウェブ」が、HTTP通信に制限されるのではなく、HDTPすなわちHandheld Device Transfer ProtocolまたはWAPすなわちWireless Access Protocolおよび当業者が思い浮かべる他のプロトコルなど、通信の類似するモードをサポートする他のプロトコルを用いる通信も含むことができる。
【0022】
「SOAP」は、「Simple Object Access Protocol」すなわち、ウェブ・サービスの要求メッセージおよび応答メッセージをネットワークを介して送信する前に、これらの情報をエンコードするのに使用される軽量XMLベース・メッセージング・プロトコルを意味する。SOAPメッセージは、すべてのオペレーティング・システムまたはプロトコルから独立しており、SMTP、MIME、およびHTTPを含む様々なインターネット・プロトコルを使用して転送することができる。
【0023】
「UDDI」は、「Universal Description,Discoveryand Integration」すなわち、会社がインターネット上でそれ自体をリストし、お互いを発見することを可能にする、従来の職業別電話帳および個人別電話帳に似た、ウェブベース分散ディレクトリを意味する。
【0024】
「WSDL」は、「Web Services Description Language」を意味する。WSDLは、Microsoft社およびIBM社によって共同開発されたXMLフォーマットの言語であり、メッセージを交換できる通信エンドポイントの集合としてウェブ・サービスの機能を記述するのに使用される。WSDLは、UDDIがウェブ・サービスの機能を記述するのにWSDLを使用するという点で、UDDIの一体化された部分である。
【0025】
「ebXML」は、「electronic business ExtensibleMarkup Language」すなわち、電子商取引の取引を容易にするための、XMLでのウェブ・サービスの記述を標準化する仕様のモジュラ・スイートである。UDDIに似て、ebXML仕様は、ウェブ・サービスを定義し登録する標準的な方法を会社に与える。
【0026】
本明細書では、一般に、WSDLの用語法に似た用語法を用いてウェブ・サービスのコンポーネントを記述する。ウェブ・サービスは、メッセージを交換できるネットワーク・エンドポイントすなわちデータ通信のエンドポイントの集合として記述される。エンドポイントを、時々「ポート」と呼ぶ。しかし、本明細書では、一般に、用語「ポート・タイプ」との混乱の危険を減らすために、用語「エンドポイント」が、「ポート」より好ましい。ポート・タイプは、ポートのタイプでもエンドポイントのタイプでもない。ポート・タイプは、サービスによってサポートされる、「操作」の集合すなわちソフトウェアのアクションまたは機能の集合である。
【0027】
あるポート・タイプに関する特定の通信プロトコルおよびデータ・フォーマットの指定が、「バインディング」を構成する。バインディングの一例が、メッセージ・データがSOAPに従ってエンコードされ、メッセージがHTTPに従ってエンドポイントの間で通信されるSOAP/HTTPである。バンディングのもう1つの例が、メッセージ・データがGETメッセージまたはPOSTメッセージでエンコードされ、データ通信がHTTPに従って実行されるGET/POST/HTTPである。
【0028】
各ポート・タイプは、複数のバインディングを有することができる。エンドポイントは、ネットワーク・アドレスにバインディングを関連付けることによって定義され、上で述べたように、エンドポイントの集合が、サービスを定義する。ウェブ・サービスでの操作に関するデータおよび要求の通信は、「メッセージ」と呼ばれるデータ構造を介して実行され、このメッセージは、「パーツ」からなる。用語「要求」および「応答」は、一般に、メッセージ・フローの向きを示す。特定のバインディングの要求メッセージおよび応答メッセージは、同一の構造を有することができる。
【0029】
ウェブ・サービス・インターメディアリのポート・タイプ不可知プロキシ・サポート
添付図面を参照し、図1および2から始めて、ウェブ・サービス・インターメディアリのポート・タイプ不可知プロキシ・サポートの方法、システム、および製品を説明する。図1に、本発明の実施形態に従ってウェブ・サービス・インターメディアリのポート・タイプ不可知プロキシ・サポートをインプリメントできる、ウェブ・サービスの例示的アーキテクチャの線画を示す。図1のアーキテクチャでは、インターメディアリ(202)は、あるプロトコルを介するデータ通信をリクエスタ(102)およびターゲット・サービス(118)に接続することができる。リクエスタ(102)の位置のウェブ・サービス・コンポーネントを、時々、クライアントと称する。同様に、インターメディアリ(202)の位置のコンポーネントを、特にリクエスタの観点から見たときに、時々、サーバと称する。
【0030】
クライアント/サーバの区別は、ウェブ・サービスの文脈では注意深く使用されなければならない。例えば、図2のアーキテクチャでは、ターゲット・サービス(118)が、リクエスタ(102)からの要求に対する応答を準備する処理で、インターメディアリ(203)を介してターゲット・サービス(119)からウェブ・サービスを要求する場合がある。それを行う際に、ターゲット・サービス(118)は、クライアントとして働いている。要求をターゲット・サービス(118)に転送する際に、インターメディアリ(202)は、クライアントとして働いている。特定のコンポーネントが、特定のときにクライアントまたはサーバのどちらと考えられるかは、そのときにそのコンポーネントによって実行されている特定の機能に依存する。すなわち、あるウェブ・サービス・コンポーネントが、ある瞬間にクライアントであり、次の瞬間にサーバになることができる。したがって、用語法からの混乱の危険を減らすために、ウェブ・サービス・コンポーネントは、通常、本明細書で、「クライアント」または「サーバ」ではなく、用語「リクエスタ」、「インターメディアリ」、および「ターゲット・サービス」を使用することによって記述される。
【0031】
インターメディアリ(202)がターゲット・サービス(118)の代わりにインターメディアリ・サービスを提供するためには、インターメディアリ(202)は、ターゲット・サービス(118)上のエンドポイントを知らなければならない。上で述べたように、従来技術では、インターメディアリ(202)で稼動する「プロキシ」と呼ばれるサービスが、ターゲット・サービス(118)と同一のポート・タイプをサポートし、その構成データにターゲット・サービス(118)のエンドポイントを有する。しかし、図1および2のアーキテクチャでは、プロキシが、「ポート・タイプ不可知」であり、これは、プロキシへの使用可能な構成データが、ターゲット・サービスのエンドポイントを記述しないことと、リクエスタ(102)が、インターメディアリに完全に未知のポート・タイプの操作に関する要求をサブミットできることを意味する。
【0032】
図3に、本発明の実施形態による例示的なインターメディアリ(202)のブロック図の線画を示す。インターメディアリ(202)に、少なくとも1つの中央処理装置、コンピュータ・メモリ、システム・バスなどを含む、自動化されたコンピューティング機械すなわちコンピュータ・システムが含まれる。図3のブロック図のブロックは、インターメディアリ(202)のコンピュータ・システムで動作可能なソフトウェア・アプリケーション・モジュールを表す。図3の矢印は、ソフトウェア・モジュールの間のデータ・フローを表す。
【0033】
インターメディアリ(202)に、ウェブ・サービス操作の実行に関する、パラメータ情報(107)を含む要求(106)をリクエスタ(102)から受信することができるインバウンド・エンジン(208)が含まれる。次は、SOAP−HTTPバインディングに関するそのような要求の例である。
POST /Channel/proxy?portType=A HTTP/1.1
Host: www.myIntermediary.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:myOp xmlns:m="Some-URI">
</m:myOp>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
この例示的なPOSTメッセージに、インターメディアリに「myOp」操作を要求するSOAPエンベロープが含まれる。すなわち、ターゲット・サービス(118)で実行される操作の名前が、soapメッセージ内で内部的に識別されている。myOp操作、そのポート・タイプ、およびそのエンドポイントのすべてが、この要求を受信する前にはインターメディアリに未知である。この例では、この操作をサポートするターゲット・サービス(118)のエンドポイントをそれから識別できるパラメータ情報(107)が、このPOSTの第1行のURIエンコードされたクエリ文字列の名前/値対「portType=A」に示されている。
【0034】
第2の実施形態では、例示的要求の第1行が、次のようになる。
POST/Channel/proxy?portType=A&synchRespReqd=True HTTP/1.1
この第2の実施形態では、パラメータ情報に、名前/値対「synchRespReqd=True」が含まれ、この対から、本発明の実施形態によるポート・タイプ不可知プロキシが、この要求が同期応答を要求するかどうかを判定することができる。
【0035】
ウェブ・サービスに関する、パラメータ情報(107)を含む要求(106)をリクエスタ(102)から受信することに加えて、インバウンド・エンジン(208)は、パラメータ・データを含む要求をポート・タイプ不可知プロキシ(212)に供給する能力も有する。インバウンド・エンジン操作の一例として、上で示した例示的要求を検討されたい。その例示的要求は、SOAP−HTTPとしてバインドされている。したがって、この例示的要求に関して、インバウンド・エンジンを、例えばJava(Rh)Bean、Java(R)サーブレット、またはPerlで記述されたCGI(Common Gateway Interface)スクリプトを含むすべての種類のサーバタイプ・アプリケーションとしてインプリメントされた、着信要求をプロキシ(212)にハンド・オフするSOAP対応HTTPサーバとすることができる。Java(R)サーブレットおよびCGIスクリプトは、制限ではなく例としてのみ言及されたものである。本発明の範囲内で、当業者が思い浮かべるすべての種類のサーバサイド機能性を使用して、ウェブ・サービス・インターメディアリ用のポート・タイプ不可知プロキシ機能をインプリメントすることができる。
【0036】
ポート・タイプ不可知プロキシ(212)を、排他的にポート・タイプ不可知プロキシとして動作するようにハード・コードすることができ、あるいはその代わりに、ポート・タイプ不可知プロキシ(212)が、構成パラメータ(223)に依存してモーダルに動作することができる。構成パラメータは、ポート・タイプ不可知プロキシ(212)が伝統的なインターメディアリ・サービスとしてまたはポート・タイプ不可知モードのどちらで動作しなければならないかを示すために提供することができる。そのような構成パラメータは、有利なことに、特に両方のモードで利用できるコード・セグメントの再利用を含む効率的なプログラム・コーディングを促進する。プログラム・コードの効率的使用をサポートするもう1つの構成パラメータが、プロキシのバインディングまたは「チャネル・タイプ」を識別するパラメータである。下で詳細に説明するように、ポート・タイプ不可知プロキシは、ウェブ・サービスがサポートするすべてのバインディングすなわち、SOAP、MIME、GET/POST/HTTPなどを用いて動作することができる。ポート・タイプ不可知プロキシを、任意のバインディングまたはチャネル・タイプを用いて動作するようにコーディングし、その後、ラン・タイム動作のバインディングまたはチャネル・タイプについてプロキシに助言するパラメータを用いて構成することができる。さらに、要求または応答メッセージの内容を解析することを必要とする、プロキシ内のインターメディアリ・サービスをオンまたはオフにするために、構成パラメータを設けることができる。そのようなパラメータは、メッセージ内容の解析がインターメディアリ性能を低下させる傾向があるので、性能を最適化するのに使用することができる。多くのポート・タイプ不可知プロキシならびに他のインターメディアリ・サービスが、インターメディアリ(202)内で同時に動作することができ、そのそれぞれの名前を、構成パラメータとして割り当てることができる。メッセージ・ハンドラおよびフィルタを、構成パラメータでプロキシに割り当てることができる。この段落では、制限ではなく説明として、ポート・タイプ不可知プロキシの複数の構成パラメータを説明している。当業者が思い浮かべるすべての構成パラメータの使用が、本発明の範囲に含まれる。
【0037】
図4に、本発明の実施形態によるSOAP−HTTPチャネルをインプリメントする例示的なインターメディアリ(202)のブロック図の線画を示す。上で述べたように、SOAPバインディングを用いる要求について、パラメータ・データを含む要求をポート・タイプ不可知プロキシ(212)に供給できるインバウンド・エンジン(208)を、SOAP対応HTTPサーバとして実施することができる。そのようなインバウンド・エンジンを、プロキシに関するSOAPHandlerオブジェクト(210)への複数の参照を用いて構成することができ、ここで、各SOAPHandlerオブジェクト(210)は、プロキシに関する要求に対するあるデータ処理タスクを提供するように構成される。そのようなインバウンド・エンジンは、通常、着信要求をパラメータ情報と共にSOAPContextオブジェクト(209)にカプセル化し、プロキシ用に構成されたSOAPHandler(210)のそれぞれにSOAPContextオブジェクトへの参照を渡し、次に、SOAPContext(209)全体をプロキシ(212)に渡すことによって動作する。一般的な意味で、エンドポイントを識別するのは、ポート・タイプ不可知プロキシであるが、詳細なインプリメント・レベルに、SOAPの場合のように、ハンドラ内のプロキシ機能を含めることができる。すなわち、インバウンド・エンジンが、ターゲット・サービスのエンドポイント(SOAP/HTTPの場合にはURL)をセットできるSOAPContext内のプロパティを確立することができる。そのような実施形態で、SOAPHandlerオブジェクト(210)のうちの1つを有用にプログラムして、要求からパラメータ情報を抽出し、SOAPContext内の名前/値対に置くことができ、その結果、プロキシが、これを使用して、要求されたウェブ・サービス操作をサポートするターゲット・サービス(118)のエンドポイントを識別できるようになる。
【0038】
その代わりに、着信要求が、SOAPではなくGET/HTTPにバインドされている場合がある。そのような例では、プロキシ(図3の212)を、Java(R)サーブレットとしてインプリメントすることができる。インバウンド・エンジン(208)を、パラメータ情報を含む要求をHTTPServletRequestオブジェクトにカプセル化し、そのHTTPServletRequestオブジェクトへの参照をプロキシに供給するJava(R)対応HTTPサーバとしてインプリメントすることができる。このプロキシは、HTTPServletRequest.getQueryString()への呼出しを介してパラメータ情報を入手することができ、この呼出しは、要求URLからのクエリ文字列すなわち、要求URL内の疑問符の後のすべてを返す。クエリ文字列全体を有するので、そのような例示的プロキシは、クエリ文字列からパラメータ・データすなわち、この例では「portType=A」を抽出し、そのように抽出された情報を使用して、要求されたウェブ・サービス操作をサポートするターゲット・サービス(118)のエンドポイントを識別するようにプログラムされる。プロキシが、要求されたウェブ・サービス操作をサポートするターゲット・サービスのエンドポイントを識別できる1つの形が、UDDIレジストリまたはebXMLレジストリなどのビジネス・レジストリ(211)からエンドポイント記述を取り出すことである。ターゲット・サービス(118)は、通常、例えばWSDL文書として表された記述を含むそのような記述を、これらをビジネス・レジストリ(211)に登録(224)することによって作る。
【0039】
SOAPベースのウェブ・サービスでは、SOAPメッセージ自体に、操作の名前およびその操作のパラメータが含まれるが、これらは、エンドポイントURLに含まれない。インターメディアリが、portTypeパラメータなどのパラメータ情報を受け取ることが有用である。そのパラメータは、portTypeの名前のように単純なものとすることができる。その場合に、サーバ内(例えばハンドラ内、またはプロキシ機能自体の中)で稼動するある「ビジネス・ロジック」が、ポート・タイプまたは他のパラメータ情報に基づいて、ターゲット・サービス(118)の実際のエンドポイントURLを選択しなければならない。パラメータ情報に、実際のエンドポイントURLを含めることもできる。その場合に、「ビジネス・ロジック」は、最終的にそのURLに要求を送信する。ポート・タイプとエンドポイントURLの両方を、パラメータ情報で表すことができ、その場合に、「ビジネス・ロジック」は、エンドポイントURLの判定を試み、要求内のエンドポイントURLよりよいものが見つからない場合に、要求内のエンドポイントURLを使用することができる。本発明は、この3つのシナリオのすべてならびにビジネス・ロジックによって制御することができるすべての変形を許容する。必ず、「ビジネス・ロジック」を制御するのを助ける他のパラメータがある可能性がある。
【0040】
本明細書では、SOAP/HTTPバインディングに関しておよび時々GET/POST/HTTPバインディングに関して例示的バインディングを論じる傾向があるが、これらの例示的バインディングの議論は、説明の便宜のためであって制約としてではない。本発明の様々な実施形態に従って有用な代替の例示的なバインディングに、MIME/SMTP(Multipart Internet Mail Extensions over the Small Message TransportProtocol)およびRMI/IIOP(Java's Remote Method Invocation over the Common ObjectRequest Broker Architecture's Internet Inter-ORB Protocol)が含まれる。実際に、任意のJavaクラスを、ネイティブJava呼出しをアクセス・プロトコルとして用いて、ウェブ・サービスとして扱うことができ、当業者が思い浮かべるすべての他のバインディングのポート・タイプ不可知プロキシでの使用が、好ましい実施形態による本発明の範囲に含まれる。
【0041】
図3の例示的なインターメディアリ(202)では、プロキシ(212)はポート・タイプ不可知プロキシであり、リクエスタ認証、メッセージ妥当性検査、メッセージ・ログ記録、管理報告サービスなど、それが設計されたすべてのインターメディアリ・サービスを実行し、要求された操作をサポートするターゲット・サービス(118)のエンドポイントを識別し、その後、バインディング中立インターフェース(218)を介してターゲット・サービスに要求を送信する、ポート・タイプ不可知プロキシである。下で詳細に説明するように、バインディング中立インターフェース(218)は、その使用の形が要求バインディングに依存しないインターフェースである。
【0042】
図3の例示的なインターメディアリ(202)では、インターフェース(218)が、プロバイダ(220)を動作させ、このプロバイダ(220)が、アウトバウンド・エンジン(222)を呼び出して、要求(106)をターゲット・サービス(118)に転送する。バインディング中立インターフェース(218)は、プロトコル固有のプロバイダ(220)内のコードによってバック・アップされるので、バインディング中立の形で動作することが可能である。プロバイダ(220)は、SOAP、HTTPなど、特定のプロトコルの詳細に従って実際のメッセージ交換を実行する。実際のデータ通信を実行するプロバイダからバインディング中立インターフェースを切り離すことによって、新しいプロバイダの動的登録がサポートされ、その結果、インターメディアリが、再コンパイルまたは再展開を必要とせずにそのデータ通信能力を強化することができるようになる。プロバイダは、しばしばそのプロバイダのプロトコルによってサポートされるターゲット・サービスによって提供されるオブジェクトとしてインプリメントされ、プロバイダへの参照が、バインディング中立インターフェースに動的にインストールされる。アウトバウンド・エンジン(222)は、プロバイダ(220)によってインプリメントされるプロトコルのための実際のデータ通信エンジンである。プロトコルが、例えばSOAP/HTTPとして採用されるときに、アウトバウンド・エンジンは、ターゲット・ウェブ・サービスとの間でSOAP/HTTPの要求メッセージおよび応答メッセージを送信でき、受信できるSOAP/HTTPエンジンである。例えば、プロトコルがHTTPの場合に、アウトバウンド・エンジンは、ウェブ・ブラウザのデータ通信モジュールに似た、HTTPデータ通信クライアント・モジュールである。
【0043】
インターメディアリ・サービスを提供するために、インターメディアリは、有利なことに、要求のエンドポイントを識別することができる。それを行う方法を、図5に関して述べる。図5に、ウェブ・サービス操作の実行に関する要求(106)をウェブ・サービス・インターメディアリ内で受信すること(104)を含むウェブ・サービス・インターメディアリのポート・タイプ不可知プロキシ・サポートの方法を示す流れ図を示すが、ここで、この要求には、操作をサポートするターゲット・サービスのエンドポイントをそれから識別できるパラメータ情報(107)が含まれる。
【0044】
次も、SOAP−HTTPバインディングのそのような要求の例である。
POST /Channel/proxy?portType=A HTTP/1.1
Host: www.myIntermediary.com
Content-Type: text/xml;charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:myOpxmlns:m="Some-URI">
</m:myOp>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
この例示的なPOSTメッセージに、インターメディアリに「myOp」操作を要求するSOAPエンベロープが含まれる。myOp操作、そのポート・タイプ、およびそのエンドポイントのすべてが、この要求を受信する前にはインターメディアリに未知である。この例では、メッセージが、SOAPエンベロープとして解釈され、この操作をサポートするターゲット・サービスのエンドポイントをそれから識別できるパラメータ情報(107)が、HTTPパラメータ「portType=A」である。この例では、ターゲット・サービスの操作の名前が、既にSOAPエンベロープにエンコードされているので、追加される唯一のパラメータ・データは、ポート・タイプ「A」すなわち、ターゲット・サービスの操作を含むポート・タイプである。
【0045】
図5の方法に、操作をサポートするターゲット・サービスのエンドポイント(110)を、パラメータ・データに依存して識別すること(108)も含まれる。このSOAP−HTTPの例では、操作をサポートするターゲット・サービスのエンドポイント(110)を識別すること(108)は、UDDIレジストリまたはebXMLレジストリなどのビジネス・レジストリからエンドポイント記述を取り出すことによって実行される。この例では、インターメディアリが、ネットワーク・アドレスhttp://www.myTarget.com/SOAP-HTTP/servlets/のSOAP−HTTPによってバインドされたものとして記述されたポート・タイプAのエンドポイントをレジストリから取り出す。
【0046】
図示の方法に、ターゲット・サービスの操作の実行に関するターゲット・サービス要求(114)を作成すること(112)が含まれる。この例では、インターメディアリが、ターゲット・サービスのエンドポイントを使用して、HTTP POSTメッセージとしてターゲット・サービス要求を作成するようにプログラムされる。エンドポイントを識別するパラメータ・データが、削除され、要求が、SOAPメッセージを処理するスクリプトに向けられ、このスクリプト自体が、SOAPエンベロープ内の操作名から操作を識別する。
【0047】
結果のターゲット・サービス要求は、次のようになる。
POST/SOAP-HTTP/servlets/QuoteServiceServlet HTTP/1.1
Host: www.myTarget.com
Content-Type: text/xml;charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:myOp xmlns:m="Some-URI">
</m:myOp>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
【0048】
図5の方法に、ターゲット・サービス要求(114)をターゲット・サービス(118)に発行すること(116)も含まれる。この例では、ターゲット・サービス要求の発行に、http://www.myTarget.com/にあるターゲット・サービス・エンドポイントへのTCP/IP接続をオープンすることと、そのTCP/IP接続を介してHTTP POSTメッセージをターゲット・サービスに送信することが含まれる。
【0049】
本発明の少なくともいくつかの実施形態で、図5に示されたものなどのポート・タイプ不可知プロキシ・サポートの方法で、作成され、ターゲット・サービスに発行されるターゲット・サービス要求が、ウェブ・サービス・インターメディアリで受信された要求の検査されず変更されないメッセージ内容を有することに留意することが有用である。上で説明した例では、インターメディアリのプロキシ・サービスが、メッセージ本体すなわちSOAPエンベロープにまったく手を付けず、オープンせず、検査せず、解析せず、どの形でも変更せずに、パラメータ・データ「portType=A」からターゲット・サービスのエンドポイントを識別し、そのように識別されたエンドポイントにメッセージをリダイレクトし、このSOAPエンベロープが、そのリクエスタからターゲット・サービスまでの配送の過程全体を通じて検査されず、変更されないままになる。この過程で、プロキシ・サービスは、インターメディアリ・サービス、認証、管理報告、負荷平衡化、サービス集約などのうちの1つまたは複数を提供した。
【0050】
さらなる説明として、例示的な要求が、GET/HTTPバインディングについて提示され、http://www.myIntermediary/channelApps/GET-HTTP/servlets/proxyにあるエンドポイントに向けられる。例示的な着信要求メッセージは、次の形を有する。
GET/servlets/proxy?message=messageContentString&
operation=myOp&portType=A HTTP/1.1
また、URI空間では、例示的な要求を次のように示すことができる。
http://www.myIntermediary.com/servlets/
proxy?message=messageContentString&operation=myOp&portType=A
この例では、メッセージが、名前/値対としてエンコードされたURIエンコードされたクエリ・データ「message=messageContentString」としてとられる。メッセージ内容は、URIエンコードされた文字列である。この例では、操作をサポートするターゲット・サービスのエンドポイントをそれから識別できるパラメータ情報(107)のすべてが、メッセージ内容文字列に続くクエリ・データである。この例では、クエリ・データに、「A」というポート・タイプとターゲット・サービスの操作の名前の両方が含まれる。
【0051】
この例では、操作をサポートするターゲット・サービスのエンドポイント(110)を識別すること(108)は、UDDIレジストリまたはebXMLレジストリなどのビジネス・レジストリからエンドポイント記述を取り出すことによって実行される。この例では、インターメディアリが、ネットワーク・アドレスhttp://www.myTarget.comのGET/HTTPによってバインドされたものとして記述されたポート・タイプAのエンドポイントをレジストリから取り出す。
【0052】
図5の方法には、ターゲット・サービスの操作の実行に関するターゲット・サービス要求(114)を作成すること(112)も含まれる。この例では、インターメディアリが、ターゲット・サービス要求のエンドポイント・アドレスに操作名およびメッセージ・パーツを連結することによって、HTTP GETメッセージとしてターゲット・サービス要求を作成するようにプログラムされる。URI空間で表現された、結果のターゲット・サービス要求は、次のようになる。
http://www.myTarget.com/servlets/myOp?message=messageContentString
【0053】
図5の方法には、ターゲット・サービス(118)にターゲット・サービス要求(114)を発行すること(116)も含まれる。この例では、ターゲット・サービス要求の発行に、http://www.myTarget.com/にあるターゲット・サービス・エンドポイントへのTCP/IP接続をオープンすることと、HTTP GETメッセージを送信することが含まれる。
GET/servlets/myOp?message=messageContentString HTTP/1.1
【0054】
当技術分野における技量を有する読者は、リクエスタがターゲット・サービスの操作に関する要求をどのようにしてインターメディアリに送信するかを不思議に思っている。答は、インターメディアリまたはインターメディアリの開発者が、リクエスタに対して、ターゲット・サービスの操作をサポートするエンドポイントとしてウェブ・サービス・インターメディアリのエンドポイントを識別することである。ターゲット・サービスの操作をサポートするエンドポイントとしてのインターメディアリのエンドポイントの識別は、リクエスタによるディスカバリのためにビジネス・ディレクトリに登録されるWSDL文書でインプリメントすることができる。その代わりに、そのような識別を、インターメディアリからリクエスタにダウンロードすることができ、あるいは、リクエスタのウェブ・サービス構成データへの管理者によるインストールのために、単純にリクエスタまたはリクエスタの管理者に電子メールで送ることさえできる。
【0055】
ターゲット・サービスがWSDL擬似コードの次のセグメントによって記述される例を検討されたい。
<definitions targetNamespace= ... >
<messagename="GetQuoteInput"> ... </message>
<messagename="GetQuoteOutput"> ... </message>
<portTypename="StockquotePT"> ... </portType>
<binding name="SOAPBinding"... >
<operationname="getQuote"> ... </operation> ...
</binding>
<servicename="StockquoteService">
<port name="SOAPPort"binding="tns:SOAPBinding">
<soap:address location=
"http://myTargetService/soap/servlet/getQuote"/>
</port>
</service>
</definitions>
【0056】
そのターゲット・サービスのインターメディアリは、次のようにターゲット・サービス記述のアドレス拡張要素の位置属性を置換することによって、ターゲット・サービスの操作をサポートするエンドポイントとしてウェブ・サービス・インターメディアリのエンドポイントをリクエスタに対して識別することができる。
<soap:addresslocation="http://www.myIntermediary.com/
Channel/SOAP/proxy?portType=StockquotePT"/>
これによって、次のセグメントによって例示されるWSDL文書が作成される。
<definitions targetNamespace= ... >
<messagename="GetQuoteInput"> ... </message>
<messagename="GetQuoteOutput"> ... </message>
<portTypename="StockquotePT"> ... </portType>
<binding name="SOAPBinding"... >
<operationname="getQuote"> ... </operation> ...
</binding>
<servicename="portTypeAgnosticProxy">
<portname="intermediaryEndpoint" binding="SOAPBinding">
<soap:address location=
"http://www.myIntermediary.com/
Channel/SOAP/proxy?portType=StockquotePT"/>
</port>
</service>
</definitions>,
これは、ターゲット・サービスでの「getQuote」操作をサポートするエンドポイントとしてウェブ・サービス・インターメディアリのエンドポイントを識別する。レジストリ、ダウンロード、電子メールを介して、または当業者が思い浮かべる他の手段によって、この後者のセグメントによって例示される種類のWSDLをリクエスタに提供することによって、そのリクエスタに対して、ターゲット・サービスの操作をサポートするエンドポイントとしてウェブ・サービス・インターメディアリのエンドポイントが識別される。
【0057】
図5の方法では、パラメータ情報(107)に応じて、操作をサポートするターゲット・サービスのエンドポイントを識別すること(108)に、しばしば、ターゲット・サービスの1つのエンドポイントだけではなく、その操作をサポートするターゲット・サービスの複数のエンドポイントを識別することを含めることができる。本発明方法の実施形態によるポート・タイプ不可知プロキシが、操作のポート・タイプをパラメータ情報(107)として受信し、クエリ・パラメータとしてポート・タイプを用いてビジネス・レジストリに照会し、これによって操作をサポートするターゲット・サービスの複数のエンドポイントを識別する例を検討されたい。複数のエンドポイントのそのような識別は、例えば、ポート・タイプを用いてUDDIレジストリに照会し、それに応答して、そのポート・タイプに関するターゲット・サービスを記述した複数のWSDL文書を受信することによって実行することができる。
【0058】
複数のエンドポイントがそのように識別される場合に、本発明の実施形態によるウェブ・サービス・インターメディアリのポート・タイプ不可知プロキシ・サポートの方法に、通常、選択ルールに従ってエンドポイントのうちの1つを選択することが含まれる。自明な例では、選択ルールを、そのように識別された複数のエンドポイントの最初のエンドポイントを選択し、他のエンドポイントを破棄することとすることができる。選択ルールは、例えば、負荷平衡化に関する選択ルールを含む、より複雑なルールとすることができる。負荷平衡化に関するルールは、表1に示されたものに類似したデータ構造の使用によってインプリメントすることができる。
【0059】
【表1】

【0060】
表1の各行は、インターメディアリとターゲット・サービスの間のウェブ・サービス・データ通信の要求−応答ラウンド・トリップに関する待ち時間(latency)測定値を表す。表1には、要求および応答のラウンドごとに、ポート・タイプおよびエンドポイントURIの列が設けられている。送信時刻列は、要求メッセージが、インターメディアリからポート・タイプの操作に関するターゲット・サービスのエンドポイントに発行されたときの時刻を記録したものである。受信時刻列は、対応する応答メッセージがターゲット・サービスから受信されたときの時刻を記録したものである。トリップ待ち時間は、受信時刻と送信時刻の差である。累積待ち時間は、この表に表されたエンドポイントごとのトリップ待ち時間の現在合計(runningsum)である。表1に似た構造を用いて、要求に関する複数のエンドポイントが識別されたときに使用される選択ルールを、次の例示的なルールとしてインプリメントすることができる。
同一ポート・タイプの操作に関する複数の要求がインターメディアリに達したときには、複数の識別されたエンドポイントのそれぞれを順番に1回使用する。
そのような使用のそれぞれの待ち時間データを記録する。
同一ポート・タイプの操作に関する後続要求について、最短の累積待ち時間を有するエンドポイントを待ち時間テーブルから選択し、要求をそのエンドポイントに送信し、メッセージがターゲット・サービスに送信されるときおよび対応する応答がインターメディアリで受信されるときに、関連する待ち時間データを記録する。
【0061】
表1の例示的データには、ポート・タイプAについて2つのエンドポイントすなわち、URIhttp://www.ibm.com/aTargetServiceにある第1エンドポイントおよびURIhttp://www.ibm.com/anotherTargetServiceにある第2エンドポイントに最近送信された要求の累積待ち時間が示されている。第1エンドポイントは、250ミリ秒の累積要求待ち時間を有し、第2エンドポイントは、100ミリ秒の累積待ち時間を有する。上で示した例示的な選択ルールを使用すると、ポート・タイプAに関する操作の現在の要求は、URIhttp://www.ibm.com/anotherTargetServiceにある第2エンドポイントにルーティングされる。
【0062】
図5の方法では、ターゲット・サービスの操作の実行に関するターゲット・サービス要求(114)を作成すること(112)を、バインディング中立インターフェース内で有用なデータ構造内に要求を構成し、その要求を呼出しパラメータとして渡してバインディング中立インターフェースを呼び出すことによって実行することができる。同様に、ターゲット・サービスにターゲット・サービス要求(114)を発行すること(116)に、バインディング中立インターフェースの1つまたは複数のメンバ・メソッドを呼び出すことが含まれる。
【0063】
バインディング中立インターフェースは、そのインターフェースの使用が要求またはメッセージのバインディングに依存しないインターフェースである。すなわち、このインターフェースをインプリメントし、それを介するデータ通信を実行するのに使用されるデータ構造および呼出し方法は、メッセージに使用されるデータ・エンコーディングのタイプに依存せず、メッセージに使用されるデータ通信プロトコルに依存しない。本発明の実施形態によるインターメディアリ用のポート・タイプ不可知プロキシの開発者は、しばしば、彼ら自身のバインディング中立インターフェースを作成する。しかし、「WSIF」すなわちWeb Service Invocation Frameworkと称する、バインディング中立インターフェースのオープン標準規格がある。WSIFは、現在、ApacheSoftware FoundationのWeb Services Projectの一部としてサポートされている。
【0064】
バインディング中立インターフェースの使用は、本発明の実施形態に利益をもたらす。SOAP−HTTPバインディングは、現在の技術で非常に一般的なので、ユーザおよび開発者は、時々、他のバインディングが存在することを忘れる。これは、他のバインディングと共に使用されるか他のバインディングと共に使用するために適合させることが、不可能でないとしても非常にむずかしいシステムの開発をもたらす。しかし、ウェブ・サービスが成長するにつれて、他のバインディングが、より有用でより一般的になる。さらに、本発明の実施形態のバック・エンドにバインディング中立インターフェースを使用することは、使用可能なバインディングをラン・タイムに決定でき、これによって、柔軟で強力でより一般的に有用なウェブ・サービス・インターメディアリが提供されることを意味する。
【0065】
バインディング中立インターフェースをインプリメントする形の1つが、ポート・タイプおよびエンドポイントを与えられてターゲット・サービス内のサービスを呼び出すことができるエンドポイント・オブジェクトを提供することである。そのようなエンドポイント・オブジェクトを提供する形の1つが、次の擬似コード・セグメントに例示されたものに似たエンドポイント・ファクトリを使用することによるものである。
// エンドポイント・ファクトリ・クラス
// エンドポイント・オブジェクトを作成するパラメータ化されたファクトリ・メソッドを定義する
//
class EndpointFactory
{
public static EndpointcreateEndpointObject(portType, networkAddress)
{
// 新しいエンドポイント・オブジェクトの参照を確立する
Endpoint anEndpoint = null;
if(portType == "A" &&networkAddress == "www.abc.com")
anEndpoint = new Endpoint1;
if(portType == "B" &&networkAddress == "www.def.com")
anEndpoint = new Endpoint2;
if(portType == "C" &&networkAddress == "www.ghi.com")
anEndpoint = new Endpoint3;
...
if(portType == "LAST" &&networkAddress == "www.lastSupported.com")
anEndpoint = new Endpoint465;
if anEndpoint == null) reportError();
else return anEndpoint;
}// createEndpointObject()の終り
}// クラスEndpointFactoryの終り
【0066】
エンドポイント・クラスEndpoint1、Endpoint2、Endpoint3などは、メッセージ・パーツを含むメッセージ・オブジェクトを作成するメンバ・メソッドを提供する抽象エンドポイント・クラスを継承する(または、インターフェースとしてインプリメントする)具象クラスである。そのようなエンドポイント・ファクトリおよびそのようなバインディング中立インターフェースの他の要素を使用して、次の擬似コード・セグメントに示されているように、ターゲット・サービス要求(114)を作成するステップ(112)およびターゲット・サービスにターゲット・サービス要求(114)を発行するステップ(116)を実行することができる。
// エンドポイント・ファクトリからエンドポイント・オブジェクトを得る
Endpoint ep =endPointFactory.createEndPoint(portType, networkAddress);
// 入力メッセージを用意する
Message input = ep.createInputMessage();
// メッセージ・アクセス関数を使用してメッセージの内容を挿入する
input.setPart("symbol","IBM");
// 応答値のプレースホルダを用意する
Message output = ep.createOutputMessage();
// 操作を実行する
ep.executeRequestResponseOperation("getQuote",
input, output);
// 結果を返す
return output;
【0067】
この例示的な擬似コード・セグメントは、エンドポイントのポート・タイプおよびネットワーク・アドレスを与えられて、エンドポイント・ファクトリを呼び出してエンドポイント・オブジェクトを作成する。次に、このセグメントは、メッセージ・パーツをエンドポイント・オブジェクトにロードすることによってターゲット・サービス要求を作成し、メンバ・メソッドexecuteRequestResponseOperation()を呼び出すことによってターゲット・サービスにターゲット・サービス要求を発行する。図5の方法に、ターゲット・サービスからの応答(122)をインターメディアリ内で受信すること(120)と、インターメディアリ内で、ターゲット・サービスからの応答(122)に応じて、インターメディアリからの応答(126)を作成すること(124)と、インターメディアリからの応答(126)を要求するクライアントに返すこと(128)が含まれる。この例示的な擬似コード・セグメントでは、ターゲット・サービスからの応答(122)を受信するステップ(120)およびインターメディアリからの応答(126)を作成するステップ(124)が、通常はターゲット・サービスからの応答を待って「output」へのメッセージ参照を介してその応答を使用可能にするブロッキング呼出しであるexecuteRequestResponseOperation()への呼出しによってインプリメントされる。
【0068】
上の例の擬似コード・セグメントは、エンドポイントとして参照されるポートを有するバインディング中立インターフェースの使用を例示するものである。しかし、WSIFインターフェース構文は、エンドポイントを参照するときに用語「ポート」を使用する。したがって、バインディング中立インターフェースの使用に関するさらなる説明として、WSIF標準規格をより厳守するさらなる例示的擬似コード・セグメントを示す。この例では、「ポート」が、「エンドポイント」を意味するのに使用され、説明の一貫性を保つために、ファクトリの名前が、「portFactory」に変更されている。
// ファクトリからポート(エンドポイント)を得る
WSIFPort port =portFactory.getPort(portType, networkAddress);
// 入力メッセージを用意する
WSIFMessage input =port.createInputMessage();
// メッセージ内容を挿入する
input.setPart("symbol",
new WSIFJava(R)Part(String.class, symbol));
// 応答値のプレースホルダを用意する
WSIFMessage output =port.createOutputMessage();
// 操作を実行する
port.executeRequestResponseOperation("getQuote",
input, output, null);
// 結果を抽出し、返す
return output;
【0069】
本明細書では、主にリクエスタからターゲット・サービスへの過程での要求の処理に関して、ウェブ・サービス・インターメディアリでのポート・タイプ不可知プロキシ・サポートの例示的方法を論ずるが、本発明の実施形態によるインターメディアリが、通常、ターゲット・サービスからインターメディアリを介して最初のリクエスタに戻る応答メッセージを処理することもできることに留意することが有用である。例えば、図5の方法に、インターメディアリ内でターゲット・サービスから応答(122)を受信すること(120)と、インターメディアリ内で、ターゲット・サービスからの応答(122)に応じて、インターメディアリからの応答(126)を作成すること(124)と、インターメディアリからの応答(126)を要求するクライアントに返すこと(128)が含まれる。
【0070】
図6に、ウェブ・サービス操作の実行に関する要求(106)をウェブ・サービス・インターメディアリ内で受信すること(304)を含む、ウェブ・サービス・インターメディアリのポート・タイプ不可知プロキシ・サポートの方法を示す流れ図を示すが、ここで、この要求に、操作をサポートするターゲット・サービスのエンドポイントをそれから識別できるパラメータ情報(107)が含まれる。
【0071】
次も、SOAP−HTTPバインディングのそのような要求の例である。
POST/Channel/proxy?portType=A&synchRespReqd=True HTTP/1.1
Host: www.myIntermediary.com
Content-Type: text/xml;charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:myOp xmlns:m="Some-URI">
</m:myOp>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
この例示的なPOSTメッセージに、インターメディアリに「myOp」操作を要求するSOAPエンベロープが含まれる。myOp操作、そのポート・タイプ、およびそのエンドポイントのすべてが、この要求を受信する前にはインターメディアリに未知である。この例では、メッセージが、SOAPエンベロープとしてとられ、この操作をサポートするターゲット・サービスのエンドポイントをそれから識別できるパラメータ情報(107)が、HTTPパラメータ「portType=A」である。この例では、ターゲット・サービスの操作の名前が、既にSOAPエンベロープにエンコードされているので、追加される唯一のパラメータ・データは、ポート・タイプ「A」すなわち、ターゲット・サービスの操作を含むポート・タイプである。
【0072】
図6の方法に、操作をサポートするターゲット・サービスのエンドポイント(110)を、パラメータ・データに依存して識別すること(308)も含まれる。このSOAP−HTTPの例では、操作をサポートするターゲット・サービスのエンドポイント(110)を識別すること(308)は、UDDIレジストリまたはebXMLレジストリなどのビジネス・レジストリからエンドポイント記述を取り出すことによって実行される。この例では、インターメディアリが、ネットワーク・アドレスhttp://www.myTarget.com/SOAP-HTTP/servlets/のSOAP−HTTPによってバインドされたものとして記述されたポート・タイプAのエンドポイントをレジストリから取り出す。
【0073】
図6に示された方法に、要求(106)が同期応答を要求するかどうかを判定すること(350)も含まれる。要求(106)が同期応答を要求するかどうかを判定すること(350)は、受信された要求メッセージの最初の行のクエリ・データを検査することによって実行することができる。上に示した例示的なPOSTメッセージでは、最初の行のクエリ・データが、「?」とHTTPバージョン・コードの間のすべてのデータすなわち、
portType=A&synchRespReqd=True
である。この例では、「synchRespReqd=True」が、インターメディアリによって、同期応答が必要であることを意味すると解釈される。同様に、「synchRespReqd=False」は、同期応答が不要であることを示すことができる。これらは、例示的なコーディングにすぎず、もちろん、本発明の制限ではない。同期応答がインターメディアリに要求されるかどうかの表示をパラメータ情報内にエンコードするすべての手段が、好ましい実施形態による本発明の範囲に含まれる。この例では、要求が同期応答を要求するかどうかを判定すること(350)は、パラメータ情報(107)に応じてその判定を行うことによって実行され、このパラメータ情報は、名前/値対「synchRespReqd=True」である。
【0074】
図示の方法に、ターゲット・サービスの操作の実行に関するターゲット・サービス要求(114)を作成すること(312)が含まれる。この例では、インターメディアリが、ターゲット・サービスのエンドポイントを使用して、HTTP POSTメッセージとしてターゲット・サービス要求を作成するようにプログラムされる。具体的に言うと、次のPOSTメッセージは、要求されたウェブ・サービス操作に関する入力メッセージまたは入力データの例を表す。パラメータ・データが、削除され、エンドポイントを識別するパラメータ・データならびに同期応答が必要であるかどうかを判定するパラメータ・データおよび要求が、SOAPメッセージを処理するスクリプト、サーブレット、または他の機能性に向けられ、このスクリプト自体が、SOAPエンベロープ内の操作名から操作を識別する。
【0075】
結果のターゲット・サービス要求は、次のようになる。
POST/SOAP-HTTP/servlets/QuoteServiceServlet HTTP/1.1
Host: www.myTarget.com
Content-Type: text/xml;charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:myOpxmlns:m="Some-URI">
</m:myOp>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
【0076】
図6の方法では、ターゲット・サービスの操作の実行に関するターゲット・サービス要求(114)を作成すること(312)に、さらに、要求が同期要求を必要とするかどうかの判定(152)に応じてターゲット・サービス要求(114)を作成すること(312)を含めることができる。インターメディアリが、要求されるウェブ・サービス操作に関する入力データを有する入力メッセージを作成できるのと同様に、インターメディアリが、出力メッセージを作成することもできる。そのような出力メッセージは、通常、ターゲット・サービスからの応答メッセージを保管し、通信するのに使用されるプレースホールディング・オブジェクトである。同期応答を必要とする要求のために応答メッセージ・オブジェクトを作成する例示的な方法は、インターメディアリが、正しいクラスのオブジェクトを作成し、それを空のままにし、ターゲット・サービスに要求を通信する下流インターフェース(図3および4の符号(220)および(222)のプロバイダまたはアウトバウンド・エンジンなど)への1つまたは複数の呼出しのパラメータとして、そのオブジェクトへの参照を渡すことである。同期応答を必要としない要求のために応答メッセージ・オブジェクトを作成する例示的な方法は、インターメディアリが、ターゲット・サービスに要求を通信する下流インターフェースへの1つまたは複数の呼出しのパラメータとして、ヌル参照(単に空の出力オブジェクトへの参照ではなく、完全にヌルの参照)を渡すことである。そのような実施形態では、下流インターフェースが、そのようなヌル参照を、呼出し側に制御を返す前に「肯定応答」だけを待つことの表示として解釈するようにプログラムされる。
【0077】
図6の方法に、ターゲット・サービス要求(114)をターゲット・サービス(118)に発行すること(316)も含まれる。この例では、ターゲット・サービス要求の発行に、http://www.myTarget.com/にあるターゲット・サービス・エンドポイントへのTCP/IP接続をオープンすることと、そのTCP/IP接続を介してHTTP POSTメッセージをターゲット・サービスに送信することが含まれる。
【0078】
本発明の少なくともいくつかの実施形態で、図6に示されたものなどのポート・タイプ不可知プロキシ・サポートの方法で、作成され、ターゲット・サービスに発行されるターゲット・サービス要求が、ウェブ・サービス・インターメディアリで受信された要求の検査されず変更されないメッセージ内容を有することに留意することが有用である。上で説明した例では、インターメディアリのプロキシ・サービスが、メッセージ本体すなわちSOAPエンベロープにまったく手を付けず、オープンせず、検査せず、解析せず、どの形でも変更せずに、パラメータ・データ「portType=A」からターゲット・サービスのエンドポイントを識別し、そのように識別されたエンドポイントにメッセージをリダイレクトし、このSOAPエンベロープが、そのリクエスタからターゲット・サービスまでの配送の過程全体を通じて検査されず、変更されないままになる。この過程で、プロキシ・サービスは、インターメディアリ・サービス、認証、管理報告、負荷平衡化、サービス集約などのうちの1つまたは複数を提供した。
【0079】
さらなる説明として、例示的な要求が、GET/HTTPバインディングについて提示され、http://www.myIntermediary/channelApps/GET-HTTP/servlets/proxyにあるエンドポイントに向けられる。例示的な着信要求メッセージは、次の形を有する。
GET/servlets/proxy?message=messageContentString&
operation=myOp&portType=A HTTP/1.1
また、URI空間では、例示的な要求を次のように示すことができる。
http://www.myIntermediary.com/servlets/
proxy?message=messageContentString&operation=myOp&portType=A
この例では、メッセージが、名前/値対としてエンコードされたURIエンコードされたクエリ・データ「message=messageContentString」としてとられる。メッセージ内容は、URIエンコードされた文字列である。この例では、操作をサポートするターゲット・サービスのエンドポイントをそれから識別できるパラメータ情報(107)のすべてが、メッセージ内容文字列に続くクエリ・データである。この例では、クエリ・データに、「A」というポート・タイプとターゲット・サービスの操作の名前の両方が含まれる。
【0080】
この例では、操作をサポートするターゲット・サービスのエンドポイント(110)を識別することは、UDDIレジストリまたはebXMLレジストリなどのビジネス・レジストリからエンドポイント記述を取り出すことによって実行される。この例では、インターメディアリが、ネットワーク・アドレスhttp://www.myTarget.comのGET/HTTPによってバインドされたものとして記述されたポート・タイプAのエンドポイントをレジストリから取り出す。
【0081】
図6の方法には、ターゲット・サービスの操作の実行に関するターゲット・サービス要求(114)を作成すること(312)も含まれる。この例では、インターメディアリが、ターゲット・サービス要求のエンドポイント・アドレスに操作名およびメッセージ・パーツを連結することによって、HTTP GETメッセージとしてターゲット・サービス要求を作成するようにプログラムされる。URI空間で表現された、結果のターゲット・サービス要求は、次のようになる。
http://www.myTarget.com/servlets/myOp?message=messageContentString
【0082】
前に述べたように、図6の方法には、ターゲット・サービス(118)にターゲット・サービス要求(114)を発行すること(316)も含まれる。この例では、ターゲット・サービス要求の発行に、http://www.myTarget.com/にあるターゲット・サービス・エンドポイントへのTCP/IP接続をオープンすることと、次のHTTP GETメッセージを送信することが含まれる。
GET/servlets/myOp?message=messageContentString HTTP/1.1
【0083】
図6の方法に、要求が同期応答を必要とする場合(360)にターゲット・サービスからの応答を待つこと(361)も含まれる。図7に、ターゲット・サービスからの応答を待つ方法を示す流れ図を示すが、この方法には、インターメディアリで、ターゲット・サービスからの応答(122)を同期式に受信すること(320)と、ターゲット・サービスからの応答に応じて、インターメディアリ内で、インターメディアリからの応答(126)を作成すること(324)と、インターメディアリからの応答(126)をリクエスタ(102)に返すこと(328)が含まれる。図7の方法では、インターメディアリでターゲット・サービスからの応答を同期式に受信すること(320)を、インターメディアリとターゲット・サービスの間のデータ通信接続に対するブロッキング受信関数を呼び出すことによって実行することができる。
【0084】
次の擬似コードのセグメントは、インターメディアリからターゲット・サービスに要求を送信し、要求が同期応答を必要とする場合にターゲット・サービスからの応答を待つ、HTTPバインディングに関する例である。次のセグメントは、しばしば、本発明の実施形態に従って、ウェブ・サービス・インターメディアリのプロバイダを介してまたはアウトバウンド・エンジン内で(図3および4の220および222)提供されるものなどの、HTTPバインディングに関するクライアント動作を例示するものである。
import java(R).io.*;
import java(R).net.*;
BufferedReader in = null;
URL url = new URL(targetURL);
URLConnection connection =(HttpURLConnection) url.openConnection();
BufferedWriter out = new BufferedWriter(new OutputStreamWriter (connection.getOutputStream()));
BufferedReader in = new BufferedReader(new InputStreamReader (
connection.getInputStream()));
out.println(request);
if(synchRespReqd == TRUE)
{
Message responseMessage = in.readLine();
return responseMessage;
}
この例示的擬似コード・セグメントは、Java URLオブジェクトを作成し、そのURLオブジェクトを使用して、ネットワーク・アドレス「targetURL」を有するものとして識別されたターゲット・サービスへの、「connection」という名前のTCP/IP接続をオープンする。このセグメントは、その接続上の「out」という名前のバッファリングされたストリームおよびその接続上の「in」という名前の入力ストリームもオープンする。このセグメントは、「out.println(request)」としてその接続を介して要求を送信し、その後、同期応答が必要な場合に、ブロッキング呼出しを行って、同一の接続を介して応答メッセージを受信し「Message responseMessage=in.readLine()」、応答メッセージを呼出し側に返す。この例は、HTTPバインディングに関する。
【0085】
さらに説明するために、下で、「JMS」バインディングすなわち、Java Message Serviceへのバインディングに関するもう1つの例を提示する。JMSは、ポイントツーポイント・メッセージング用およびパブリッシュ/サブスクライブ・メッセージング用の2つのメッセージ「ドメイン」を提供する。この例では、インターメディアリとターゲット・サービスの間の、JMSメッセージ・キューを使用するポイントツーポイント・メッセージングを論ずる。JMSポイントツーポイント・メッセージングでは、ソケットなどのデータ通信接続が、JMSの「connection」オブジェクトによってカプセル化される。JMS connectionは、「connection factory」と呼ばれる管理オブジェクトを介して作成される。JMS connectionは、1つまたは複数のJMS「session」を作成するのに使用される。sessionは、メッセージを作成し、消費する、シングルスレッドのコンテキストである。sessionは、メッセージ・プロデューサ、メッセージ・コンシューマ、およびメッセージを作成するのに使用される。メッセージ・プロデューサは、メッセージをキューに送るのに使用されるオブジェクトである。ポイントツーポイントの形のメッセージ・プロデューサが、JMSの「queueSender」インターフェースをインプリメントし、このインターフェースに、send()メソッドが含まれる。メッセージ・コンシューマは、キューからメッセージを受け取るのに使用されるオブジェクトである。ポイントツーポイントの形のメッセージ・コンシューマが、JMSの「queueReceiver」インターフェースをインプリメントし、このインターフェースに、タイムアウト期間ありまたはタイムアウト期間なしで呼び出すことができるブロッキングreceive()メソッドが含まれる。
【0086】
次の擬似コードのセグメントは、インターメディアリからターゲット・サービスに要求を送信し、要求が同期応答を必要とする場合にターゲット・サービスからの応答を待つ、JMSバインディングに関する例である。
// connectionを得る
QueueConnection queueConnection =
queueConnectionFactory.createQueueConnection();
// connectionを使用してsessionを確立する
// 「false」パラメータは、トランザクションなしを意味し、
// AUTO_ACKはオンである。
QueueSession queueSession =
queueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
// センダを作成し、インターメディアリからの要求を
// JMSキューを介してターゲット・サービスに送信する。
QueueSender queueSender =queueSession.createSender(myQueue);
queueSender.send(requestMessage);
// 同期応答が必要な場合には、レシーバを作成し、
// レシーバに対するブロッキングreceive()を発行する。
if(synchRespReqd == TRUE)
{
QueueReceiver queueReceiver =queueSession.createReceiver(myQueue);
Message responseMessage =queueReceiver.receive();
return responseMessage;
}
この例示的なJMSセグメントは、queueConnectionという名前のconnectionを作成し、queueSessionという名前のsessionを作成し、queueSenderという名前のセンダを作成し、JMSキューを介してターゲット・サービスに要求メッセージを送信し、同期要求が必要な場合には、queueReceiverという名前のレシーバを作成し、応答メッセージを待つためにqueueReceiverに対するブロッキングreceive()を発行する。
【0087】
要求が同期応答を必要としない場合(362)に、本発明の実施形態によるウェブ・サービス・インターメディアリ用のポート・タイプ不可知プロキシ・サポートの方法に、ターゲット・サービスに要求を発行すること以外に絶対に何もしないことを含めることができる。すなわち、要求が同期応答を必要としない場合(362)に、肯定応答、非同期応答、および類似物に関してまったく何もしないことが、好ましい実施形態による本発明の範囲に含まれる。その代わりに、図6に示されているように、本発明の第2実施形態による方法に、ターゲット・サービス要求の肯定応答(156)をターゲット・サービスから受信すること(354)、および応答メッセージを待たずにリクエスタ(102)に肯定応答(156)を返すこと(358)を含めることができる。
【0088】
次は、応答メッセージを待たずにリクエスタに肯定応答を返す例示的な擬似コード・セグメントである。
import java(R).io.*;
import java(R).net.*;
URL url = new URL(targetURL);
HTTPURLConnection connection =(HttpURLConnection) url.openConnection();
BufferedWriter out = new BufferedWriter(new OutputStreamWriter (connection.getOutputStream()));
BufferedReader in = new BufferedReader (
new InputStreamReader (connection.getInputStream()));
out.println(request);
int acknowledgment =connection.getResponseCode();
if(acknowledgment == 200) returnacknowledgement;
else return ERROR;
この例示的擬似コード・セグメントは、Java URLオブジェクトを作成し、そのURLオブジェクトについて、HTTPURLConnectionオブジェクトの形で、ネットワーク・アドレス「targetURL」を有するものとして識別されたターゲット・サービスへの、「connection」という名前のTCP/IP接続をオープンする。このセグメントは、その接続上の「out」という名前のバッファリングされた出力ストリームおよびそのソケット上の「in」という名前の入力ストリームもオープンする。このセグメントは、「out.println(request)」としてその接続を介して要求を送信し、その後、ブロッキング呼出しを行って、同一の接続を介して肯定応答を受信する「int acknowledgment=connection.getResponseCode()」。このセグメントは、呼出し側に肯定応答(この例では、HTTP応答コード「200」)を返すか、エラー・メッセージを返す。肯定応答は、要求が受信されたことの、ターゲット・サービスからの手続的肯定応答である。このセグメントは、要求に対する本質的な応答を待たない。
【0089】
上の例示的擬似コード・セグメントは、インターメディアリからターゲット・サービスに要求を送信し、本質的な応答メッセージを待たずに肯定応答を供給する例である。このセグメントは、しばしば、本発明の実施形態に従って、ウェブ・サービス・インターメディアリのプロバイダを介してまたはアウトバウンド・エンジン内で(図3および4の220および222)提供されるものなどの、HTTPバインディングに関するクライアント動作を例示するものである。
【0090】
当技術分野における技量を有する読者は、ここまでに、リクエスタがターゲット・サービスの操作に関する要求をどのようにしてインターメディアリに送信するかを不思議に思っている。答は、インターメディアリまたはインターメディアリの開発者が、リクエスタに対して、ターゲット・サービスの操作をサポートするエンドポイントとしてウェブ・サービス・インターメディアリのエンドポイントを識別することである。ターゲット・サービスの操作をサポートするエンドポイントとしてインターメディアリのエンドポイントを識別することは、リクエスタによるディスカバリのためにビジネス・ディレクトリに登録されるWSDL文書でインプリメントすることができる。その代わりに、そのような識別を、インターメディアリからリクエスタにダウンロードすることができ、あるいは、リクエスタのウェブ・サービス構成データへの管理者によるインストールのために、単純にリクエスタまたはリクエスタの管理者に電子メールで送ることさえできる。
【0091】
ターゲット・サービスがWSDL擬似コードの次のセグメントによって記述される例を検討されたい。
<definitions targetNamespace= ... >
<messagename="GetQuoteInput"> ... </message>
<messagename="GetQuoteOutput"> ... </message>
<portTypename="StockquotePT"> ... </portType>
<binding name="SOAPBinding"... >
<operationname="getQuote"> ... </operation> ...
</binding>
<servicename="StockquoteService">
<port name="SOAPPort"binding="tns:SOAPBinding">
<soap:address location=
"http://myTargetService/soap/servlet/getQuote"/>
</port>
</service>
</definitions>
【0092】
そのターゲット・サービスのインターメディアリは、次のようにターゲット・サービス記述のアドレス拡張要素の位置属性を置換することによって、ターゲット・サービスの操作をサポートするエンドポイントとしてウェブ・サービス・インターメディアリのエンドポイントをリクエスタに対して識別することができる。
<soap:addresslocation="http://www.myIntermediary.com/
Channel/SOAP/proxy?portType=StockquotePT"/>
これによって、次のセグメントによって例示されるWSDL文書が作成される。
<definitions targetNamespace= ... >
<messagename="GetQuoteInput"> ... </message>
<messagename="GetQuoteOutput"> ... </message>
<portTypename="StockquotePT"> ... </portType>
<binding name="SOAPBinding"... >
<operationname="getQuote"> ... </operation> ...
</binding>
<servicename="portTypeAgnosticProxy">
<portname="intermediaryEndpoint" binding="SOAPBinding">
<soap:address location=
"http://www.myIntermediary.com/
Channel/SOAP/proxy?portType=StockquotePT"/>
</port>
</service>
</definitions>,
これは、ターゲット・サービスでの「getQuote」操作をサポートするエンドポイントとしてウェブ・サービス・インターメディアリのエンドポイントを識別する。レジストリ、ダウンロード、電子メールを介して、または当業者が思い浮かべる他の手段によって、この後者のセグメントによって例示される種類のWSDLをリクエスタに提供することによって、そのリクエスタに対して、ターゲット・サービスの操作をサポートするエンドポイントとしてウェブ・サービス・インターメディアリのエンドポイントが識別される。
【0093】
図6の方法では、パラメータ情報(107)に応じて、操作をサポートするターゲット・サービスのエンドポイントを識別すること(308)に、しばしば、ターゲット・サービスの1つのエンドポイントだけではなく、操作をサポートするターゲット・サービスの2つ以上のエンドポイントを識別することを含めることができる。本発明方法の実施形態によるポート・タイプ不可知プロキシが、操作のポート・タイプをパラメータ情報(107)として受信し、クエリ・パラメータとしてポート・タイプを用いてビジネス・レジストリを照会し、これによって操作をサポートするターゲット・サービスの2つ以上のエンドポイントを識別する例を検討されたい。2つ以上のエンドポイントのそのような識別は、例えば、ポート・タイプを用いてUDDIレジストリに照会し、それに応答して、そのポート・タイプに関するターゲット・サービスを記述した複数のWSDL文書を受信することによって実行することができる。
【0094】
複数のエンドポイントがそのように識別される場合に、本発明の実施形態によるウェブ・サービス・インターメディアリのポート・タイプ不可知プロキシ・サポートの方法に、通常、選択ルールに従ってエンドポイントのうちの1つを選択することが含まれる。自明な例では、選択ルールを、そのように識別された最初のエンドポイントを選択し、他のエンドポイントを破棄することとすることができる。選択ルールは、例えば、負荷平衡化に関する選択ルールを含む、より複雑なルールとすることができる。負荷平衡化に関するルールは、表2に示されたものに類似したデータ構造の使用によってインプリメントすることができる。
【0095】
【表2】

【0096】
表2の各行は、インターメディアリとターゲット・サービスの間のウェブ・サービス・データ通信の要求−応答ラウンド・トリップに関する待ち時間測定値を表す。表2には、要求および応答のラウンドごとに、ポート・タイプおよびエンドポイントURIの列が設けられている。送信時刻列は、要求メッセージが、インターメディアリからポート・タイプの操作に関するターゲット・サービスのエンドポイントに発行されたときの時刻を記録したものである。受信時刻列は、対応する応答メッセージがターゲット・サービスから受信されたときの時刻を記録したものである。トリップ待ち時間は、受信時刻と送信時刻の差である。累積待ち時間は、この表に表されたエンドポイントごとのトリップ待ち時間の現在合計である。表2に似た構造を用いて、要求に関する複数のエンドポイントが識別されたときに使用される選択ルールを、次の例示的なルールとしてインプリメントすることができる。
同一ポート・タイプの操作に関する複数の要求がインターメディアリに達したときには、複数の識別されたエンドポイントのそれぞれを順番に1回使用する。
そのような使用のそれぞれの待ち時間データを記録する。
同一ポート・タイプの操作に関する後続要求について、最短の累積待ち時間を有するエンドポイントを待ち時間テーブルから選択し、要求をそのエンドポイントに送信し、メッセージがターゲット・サービスに送信されるときおよび対応する応答がインターメディアリで受信されるときに、関連する待ち時間データを記録する。
【0097】
表2の例示的データには、ポート・タイプAについて2つのエンドポイントすなわち、URIhttp://www.ibm.com/aTargetServiceにある第1エンドポイントおよびURIhttp://www.ibm.com/anotherTargetServiceにある第2エンドポイントに最近送信された要求の累積待ち時間が示されている。第1エンドポイントは、250ミリ秒の累積要求待ち時間を有し、第2エンドポイントは、100ミリ秒の累積要求待ち時間を有する。上で示した例示的な選択ルールを使用すると、ポート・タイプAに関する操作の現在の要求は、URIhttp://www.ibm.com/anotherTargetServiceにある第2エンドポイントにルーティングされる。
【0098】
図6の方法では、ターゲット・サービスの操作の実行に関するターゲット・サービス要求(114)を作成すること(312)を、バインディング中立インターフェース内で有用なデータ構造内に要求を構成し、その要求を呼出しパラメータとして渡してバインディング中立インターフェースを呼び出すことによって実行することができる。同様に、ターゲット・サービスにターゲット・サービス要求(114)を発行すること(316)に、バインディング中立インターフェースの1つまたは複数のメンバ・メソッドを呼び出すことが含まれる。
【0099】
バインディング中立インターフェースは、そのインターフェースの使用が要求またはメッセージのバインディングに依存しないインターフェースである。すなわち、このインターフェースをインプリメントし、それを介するデータ通信を実行するのに使用されるデータ構造および呼出し方法は、メッセージに使用されるデータ・エンコーディングのタイプに依存せず、メッセージに使用されるデータ通信プロトコルに依存しない。本発明の実施形態によるインターメディアリ用のポート・タイプ不可知プロキシの開発者は、しばしば、彼ら自身のバインディング中立インターフェースを作成する。しかし、「WSIF」すなわちWeb Service Invocation Frameworkと称する、バインディング中立インターフェースのオープン標準規格がある。WSIFは、現在、ApacheSoftware FoundationのWeb Services Projectの一部としてサポートされている。
【0100】
バインディング中立インターフェースの使用は、本発明の実施形態に利益をもたらす。SOAP−HTTPバインディングは、現在の技術で非常に一般的なので、ユーザおよび開発者は、時々、他のバインディングが存在することを忘れる。これは、他のバインディングと共に使用されるか他のバインディングと共に使用するために適合させることが、不可能でないとしても非常にむずかしいシステムの開発をもたらす。しかし、ウェブ・サービスが成長するにつれて、他のバインディングが、より有用でより一般的になる。さらに、本発明の実施形態のバック・エンドにバインディング中立インターフェースを使用することは、使用可能なバインディングをラン・タイムに決定でき、これによって、柔軟で強力でより一般的に有用なウェブ・サービス・インターメディアリが提供されることを意味する。
【0101】
バインディング中立インターフェースをインプリメントする形の1つが、ポート・タイプおよびエンドポイントを与えられてターゲット・サービス内のサービスを呼び出すことができるエンドポイント・オブジェクトを提供することである。そのようなエンドポイント・オブジェクトを提供する形の1つが、次の擬似コード・セグメントに例示されたものに似たエンドポイント・ファクトリを使用することによるものである。
// エンドポイント・ファクトリ・クラス
// エンドポイント・オブジェクトを作成するパラメータ化されたファクトリ・メソッドを定義する
//
class EndpointFactory
{
public static EndpointcreateEndpointObject(portType, networkAddress)
{
// 新しいエンドポイント・オブジェクトの参照を確立する
Endpoint anEndpoint = null;
if(portType == "A" &&networkAddress == "www.abc.com")
anEndpoint = new Endpoint1;
if(portType == "B" && networkAddress== "www.def.com")
anEndpoint = new Endpoint2;
if(portType == "C" &&networkAddress == "www.ghi.com")
anEndpoint = new Endpoint3;
...
if(portType == "LAST" &&networkAddress == "www.lastSupported.com")
anEndpoint = new Endpoint465;
if anEndpoint == null) reportError();
else return anEndpoint;
}// createEndpointObject()の終り
}// クラスEndpointFactoryの終り
【0102】
エンドポイント・クラスEndpoint1、Endpoint2、Endpoint3などは、メッセージ・パーツを含むメッセージ・オブジェクトを作成するメンバ・メソッドを提供する抽象エンドポイント・クラスを継承する(または、インターフェースとしてインプリメントする)具象クラスである。そのようなエンドポイント・ファクトリおよびそのようなバインディング中立インターフェースの他の要素を使用して、次の擬似コード・セグメントに示されているように、ターゲット・サービス要求(114)を作成するステップ(312)およびターゲット・サービスにターゲット・サービス要求(114)を発行するステップ(316)を実行することができる。
// エンドポイント・ファクトリからエンドポイント・オブジェクトを得る
Endpoint ep = endPointFactory.createEndPoint(portType,networkAddress);
// 入力メッセージを用意する
Message input = ep.createInputMessage();
// メッセージ・アクセス関数を使用してメッセージの内容を挿入する
input.setPart("symbol","IBM");
// 応答値のプレースホルダを用意する
Message output = null;
if(synchRespReqd == TRUE) output = ep.createOutputMessage();
// 操作を実行する
ep.executeRequestResponseOperation("getQuote",
input, output);
// 結果を返す
if(synchRespReqd == TRUE) return output;
else return ACK;
【0103】
この例示的な擬似コード・セグメントは、エンドポイントのポート・タイプおよびネットワーク・アドレスを与えられて、エンドポイント・ファクトリを呼び出してエンドポイント・オブジェクトを作成する。次に、このセグメントは、メッセージ・パーツをエンドポイント・オブジェクトにロードすることによってターゲット・サービス要求を作成し、メンバ・メソッドexecuteRequestResponseOperation()を呼び出すことによってターゲット・サービスにターゲット・サービス要求を発行する。図7の方法に、ターゲット・サービスからの応答(122)をインターメディアリで受信すること(320)と、インターメディアリで、ターゲット・サービスからの応答(122)に応じて、インターメディアリからの応答(126)を作成すること(324)と、インターメディアリからの応答(126)を要求するクライアントに返すこと(328)が含まれる。
【0104】
この例示的な擬似コード・セグメントでは、ターゲット・サービスからの応答(122)を受信するステップ(320)およびインターメディアリからの応答(126)を作成するステップ(324)が、executeRequestResponseOperation()への呼出しによってインプリメントされる。この例では、出力メッセージへの参照の値は、要求が同期応答を必要とする場合にヌルのままにされる。この種類の実施形態のヌル「output」パラメータは、プロバイダ(図3の220)によって、同期応答が不要であることを意味すると解釈される。したがって、プロバイダは、要求をターゲット・サービスに発行し、応答を待たずに即座にリターンする。
【0105】
同様に、要求が同期応答を必要とする場合に、応答メッセージへの参照「output」の値に、output=ep.createOutputMessage()によって非ヌルがセットされる。呼出し
ep.executeRequestResponseOperation("getQuote",input, output)
での、この例では「output」という名前の応答メッセージへのパラメータ参照が非ヌルであるという事実は、プロバイダ(図3の220)によって、同期応答が必要であることを意味すると解釈される。そのようなプロバイダは、そのアウトバウンド・エンジン(図3の222)でブロッキング受信呼出しを行い、ターゲット・サービスからの対応する応答メッセージを待つようにプログラムされる。図7の方法に関して、このセグメントは、要求が同期応答を必要とするかどうかの判定(152)に応じて、ターゲット・サービスの操作の実行に関するターゲット・サービス要求(114)を作成すること(312)の例示的方法を表す。
【0106】
上の例の擬似コード・セグメントは、エンドポイントとして参照されるポートを有するバインディング中立インターフェースの使用を例示するものである。しかし、WSIFインターフェース構文は、エンドポイントを参照するときに用語「ポート」を使用する。したがって、バインディング中立インターフェースの使用に関するさらなる説明として、WSIF標準規格をより厳守するさらなる例示的擬似コード・セグメントを示す。この例では、「ポート」が、「エンドポイント」を意味するのに使用され、説明の一貫性を保つために、ファクトリの名前が、「portFactory」に変更されている。
// ファクトリからポート(エンドポイント)を得る
WSIFPort port =portFactory.getPort(portType, networkAddress);
// 入力メッセージを用意する
WSIFMessage input =port.createInputMessage();
// メッセージ内容を挿入する
input.setPart("symbol",
new WSIFJava(R)Part(String.class, symbol));
// 応答値のプレースホルダを用意する
WSIFMessage output = null;
if(synchRespReqd == TRUE) output = port.createOutputMessage();
// 操作を実行する
port.executeRequestResponseOperation("getQuote",
input, output, null);
// 結果を抽出し、返す
if(synchRespReqd == TRUE) return output;
else return ACK;
【0107】
本明細書では、主にリクエスタからターゲット・サービスへの過程での要求の処理に関して、ウェブ・サービス・インターメディアリでのポート・タイプ不可知プロキシ・サポートの例示的方法を論ずるが、本発明の実施形態によるインターメディアリが、通常、ターゲット・サービスからインターメディアリを介して最初のリクエスタに戻る応答メッセージを処理することもできることに留意することが有用である。例えば、図7の方法に、要求が同期応答を必要とする場合に、インターメディアリ内でターゲット・サービスから応答(122)を受信すること(320)と、インターメディアリ内で、ターゲット・サービスからの応答(122)に応じて、インターメディアリからの応答(126)を作成すること(324)と、インターメディアリからの応答(126)を要求するクライアントに返すこと(328)が含まれる。
【0108】
前述の説明から、本発明の真の趣旨から外れずに、本発明の様々な実施形態で修正および変更を行うことができることを理解されたい。本明細書の説明は、例示のみを目的とし、制限的な意味で解釈されてはならない。本発明の範囲は、添付請求項の言葉だけによって制限される。
【図面の簡単な説明】
【0109】
【図1】本発明の実施形態に従ってウェブ・サービス・インターメディアリのポート・タイプ不可知プロキシ・サポートをインプリメントできる、ウェブ・サービスの例示的アーキテクチャを示す線画である。
【図2】本発明の実施形態に従ってウェブ・サービス・インターメディアリのポート・タイプ不可知プロキシ・サポートをインプリメントできる、ウェブ・サービスの例示的アーキテクチャを示す線画である。
【図3】本発明の実施形態による例示的なインターメディアリのブロック図を示す線画である。
【図4】本発明の実施形態によるSOAP−HTTPチャネルをインプリメントする例示的なインターメディアリ(202)のブロック図を示す線画である。
【図5】第1の実施形態による、ウェブ・サービス・インターメディアリのポート・タイプ不可知プロキシ・サポートの方法を示す流れ図である。
【図6】第2の実施形態による、ウェブ・サービス・インターメディアリのポート・タイプ不可知プロキシ・サポートの方法を示す流れ図である。
【図7】第2の実施形態による、要求が同期応答を必要とするときにターゲット・サービスからの応答を待つ(361)方法を示す流れ図である。

【特許請求の範囲】
【請求項1】
ウェブ・サービス・インターメディアリ用のポート・タイプ不可知プロキシ・サポートの方法であって、ウェブ・サービス・インターメディアリでウェブ・サービス操作の実行に関する要求を受信することであって、前記要求は、前記操作をサポートするターゲット・サービスのエンドポイントをそれから識別できるパラメータ情報を含むことと、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの前記エンドポイントを識別することと、前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成することと、前記ターゲット・サービス要求を前記ターゲット・サービスに発行することとを含む方法。
【請求項2】
前記要求が同期応答を必要とするかどうかを判定することと、前記要求が同期応答を必要とする場合に前記ターゲット・サービスからの応答を待つこととをさらに含む、請求項1に記載の方法。
【請求項3】
前記要求が同期応答を必要とするかどうかを判定することが、前記要求が同期応答を必要とするかどうかを前記パラメータ情報に応じて判定することを含む、請求項2に記載の方法。
【請求項4】
前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成することが、さらに、前記要求が同期応答を必要とするかどうかの判定に応じて前記ターゲット・サービス要求を作成することを含む、請求項2または3に記載の方法。
【請求項5】
前記要求が、同期応答を必要とせず、前記方法が、さらに、前記ターゲット・サービス要求の肯定応答を前記ターゲット・サービスから受信することと、応答メッセージを待たずに前記肯定応答をリクエスタに返すこととを含む、請求項2、3、または4に記載の方法。
【請求項6】
前記ターゲット・サービスからの応答を待つことが、さらに、前記ターゲット・サービスからの応答を前記インターメディアリで同期式に受信することと、前記インターメディアリで、前記ターゲット・サービスからの前記応答に応じて、前記インターメディアリからの応答を作成することと、前記インターメディアリからの前記応答をリクエスタに返すこととを含む、請求項2、3、4、または5に記載の方法。
【請求項7】
前記ターゲット・サービスからの応答を前記インターメディアリで同期式に受信することが、さらに、前記インターメディアリと前記ターゲット・サービスとの間のデータ通信接続に対してブロッキング受信関数を呼び出すことを含む、請求項6に記載の方法。
【請求項8】
作成され、前記ターゲット・サービスに発行される前記ターゲット・サービス要求が、前記ウェブ・サービス・インターメディアリで受信された前記要求の検査されず変更されないメッセージ内容を有する、請求項1ないし7のいずれかに記載の方法。
【請求項9】
前記操作をサポートするエンドポイントとして、前記ウェブ・サービス・インターメディアリのエンドポイントをリクエスタに識別することをさらに含む、請求項1ないし8のいずれかに記載の方法。
【請求項10】
前記パラメータ情報が、前記操作のポート・タイプを含む、請求項1ないし9のいずれかに記載の方法。
【請求項11】
前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの前記エンドポイントを識別することが、さらに、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの複数のエンドポイントを識別することと、選択ルールに従って前記複数のエンドポイントから1つのエンドポイントを選択することとを含む、請求項1ないし10のいずれかに記載の方法。
【請求項12】
前記パラメータ情報が、前記操作のポート・タイプを含み、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの複数のエンドポイントを識別することが、前記ポート・タイプに応じて、前記ポート・タイプに関する複数のターゲット・サービスをレジストリから識別することを含む、請求項11に記載の方法。
【請求項13】
前記複数のエンドポイントから1つのエンドポイントを選択することが、さらに、ターゲット・サービスの間の負荷平衡化に関する選択ルールに従って前記複数のエンドポイントから1つのエンドポイントを選択することを含む、請求項11または12に記載の方法。
【請求項14】
前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成することが、前記要求をバインディング中立インターフェースで有用なデータ構造に構成することと、前記要求を呼出しパラメータとして渡して前記バインディング中立インターフェースを呼び出すこととを含む、請求項1ないし13のいずれかに記載の方法。
【請求項15】
前記ターゲット・サービスに前記ターゲット・サービス要求を発行することが、バインディング中立インターフェースの1つまたは複数のメンバ・メソッドを呼び出すことを含む、請求項1ないし14のいずれかに記載の方法。
【請求項16】
前記インターメディアリで前記ターゲット・サービスからの応答を受信することと、前記インターメディアリで、前記ターゲット・サービスからの前記応答に応じて、前記インターメディアリからの応答を作成することと、前記インターメディアリからの前記応答を前記要求するクライアントに返すこととをさらに含む、請求項1ないし15のいずれかに記載の方法。
【請求項17】
ウェブ・サービス・インターメディアリ用のポート・タイプ不可知プロキシ・サポートのシステムであって、ウェブ・サービス・インターメディアリでウェブ・サービス操作の実行に関する要求を受信する手段であって、前記要求は、前記操作をサポートするターゲット・サービスのエンドポイントをそれから識別できるパラメータ情報を含む、手段と、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの前記エンドポイントを識別する手段と、前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成する手段と、前記ターゲット・サービス要求を前記ターゲット・サービスに発行する手段とを含むシステム。
【請求項18】
前記要求が同期応答を必要とするかどうかを判定する手段と、前記要求が同期応答を必要とする場合に前記ターゲット・サービスからの応答を待つ手段とを含む、請求項17に記載のシステム。
【請求項19】
前記要求が同期応答を必要とするかどうかを判定する手段が、前記要求が同期応答を必要とするかどうかを前記パラメータ情報に応じて判定する手段を含む、請求項18に記載のシステム。
【請求項20】
前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成する手段が、さらに、前記要求が同期応答を必要とするかどうかの判定に応じて前記ターゲット・サービス要求を作成する手段を含む、請求項18または19に記載のシステム。
【請求項21】
前記要求が、同期応答を必要とせず、前記システムが、さらに、前記ターゲット・サービス要求の肯定応答を前記ターゲット・サービスから受信する手段と、応答メッセージを待たずに前記肯定応答をリクエスタに返す手段とを含む、請求項18、19、または20に記載のシステム。
【請求項22】
前記ターゲット・サービスからの応答を待つ手段が、さらに、前記ターゲット・サービスからの応答を前記インターメディアリで同期式に受信する手段と、前記インターメディアリで、前記ターゲット・サービスからの前記応答に応じて、前記インターメディアリからの応答を作成する手段と、前記インターメディアリからの前記応答をリクエスタに返す手段とを含む、請求項18、19、20、または21に記載のシステム。
【請求項23】
前記ターゲット・サービスからの応答を前記インターメディアリで同期式に受信する手段が、さらに、前記インターメディアリと前記ターゲット・サービスとの間のデータ通信接続に対してブロッキング受信関数を呼び出す手段を含む、請求項22に記載のシステム。
【請求項24】
作成され、前記ターゲット・サービスに発行される前記ターゲット・サービス要求が、前記ウェブ・サービス・インターメディアリで受信された前記要求の検査されず変更されないメッセージ内容を有する、請求項17ないし23のいずれかに記載のシステム。
【請求項25】
前記操作をサポートするエンドポイントとして、前記ウェブ・サービス・インターメディアリのエンドポイントをリクエスタに識別する手段をさらに含む、請求項17ないし24のいずれかに記載のシステム。
【請求項26】
前記パラメータ情報が、前記操作のポート・タイプを含む、請求項17ないし25のいずれかに記載のシステム。
【請求項27】
前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの前記エンドポイントを識別する手段が、さらに、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの複数のエンドポイントを識別する手段と、選択ルールに従って前記複数のエンドポイントから1つのエンドポイントを選択する手段とを含む、請求項17ないし26のいずれかに記載のシステム。
【請求項28】
前記パラメータ情報が、前記操作のポート・タイプを含み、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの複数のエンドポイントを識別する手段が、前記ポート・タイプに応じて、前記ポート・タイプに関する複数のターゲット・サービスをレジストリから識別する手段を含む、請求項27に記載のシステム。
【請求項29】
前記複数のエンドポイントから1つのエンドポイントを選択する手段が、さらに、ターゲット・サービスの間の負荷平衡化に関する選択ルールに従って前記複数のエンドポイントから1つのエンドポイントを選択する手段を含む、請求項27または28に記載のシステム。
【請求項30】
前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成する手段が、前記要求をバインディング中立インターフェースで有用なデータ構造に構成する手段と、前記要求を呼出しパラメータとして渡して前記バインディング中立インターフェースを呼び出す手段とを含む、請求項17ないし29のいずれかに記載のシステム。
【請求項31】
前記ターゲット・サービスに前記ターゲット・サービス要求を発行する手段が、バインディング中立インターフェースの1つまたは複数のメンバ・メソッドを呼び出す手段を含む、請求項17ないし30のいずれかに記載のシステム。
【請求項32】
前記インターメディアリで前記ターゲット・サービスからの応答を受信する手段と、前記インターメディアリで、前記ターゲット・サービスからの前記応答に応じて、前記インターメディアリからの応答を作成する手段と、前記インターメディアリからの前記応答を前記要求するクライアントに返す手段とをさらに含む、請求項17ないし31のいずれかに記載のシステム。
【請求項33】
ウェブ・サービス・インターメディアリ用のポート・タイプ不可知プロキシ・サポートのコンピュータ・プログラム製品であって、記録媒体と、ウェブ・サービス・インターメディアリでウェブ・サービス操作の実行に関する要求を受信する前記記録媒体に記録された手段であって、前記要求は、前記操作をサポートするターゲット・サービスのエンドポイントをそれから識別できるパラメータ情報を含む、前記記録媒体に記録された手段と、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの前記エンドポイントを識別する前記記録媒体に記録された手段と、前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成する前記記録媒体に記録された手段と、前記ターゲット・サービス要求を前記ターゲット・サービスに発行する前記記録媒体に記録された手段とを含むコンピュータ・プログラム製品。
【請求項34】
前記要求が同期応答を必要とするかどうかを判定する前記記録媒体に記録された手段と、前記要求が同期応答を必要とする場合に前記ターゲット・サービスからの応答を待つ前記記録媒体に記録された手段とを含む、請求項33に記載のコンピュータ・プログラム製品。
【請求項35】
前記要求が同期応答を必要とするかどうかを判定する手段が、前記要求が同期応答を必要とするかどうかを前記パラメータ情報に応じて判定する前記記録媒体に記録された手段を含む、請求項34に記載のコンピュータ・プログラム製品。
【請求項36】
前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成する手段が、さらに、前記要求が同期応答を必要とするかどうかの判定に応じて前記ターゲット・サービス要求を作成する前記記録媒体に記録された手段を含む、請求項34または35に記載のコンピュータ・プログラム製品。
【請求項37】
前記要求が、同期応答を必要とせず、前記コンピュータ・プログラム製品が、さらに、前記ターゲット・サービス要求の肯定応答を前記ターゲット・サービスから受信する前記記録媒体に記録された手段と、応答メッセージを待たずに前記肯定応答をリクエスタに返す前記記録媒体に記録された手段とを含む、請求項34、35、または36に記載のコンピュータ・プログラム製品。
【請求項38】
前記ターゲット・サービスからの応答を待つ手段が、さらに、前記ターゲット・サービスからの応答を前記インターメディアリで同期式に受信する前記記録媒体に記録された手段と、前記インターメディアリで、前記ターゲット・サービスからの前記応答に応じて、前記インターメディアリからの応答を作成する前記記録媒体に記録された手段と、前記インターメディアリからの前記応答をリクエスタに返す前記記録媒体に記録された手段とを含む、請求項34、35、36、または37に記載のコンピュータ・プログラム製品。
【請求項39】
前記ターゲット・サービスからの応答を前記インターメディアリで同期式に受信する手段が、さらに、前記インターメディアリと前記ターゲット・サービスとの間のデータ通信接続に対してブロッキング受信関数を呼び出す前記記録媒体に記録された手段を含む、請求項38に記載のコンピュータ・プログラム製品。
【請求項40】
作成され、前記ターゲット・サービスに発行される前記ターゲット・サービス要求が、前記ウェブ・サービス・インターメディアリで受信された前記要求の検査されず変更されないメッセージ内容を有する、請求項33ないし39のいずれかに記載のコンピュータ・プログラム製品。
【請求項41】
前記操作をサポートするエンドポイントとして、前記ウェブ・サービス・インターメディアリのエンドポイントをリクエスタに識別する前記記録媒体に記録された手段をさらに含む、請求項33ないし40のいずれかに記載のコンピュータ・プログラム製品。
【請求項42】
前記パラメータ情報が、前記操作のポート・タイプを含む、請求項33ないし41のいずれかに記載のコンピュータ・プログラム製品。
【請求項43】
前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの前記エンドポイントを識別する手段が、さらに、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの複数のエンドポイントを識別する前記記録媒体に記録された手段と、選択ルールに従って前記複数のエンドポイントから1つのエンドポイントを選択する前記記録媒体に記録された手段とを含む、請求項33ないし42のいずれかに記載のコンピュータ・プログラム製品。
【請求項44】
前記パラメータ情報が、前記操作のポート・タイプを含み、前記パラメータ情報に応じて、前記操作をサポートするターゲット・サービスの複数のエンドポイントを識別する手段が、前記ポート・タイプに応じて、前記ポート・タイプに関する複数のターゲット・サービスをレジストリから識別する前記記録媒体に記録された手段を含む、請求項43に記載のコンピュータ・プログラム製品。
【請求項45】
前記複数のエンドポイントから1つのエンドポイントを選択する手段が、さらに、ターゲット・サービスの間の負荷平衡化に関する選択ルールに従って前記複数のエンドポイントから1つのエンドポイントを選択する前記記録媒体に記録された手段を含む、請求項43または44に記載のコンピュータ・プログラム製品。
【請求項46】
前記ターゲット・サービスの前記操作の実行に関するターゲット・サービス要求を作成する手段が、前記要求をバインディング中立インターフェースで有用なデータ構造に構成する前記記録媒体に記録された手段と、前記要求を呼出しパラメータとして渡して前記バインディング中立インターフェースを呼び出す前記記録媒体に記録された手段とを含む、請求項33ないし45のいずれかに記載のコンピュータ・プログラム製品。
【請求項47】
前記ターゲット・サービスに前記ターゲット・サービス要求を発行する手段が、バインディング中立インターフェースの1つまたは複数のメンバ・メソッドを呼び出す前記記録媒体に記録された手段を含む、請求項33ないし46のいずれかに記載のコンピュータ・プログラム製品。
【請求項48】
前記インターメディアリで前記ターゲット・サービスからの応答を受信する前記記録媒体に記録された手段と、前記インターメディアリで、前記ターゲット・サービスからの前記応答に応じて、前記インターメディアリからの応答を作成する前記記録媒体に記録された手段と、前記インターメディアリからの前記応答を前記要求するクライアントに返す前記記録媒体に記録された手段とをさらに含む、請求項33ないし47のいずれかに記載のコンピュータ・プログラム製品。
【請求項49】
コンピュータで稼動するときに請求項1ないし16のいずれかに記載の方法を実行するように適合されたプログラム・コード手段を含むコンピュータ・プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公表番号】特表2007−515716(P2007−515716A)
【公表日】平成19年6月14日(2007.6.14)
【国際特許分類】
【出願番号】特願2006−543549(P2006−543549)
【出願日】平成16年12月9日(2004.12.9)
【国際出願番号】PCT/EP2004/053382
【国際公開番号】WO2005/060212
【国際公開日】平成17年6月30日(2005.6.30)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【Fターム(参考)】