(57)【特許請求の範囲】
【請求項１】
コンピュータネットワークにおけるコンピュータシステムにおいて、前記コンピュータシステムのクライアントから、起点ノードにイベントリスナを登録するための要求を受信することであって、前記起点ノードが、階層中で互いに関連する複数のノードのうちの１つであり、前記複数のノードが、それぞれ前記コンピュータシステムの記憶装置の論理区画を表し、前記記憶装置が、複数の論理区画を含み、前記複数の論理区画がそれぞれ、前記記憶装置に含まれたデータの別個の非重複部分を含む、前記要求を受信すること、
前記コンピュータシステムのサーバによって、前記起点ノードに前記イベントリスナを登録することであって、前記イベントリスナが、前記起点ノードにおける第１のイベントの発生を前記クライアントに通知するように構成されている、前記イベントリスナを登録すること、
前記サーバによって、前記起点ノードが前記階層中に子孫ノードを有するか否かを判定すること、
前記起点ノードが前記階層中に子孫ノードを有する旨の判定に応答して、前記サーバにより、前記子孫ノードに別のイベントリスナを登録する必要なく、前記子孫ノードにおける第２のイベントの発生を前記クライアントに通知するように前記イベントリスナを設定することを備える、方法。
【請求項２】
前記起点ノードにおける前記第１のイベントまたは前記子孫ノードにおける前記第２のイベントの少なくとも一方の発生時に、前記第１のイベントまたは前記第２のイベントの少なくとも一方の発生を前記クライアントに通知することをさらに備える、請求項１に記載の方法。
【請求項３】
前記起点ノードに前記イベントリスナを登録することは、
前記第１のイベントまたは前記第２のイベントの発生を前記クライアントに通知した後でも前記イベントリスナを保持すること、
前記クライアントが削除するまで前記イベントリスナを保持することを含む、請求項２に記載の方法。
【請求項４】
前記第１のイベントまたは前記第２のイベントの発生を前記クライアントに通知することは、
前記第１のイベントの発生を受信することであって、前記サーバにより、前記起点ノードに対応する前記サーバのメモリにおけるフィールドが、前記起点ノードへの前記イベントリスナの登録を示す所定値に設定されたか否かを判定する、前記第１のイベントの発生を受信すること、
前記起点ノードに対応する前記サーバのメモリにおけるフィールドが、前記子孫ノードへの前記イベントリスナの登録を示す所定値に設定されたか否かを判定する必要なく、前記第２のイベントの発生を受信すること、
前記起点ノードにおける前記第１のイベントの発生または前記子孫ノードにおける前記第２のイベントの発生を前記クライアントに通知することを含む、請求項２に記載の方法。
【請求項５】
前記起点ノードに前記イベントリスナを登録することは、
所定の種類の前記第１のイベントまたは前記第２のイベントの発生を前記クライアントに通知するように前記イベントリスナを構成することを含む、請求項１に記載の方法。
【請求項６】
前記所定の種類の前記第１のイベントまたは前記第２のイベントが、（ｉ）新たなノードの作成、（ｉｉ）既存ノードの消去、または（ｉｉｉ）前記既存ノードの修正のうちの少なくとも１つを含む、請求項５に記載の方法。
【請求項７】
前記第１のイベントおよび前記第２のイベントが、同じ所定の種類のイベントである、請求項１に記載の方法。
【請求項８】
前記第１のイベントおよび前記第２のイベントが、異なる所定の種類のイベントである、請求項１に記載の方法。
【請求項９】
前記子孫ノードにおける前記第２のイベントの発生を前記クライアントに通知するように前記イベントリスナを設定することは、
前記階層中の前記起点ノードから始まる選択経路に沿った子孫ノードにおけるイベントの発生を前記クライアントに通知するように前記イベントリスナを構成することを含む、請求項１に記載の方法。
【請求項１０】
前記起点ノードに前記イベントリスナを登録することは、
アクセス制御を設定することによって、前記起点ノードへの前記イベントリスナの登録を前記コンピュータシステムにおける予め設定された組のユーザ役割に制限することを含む、請求項１に記載の方法。
【請求項１１】
方法であって、
コンピュータネットワークにおけるコンピュータシステムによって、前記コンピュータシステムのサーバ中の起点ノードにおいてイベントが発生したか否かを判定することであって、前記起点ノードが、階層中で互いに関連する複数のノードのうちの１つであり、前記複数のノードが、それぞれ前記コンピュータシステム中の記憶装置の論理区画を表し、前記記憶装置が、複数の論理区画を含み、前記複数の論理区画がそれぞれ、前記記憶装置に含まれたデータの別個の非重複部分を含む、前記イベントが発生したか否かを判定すること、
前記起点ノードにおいて前記イベントが発生した旨の判定に応答して、前記サーバにより、前記コンピュータシステムのクライアントによって前記起点ノードにイベントリスナが登録されたか否かを判定すること、
前記起点ノードに前記イベントリスナが登録された旨の判定に応答して、前記起点ノードにおける前記イベントの発生を前記クライアントに通知すること、
前記起点ノードに前記イベントリスナが登録されていない旨の判定に応答して、前記サーバにより、前記起点ノードが前記階層中に先祖ノードを有するか否かを判定すること、
前記起点ノードが前記階層中に先祖ノードを有する旨の判定に応答して、前記サーバにより、前記先祖ノードに前記イベントリスナが登録されたか否かを判定すること、
前記先祖ノードに前記イベントリスナが登録された旨の判定に応答して、前記起点ノードにおける前記イベントの発生を前記クライアントに通知することを備える、方法。
【請求項１２】
前記起点ノードに登録された前記イベントリスナが、前記イベントの発生を前記クライアントに通知する動作の後でも保持される、請求項１１に記載の方法。
【請求項１３】
前記イベントが、（ｉ）新たなノードの作成、（ｉｉ）既存ノードの消去、または（ｉｉｉ）前記既存ノードの修正のうち少なくとも１つを含む、請求項１１に記載の方法。
【請求項１４】
前記サーバと前記クライアントとの間の通信障害に応答して、前記クライアントから、新たなサーバ中の前記起点ノードに新たなイベントリスナを登録するための要求を受信することであって、前記新たなサーバが、前記階層中の前記複数のノードの少なくとも一部のコピーを有し、前記要求が、前記サーバから受信した最新のイベントの処理番号を含む、前記要求を受信すること、
前記新たなサーバにより、前記処理番号を用いることによって、前記最新のイベントを受信した時刻から前記起点ノードおよび前記起点ノードの子孫ノードで発生したイベントの一覧を取得すること、
前記新たなサーバによって、前記イベントの一覧を前記クライアントに送信することをさらに備える、請求項１１に記載の方法。
【請求項１５】
装置であって、
サーバと、
前記サーバと協働することにより、クライアントから、起点ノードにイベントリスナを登録するための要求を受信するように構成されている受信モジュールであって、前記起点ノードが、階層中で互いに接続される複数のノードのうちの１つであり、前記複数のノードが、それぞれ記憶ユニットの論理区画を表し、前記記憶ユニットが、複数の論理区画を含み、前記複数の論理区画がそれぞれ、前記記憶ユニットに含まれたデータの別個の非重複部分を含む、前記受信モジュールと、
前記受信モジュールと協働することにより、前記起点ノードに前記イベントリスナを登録するように構成されている登録モジュールであって、前記イベントリスナが、前記起点ノードにおける第１のイベントの発生を前記クライアントに通知するように構成されている、前記登録モジュールと、
前記登録モジュールと協働することにより、前記起点ノードが前記階層中に子孫ノードを有するか否かを判定するように構成されている階層判定モジュールと、
前記階層判定モジュールと協働することにより、前記起点ノードが前記階層中に子孫ノードを有する旨の判定に応答して、前記子孫ノードに別のイベントリスナを登録する必要なく、前記子孫ノードにおける第２のイベントの発生を前記クライアントに通知するように前記イベントリスナを設定するように構成されている階層イベント処理モジュールとを備える、装置。
【請求項１６】
前記イベントリスナは、前記登録モジュールと協働することにより、前記起点ノードにおける前記第１のイベントまたは前記子孫ノードにおける前記第２のイベントの少なくとも一方の発生時に、前記第１のイベントまたは前記第２のイベントの少なくとも一方の発生を前記クライアントに通知するようにさらに構成されている、請求項１５に記載の装置。
【請求項１７】
前記イベントリスナは、
前記第１のイベントの発生を受信することであって、前記サーバにより、前記起点ノードに対応する前記サーバのメモリ中のビットが、前記起点ノードへの前記イベントリスナの登録を示す所定値に設定されたか否かを判定することを含む、前記第１のイベントの発生を受信すること、
前記起点ノードに対応する前記サーバのメモリ中のビットが、前記子孫ノードへの前記イベントリスナの登録を示す所定値に設定されたか否かを判定する必要なく、前記第２のイベントの発生を受信すること、
前記起点ノードにおける前記第１のイベントの発生または前記子孫ノードにおける前記第２のイベントの発生を前記クライアントに通知することを実施するようにさらに構成されている、請求項１６に記載の装置。
【請求項１８】
前記イベントリスナは、所定の種類のイベントの発生を通知するようにさらに構成され、
前記所定の種類の前記イベントは、（ｉ）新たなノードの作成、（ｉｉ）既存ノードの消去、または（ｉｉｉ）前記既存ノードの修正のうち少なくとも１つを含む、請求項１５に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般的に、コンピュータアプリケーションにおけるイベントリスナに関する。より詳細には、本発明は、階層データ構造のノードにおける再帰的イベントリスナの使用に関する。
【背景技術】
【０００２】
コンピュータ関連技術において、イベントリスナは、ソフトウェアオブジェクト（以下、「オブジェクト」と称する）における特定の１つまたは複数の種類のイベントの発生を検出し（「受信し」）、このイベントの発生を加入者に通知する要素である。異なる階層レベルにオブジェクトを有する階層データ構造において、これらオブジェクトのいずれかにおけるイベントの発生（オブジェクトの作成、オブジェクトの消去、またはオブジェクトの修正等）を検出するため、現行のイベントリスナ技術では、階層データ構造のオブジェクトそれぞれにイベントリスナを登録する。これらの技術は通常、イベントリスナの登録にかなりの時間およびメモリを消費する。
【０００３】
たとえば、ソーシャルネットワーキング環境が１００，０００個のユーザ（クライアント）と、何らかのユーザ情報を表す階層データ構造に構成された１億個のオブジェクトを含むサーバとを有するシナリオを考える。また、オブジェクトへのイベントリスナの登録に１ビットのメモリを消費するものと仮定する。１００，０００個のクライアントが存在し、これら１００，０００個のクライアントがそれぞれ、サーバ上の１億個のオブジェクトそれぞれにイベントリスナを配置することを望む場合は、イベントリスナの登録だけに１．２５テラバイトのメモリが消費される可能性がある。オブジェクトには、（ａ）オブジェクトの作成、（ｂ）オブジェクトの修正、および（ｃ）オブジェクトの子という３種類のイベントリスナを登録するようにしてもよい。このため、イベントリスナの登録だけに３．７５テラバイトのメモリが消費される可能性がある。さらに、階層中のオブジェクトそれぞれに対する別個の登録要求をクライアントが送信する場合は、登録にかなりのネットワーク帯域幅および時間が消費される可能性がある。現行のイベントリスナ技術は通常、少なくとも時間、メモリ、およびネットワーク帯域幅の消費に関しては非効率的である。さらに、現行のイベントリスナ登録技術に関する非効率性は、クライアント数、階層中のオブジェクト数、またはその両者の増加に応じて、大幅に拡大する可能性がある。分散システムアーキテクチャにおいては、新たに分散されるアプリケーションまたはサービスと、これらのサービスの消費を望む新たなクライアントとが絶え間なく増加する可能性がある。このような分散環境において、現行のイベントリスナ登録技術では通常、イベントリスナの登録にかなりのリソースを消費することでシステム全体の効率が大幅に低下することになる。
【発明の概要】
【課題を解決するための手段】
【０００４】
以下、階層データ構造のノードに再帰的イベントリスナを登録する技術を説明する。再帰的イベントリスナは、当該再帰的イベントリスナが登録されたノードで発生するイベントを受信するとともに、当該再帰的イベントリスナまたはその他任意のイベントリスナを当該ノードの子孫ノードに登録する必要なく、当該子孫ノードで発生するイベントも受信するイベントリスナである。この技術は、特に階層データ構造を有する環境において、メモリおよび処理リソースをより効率的に使用するため、監視対象のオブジェクトの数または監視を要求するクライアントの数による大きな悪影響を受けることはない。
【０００５】
開示技術の一実施形態は、クライアントから、起点ノードにイベントリスナを登録する要求を受信するステップを含む。起点ノードは、階層中で互いに関連する複数のノードのうちの１つであり、当該ノードがそれぞれ、記憶装置の論理区画を表す。サーバは、起点ノードにイベントリスナを登録し、当該イベントリスナは、起点ノードにおける第１のイベントの発生をクライアントに通知するように構成されている。さらに、サーバは、起点ノードが階層中に子孫ノードを有するか否かを判定し、起点ノードが階層中に子孫ノードを有する旨の判定に応答して、子孫ノードに別のイベントリスナを登録する必要なく、子孫ノードにおける第２のイベントの発生をクライアントに通知するようにイベントリスナを設定する。
【０００６】
開示技術の少なくとも一部の実施形態において、クライアントは、ノードにおける第１のイベントまたは子孫ノードにおける第２のイベントの少なくとも一方の発生時に、第１のイベントまたは第２のイベントの少なくとも一方の発生を通知される。
【０００７】
開示技術の少なくとも一部の実施形態において、ノードに登録されたイベントリスナは、第１のイベントまたは第２のイベントの発生をクライアントに通知した後でも保持される。
【０００８】
本発明の一部の実施形態は、上記の追加または代替として、他の態様、要素、特徴、およびステップを有する。これらの潜在的な追加および代替については、本明細書のその他の部分で説明する。
【０００９】
本発明に係る実施形態は、方法、記憶媒体、およびシステムに関する添付の特許請求の範囲において特に開示しており、方法等の特許請求の範囲のあるカテゴリに記載された任意の特徴は、システム等の特許請求の範囲の別のカテゴリでも同様に請求可能である。
【００１０】
本発明に係る一実施形態において、方法は、
コンピュータネットワーク中のコンピュータシステムにおいて、当該コンピュータシステム中のクライアントから、起点ノードにイベントリスナを登録する要求を受信するステップであって、起点ノードが階層中で互いに関連する複数のノードのうちの１つであり、当該ノードがそれぞれコンピュータシステム中の記憶装置の論理区画を表す、前記受信するステップと、
コンピュータシステム中のサーバによって、起点ノードにイベントリスナを登録するステップであって、イベントリスナが、起点ノードにおける第１のイベントの発生をクライアントに通知するように構成された、前記登録するステップと、
サーバによって、起点ノードが階層中に子孫ノードを有するか否かを判定するステップと、
起点ノードが階層中に子孫ノードを有する旨の判定に応答して、サーバにより、子孫ノードに別のイベントリスナを登録する必要なく、子孫ノードにおける第２のイベントの発生をクライアントに通知するようにイベントリスナを設定するステップと、
を含む。
【００１１】
別の実施形態において、この方法は、起点ノードにおける第１のイベントまたは子孫ノードにおける第２のイベントの少なくとも一方の発生時に、第１のイベントまたは第２のイベントの少なくとも一方の発生をクライアントに通知するステップをさらに含む。
【００１２】
起点ノードにイベントリスナを登録するステップは、
第１のイベントまたは第２のイベントの発生をクライアントに通知した後でもイベントリスナを保持するサブステップと、
クライアントが削除するまでイベントリスナを保持するサブステップと、
を含むことができる。
【００１３】
第１のイベントまたは第２のイベントの発生をクライアントに通知するステップは、
第１のイベントの発生を受信するサブステップであって、サーバにより、起点ノードに対応するサーバのメモリ中のフィールドが、起点ノードへのイベントリスナの登録を示す所定値に設定されたか否かを判定するサブサブステップを含む、前記受信するサブステップと、
起点ノードに対応するサーバのメモリ中のフィールドが、子孫ノードへのイベントリスナの登録を示す所定値に設定されたか否かを判定する必要なく、第２のイベントの発生を受信するサブステップと、
起点ノードにおける第１のイベントの発生または子孫ノードにおける第２のイベントの発生をクライアントに通知するサブステップと、
を含むことができる。
【００１４】
起点ノードにイベントリスナを登録するステップは、所定の種類の第１のイベントまたは第２のイベントの発生をクライアントに通知するようにイベントリスナを構成するサブステップを含むことができる。
【００１５】
所定の種類の第１のイベントまたは第２のイベントは、（ｉ）新たなノードの作成、（ｉｉ）既存ノードの消去、または（ｉｉｉ）既存ノードの修正のうちの少なくとも１つを含むことができる。
【００１６】
第１のイベントおよび第２のイベントは、同じ所定の種類のイベントとすることができる。
第１のイベントおよび第２のイベントは、異なる所定の種類のイベントとすることができる。
【００１７】
記憶装置は、複数の論理区画を含ことができ、当該論理区画がそれぞれ、記憶装置に含まれた別個の非重複データの一部分を含む。
子孫ノードにおける第２のイベントの発生をクライアントに通知するようにイベントリスナを設定するステップは、階層中の起点ノードから始まる選択経路に沿った子孫ノードにおけるイベントの発生をクライアントに通知するようにイベントリスナを構成するサブステップを含むことができる。
【００１８】
起点ノードにイベントリスナを登録するステップは、アクセス制御を設定することによって、起点ノードへのイベントリスナの登録をコンピュータシステム中の所定のユーザ役割セットに制限するサブステップを含むことができる。
【００１９】
本発明に係るさらに別の実施形態において、方法は、
コンピュータネットワーク中のコンピュータシステムによって、コンピュータシステムのサーバ中の起点ノードにおいてイベントが発生したか否かを判定するステップであって、起点ノードが階層中で互いに関連する複数のノードのうちの１つであり、当該ノードがそれぞれコンピュータシステム中の記憶装置の論理区画を表す、前記判定するステップと、
起点ノードにおいてイベントが発生した旨の判定に応答して、サーバにより、コンピュータシステム中のクライアントによって起点ノードにイベントリスナが登録されたか否かを判定するステップと、
起点ノードにイベントリスナが登録された旨の判定に応答して、起点ノードにおけるイベントの発生をクライアントに通知するステップと、
起点ノードにイベントリスナが登録されていない旨の判定に応答して、サーバにより、起点ノードが階層中に先祖ノードを有するか否かを判定するステップと、
起点ノードが階層中に先祖ノードを有する旨の判定に応答して、サーバにより、先祖ノードにイベントリスナが登録されたか否かを判定するステップと、
先祖ノードにイベントリスナが登録された旨の判定に応答して、起点ノードにおけるイベントの発生をクライアントに通知するステップと、
を含む。
【００２０】
起点ノードに登録されたイベントリスナは、イベントの発生をクライアントに通知する動作の後でも保持可能である。
イベントは、（ｉ）新たなノードの作成、（ｉｉ）既存ノードの消去、または（ｉｉｉ）当該既存ノードの修正のうちの少なくとも１つを含むことができる。
【００２１】
さらに別の実施形態において、この方法は、
サーバとクライアントとの間の通信障害に応答して、クライアントから、新たなサーバ中の起点ノードに新たなイベントリスナを登録する要求を受信するステップであって、新たなサーバが階層中のノードの少なくとも一部のコピーを有し、上記要求がサーバから受信した最新のイベントの処理番号を含む、前記受信するステップと、
新たなサーバにより、処理番号を用いることによって、最新のイベントを受信した時刻から起点ノードおよび当該起点ノードの子孫ノードで発生したイベントの一覧を取得するステップと、
新たなサーバによって、イベントの一覧をクライアントに送信するステップと、
を含む。
【００２２】
同様に請求可能な本発明の一実施形態において、装置は、
サーバと、
サーバ装置と協働することにより、クライアントから、起点ノードにイベントリスナを登録する要求を受信するように構成された受信モジュールであって、起点ノードが階層中で互いに接続される複数のノードのうちの１つであり、当該ノードがそれぞれ記憶ユニットの論理区画を表す、受信モジュールと、
受信モジュールと協働することにより、起点ノードにイベントリスナを登録するように構成された登録モジュールであって、イベントリスナが、起点ノードにおける第１のイベントの発生をクライアントに通知するように構成された、登録モジュールと、
登録モジュールと協働することにより、起点ノードが階層中に子孫ノードを有するか否かを判定するように構成された階層判定モジュールと、
階層判定モジュールと協働することにより、起点ノードが階層中に子孫ノードを有する旨の判定に応答して、子孫ノードに別のイベントリスナを登録する必要なく、子孫ノードにおける第２のイベントの発生をクライアントに通知するようにイベントリスナを設定するように構成された階層イベント処理モジュールと、
を備える。
【００２３】
イベントリスナは、登録モジュールと協働することにより、起点ノードにおける第１のイベントまたは子孫ノードにおける第２のイベントの少なくとも一方の発生時に、第１のイベントまたは第２のイベントの少なくとも一方の発生をクライアントに通知するようにさらに構成可能である。
【００２４】
イベントリスナは、
第１のイベントの発生を受信し、当該第１のイベントの発生を受信することが、サーバにより、起点ノードに対応するサーバのメモリ中のビットが、起点ノードへのイベントリスナの登録を示す所定値に設定されたか否かを判定することを含み、
起点ノードに対応するサーバのメモリ中のビットが、子孫ノードへのイベントリスナの登録を示す所定値に設定されたか否かを判定する必要なく、第２のイベントの発生を受信し、
起点ノードにおける第１のイベントの発生または子孫ノードにおける第２のイベントの発生をクライアントに通知する、
ようにさらに構成可能である。
【００２５】
イベントリスナは、所定の種類のイベントの発生を通知するようにさらに構成可能であり、当該所定の種類のイベントが、（ｉ）新たなノードの作成、（ｉｉ）既存ノードの消去、または（ｉｉｉ）既存ノードの修正のうちの少なくとも１つを含む。
【００２６】
記憶ユニットは、複数の論理区画を含むことができ、当該論理区画がそれぞれ、記憶ユニットに含まれた別個の非重複データの一部分を含む。
本発明のさらに別の実施形態において、１つまたは複数のコンピュータ可読持続性記憶媒体は、実行時に本発明または上記実施形態のうちのいずれかに係る方法を実施するように動作可能なソフトウェアを具現化する。
【００２７】
本発明のさらに別の実施形態において、システムは、１つまたは複数のプロセッサと、当該プロセッサに結合され、当該プロセッサにより実行可能な命令を含むメモリとを備え、プロセッサは、命令の実行時に本発明または上記実施形態のうちのいずれかに係る方法を実施するように動作可能である。
【図面の簡単な説明】
【００２８】
【図１】本発明の一実施形態が動作可能な環境を示した図である。
【図２】階層データ構造のノードにおける再帰的イベントリスナを示したブロック図である。
【図３】階層データ構造のノードに再帰的イベントリスナを登録するためのフローチャートである。
【図４】階層データ構造のノードにおけるイベントの発生を通知するためのフローチャートである。
【図５】図１のコーディネーションサービスにおける再帰的イベントリスナの登録の一例を示した図である。
【図６】クライアントとサーバとの間の通信障害に応答して、クライアントにより再帰的イベントリスナを再登録するプロセスを示したフローチャートである。
【図７】様々な動作を実行するとともに、このような動作で生成および使用される、あるいはこのような動作で生成または使用される様々な情報を格納可能な装置のブロック図である。
【発明を実施するための形態】
【００２９】
本説明における「一実施形態」等の言及は、説明している特定の特徴、機能、または特性が本発明の少なくとも１つの実施形態に含まれることを意味する。本明細書におけるこのような表現の使用は、必ずしもすべてが同じ実施形態を参照しているわけでもなければ、必ずしも相互に排他的でもない。
【００３０】
階層データ構造のノードに再帰的イベントリスナを登録する方法およびシステムを開示する。開示技術の一実施形態は、クライアントから、起点ノードにイベントリスナを登録する要求を受信するステップを含む。起点ノードは、階層中で互いに関連する複数のノードのうちの１つであり、当該ノードがそれぞれ、たとえば記憶装置の論理区画を表す。サーバは、起点ノードにイベントリスナを登録し、当該イベントリスナは、起点ノードにおける第１のイベントの発生をクライアントに通知するように構成されている。さらに、サーバは、起点ノードが階層中に子孫ノード（descendant node）を有するか否かを判定し、起点ノードが階層中に子孫ノードを有する旨の判定に応答して、子孫ノードに別のイベントリスナを登録する必要なく、子孫ノードにおける第２のイベントの発生をクライアントに通知するようにイベントリスナを設定する。
【００３１】
以下、特に断りのない限り、用語「イベントリスナ（event listener）」は、「再帰的イベントリスナ（recursive event listener）」も意味する。非再帰的イベントリスナについては、「非再帰的イベントリスナ（non-recursive event listener）」と称する。
【００３２】
環境
図１は、開示技術の一実施形態が動作可能な環境１００を示している。図示の通り、環境１００は、たとえばメリーランド州フォレストヒルのアパッチソフトウェア財団（Ａｐａｃｈｅ  Ｓｏｆｔｗａｒｅ  Ｆｏｕｎｄａｔｉｏｎ）から入手可能なＺｏｏＫｅｅｐｅｒ（商標）サービスの実施等が考えられるコーディネーションサービス１２５を含む。別の実施形態において、環境１００は、分散システムまたは分散アプリケーションに対してコーディネーションサービスを提供するその他類似のサービスを含んでいてもよい。コーディネーションサービス（coordination service）１２５は、分散アプリケーションに対して、たとえば同期、構成保守、グループ、および命名等のコーディネーションサービスを提供する。コーディネーションサービス１２５は、サーバグループ１０５にわたって複製され、アンサンブル（ensemble）と称する（以下、サーバ１２０のグループ１０５は、「グループ」または「アンサンブル」と称する場合もある）。グループ１０５のサーバの大部分が利用可能である限り、コーディネーションサービス１２５も利用可能である。グループ１０５の各サーバは、たとえばその他各サーバの状態等の情報を有していてもよい。
【００３３】
アンサンブル１０５において、あるサーバは、たとえば合意による書き込み等の処理の承認および調整を役割とするリーダ（leader）１１５として動作してもよい。アンサンブルにおけるリーダ１１５以外のサーバはフォロワ（follower）として動作してもよく、フォロワは、リーダ１１５の直接的な読み出し専用の複製であってもよい。コーディネーションサービス１２５において、クライアントからの一部の書き込み要求は、リーダ１１５に転送される。フォロワは、リーダ１１５からの提案を受信するとともに、クライアントからの要求に対するサービス提供に賛成または反対してもよい。さらに、コーディネーションサービス１２５において、リーダ１１５が故障あるいは無効となった場合は、その他任意のフォロワが合意により新たなリーダとなってもよく、また、要求に対するサービス提供を継続してもよい。その他のフォロワは、この新たなリーダと同期していてもよい。
【００３４】
環境１００は、コーディネーションサービス１２５を用いるアプリケーション（図示せず）が使用するデータを含むデータベース（図示せず）等の記憶媒体を具備する。たとえばソーシャルネットワーキング環境等のアプリケーションにおいて、データベースは、たとえばユーザプロファイルデータを含んでいてもよい。また、データベースは、「シャード（shard）」とも称する多くの論理区画に分割され、それぞれがデータベース中のデータの一部分を含んでいてもよい。たとえば、ソーシャルネットワーキングアプリケーションにおいて、データベースが１００，０００個のユーザのユーザプロファイルデータを含む場合は、第１のシャードがユーザ１〜１０，０００のユーザプロファイルデータを含み、第２のシャードがユーザ１０，００１〜２０，０００のユーザプロファイルデータを含んでいてもよく、以下同様である。データベースのシャードはそれぞれ、データベースの別個の非重複データの一部分を含む。
【００３５】
データベースのシャードは、ツリー構造１３０等の階層データ構造のノードセットとして表すことも可能である。ツリー構造１３０は、たとえばサーバ１２０のメモリ中に作成される。クライアント１１０は、サーバ１２０上のツリー構造１３０の対応するノードにアクセスすることによって、データベースのシャードのデータにアクセスする。ツリー構造１３０のルートノード「Ａ」は、ユーザデータベースを表していてもよく、ノード「Ｂ」は、ユーザ１〜１０，０００のユーザデータを有するシャードを表していてもよく、ノード「Ｃ」は、ユーザ１０，００１〜２０，０００のユーザデータを有するシャードを表していてもよく、ノード「Ｄ」は、ユーザ２０，００１〜３０，０００のユーザデータを有するシャードを表していてもよい。
【００３６】
クライアント１１０は、ツリー構造１３０のノードのいずれかにおけるイベントの発生の通知を受けてもよい。クライアント１１０は、ノードにおけるイベントの発生の通知を受けるため、特定ノードにイベントリスナを登録するようサーバ１２０に要求可能である。たとえば、クライアント１１０は、ツリー構造１３０のノードＡにイベントリスナを登録するようサーバ１２０に要求する。イベントリスナは、再帰的イベントリスナであってもよいし、非再帰的イベントリスナであってもよい。
【００３７】
非再帰的イベントリスナは、当該イベントリスナが登録されたノードにおいてのみ発生しているイベントを監視する。たとえば、クライアント１１０は、ノードＡに非再帰的イベントリスナを登録している場合、ノードＡにおいてのみイベントが発生している場合に、当該イベントの発生の通知を受けることになる。クライアント１１０は、ノードＡの子孫ノードで発生しているイベントの通知は受けない（一部の実施形態において、クライアントは、ノードの子が変化している場合に通知を受けるようにしてもよいが、たとえば最初の１回のみ通知を受けるようにしてもよい）。一方、クライアント１１０は、ノードＡに再帰的イベントリスナを登録している場合、ツリー構造１３０のノードＡまたは当該ノードＡの子孫ノードにおいて発生しているイベントについて、その発生の通知を受けることになる。たとえば、クライアント１１０は、ノードＡに再帰的イベントリスナを登録している場合、ノードＡおよび当該ノードＡの子孫ノードすなわちノードＢ〜Ｇ、あるいはノードＡまたはノードＢ〜Ｇのいずれかにおいて発生しているイベントについて、その発生の通知を受けることになる。同様に、ノードＢに再帰的イベントリスナが登録されている場合、クライアント１１０は、ノードＢまたはその子孫ノードＥおよびＦのいずれかにおいて発生しているイベントについて、その発生の通知を受けることになる。
【００３８】
ノードに再帰的イベントリスナを登録すると、当該ノードまたはその子孫ノードにおけるイベントの発生が加入者に通知されるため、この技術では、クライアントが当該ノードの子孫ノードにイベントリスナを登録する必要がない。これにより、すべての子孫ノードに対する非再帰的イベントリスナの登録に消費される時間およびネットワーク帯域幅が抑えられる。さらに、再帰的イベントリスナの登録の格納に消費されるメモリについても、抑えられる場合がある。単一の登録を格納することによって、ノードおよびその子孫ノードの監視が可能となるためである。一方、非再帰的な登録においては通常、クライアント１１０が監視したいノードと同数の登録が行われる。したがって、再帰的イベントリスナによれば、階層データ構造を有するアプリケーションにおける現行の非再帰的イベントリスナに対して、少なくとも時間、メモリ、およびネットワーク帯域幅の消費の点で、システムの全体性能を大幅に改善可能である。
【００３９】
図２は、開示技術の一実施形態に係る、階層データ構造のノードにおける再帰的イベントリスナを示したブロック図である。システム２００は、図１の環境１００または類似の環境とすることができる。システム２００は、サーバ２１５と、通信ネットワーク２１０を介して当該サーバ２１５と通信する（communicating）クライアント２０５とを具備する。クライアント２０５およびサーバ２１５は、同じ物理的マシン（physical machine）または異なるマシン（machine）上で動作していてもよい。クライアント２０５は、サーバ２１５中のツリー構造２２０への再帰的イベントリスナ２４５の登録を要求することができる。たとえば、クライアント２０５は、ツリー構造２２０のノードＢへの再帰的イベントリスナ２４５の登録を要求する。サーバ２１５と通信するように構成された受信モジュール２２５は、クライアント２０５から、ツリー構造２２０のノードＢに再帰的イベントリスナ２４５を登録する要求を受信する。
【００４０】
登録モジュール２３０は、ツリー構造２２０のノードＢに再帰的イベントリスナ２４５を登録する。さらに、登録モジュール２３０は、サーバのメモリ中のノードＢに対応するフィールド（たとえば、ビットまたはビットセット）を所定値に設定することによって、ノードＢに再帰的イベントリスナ２４５が登録された旨を示す。ノードＢに登録された再帰的イベントリスナ２４５は、ノードＢにおけるイベントの発生をクライアント２０５に通知する。ノードＢへの再帰的イベントリスナ２４５の登録後、階層判定モジュール２３５は、ノードＢがツリー構造２２０に子孫ノードを有するか否かを判定する。ノードＢが子孫ノードＥおよびＦを有する旨の判定に応答して、階層イベント処理モジュール２４０は、ノードＢに加えてノードＥまたはＦにおけるイベントの発生を受信して（listen）通知するように、ノードＢに登録された再帰的イベントリスナ２４５を設定する。再帰的イベントリスナ２４５は、ツリー構造２２０のノードＢ、Ｅ、またはＦのうち少なくとも１つにおけるイベントの発生をクライアント２０５に通知する。したがって、再帰的イベントリスナ２４５によれば、単一のノードにのみ登録するだけで、複数のノードにおいて発生しているイベントの通知が得られるという利点がある。
【００４１】
ツリー構造２２０のノードにおいて発生し得るイベントの種類としては、新たなノードの作成、既存ノードの修正、または既存ノードの消去が挙げられる。ノードＢ、Ｅ、またはＦにおいて発生するイベントは、同じ種類であってもよいし、異なる種類であってもよい。さらに、イベントリスナ２４５は、上記イベント種類のいずれかの発生をクライアントに通知するように構成されている。
【００４２】
一実施形態において、ツリー構造２２０のノードはそれぞれ、データベース２５０等の記憶ユニットの異なる論理区画を表す。別の実施形態において、ツリー構造２２０のノードの少なくとも一部は、データベース２５０の異なる論理区画に含まれるデータを表す。たとえば、ツリー構造２２０は、様々なユーザのユーザプロファイルデータを多くのシャードに有するユーザデータベースを表していてもよい。さらに別の実施形態において、ノードは、システム２００の他のエンティティを表していてもよい。ツリー構造２２０は、サーバ２１５のメモリに含まれていてもよい。
【００４３】
各モジュールすなわち受信モジュール２２５、登録モジュール２３０、階層判定モジュール２３５、階層イベント処理モジュール２４０、および再帰的イベントリスナ２４５はそれぞれ、サーバ２１５と同じマシンまたは異なるマシン上で動作可能であるか、サーバ２１５と統合可能であるか、またはサーバ２１５と協働して動作可能である。
【００４４】
また、クライアント２０５は、ノードＡ〜Ｇのいずれかに非再帰的イベントリスナを登録するようにしてもよい。一実施形態において、ノードのイベントを再帰的イベントリスナおよび非再帰的イベントリスナの両者が受信している場合は、イベントの発生の通知が１つだけクライアント２０５に送信される。たとえば、クライアント２０５は、ノードＢに再帰的イベントリスナ２４５を登録し、ノードＢまたはその子孫ノードＥおよびＦに非再帰的イベントリスナ（図示せず）を登録している場合、ノードＢ、Ｅ、またはＦにおけるイベントの発生時には、ノードＢ、Ｅ、またはＦのいずれかにおけるイベントの発生に関する通知のみを受信することになる。クライアントは、再帰的イベントリスナおよび非再帰的イベントリスナに対する別個の通知をサーバから受信していなくてもよい。
【００４５】
ノード、たとえばノードＢに登録された再帰的イベントリスナ２４５は、ノードＢ、Ｅ、またはＦにおけるイベントの発生がクライアント２０５に通知された後でも保持される。一方、ノードに登録された非再帰的イベントリスナは、当該ノードにおけるイベントの発生がクライアント２０５に通知された後に削除される。ノードにおけるイベントの発生の通知を継続して得るには、非再帰的イベントリスナを再度登録する必要がある。再帰的イベントリスナ２４５は、非再帰的イベントリスナとは異なり、ノードにおけるイベントの発生の通知を継続して得るために再度ノードに登録する必要がない。したがって、再帰的イベントリスナ２４５は、非再帰的イベントリスナと比べて、少なくともノードへの当該再帰的イベントリスナの登録に消費される時間およびネットワーク帯域幅の点で効率的である。
【００４６】
階層データ構造のノードに再帰的イベントリスナを登録する方法
図３は、開示技術の一実施形態に係る、階層データ構造のノードに再帰的イベントリスナを登録するプロセス３００のフローチャートである。プロセス３００は、図２のシステム２００等のシステムに実装してもよい。ステップ３０５において、サーバ（またはサーバと協働する受信モジュール）は、クライアントから、起点ノードにイベントリスナを登録する要求を受信する。起点ノードは、階層中で互いに関連する複数のノードのうちの１つである。階層中のノードはそれぞれ、データベースの異なる論理区画を表す。ステップ３１０において、サーバ（またはサーバと協働する登録モジュール）は、起点ノードにイベントリスナを登録し、起点ノードにおける第１のイベントの発生をクライアントに通知するようにイベントリスナを構成する。
【００４７】
判定ステップ３１５において、サーバ（またはサーバと協働する階層判定モジュール）は、起点ノードが階層中に子孫ノードを有するか否かを判定する。起点ノードが階層中に子孫ノードを有さない旨の判定に応答して、プロセス３００は、ステップ３３０で復帰する。一方、起点ノードが階層中に子孫ノードを有する旨の判定に応答し、ステップ３２０において、サーバ（またはサーバと協働する階層イベント処理モジュール）は、子孫ノードに別のイベントリスナを登録する必要なく、子孫ノードにおける第２のイベントの発生をクライアントに通知するようにイベントリスナを設定する。
【００４８】
起点ノードにおける第１のイベントまたは子孫ノードにおける第２のイベントの発生時に、イベントリスナは、ステップ３２５に示すように、第１のイベントまたは第２のイベントの少なくとも一方の発生をクライアントに通知する。
【００４９】
図４は、開示技術の一実施形態に係る、階層データ構造のノードにおけるイベントの発生を通知するプロセス４００のフローチャートである。プロセス４００は、図２のシステム２００等のシステムに実装してもよい。ステップ４０５において、サーバは、当該サーバ中のノードにおいてイベントが発生したか否かを判定する。ノードは、階層中で互いに関連する複数のノードのうちの１つである。ノードにおいてイベントが発生していない旨の判定に応答して、プロセスは、ステップ４３５で復帰する。
【００５０】
一方、ノードにおいてイベントが発生した旨の判定に応答し、判定ステップ４１０において、サーバは、クライアントによってノードにイベントリスナが登録されたか否かを判定する。ノードにイベントリスナが登録された旨の判定に応答し、ステップ４３０において、イベントリスナは、当該ノードにおけるイベントの発生をクライアントに通知する。一方、ノードにイベントリスナが登録されていない旨の判定に応答し、判定ステップ４１５において、サーバは、ノードが階層中に先祖ノード（ascendant node）を有するか否かを判定する。ノードが階層中に先祖ノードを有さない旨の判定に応答して、プロセス４００は、ステップ４３５で復帰する。
【００５１】
一方、ノードが階層中に先祖ノードを有する旨の判定に応答し、判定ステップ４２０において、サーバは、先祖ノードにイベントリスナが登録されたか否かを判定する。先祖ノードにイベントリスナが登録された旨の判定に応答し、ステップ４３０において、イベントリスナは、当該ノードにおけるイベントの発生をクライアントに通知する。一方、先祖ノードにイベントリスナが登録されていない旨の判定に応答し、判定ステップ４２５において、サーバは、先祖ノードが階層のルートノードであるか否かを判定する。先祖ノードが階層のルートノードでない旨の判定に応答して、プロセスの制御はステップ４１５に移る。一方、先祖ノードが階層のルートノードである旨の判定に応答して、サーバは、当該ノードまたは先祖ノードに再帰的イベントリスナが登録されていないことを把握し、プロセス４００は、ステップ４３５で復帰する。
【００５２】
以上のように、再帰的イベントリスナによれば、１つのノードにのみ登録するだけで、複数のノードすなわち再帰的イベントリスナが登録されたノードおよび当該ノードの子孫ノードにおけるイベントの発生を通知するという利益がもたらされる。
【００５３】
動作例
図５は、開示技術の一実施形態に係る、図１に示すようなコーディネーションサービスにおける再帰的イベントリスナの使用の一例を示している。コーディネーションサービス５００は、ユーザデータベース５１０から得られたユーザプロファイルデータを階層データ構造５１５として表すサーバ５０５を具備する。データベース５１０は、多くのユーザのデータ、たとえばソーシャルネットワーキングアプリケーションにおけるユーザのデータを含んでいてもよい。また、データベース５１０は、多くの論理区画すなわちＬＰ１、ＬＰ２から、以下同様にＬＰｎまでを含む。論理区画はそれぞれ、ユーザデータベース５１０からの設定可能なユーザ数のデータを含む。階層データ構造５１５においては、ユーザデータベース５１０をルートノードと考えてもよく、また、ユーザデータベース５１０の論理区画をルートノードの子孫ノードと考えてもよい。
【００５４】
クライアントは、階層データ構造５１５のノードのいずれかに再帰的イベントリスナ、非再帰的イベントリスナ、またはその両者を登録するよう要求してもよい。たとえば、クライアント５２５がルートノードであるユーザデータベース５１０に登録された再帰的イベントリスナを有し、クライアント５３０が子孫ノードＬＰ２に登録された再帰的イベントリスナおよび非再帰的イベントリスナを有し、クライアント５３５がルートノードであるユーザデータベース５１０に登録された非再帰的イベントリスナを有するシナリオを考える。すべてのイベントリスナすなわち再帰的および非再帰的イベントリスナは、階層データ構造５１５で発生している作成、消去、または修正等の様々なイベント種類のいずれかの発生をクライアントに通知可能である。
【００５５】
たとえば、ＬＰｎ＋１５２０等の新たな論理区画の作成が階層データ構造５１５で発生しているものと仮定する。クライアント５２５は、この新たな子孫ノードＬＰｎ＋１５２０の作成の通知を受けることになる。ルートノードであるユーザデータベース５１０および子孫ノードにおけるイベントの発生をクライアント５２５の再帰的イベントリスナが受信するためである。クライアント５３０に関して、当該クライアント５３０により子孫ノードＬＰ２に登録されたイベントリスナが再帰的であるか非再帰的であるかに関わらず、クライアント５３０は、子孫ノード５２０の作成の通知を受けることはない。子孫ノード５２０の作成は、ノードＬＰ２または当該ノードＬＰ２の子孫ノードで発生したイベントではないためである。クライアント５３５に関して、ルートノード５１０に登録された非再帰的イベントリスナは、ノード５１０においてのみ発生しているイベントを受信するため、新たな子孫ノード５２０の作成を把握しない。したがって、クライアント５３５は、階層データ構造における新たな子孫ノード５２０の作成の通知を受けることはない。
【００５６】
サーバ５０５は、再帰的イベントリスナの登録のためのアクセス制御機能を提供可能である。たとえば、ルートノードへの再帰的イベントリスナの登録は、ユーザセットまたはユーザ役割セット、たとえば管理者役割または監督者役割等に制限されていてもよい。また、アクセス制御機能によって、（ｉ）任意のノードへの再帰的イベントリスナの登録、（ｉｉ）特定のイベント種類に対する再帰的イベントリスナの登録、（ｉｉｉ）階層中の特定経路に沿った再帰的イベントリスナの登録等を許可可能なユーザセットまたはユーザ役割セットを指定するようにしてもよい。
【００５７】
さらに、サーバは、再帰的イベントリスナ用のフィルタを提供するようにしてもよい。フィルタは、イベントの種類等を受信するようにイベントリスナを設定可能な階層データ構造中の経路を指定するものであってもよい。たとえば、図２のツリー構造２２０において、ルートノードＡに登録された再帰的イベントリスナにフィルタを適用することにより、経路Ａ−Ｂ−Ｆに沿ったノードにおいてのみ発生しているイベントを受信するようにしてもよい。別の例として、フィルタは、消去の種類のイベントの発生のみが通知されるように指定することも可能である。
【００５８】
一部の実施形態においては、ネットワーク分割、クライアントまたはサーバ障害等の障害によって、クライアントがサーバから切断される可能性がある。サーバは、当該クライアントに関連する再帰的イベントリスナの登録を自動的に取り消し、クライアントは、サーバからのイベント通知の受信を停止することになる。クライアントは、新たなサーバへの再帰的イベントリスナの再登録を試みて、切断中に発生したイベント通知を含め、イベント通知の受信を継続可能である。このように、クライアントは、所与のノードの階層で発生するすべてのイベントを受信するものと仮定できるとともに、クライアント側のアプリケーションにより保持されるノード構造がサーバ側と整合するものと仮定できる。
【００５９】
このメカニズムがなければ、クライアントは、再接続後、再帰的イベントリスナの登録前に、階層全体の読み出しが必要となる場合がある。障害中にノード構造が変化してしまっている場合があるためである。少なくとも一部の実施形態においては、基本データベースで行われたノード階層の各変更（たとえば、作成、修正、消去）に処理番号が付与される。クライアントは、サーバからノードを読み出すたびに、ノードを変更した最新の処理番号も受信する。クライアントは、再接続を試みる場合、処理番号を提供することによって、ノードに再帰的イベントリスナを登録可能である。サーバは、提供された処理番号に対応するイベントの発生以降に発生したすべてのイベントの通知を試みる。
【００６０】
サーバは、ノード階層を移動して、クライアントに送る必要があるイベントを確定する。また、サーバは、イベントの履歴（たとえば、データベースにログとして格納）を参照することによって、消去されたノードの一覧を確定する。消去されたノードは、所与のノードの現在の階層を移動しても確定できないためである。少なくとも一部の実施形態において、クライアントに送信されたイベントの一覧は、付随する処理番号に従ってソートされる。
【００６１】
図６は、開示技術の一実施形態に係る、クライアントとサーバとの間の通信障害に応答して、クライアントにより再帰的イベントリスナを再登録するプロセス６００を示したフローチャートである。プロセス６００は、システム２００等のシステムにおいて実行可能である。判定ステップ６０５において、サーバは、所与の処理番号が所定の閾時刻（threshold time）よりも古いか否かを判定する。少なくとも一部の実施形態において、サーバは、ある所定期間にわたってイベントの履歴を格納する。サーバは、処理が所定の閾時刻よりも古いと判定した場合、ステップ６１０において、再帰的イベントリスナを登録する要求を拒絶する。少なくとも一部の実施形態において、クライアントは、要求から処理番号を省くことにより、登録を再度試みることができる。
【００６２】
一方、サーバは、処理が所定の閾時刻よりも古くないと判定した場合、判定ステップ６１５において、所与のノードの階層が未訪問ノード（unvisited node）すなわち消去されたノードを有するか否かを判定する。未訪問ノードが存在する場合、ステップ６４５において、サーバは、未訪問ノードそれぞれに対する消去イベントをイベントの一覧に追加する。少なくとも一部の実施形態において、サーバは、データベースに格納されたイベントのログ（処理の履歴）を読み出すことによって、消去されたノードを確定するようにしてもよい。一方、サーバは、消去されたノードが存在しないと判定した場合、判定ステップ６２０において、現在のノードが（所与の処理番号に対応する）処理の発生後に作成されたか否かを判定する。
【００６３】
サーバは、現在のノードが処理後に追加されたと判定した場合、ステップ６２５において、ノード作成イベントを一覧に追加して、制御をステップ６４０に受け渡す。一方、サーバは、現在のノードが処理後に追加されたものではないと判定した場合、判定ステップ６３０において、現在のノードが処理後に修正されたか否かを判定する。サーバは、現在のノードが処理後に修正された旨を判定した場合、ステップ６３５において、ノード修正イベントを一覧に追加して、制御をステップ６４０に受け渡す。ステップ６４０において、サーバは、階層中の次の子孫ノードに移動する。少なくとも一部の実施形態において、サーバは、横型探索の順序で階層を移動する。サーバは、所与のノードの階層全体を移動したら、ステップ６５０において、イベントの一覧を付随するイベント処理番号に従ってソートし、ステップ６５５において、イベントの一覧をクライアントに送る。
【００６４】
実装のための装置
図７は、開示技術に係る、様々な動作を実行するとともに、このような動作で生成および使用される、あるいはこのような動作で生成または使用される、様々な情報を格納可能な装置のブロック図である。これらの装置は、本明細書に記載の任意のコンピュータを表すことができる。コンピュータ７００は、コーディネーションサービス、サーバ、クライアント、データベース、ツリー構造等、図１〜図６の例に示したエンティティ、構成要素、またはサービス（および本明細書に記載のその他任意の構成要素）のいずれかを実装可能なハードウェア装置を示すためのものである。コンピュータ７００は、１つまたは複数のプロセッサ７０１と、相互接続７０３に結合されたメモリ７０２とを具備する。図７において、相互接続７０３は、適当なブリッジ、アダプタ、またはコントローラによって接続された任意の１つまたは複数の独立した物理的バス、ポイントツーポイント接続、またはその両者を表す抽象化概念として示されている。したがって、相互接続７０３は、たとえばシステムバス、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスもしくはＰＣＩエクスプレスバス、ハイパートランスポートもしくはＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）バス、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、ＩＩＣ（Ｉ２Ｃ）バス、または「ファイアワイア」とも称するＩＥＥＥ（Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ）規格１３９４バスを含んでいてもよい。
【００６５】
プロセッサ７０１は、コンピュータ７００の中央演算処理装置（ＣＰＵ）であるため、コンピュータ７００の全体的な動作を制御する。特定の実施形態において、プロセッサ７０１は、メモリ７０２に格納されたソフトウェアまたはファームウェアを実行することによってこれを実現する。プロセッサ７０１は、１つまたは複数のプログラム可能な汎用または専用マイクロプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、プログラマブルコントローラ、特定用途向け集積回路（ＡＳＩＣ：Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、プログラマブルロジックデバイス（ＰＬＤ）、トラステッドプラットフォームモジュール（ＴＰＭ）等、またはこのようなデバイスの組み合わせであってもよいし、これらを含んでいてもよい。
【００６６】
メモリ７０２は、コンピュータ７００のメインメモリであるか、またはメインメモリを含む。メモリ７０２は、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、フラッシュメモリ等、またはこのようなデバイスの組み合わせのうち、任意の形態を表す。使用に際して、メモリ７０２は、コードを含んでいてもよい。一実施形態において、コードは、コンピュータバスインタフェースを介して受信した汎用プログラムを認識し、当該汎用プログラムをプロセッサでの実行に備えるように構成された一般的なプログラミングモジュールを含む。別の実施形態において、この一般的なプログラミングモジュールは、ＡＳＩＣ、ＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）、またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）等のハードウェア回路を用いて実装してもよい。
【００６７】
プロセッサ７０１には、相互接続７０３を介して、ネットワークアダプタ７０７、記憶装置７０５、およびＩ／Ｏ装置７０６も接続されている。ネットワークアダプタ７０７は、コンピュータ７００のネットワークを介した遠隔装置との通信を可能とし、たとえばイーサネットアダプタまたはファイバチャンネルアダプタであってもよい。また、ネットワークアダプタ７０７は、コンピュータ７００とそのクラスタ内の他のコンピュータとの通信を可能にするものであってもよい。一部の実施形態において、コンピュータ７００は、２つ以上のネットワークアダプタを用いることにより、クラスタ内外の通信を別個に扱うようにしてもよい。
【００６８】
Ｉ／Ｏ装置７０６としては、たとえばキーボード、マウス等のポインティングデバイス、ディスクドライブ、プリンタ、スキャナ、および表示装置等の他の入力および出力装置、あるいはいずれか一方が挙げられる。表示装置としては、たとえば陰極線管（ＣＲＴ：Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）、液晶ディスプレイ（ＬＣＤ：Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）、またはその他何らかの適用可能な既知または従来の表示装置が挙げられる。
【００６９】
メモリ７０２に格納されたコードは、ソフトウェアおよびファームウェア、あるいはいずれか一方として実装することにより、上記動作を実行するようにプロセッサ７０１をプログラミング可能である。特定の実施形態において、このようなソフトウェアまたはファームウェアは最初、コンピュータ７００を通して（たとえば、ネットワークアダプタ７０７を介して）遠隔システムからダウンロードすることによりコンピュータ７００に提供するようにしてもよい。
【００７０】
本明細書に導入した技術は、たとえばソフトウェアおよびファームウェア、あるいはいずれか一方でプログラムされたプログラム可能な回路（たとえば、１つまたは複数のマイクロプロセッサ）による実装、専用ハードワイヤード（プログラム不可能な）回路における全体実装、またはこれらの形態の組み合わせにおける実装が可能である。専用ハードワイヤード回路は、たとえば１つまたは複数のＡＳＩＣ、ＰＬＤ、ＦＰＧＡ等の形態であってもよい。
【００７１】
本明細書に導入した技術の実装に用いるソフトウェアまたはファームウェアは、マシン可読記憶媒体に格納されていてもよく、また、１つまたは複数の汎用または専用のプログラム可能なマイクロプロセッサにより実行するようにしてもよい。本明細書において使用する用語としての「マシン可読記憶媒体」は、マシンによりアクセス可能な形態の情報を格納可能な任意のメカニズムを含む。
【００７２】
また、マシンは、サーバコンピュータ、クライアントコンピュータ、パーソナルコンピュータ（ＰＣ）、タブレットＰＣ、ラップトップコンピュータ、セットトップボックス（ＳＴＢ）、個人用デジタル補助装置（ＰＤＡ：Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、携帯電話、ｉフォン、ブラックベリー、プロセッサ、電話、ウェブ機器、ネットワークルータ、スイッチもしくはブリッジ、または行う動作を指定する命令セット（シーケンシャルまたはそれ以外）を実行可能な任意のマシンとすることができる。
【００７３】
マシンアクセス可能な記憶媒体または記憶装置７０５としては、たとえば記録可能／記録不可能な媒体（たとえば、ＲＯＭ、ＲＡＭ、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス等）またはそれらの任意の組み合わせが挙げられる。記憶媒体は通常、持続性であってもよいし、持続性デバイスを含んでいてもよい。これに関連して、持続性記憶媒体は、物理的状態が変化し得る有形すなわち明確な物理的形態のデバイスを含んでいてもよい。したがって、「持続性」とは、たとえば状態の変化に関わらず有形性を維持するデバイスを表す。
【００７４】
本明細書において、用語「ロジック」は、たとえば特定のソフトウェアおよびファームウェア、あるいはいずれか一方でプログラムされたプログラム可能な回路、専用ハードワイヤード回路、またはそれらの組み合わせを含むことができる。
【図１】
0006325001.tif 000002
【図２】
0006325001.tif 000003
【図３】
0006325001.tif 000004
【図４】
0006325001.tif 000005
【図５】
0006325001.tif 000006
【図６】
0006325001.tif 000007
【図７】
0006325001.tif 000008