(57)【要約】【課題】様々なデータ取得方法でデータを取得する。【解決手段】分散システムにおいて、複数のノードの各々は、アプリケーションから、データＩＤと、そのデータＩＤに対応するデータの取得処理においてエラーが発生した場合の対応方法を表すエラー処理方法とを含むデータの取得コマンドを受けると、その取得コマンドに含まれるデータＩＤに対応する管理情報を管理装置から取得し、その取得した管理情報に含まれるデータ取得方法に基づき、データＩＤに対応するデータの取得処理を実行し、その取得処理においてエラーが発生した場合、取得コマンドに含まれるエラー処理方法に基づいてエラー処理を実行し、取得処理又はエラー処理によってデータＩＤに対応するデータを取得した場合、その取得したデータをアプリケーションに返す。【選択図】図３
2016045807.tif 000002
【特許請求の範囲】
【請求項１】
管理装置及び複数のノードによって構成される分散システムであって、
前記管理装置は、データを識別するためのデータ識別子と、そのデータ識別子に対応するデータのデータ取得方法とを含む、管理情報を有し、
前記ノードは、
アプリケーションプログラムから、データ識別子と、そのデータ識別子に対応するデータの取得処理においてエラーが発生した場合の対応方法を表すエラー処理方法とを含む、データの取得を要求する取得コマンドを受け取ると、
前記取得コマンドに含まれるデータ識別子に関連する管理情報を前記管理装置から取得し、
その取得した管理情報に含まれるデータ取得方法に基づき、前記データ識別子に対応するデータの取得処理を実行し、
その取得処理においてエラーが発生した場合、前記取得コマンドに含まれる前記エラー処理方法に基づいてエラー処理を実行し、
前記取得処理又は前記エラー処理によって前記データ識別子に対応するデータを取得した場合、その取得したデータを前記アプリケーションプログラムに返す
分散システム。
【請求項２】
前記データ取得方法には、Ｒｅｑｕｅｓｔ／Ｒｅｐｌｙ通信方法、Ｐｕｂｌｉｓｈ／Ｓｕｂｓｃｒｉｂｅ通信方法、又は共有メモリ参照方法が指定されており、
前記Ｒｅｑｕｅｓｔ／Ｒｅｐｌｙ通信方法とは、前記管理情報の指定する他ノードに対してデータの取得要求メッセージを送信し、当該他ノードからの応答を待機する方法であり、
前記Ｐｕｂｌｉｓｈ／Ｓｕｂｓｃｒｉｂｅ通信方法とは、他ノードから発行されるメッセージの内、前記管理情報の指定するトランザクション識別子を含むメッセージの受信を待機する方法であり、
前記共有メモリ参照方法とは、複数のノードで共有するメモリ空間における前記管理情報の指定するメモリアドレスからデータを取得する方法である
請求項１に記載の分散システム。
【請求項３】
前記エラー処理方法は、データの再取得に関する設定、及びデータの取得待機に関する設定を有する
請求項２に記載の分散システム。
【請求項４】
前記ノードは、
前記データ取得方法に前記Ｐｕｂｌｉｓｈ／Ｓｕｂｓｃｒｉｂｅ通信方法が指定されており、且つ、前記エラー処理方法がデータの取得待機を行う設定である場合に、所定時間内に前記トランザクション識別子を含むメッセージを受信できなかった旨のエラーが発生したならば、当該メッセージを受信するまで待機する
請求項３に記載の分散システム。
【請求項５】
前記ノードは、
前記データ取得方法に前記共有メモリ参照方法が指定されており、且つ、前記エラー処理方法がデータの取得待機を行う設定である場合に、前記共有メモリのメモリアドレスに格納されているデータが未更新である旨のエラーが発生したならば、当該データが更新されるまで待機する
請求項３に記載の分散システム。
【請求項６】
前記エラー処理方法は、さらに、データの更新時刻に関する設定を有し、
前記ノードは、
前記データ取得方法に前記共有メモリ参照方法が指定されており、且つ、前記エラー処理方法がデータの更新時刻を考慮しない旨の設定である場合に、前記共有メモリのメモリアドレスに格納されているデータが未更新である旨のエラーが発生したならば、前記メモリアドレスに格納されているデータを前記アプリケーションに返す
請求項３に記載の分散システム。
【請求項７】
前記ノードは、
前記データ取得方法にＲｅｑｕｅｓｔ／Ｒｅｐｌｙ通信方法が指定されており、且つ、前記エラー処理方法がデータの再取得を行う設定である場合に、所定時間内に前記他ノードからデータ要求のメッセージに対する応答を受けられなかった旨のエラーが発生したならば、前記他ノードに対してデータ要求のメッセージを再送信する
請求項３に記載の分散システム。
【請求項８】
前記ノードは、
前記データ識別子に対応するデータを取得できなかった場合、そのデータの取得処理に適用されたデータ取得方法と、そのデータ取得方法に対して発生したエラーの情報とを含む、エラーメッセージを前記アプリケーションに返す
請求項１乃至７の何れか１項に記載の分散システム。
【請求項９】
前記ノードは、管理情報の登録要求メッセージを前記管理装置へ送信し、前記管理情報の登録要求メッセージには、自ノードの有するデータに対応するデータ識別子が含まれており、
前記管理装置は、前記ノードから前記管理情報の登録要求メッセージを受信すると、前記管理情報の登録要求メッセージに対する管理情報の登録応答メッセージを前記ノードへ返し、前記管理情報の登録応答メッセージには、前記ノードから送信されたデータ識別子に関する管理情報に対応する管理情報識別子が含まれている
請求項１乃至７の何れか１項に記載の分散システム。
【請求項１０】
前記ノードは、前記管理装置と通信可能となったことを契機として、前記管理情報の登録要求メッセージを前記管理装置へ送信する
請求項９に記載の分散システム。
【請求項１１】
分散システムを構成する複数のノードの各々がデータを取得する方法であって、
アプリケーションプログラムから、データ識別子と、そのデータ識別子に対応するデータの取得処理においてエラーが発生した場合の対応方法を表すエラー処理方法とを含む、データの取得を要求する取得コマンドを受け取ると、
前記取得コマンドに含まれるデータ識別子に関連する管理情報を所定の管理装置から取得し、前記管理情報には、データ識別子と、そのデータ識別子に対応するデータのデータ取得方法とが含まれており、
その取得した管理情報に含まれるデータ取得方法に基づき、前記データ識別子に対応するデータの取得処理を実行し、
その取得処理においてエラーが発生した場合、前記取得コマンドに含まれる前記エラー処理方法に基づいてエラー処理を実行し、
前記取得処理又は前記エラー処理によって前記データ識別子に対応するデータを取得した場合、その取得したデータを前記アプリケーションプログラムに返す
データ取得方法。
【請求項１２】
分散システムを構成する複数のノードの各々で実行されるコンピュータプログラムであって、前記ノードで実行されると、
アプリケーションプログラムから、データ識別子と、そのデータ識別子に対応するデータの取得処理においてエラーが発生した場合の対応方法を表すエラー処理方法とを含む、データの取得を要求する取得コマンドを受け取ると、
前記取得コマンドに含まれるデータ識別子に関連する管理情報を所定の管理装置から取得し、前記管理情報には、データ識別子と、そのデータ識別子に対応するデータのデータ取得方法とが含まれており、
その取得した管理情報に含まれるデータ取得方法に基づき、前記データ識別子に対応するデータの取得処理を実行し、
その取得処理においてエラーが発生した場合、前記取得コマンドに含まれる前記エラー処理方法に基づいてエラー処理を実行し、
前記取得処理又は前記エラー処理によって前記データ識別子に対応するデータを取得した場合、その取得したデータを前記アプリケーションプログラムに返す
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散システム、データ取得方法及びコンピュータプログラムに関する。
【背景技術】
【０００２】
特許文献１には、ネットワークに接続される制御機器がサポートするプロトコル名、プロトコルのコマンド情報、コマンド種別を含むプロファイル情報を格納したコマンド変換記憶手段と、情報処理機器からターゲットとなる制御機器宛ての送信データを受信した際に、コマンド変換記憶手段にアクセスし、その送信データに格納されたコマンドがそのターゲットとなる制御機器が理解できるコマンドか否かを判断する判断手段と、その判断手段の判断結果が理解できる場合には受信したコマンドを用いた送信データをターゲットとなる制御機器に送信し、理解できない場合にはプロファイル情報に基づき理解できるコマンドに変換して生成した送信データをターゲットとなる制御機器に送信する手段を備える情報変換サーバが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−２６０８９３号公報
【特許文献２】特許第５５６８０６７号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、複数の装置（「ノード」という）が通信ネットワークを介して接続された分散システムにおいて、或るノードが他ノードの保持するデータを取得する方法には、例えば、Ｒｅｑｕｅｓｔ／Ｒｅｐｌｙ（「Ｒｅｑ／Ｒｅｐ」という）通信によってデータを取得する方法、共有メモリからデータを取得する方法、又はＰｕｂｌｉｓｈ／Ｓｕｂｓｃｒｉｂｅ（「Ｐｕｂ／Ｓｕｂ」という）通信に係る同報通知を受信することによりデータを取得する方法などがある。この場合、或るノードは、これらの中から適切なデータ取得方法を選択して他ノードからデータを取得する必要がある。
【０００５】
しかし、これらのデータ取得方法は、それぞれ使用されるパラメータ及びエラー発生時の処理などが異なり得る。例えば、Ｒｅｑ／Ｒｅｐ通信によるデータ取得方法と、Ｐｕｂ／Ｓｕｂ通信によるデータ取得方法と、共有メモリによるデータ取得方法とでは、エラー処理方法などが異なり得る。
【０００６】
そこで本発明の目的は、データ取得方法の違いによって生じ得るエラー処理方法の違いなどを意識することなくアプリケーションプログラムがデータを取得できるようにした分散システム、データ取得方法及びコンピュータプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
本実施形態に係る分散システムは、管理装置及び複数のノードによって構成される。
管理装置は、データを識別するためのデータ識別子と、そのデータ識別子に対応するデータのデータ取得方法とを含む、管理情報を有する。
ノードは、
アプリケーションプログラムから、データ識別子と、そのデータ識別子に対応するデータの取得処理においてエラーが発生した場合の対応方法を表すエラー処理方法とを含む、データの取得を要求する取得コマンドを受け取ると、
取得コマンドに含まれるデータ識別子に関連する管理情報を管理装置から取得し、
その取得した管理情報に含まれるデータ取得方法に基づき、データ識別子に対応するデータの取得処理を実行し、
その取得処理においてエラーが発生した場合、取得コマンドに含まれるエラー処理方法に基づいてエラー処理を実行し、
取得処理又はエラー処理によってデータ識別子に対応するデータを取得した場合、その取得したデータをアプリケーションプログラムに返す。
【発明の効果】
【０００８】
本発明によれば、アプリケーションプログラムが、データ取得方法の違いによって生じ得るエラー処理内容の違いなどを詳細に指示することなく、データを取得することができる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態に係る分散システムの構成例を示す。
【図２】ノードの構成例を示す。
【図３】アクセスミドルウェアの機能構成例を示す。
【図４】管理装置の構成例を示す。
【図５】管理アプリケーションの機能構成例を示す。
【図６】プロパティ情報の構成例を示す。
【図７】管理情報テーブルの構成例を示す。
【図８】リンクテーブルの構成例を示す。
【図９】キャッシュテーブルの構成例を示す。
【図１０】更新情報テーブルの構成例を示す。
【図１１】取得コマンドの構成例を示す。
【図１２】取得コマンド結果の構成例を示す。
【図１３】結果コードの例を示す。
【図１４】クエリコマンドの構成例を示す。
【図１５】クエリコマンド結果の構成例を示す。
【図１６】管理情報の登録要求メッセージの構成例を示す。
【図１７】管理情報の登録応答メッセージの構成例を示す。
【図１８】管理情報の取得要求メッセージの構成例を示す。
【図１９】管理情報の取得応答メッセージの構成例を示す。
【図２０】データの取得要求メッセージの構成例を示す。
【図２１】データの取得応答メッセージの構成例を示す。
【図２２】Ｐｕｂ／Ｓｕｂメッセージの構成例を示す。
【図２３】管理情報の削除要求メッセージの構成例を示す。
【図２４】管理情報の削除応答メッセージの構成例を示す。
【図２５】ノードが管理装置に管理情報の登録を要求する処理の例を表すシーケンスチャートである。
【図２６】管理装置における管理情報の登録処理の例を表すフローチャートである。
【図２７】ノードがノードからデータを取得する処理の例を表すシーケンスチャートである。
【図２８】アクセスミドルウェアにおける管理情報の取得処理の例を表すフローチャートである。
【図２９】管理情報の取得要求メッセージを受けた管理装置の処理の例を表すフローチャートである。
【図３０】ノードにおけるデータ取得処理の例を表すフローチャートである。
【図３１】要求側のノードにおけるＲｅｑ／Ｒｅｐ通信によるデータ取得処理の例を表すフローチャートである。
【図３２】応答側のノードにおけるＲｅｑ／Ｒｅｐ通信によるデータ取得処理の例を表すフローチャートである。
【図３３】ノードにおける共有メモリ参照によるデータ取得処理の例を表すフローチャートである。
【図３４】ノードにおけるＰｕｂ／Ｓｕｂ通信によるデータ取得処理の例を表すフローチャートである。
【図３５】ノードが管理装置に対して管理情報の削除要求を行う処理の例を表すシーケンスチャートである。
【図３６】管理情報の削除要求メッセージを受信した管理装置の削除処理を表すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、本実施形態に係る分散システムを説明する。以下の説明では、「ｘｘｘテーブル」又は「ｘｘｘリスト」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ｘｘｘテーブル」又は「ｘｘｘリスト」を「ｘｘｘ情報」と呼ぶことができる。
【００１１】
また、以下の説明において、プログラムは、プロセッサ（例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び通信インターフェイスデバイスのうちの少なくとも１つを用いながら行うため、処理の主語が、プロセッサ、そのプロセッサを有する装置とされてもよい。プロセッサが行う処理の一部又は全部が、ハードウェア回路で行われてもよい。コンピュータプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア（例えば可搬型の記憶メディア）であってもよい。
【００１２】
また、以下の説明では、同種の要素を区別して説明する場合には、「ノード１０２ａ」、「ノード１０２ｂ」のように、参照符号を使用し、同種の要素を区別しないで説明する場合には、「ノード１０２」のように参照符号のうちの共通番号のみを使用することがある。
【００１３】
図１は、一実施形態に係る分散システム１の構成例を示す。
【００１４】
分散システム１は、計算機の一種である複数のノード１０２と、計算機の一種である管理装置１０３とを有する。各ノード１０２及び管理装置１０３は、通信ネットワーク１０１を通じて互いにメッセージ（データ）を送受信することができる。ノード１０２及び管理装置１０３の数は、幾つであってもよい。
【００１５】
通信ネットワーク１０１に接続されている各ノード１０２は、管理装置１０３へアクセスするための情報（例えば、管理装置１０３のＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスなど）を有してよい。通信ネットワーク１０１に接続されている所定のノード１０２及び管理装置１０３は、Ｐｕｂ／Ｓｕｂ通信を利用できてよい。Ｐｕｂ／Ｓｕｂ通信とは、或るノード１０２がメッセージを同報通知し、そのメッセージを受信した他ノード１０２は、そのメッセージに自分が受信待ちしていたトランザクションＩＤ（Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）が含まれているならば、そのメッセージを取得する（受け入れる）という通信方法である。
【００１６】
図２は、ノード１０２の構成例を示す。
【００１７】
ノード１０２は、例えば、コントローラ（制御装置）、ワークステーション又はパーソナルコンピュータ等である。ノード１０２は、ハードウェア２４０を備える。ハードウェア２４０は、記憶部２５０と、処理部２４１と、通信Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２４２と、を備える。
【００１８】
記憶部２５０には、様々なデータが格納される。記憶部２５０は、例えば、揮発性メモリ、不揮発性メモリ又はハードディスク装置等で構成される。
【００１９】
処理部２４１は、コンピュータプログラムを実行し、ノード１０２の有する様々な機能を実現する。処理部２４１は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等で構成される。
【００２０】
通信Ｉ／Ｆ２４２は、ノード１０２を通信ネットワーク１０１に接続するためのＩ／Ｆである。通信Ｉ／Ｆ２４２は、例えば、物理層、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）層、ＩＰ層及びＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）層などのプロトコルを制御する回路を有する。
【００２１】
ノード１０２のハードウェア２４０では、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）２３０と、アクセスミドルウェア２２０と、用途ごとに処理内容が異なり得る１又は２以上のアプリケーション２１０と、が実行される。
【００２２】
記憶部２５０には、データがリード及びライトされる記憶領域である内部メモリ２５１が構成される。そして、内部メモリ２５１内には、共有メモリ２５３が構成されてよい。内部メモリ２５１内の共有メモリ２５３の位置は、メモリアドレスによって特定されてよい。
【００２３】
共有メモリ２５３に格納されたデータは、複数のノード１０２からアクセス可能であってよい。例えば、或るノード１０２が、通信ネットワーク１０１を通じて同報通知されたデータを共有メモリ２５３に格納すると、他ノード１０２もその共有メモリ２５３に格納されたデータにアクセスできてよい。各ノード１０２は、メモリアドレスを指定して共有メモリ２５３内のデータにアクセスできてよい。共有メモリ２５３は複数存在してもよい。この場合、各ノード１０２は、それぞれの共有メモリ２５３に付与された共有メモリＩＤを用いて、アクセス先の共有メモリ２５３を指定してもよい。共有メモリ２５３内の各データは、そのデータの更新時刻を併せて有してよい。
【００２４】
図３は、アクセスミドルウェア２２０の機能構成の例を示す。
【００２５】
アプリケーション２１０は、コンピュータプログラムによって構成されており、用途に応じて異なる機能を有してよい。ノード１０２は、複数のアプリケーション２１０を実行してもよい。アプリケーション２１０は、アクセスミドルウェア２２０を通じてデータを取得してよい。また、アプリケーション２１０は、アクセスミドルウェア２２０を通して管理装置１０３から管理情報を取得してよい。
【００２６】
ノード１０２のアクセスミドルウェア２２０は、自ノード１０２が保持するデータに係る管理情報を管理装置１０３に登録する処理機能を有する。管理情報は、或るノード１０２が、他ノード１０２の保持するデータにアクセスするために必要な情報を有する。ノード１０２は、管理装置１０３から管理情報を取得し、その管理情報に基づいて他ノード１０２の保持するデータにアクセスする。すなわち、アクセスミドルウェア２２０は、アプリケーション２１０に代わって、他ノード１０２の保持するデータへアクセスする。これにより、アプリケーション２１０は、他ノード１０２の保持するデータにアクセスする方法を意識することなく、目的のデータを取得することができる。
【００２７】
管理情報は、取得対象のデータに対応するデータＩＤ、そのデータＩＤに対応するデータにアクセスするために必要な情報であるデータ取得方法、及びそのデータＩＤに対応するデータが存在する位置を表すデータ位置などの情報を有する。管理情報の詳細については後述する。
【００２８】
データの種類と、データ取得方法とは対応関係を有してもよい。例えば、他ノード１０２の内部メモリ２５１に格納されているデータと、Ｒｅｑ／Ｒｅｐ通信によるデータ取得方法とは対応関係を有してよい。例えば、共有メモリ２５３に格納されているデータと、共有メモリ参照によるデータ取得方法とは対応関係を有してよい。例えば、他ノード１０２が同報通知（Ｐｕｂｌｉｓｈ）するメッセージに含まれるデータと、Ｐｕｂ／Ｓｕｂ通信によるデータ取得方法とは対応関係を有してよい。
【００２９】
アクセスミドルウェア２２０は、機能として、コマンド受付部２２１と、管理情報登録部２２２と、管理情報取得部２２３と、データ取得要求部２２４と、データ取得応答部２２５と、メッセージ送信部２２６と、メッセージ受信部２２７と、管理情報操作受付部２２８と、を有する。
【００３０】
アクセスミドルウェア２２０は、記憶部２５０の内部メモリ２５１に、管理情報テーブル３４２と、プロパティ情報４１０と、キャッシュテーブル２５２と、更新情報テーブル２５４と、を構成する。
【００３１】
管理情報３４２は、自ノード１０２が保持する各データにアクセスするために必要な情報を有する。管理情報３４２の詳細については後述する（図７参照）。
【００３２】
プロパティ情報４１０は、自ノード１０２が保持するデータの属性に関する情報を有する。１つの管理情報３４２に１つのプロパティ情報４１０が対応付けられてもよい。プロパティ情報４１０の詳細については後述する（図６参照）。
【００３３】
キャッシュテーブル２５２には、管理装置１０３から取得した管理情報が一時的に保持される。キャッシュテーブル２５２には、最後に取得した管理情報が優先的に保持されてもよい。キャッシュテーブル２５２の詳細については後述する（図９参照）。
【００３４】
更新情報テーブル２５４は、共有メモリ２５３のデータに関する更新情報を管理するためのテーブルである。データ取得要求部２２４は、共有メモリ２５３からデータを取得した際、その取得対象のデータ位置と、そのデータのサイズと、そのデータに付加されているタイムスタンプとを含む更新情報を生成し、その更新情報を更新情報テーブル２５４に登録してよい。これにより、データ取得要求部２２４は、次回以降、更新情報テーブル２５４を参照することにより、共有メモリ２５３から取得するデータが、前回取得したデータに対して更新されているか否かを判断することができる。例えば、データ取得要求部２２４は、取得対象のデータの更新時刻と、更新情報テーブル２５４においてその取得対象とデータ位置及びサイズの同じデータのタイムスタンプとが一致する場合、データが更新されていないと判断することができる。そして、データ取得要求部２２４は、更新されていないデータは共有メモリ２５３から取得しないという設定であってもよい。
【００３５】
メッセージ送信部２２６は、各部２２２、２２３、２２４、２２５から渡された情報及び指定されたフォーマットに従ってメッセージを生成し、そのメッセージを指定された宛先へ送信する。各部から渡される情報及びフォーマットなどは、処理毎に定められていてよい。詳細については後述する。
【００３６】
メッセージ受信部２２７は、受信したメッセージを解析し、そのメッセージに含まれるメッセージ種別などを抽出する。そして、メッセージ受信部２２７は、そのメッセージ種別に基づき、各部２２２、２２３、２２４、２２５へ必要な情報を渡す。メッセージ受信部２２７は、データ取得要求部２２４からトランザクションＩＤを受け取った場合、そのトランザクションＩＤを有するＰｕｂ／Ｓｕｂメッセージ（同報通知）の受信を監視する。そして、メッセージ受信部２２７は、そのトランザクションＩＤを有するＰｕｂ／Ｓｕｂメッセージの受信を検知すると、そのメッセージに含まれるデータなどをデータ取得要求部２２４へ渡す。
【００３７】
管理情報操作受付部２２８は、アプリケーション２１０から管理情報の登録指示又は削除指示などを受けると、その指示を管理情報登録部２２２へ渡す。又、管理情報操作受付部２２８は、ノード１０２の起動時に、自動的に管理情報４２６の登録指示を管理情報登録部２２２へ渡してもよい。分散システム１に新たに参加したノード１０２の管理情報４２６を、自動的に管理装置１０３に登録するためである。
【００３８】
管理情報登録部２２２は、管理装置１０３に対して管理情報の登録又は削除などを要求する。例えば、管理情報登録部２２２は、管理情報操作受付部２２８から登録指示を受けた場合、プロパティ情報４１０及び管理情報を含む管理情報の登録要求メッセージを生成し、メッセージ送信部２２６に対してその管理情報の登録要求メッセージを管理装置１０３へ送信するよう指示する。そして、管理情報登録部２２２は、管理情報の登録応答メッセージを受信したメッセージ受信部２２７から、その送信した管理情報に対応する管理情報ＩＤを受け取る。管理情報ＩＤは、管理装置１０３内の管理情報を識別するための情報である。例えば、管理情報登録部２２２は、管理情報操作受付部２２８から削除指示を受けた場合、管理情報ＩＤを含む管理情報の削除要求メッセージを生成し、メッセージ送信部２２６に対してその管理情報の削除要求メッセージを管理装置１０３へ送信するよう指示する。
【００３９】
コマンド受付部２２１は、アプリケーション２１０とアクセスミドルウェア２２０とを結ぶインタフェースの役割を果たす。例えば、コマンド受付部２２１は、アプリケーション２１０からデータの取得コマンドを受信し、その受信した取得コマンドの中から必要な情報を抽出し、データ取得要求部２２４へ渡す。コマンド受付部２２１は、データ取得要求部２２４からデータの取得コマンド結果を受け、その受けた取得コマンド結果をアプリケーション２１０へ渡す。
【００４０】
データ取得要求部２２４は、データ取得に関する処理を行う。データ取得要求部２２４は、コマンド受付部２２１から、取得対象のデータＩＤを含む取得コマンドを受け取る。そして、データ取得要求部２２４は、管理情報取得部２２３に対して、データＩＤに関連する管理情報の取得を要求する。そして、データ取得要求部２２４は、管理情報に含まれるデータ取得方法及びデータ位置に基づき、データの取得方法を決定する。
【００４１】
例えば、データ取得方法が「Ｒｅｑ／Ｒｅｐ通信」の場合、データ取得要求部２２４は、データ位置などの情報をメッセージ送信部２２６へ渡し、メッセージ送信部２２６に対してデータの取得要求メッセージをデータ位置の示す他ノード１０２へ送信するよう指示する。そして、メッセージ受信部２２６が他ノード１０２からデータの取得応答メッセージを受信した場合、データ取得要求部２２４は、メッセージ受信部２２７からデータの取得応答メッセージに含まれるデータ及び実行結果などを受け取る。
【００４２】
例えば、データ取得方法が「共有メモリ参照」の場合、データ取得要求部２２４は、データ位置の示す共有メモリのメモリアドレスから、データ及び実行結果などを取得する。
【００４３】
例えば、データ取得方法が「Ｐｕｂ／Ｓｕｂ通信」の場合、データ取得要求部２２４は、メッセージ受信部２２７に対して、データ位置の示すトランザクションＩＤを有するＰｕｂ／Ｓｕｂメッセージの受信を監視するよう指示する。メッセージ受信部２２７は、そのトランザクションＩＤを有するメッセージを受信した場合、そのメッセージに含まれるデータ及びその実行結果などをデータ取得要求部２２４へ渡す。データ取得要求部２２４は、その取得したデータなどを、コマンド受付部２２１に渡す。
【００４４】
管理情報取得部２２３は、管理装置１０３から管理情報を取得する。管理情報取得部２２３は、メッセージ送信部２２６に対して、データ取得要求部２２４から受け取ったデータＩＤとノード１０２のバージョンとを渡し、管理情報の取得要求メッセージの送信を指示する。そして、管理情報取得部２２３は、メッセージ受信部２２７から、管理情報の取得応答メッセージ７１３に含まれる管理情報を受け取る。そして、管理情報取得部２２３は、その管理情報を、データ取得要求部２２４に渡す。管理情報取得部２２３は、その管理情報４２６を、キャッシュテーブル２５２に格納してもよい。
【００４５】
なお、管理情報取得部２２３は、データＩＤに対応する管理情報がキャッシュテーブル２５２に存在する場合、キャッシュテーブル２５２からその管理情報を取得してよい。つまり、この場合、管理情報取得部２２３は、通信ネットワーク１０１を通じて管理装置１０３から管理情報を取得する必要は無い。
【００４６】
データ取得応答部２２５は、自ノード１０２が、他ノードからデータの取得要求メッセージを受信した場合の応答に関する処理を行う。データ取得応答部２２５は、メッセージ受信部２２７からデータ位置を受け取ると、そのデータ位置に基づき、内部メモリ１０３からデータを取得する。そして、データ取得応答部２２５は、メッセージ送信部２２６に対して、そのデータを含むデータの取得応答メッセージを、データの取得要求メッセージの送信元（他ノード）へ返信するよう指示する。
【００４７】
図４は、管理装置１０３の構成例を示す。
【００４８】
管理装置１０３は、ハードウェア２６０を備える。ハードウェア２６０は、記憶部２７０と、処理部２６１と、通信Ｉ／Ｆ２６２とを備える。記憶部２７０、処理部２６１及び通信Ｉ／Ｆ２６２については、図２に示したノード１０２の記憶部２５０、処理部２４１及び通信Ｉ／Ｆ２４２と同様であるので、説明を省略する。管理装置１０３のハードウェア２６０では、ＯＳ２３１と、管理アプリケーション３１０と、が実行されてよい。
【００４９】
図５は、管理アプリケーション３１０の機能構成の例を示す。
【００５０】
記憶部２７０には、リンクテーブル３４１と、複数の管理情報３４２とが格納される。管理情報３４２は、各ノード１０２から送信されたものである。管理情報３４２の詳細については後述する（図７参照）。リンクテーブル３４１は、管理装置１０３の管理する管理情報３４２にアクセスするために必要な情報を有する。リンクテーブル３４１の詳細については後述する（図８参照）。
【００５１】
管理アプリケーション３１０は、機能として、登録応答部３１１と、取得応答部３１２と、メッセージ送信部２２６と、メッセージ受信部３１４とを有する。
【００５２】
メッセージ受信部３１４は、受信したメッセージを解析し、そのメッセージに含まれるメッセージ種別などを抽出する。そして、メッセージ受信部３１４は、そのメッセージ種別に基づき、各部３１１、３１２へ必要な情報に渡す。
【００５３】
登録応答部３１１は、ノード１０２から受信したプロパティ情報および管理情報の登録及び削除などを行う。登録応答部３１１は、メッセージ受信部３１４からプロパティ情報及び管理情報を受け取ると、それらを記憶部２７０に格納する。また、登録応答部３１１は、その格納された管理情報３４２にアクセスできるようにリンクテーブル３４１を更新する。そして、登録応答部３１１は、その格納された管理情報３４２に対応する管理情報ＩＤを発行し、管理情報の送信元のノード１０２に対して、その管理情報ＩＤを含む登録応答メッセージ５１２を送信する。
【００５４】
登録応答部３１１は、メッセージ受信部３１４から、管理情報の削除要求メッセージから抽出された管理情報ＩＤを受け取る。そして、登録応答部３１１は、リンクテーブル３４１からその管理情報ＩＤを有するリンク情報（レコ−ド）を削除すると共に、そのリンク情報（レコード）のリンク先の管理情報３４２を削除する。そして、登録応答部３１１は、削除要求メッセージの送信元のノード１０２に対して、管理情報の削除応答メッセージを返す。
【００５５】
取得応答部３１２は、管理情報の取得要求メッセージに対応する管理情報の取得応答メッセージを、その取得要求メッセージの送信元のノード１０２に返す。例えば、取得応答部３１２は、メッセージ受信部３１４から、管理情報の取得要求メッセージ７１２から抽出されたデータＩＤ及びバージョンを受け取ると、リンクテーブル３４１から、データＩＤ及びバージョンに対応するレコードを抽出する。そして、取得応答部３１２は、その抽出したレコードのリンク先から管理情報を取得する。そして、取得応答部３１２は、メッセージ送信部２２６に対して、その取得した管理情報を含む管理情報の取得応答メッセージを、取得要求メッセージの送信元のノード１０２へ返すよう指示する。
【００５６】
図６は、プロパティ情報４１０の構成例を示す。
【００５７】
プロパティ情報４１０は、管理情報テーブル３４２（図７参照）の付加情報の一種である。１つの管理情報テーブル３４２には、１つのプロパティ情報４１０が対応付けられてよい。プロパティ情報４１０は、管理情報テーブル３４２を生成したノード１０２に関する情報を含む。プロパティ情報４１０は、ノード名４１１と、バージョン４１２と、互換バージョン４１３とを情報として有してよい。
【００５８】
ノード名４１１は、プロパティ情報４１０が対応付けられている管理情報テーブル３４２を生成したノード１０２の名称を表す。バージョン４１２は、当該管理情報テーブル３４２を生成したときのノード１０２のバージョンを表す。互換バージョン４１３は、当該管理情報テーブル３４２を生成したときのノード１０２のバージョン４１２に対して下位互換が可能なもっとも古いバージョンを表す。
【００５９】
図７は、管理情報テーブル３４２の構成例を示す。
【００６０】
管理情報テーブル３４２は、１又は２以上の管理情報をレコードとして有する。管理情報テーブル３４２は、ノード１０２において管理されている各データにアクセスするために必要な管理情報を有する。各ノード１０２の管理情報テーブル３４２は、管理装置１０３に集約されてよい。管理情報テーブル３４２は、フィールド値として、データＩＤ４２１と、データ取得方法４２２と、データ位置４２３と、データ型４２４と、サイズ４２５とを有してよい。
【００６１】
データＩＤ４２１は、データを識別するための情報（例えば、ファイル名など）である。ノード１０２内において、１つのデータには１つのデータＩＤが対応付けられる。データ取得方法４２２は、データＩＤ４２１に対応するデータを取得するための方法を表す。データ位置４２３は、データ取得方法４２２の示す方法によってデータＩＤ４２１に対応するデータを取得する際に必要となる情報（パラメータ）を表す。データ型４２４は、データＩＤ４２１に対応するデータの型を表す。サイズ４２５は、データＩＤ４２１に対応するデータのサイズを表す。
【００６２】
例えば、図７においてレコード４２０ａの管理情報は、データＩＤ「Ｔｅｍｐ」（４２１）に対応するデータを取得するためには、「Ｒｅｑ／Ｒｅｐ通信」（４２２）によってＩＰアドレス「１９２．１６８．０．１５」（４２３）のノード１０２にアクセスし、そのノード１０２の有するメモリのメモリアドレス「０ｘ０００１」（４２３）から、データ型「ｄｏｕｂｌｅ」（４２４）で「４ｂｙｔｅ」（４２５）のデータを取得する必要があることを表す。
【００６３】
レコード４２０ｃの管理情報は、データＩＤ「Ｐｒｅｓｓ」（４２１）に対応するデータを取得するためには、「共有メモリ参照」によって、共有メモリＩＤ「８」に対応する共有メモリのメモリアドレス「０ｘ００１０」から、データ型「ｄｏｕｂｌｅ」で「４ｂｙｔｅ」のデータを取得する必要があることを表す。
【００６４】
レコード４２０ｄの管理情報は、データＩＤ「Ａｌｅｒｔ」（４２１）に対応するデータを取得するためには、「Ｐｕｂ／Ｓｕｂ通信」によって、トランザクションＩＤ「１２５」に対応するＰｕｂ／Ｓｕｂメッセージの受信を監視し、そのＰｕｂ／Ｓｕｂメッセージを受信した場合、そのＰｕｂ／Ｓｕｂメッセージからデータ型「ｃｈａｒ」で「６０ｂｙｔｅ」のデータを抽出する必要があることを表す。
【００６５】
図８は、リンクテーブル３４１の構成例を示す。
【００６６】
リンクテーブル３４１は、それぞれの管理情報にアクセスするために必要なリンク情報をレコードとして有する。リンクテーブル３４１は、管理装置１０３が管理する。
【００６７】
リンクテーブル３４１は、フィールド値として、管理情報ＩＤ１７０６と、ノード名４１１と、バージョン４１２と、互換バージョン４１３と、リンク先４３１とを有する。
【００６８】
管理情報ＩＤ１７０６は、管理情報を識別するための情報である。１つの管理情報に１つの管理情報ＩＤが付与されてよい。管理アプリケーション３１０は、管理情報を受信して管理する際に、その管理情報に対応する管理情報ＩＤ１７０６を発行してよい。ノード名４１１、バージョン４１２、及び互換バージョン４１３は、図６のプロパティ情報４１０で説明したとおりである。
【００６９】
リンク先４３１は、管理情報ＩＤ１７０６に対応する管理情報が格納されている位置を表す。リンク先４３１は、記憶部２５０における管理情報の格納先のメモリアドレスであってもよい。管理アプリケーション３１０は、リンクテーブル３４１を参照することにより、所望の管理情報にアクセスすることができる。
【００７０】
図９は、キャッシュテーブル２５２の構成例を示す。
【００７１】
キャッシュテーブル２５２には、ノード１０２のアクセスミドルウェア２２０が管理装置１０３から取得した管理情報が一時的に保持される。
【００７２】
アクセスミドルウェア２２０は、データＩＤ４２１に対応する管理情報を管理装置１０３から取得する際、キャッシュテーブル２５２に取得対象の管理情報が格納されているならば、キャッシュテーブル２５１からその管理情報を取得する。これにより、アクセスミドルウェア２２０は、管理装置１０３から通信ネットワーク１０１を通じて管理情報を取得する場合と比較して、短時間で管理情報を取得することができる。
【００７３】
キャッシュテーブル２５２は、フィールド値として、登録順４４１と、データＩＤ４２１と、データ取得方法４２２と、データ位置４２３と、データ型４２４と、サイズ４２５とを有する。
【００７４】
登録順４４１は、当該管理情報がキャッシュテーブル２５２に登録された順番を表す。例えば、登録順４４１が小さいほど、古い管理情報としてよい。また、アクセスされた管理情報の登録順４４１は、新しいものに更新されてもよい。
【００７５】
データＩＤ４２１、データ取得方法４２２、データ位置４２３、データ型４２４及びサイズ４２５は、図７の管理情報テーブル３４２で説明したとおりである。
【００７６】
キャッシュテーブル２５２に格納可能な管理情報の数には、上限が設定されてもよい。上限に達している状態で、キャッシュテーブル２５２に新たに管理情報を格納する場合は、登録順４４１の最も古い管理情報から削除されてよい。
【００７７】
図１０は、更新情報テーブル２５４の構成例を示す。
【００７８】
更新情報テーブル２５４は、共有メモリ２５３に格納されている各データが更新されているか否かを判定するために必要な情報を有する。更新情報テーブル２５４は、フィールド値として、データ位置１７１２と、サイズ４２５と、タイムスタンプ４３２とを有する。
【００７９】
データ位置１７１２は、データの格納されている位置を表す。例えば、データ位置１７１２は、データの格納されている共有メモリのＩＤと、その共有メモリＩＤの示す共有メモリ上のデータが格納されているメモリアドレスと、によって表される。サイズ４２５は、データ位置１７１２に格納されているデータのサイズ（例えば、ｂｙｔｅ数）を表す。タイムスタンプ４３２は、データ位置１７１２に格納されているデータが生成又は更新された時刻を表す。
【００８０】
図１１は、取得コマンド７１１の構成例を示す。
【００８１】
取得コマンド７１１は、アプリケーション２１０がデータを取得する際に使用するコマンドである。アプリケーション２１０は、データを取得する際、アクセスミドルウェア２２０に対して取得コマンド７１１を送信する。アクセスミドルウェア２２０は、取得コマンド７１１の内容を、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）としてアプリケーション２１０に提供してもよい。
【００８２】
取得コマンド７１１は、パラメータとして、１又は２以上のデータＩＤ４２１と、エラー処理方法１７１０とを有してよい。
【００８３】
データＩＤ４２１は、取得対象のデータに対応するデータＩＤである。データＩＤ４２１は、ファイル名又はＵＲＩ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｅｒ）などであってもよい。１つの取得コマンド７１１で複数のデータを取得する場合は、取得コマンド７１１に複数のデータＩＤ４２１を含めてよい。
【００８４】
エラー処理方法１７１０は、データＩＤ４２１に対応するデータの取得処理においてエラーが発生した場合の対応方法を表す。エラー処理方法１７１０は、エラーが発生した場合にどのような処理を行うかの判断に用いられる。
【００８５】
エラー処理方法１７１０は、例えば、再送フラグ７５２と、一時取得待ちフラグ７５３と、取得待ちフラグ７５４と、データ取得フラグ７５５との４ビットで構成されてもよい。
【００８６】
再送フラグ７５２は、Ｒｅｑ／Ｒｅｐ通信によるデータ取得処理においてエラーが発生した場合に、データの取得要求メッセージを再送すべきか否かを表す。例えば、再送フラグ７５２「１」は、データの取得要求メッセージを再送すべきことを表す。再送フラグ７５２「０」は、データの取得要求メッセージの再送が不要であることを表す。再送回数は、別途、アプリケーション２１０又はアクセスミドルウェア２２０等で設定されてよい。
【００８７】
一時取得待ちフラグ７５３は、共有メモリ参照又はＰｕｂ／Ｓｕｂ通信によるデータ取得処理においてエラーが発生した場合に、共有メモリ２５３における取得対象のデータの更新を所定時間待つべきか否か、又はＰｕｂ／Ｓｕｂメッセージの受信を所定時間待つべきか否かを表す。例えば、一時取得待ちフラグ７５３「１」は、共有メモリ２５３における取得対象のデータの更新を所定時間待機すべき、又はＰｕｂ／Ｓｕｂメッセージの受信を所定期間待機すべきことを表す。一時取得待ちフラグ７５３「０」は、共有メモリ２５３における取得対象のデータの更新を待機する必要が無いこと、又はＰｕｂ／Ｓｕｂメッセージの受信を待機する必要が無いことを表す。待機すべき所定期間は、別途、アプリケーション２１０又はアクセスミドルウェア２２０等で設定されてよい。
【００８８】
取得待ちフラグ７５４は、共有メモリ参照又はＰｕｂ／Ｓｕｂ通信によるデータ取得処理においてエラーが発生した場合に、共有メモリ２５３における取得対象のデータが更新されるまで待機すべきか否か、又はＰｕｂ／Ｓｕｂメッセージを受信するまで待機すべきか否かを表す。例えば、取得待ちフラグ７５３「１」は、共有メモリ２５３における取得対象のデータが更新されるまで待機すべきこと、又はＰｕｂ／Ｓｕｂメッセージを受信するまで待機すべきことを表す。取得待ちフラグ７５３「０」は、共有メモリ２５３における取得対象のデータが更新されるまで待機する必要は無いこと、又はＰｕｂ／Ｓｕｂメッセージを受信するまで待機する必要が無いことを表す。取得待ちフラグ７５４は、一時取得待ちフラグ７５３と異なり、待機期間に期限を設けなくて良い。
【００８９】
データ取得フラグ７５５は、共有メモリ参照によるデータ取得処理においてデータが未更新である旨のエラーが発生した場合に、その未更新のデータを取得すべきか否かを表す。例えば、データ取得フラグ７５５「１」は、そのデータが未更新であってもデータを取得すべきことを表す。データ取得フラグ７５５「０」は、そのデータが未更新であった場合はデータを取得すべきでないことを表す。
【００９０】
アクセスミドルウェア２２０は、エラー処理方法の内容と、取得コマンド結果に含まれる実行結果とに基づき、適切なエラー処理を実行することができる。例えば、エラー処理方法の再送フラグ７５２が「１」であって、Ｒｅｑ／Ｒｅｐ通信において接続エラーが発生した場合、アクセスミドルウェア２２０は、再接続を試みてよい。
【００９１】
図１２は、取得コマンド結果７１６の構成例を示す。
【００９２】
取得コマンド結果７１６は、取得コマンド７１１の実行結果として返されるデータである。アプリケーション２１０は、アクセスミドルウェア２２０に対して取得コマンド７１１を送信し、その応答として取得コマンド結果７１６を受信する。アクセスミドルウェア２２０は、取得コマンド７１１の内容をＡＰＩとして提供する場合は、ＡＰＩの戻り値としてこの取得コマンド結果７１６の内容を提供してもよい。
【００９３】
取得コマンド結果７１６は、パラメータとして、データＩＤ４２１、実行結果１７０５及びデータ１７１１の１又は２以上のセットを有する。すなわち、取得コマンド結果７１６に含まれるセットの数は、取得コマンド７１１に含まれるデータＩＤ４２１の数に対応する。
【００９４】
データ１７１１は、そのセットに含まれるデータＩＤ４２１に対応するデータである。このデータ１７１１は、アクセスミドルウェア２２０が取得コマンド７１１に基づいて取得したものである。
【００９５】
実行結果１７０５は、そのセットに含まれるデータ１７１１の取得処理の結果を表す。実行結果１７０５は、アクセスミドルウェア２２０がデータの取得処理を実行した結果を表してよい。実行結果１７０６には、結果コード７５０と、取得時刻７５１とが含まれてよい。
【００９６】
結果コード７５０は、データの取得処理を実行した結果を識別するための情報（コード）である。結果コード７５０の具体的な例については後述する（図１３参照）。取得時刻７５１は、データ１７１１の取得が完了した時刻を表す。
【００９７】
図１３は、結果コード７５０の例を示す。
【００９８】
結果コード７５０とその意味とが、例えば以下の様に対応付けられてよい。
結果コード「０」は、「データ取得成功」を意味する。
結果コード「１」は、「Ｒｅｑ／Ｒｅｐ通信に係る接続エラー」を意味する。
結果コード「２」は、「Ｒｅｑ／Ｒｅｐ通信に係るタイムアウト」を意味する。
結果コード「３」は、「共有メモリ参照に係る未更新エラー」を意味する。
結果コード「４」は、「Ｐｕｂ／Ｓｕｂ通信に係るタイムアウト」を意味する。
結果コード「５」は、「データＩＤエラー」を意味する。
結果コード「６」は、「管理情報の取得エラー」を意味する。
結果コード「７」は、「管理情報エラー」を意味する。
【００９９】
図１４は、クエリコマンド７４０の構成例を示す。
【０１００】
クエリコマンド７４０は、アクセスミドルウェア２２０がデータの取得処理を行う際に使用される。アクセスミドルウェア２２０は、１つのクエリコマンド７４０で１つのデータを取得してよい。クエリコマンド７４０は、パラメータとして、データ取得方法４２２と、データ位置３４２と、サイズ４２５と、回数制限７４２と、期限７４３と、エラー処理方法１７１０とを有してよい。データ取得方法４２２、データ位置３４２及びサイズ４２５は、図７において説明したとおりである。
【０１０１】
回数制限７４２は、再送回数の上限を表す。期限７４３は、データの更新の待機時間の上限を表す。エラー処理方法１７１０は、図１１において説明したとおりである。回数制限７４２及び期限７４３は、所定の設定値であってもよいし、クエリコマンド毎に指定されてもよい。
【０１０２】
図１５は、クエリコマンド結果７４１の構成例を示す。
【０１０３】
クエリコマンド結果７４１は、クエリコマンド７４０の実行結果として返されるデータである。１つのクエリコマンド７４０に対して、１つのクエリコマンド結果７４１が返されるとしてよい。クエリコマンド結果７４１は、パラメータとして、データ取得方法４２２と、データ位置３４２と、サイズ４２５と、回数制限７４２と、期限７４３と、エラー処理方法１７１０と、データ１７１１と、実行結果１７０５とを有してよい。データ取得方法４２２、データ位置３４２及びサイズ４２５は、図７において説明したとおりである。回数制限７４２及び期限７４３は、図１４において説明したとおりである。エラー処理方法１７１０は、図１１において説明したとおりである。
【０１０４】
データ１７１１は、クエリコマンド７４０に対応するデータである。実行結果１７０５は、クエリコマンド７４０を実行した結果を表す。
【０１０５】
図１６は、管理情報の登録要求メッセージ５１１の構成例を示す。
【０１０６】
管理情報の登録要求メッセージ５１１は、ノード１０２が管理装置１０３に対して、管理情報の登録を要求する際に送信するメッセージである。管理情報の登録要求メッセージ５１１は、フィールド値として、ヘッダ１７０１と、メッセージ種別１７０３と、プロパティ情報５１３と、管理情報４２６とを有してよい。
【０１０７】
ヘッダ１７０１は、通信ネットワーク１０１を通じて送信先へメッセージを送信するために必要な情報である。例えば、ヘッダ１７０１は、送信元及び送信先（宛先）のＩＰアドレス及びポート番号などを有してよい。
【０１０８】
メッセージ種別１７０３は、このメッセージの種別を表す。例えば、メッセージ種別１７０３は、管理情報の登録要求メッセージ５１１、管理情報の登録応答メッセージ５１２。管理情報の取得要求メッセージ７１２、管理情報の応答要求メッセージ７１３、データの取得要求メッセージ７１４、データの取得応答メッセージ７１５、管理情報の削除要求メッセージ１６１１、管理情報の削除応答メッセージ１６１２などを区別できるように定義されてよい。
【０１０９】
プロパティ情報５１３は、図８において説明したとおりである。管理情報４２６は、図７において説明したとおりである。管理情報の登録要求メッセージ５１１に含まれるプロパティ情報５１３と管理情報４２６とが、管理装置１０３に登録されてよい。管理情報４２６は複数であってもよい。
【０１１０】
図１７は、管理情報の登録応答メッセージ５１２の構成例を示す。
【０１１１】
管理情報の登録応答メッセージ５１２は、管理情報の登録要求メッセージ７１３の応答として、管理装置１０３からノード１０２に返されるメッセージである。管理情報の登録応答メッセージ５１２は、ヘッダ１７０１と、メッセージ種別１７０３と、登録結果５１４と、管理情報ＩＤ１７０６とを有する。ヘッダ１７０１及びメッセージ種別１７０３は、図１６で説明したとおりである。
【０１１２】
登録結果５１４は、管理装置１０３は、管理情報の登録要求メッセージ５１１に含まれていた管理情報を登録する処理を実行した結果（例えば、成功又は失敗など）を表す情報である。
【０１１３】
管理情報ＩＤ１７０６は、管理装置１０３が、管理情報の登録要求メッセージ５１１に含まれていた管理情報４２６に付与した管理情報ＩＤを表す。管理情報ＩＤ１７０６は複数であってもよい。
【０１１４】
図１８は、管理情報の取得要求メッセージ７１２の構成例を示す。
【０１１５】
管理情報の取得要求メッセージ７１２は、ノード１０２が管理装置１０３に対して、管理情報を要求する際に送信するメッセージである。管理情報の取得要求メッセージ７１２は、ヘッダ１７０１と、メッセージ種別１７０３と、１又は２以上のデータＩＤ４２１と、バージョン４１２とを有する。ヘッダ１７０１及びメッセージ種別１７０３は、図１６で説明したとおりである。
【０１１６】
データＩＤ４２１は、取得対象のデータのＩＤを表す。つまり、ノード１０２のアクセスミドルウェア２２０は、管理装置１０３に対して、管理情報の取得要求メッセージ７１２に含まれるデータＩＤ４２１に関する管理情報を要求する。複数の管理情報を取得する場合、アクセスミドルウェア２２０は、管理情報の取得要求メッセージ７１２に複数のデータＩＤ４２１を含めて良い。
【０１１７】
バージョン４１２は、管理情報の取得要求メッセージ７１２を送信するノード１０２のバージョンを表す。すなわち、ノード１０２は、管理装置１０３に対して、当該バージョン４１２と互換性を有するバージョンの管理情報を要求する。
【０１１８】
図１９は、管理情報の取得応答メッセージ７１３の構成例を示す。
【０１１９】
管理情報の取得応答メッセージ７１３は、管理情報の取得要求メッセージ７１２の応答として、管理装置１０３からノード１０２に返されるメッセージである。管理情報の取得応答メッセージ７１３は、フィールド値として、ヘッダ１７０１及びメッセージ種別１７０３に続いて、実行結果１７０５、データＩＤ４２１及び管理情報４２６の１又は２以上のセットを有してよい。
【０１２０】
実行結果１７０５は、そのセットに含まれる管理情報４２６の取得処理の結果を表す。データＩＤ４２１は、そのセットに含まれる管理情報４２６に関するデータのＩＤを表す。すなわち、管理情報の取得要求メッセージ７１２に含まれるデータＩＤ４２１の数と、管理情報の取得応答メッセージ７１３に含まれるセットの数（データＩＤ４２１の数）とは一致する。
【０１２１】
図２０は、データの取得要求メッセージ７１４の構成例を示す。
【０１２２】
データの取得要求メッセージ７１４は、ノード１０２が他ノードに対して、データを要求する際に送信するメッセージである。
【０１２３】
データの取得要求メッセージ７１４は、フィールド値として、ヘッダ１７０１及びメッセージ種別１７０３に続いて、メモリアドレス１７１２及びサイズ４２５の１又は２以上のセットを有し、その後にエラー処理方法１７１０を有してよい。ヘッダ１７０１及びメッセージ種別１７０３は、図１６で説明したとおりである。
【０１２４】
メモリアドレス１７１２は、取得対象のデータの格納先のメモリアドレスを表す。サイズ４２５は、取得対象のデータのサイズを表す。複数のデータを要求する場合は、データの取得要求メッセージ７１４に複数のメモリアドレス１７１２及びサイズ４２５のセットを含めてよい。エラー処理方法１７１０は、図１１で説明したとおりである。
【０１２５】
図２１は、データの取得応答メッセージ７１５の構成例を示す。
【０１２６】
データの取得応答メッセージ７１５は、データの取得要求メッセージ７１４の応答として、他ノードからノード１０２に返されるメッセージである。データの取得応答メッセージ７１５は、フィールド値として、ヘッダ１７０１及びメッセージ種別１７０３に続いて、実行結果１７０５、メモリアドレス１７１２、サイズ４２５及びデータ１７１１の１又は２以上のセットを有してよい。ヘッダ１７０１及びメッセージ種別１７０３は、図１６で説明したとおりである。
【０１２７】
実行結果１７０５は、そのセットに含まれる他ノードにおけるデータの取得処理の結果を表す。メモリアドレス１７１２は、そのセットに含まれるデータ１７１１が格納されていたメモリアドレスを表す。サイズ４２５は、そのセットに含まれるデータ１７１１のサイズを表す。データ１７１１は、データの取得要求メッセージ７１４で要求されたデータである。すなわち、データの取得要求メッセージ７１４に含まれるセットの数と、データの取得応答メッセージ７１５に含まれるセットの数とは一致する。
【０１２８】
図２２は、Ｐｕｂ／Ｓｕｂメッセージ１５２０の構成例を示す。
【０１２９】
Ｐｕｂ／Ｓｕｂメッセージ１５２０は、或るノード１０２が複数の他ノードに対して同報通知するメッセージである。Ｐｕｂ／Ｓｕｂメッセージ１５２０は、フィールド値として、ヘッダ１７０１と、トランザクションＩＤ１５２１と、サイズ４２５と、データ１７１１とを有してよい。ヘッダ１７０１は、図１６で説明したとおりである。データ１７１１は、Ｐｕｂ／Ｓｕｂメッセージ１５２０で運ばれるデータであり、サイズ４２５は、そのデータ１７１１のサイズを表す。
【０１３０】
トランザクションＩＤ１５２１は、Ｐｕｂ／Ｓｕｂメッセージ１５２０を識別するための情報である、同報通知されたＰｕｂ／Ｓｕｂメッセージ１５２０を受信した他ノードは、そのメッセージ１５２０に含まれるトランザクションＩＤ１５２１が、自分が受信待機（購読）しているトランザクションＩＤと一致する場合、そのＰｕｂ／Ｓｕｂメッセージ１５２０を取り込む。
【０１３１】
図２３は、管理情報の削除要求メッセージ１６１１の構成例を示す。
【０１３２】
管理情報の削除要求メッセージ１６１１は、ノード１０２が管理装置１０３に対して、管理情報の削除を要求する際に送信するメッセージである。管理情報の削除要求メッセージ１６１１は、ヘッダ１７０１と、メッセージ種別１７０３と、管理情報ＩＤ１７０６とを有してよい。ヘッダ１７０１及びメッセージ種別１７０３は、図１６で説明したとおりである。
【０１３３】
管理情報ＩＤ１７０６は、削除対象の管理情報のＩＤを表す。すなわち、管理装置１０３は、管理情報の削除要求メッセージ１６１２を受信すると、この管理情報ＩＤ１７０６に対応する管理情報を削除する処理を行う。
【０１３４】
図２４は、管理情報の削除応答メッセージ１６１２の構成例を示す。
【０１３５】
管理情報の削除応答メッセージ１６１２は、管理装置１０３がノード１０２に対して、管理情報の削除要求メッセージ１６１１の応答として返すメッセージである。管理情報の削除応答メッセージ１６１２は、ヘッダ１７０１と、メッセージ種別１７０３と、削除結果１６１３とを有してよい。ヘッダ１７０１及びメッセージ種別１７０３は、図１６で説明したとおりである。削除結果１６１３は、管理装置１０３における管理情報の削除処理の結果（例えば成功又は失敗など）を表す。
【０１３６】
図２５は、ノード１０２ｂが管理装置１０３に管理情報の登録を要求する処理の一例を表すシーケンスチャートである。
【０１３７】
ノード１０２ｂのアクセスミドルウェア２２０は、自ノード１０２ｂが分散システム１に参加するとき、以下の処理を開始する。例えば、ノード１０２ｂは、通信ネットワーク１０１に接続して管理装置１０３と通信可能となったこと契機として、以下の処理を開始する。
【０１３８】
ノード１０２ｂの管理情報取得部２２３は、ノード１０２ｂに関する管理情報及びプロパティ情報を準備する（Ｓ５０１）。そして、ノード１０２ｂは、メッセージ送信部２２６に対して、管理情報の登録要求メッセージを管理装置１０３へ送信するよう指示する（Ｓ５０１）。
【０１３９】
ノード１０２ｂのメッセージ送信部２２６は、ノード１０２ｂに関する管理情報４２６及びプロパティ情報５１３を含む管理情報の登録要求メッセージ５１１を生成し、その管理情報の登録要求メッセージ５１１を管理装置１０３へ送信する（Ｓ５０２）。
【０１４０】
管理装置１０３の管理アプリケーション３１０は、ノード１０２ｂから管理情報の登録要求メッセージ５１１を受信すると、その登録要求メッセージ５１１に含まれる管理情報４２６及びプロパティ情報５１３について、管理情報の登録処理を実行する（Ｓ６００）。この処理の詳細については後述する。
【０１４１】
ノード１０２ｂの管理情報取得部２２３は、管理装置１０３から管理情報の登録応答メッセージ５１２を受信する（Ｓ５０４）。そして、管理情報取得部２２３は、その管理情報の登録応答メッセージ５１２に含まれる登録結果５１４に基づいて、登録処理の成否を判定する。ここで、登録結果５１４が「成功」である場合、管理情報取得部２２３は、管理情報の登録応答メッセージ５１２に含まれる管理情報ＩＤ１７０６を記憶する。登録結果５１４が「失敗」である場合、管理情報取得部２２３は、アプリケーション２１０へ「失敗」を通知する。
【０１４２】
各ノード１０２が上述の処理を行うことで、分散システム１の各ノード１０２の管理情報が、管理装置１０３に集められる。
【０１４３】
図２６は、管理装置１０３における管理情報の登録処理の例を表すフローチャートである。この処理は、図２２のＳ６００の管理装置１０３側の処理に該当する。
【０１４４】
管理装置１０３の管理アプリケーション３１０は、ノード１０２ｂから管理情報の登録要求メッセージ５１１を受信すると（Ｓ６０１）、その登録要求メッセージ５１１から管理情報４２６及びプロパティ情報５１３を抽出する（Ｓ６０２）。
【０１４５】
管理アプリケーション３１０は、記憶部２７０の空き容量が不足しているか否かを判定する（Ｓ６０３）。記憶部２７０に管理情報などを格納する必要があるためである。
【０１４６】
空き容量が不足していない場合（Ｓ６０３：ＮＯ）、管理アプリケーション３１０は、ノード１０２ｂから受信したプロパティ情報５１３と重複したものがリンクテーブル３４１に存在するか否かを判定する（Ｓ６０４）。すなわち、その受信したプロパティ情報５１３に含まれるノード名４１１及びバージョン４１２と重複するリンク情報（レコード）が、リンクテーブル３４１に存在するか否かを判定する。
【０１４７】
重複したものがリンクテーブル３４１に存在しない場合（Ｓ６０４：ＮＯ）、管理アプリケーション３１０は、管理情報４２６を管理情報テーブル３４２に登録する（Ｓ６０５）。そして、管理アプリケーション３１０は、この登録した管理情報に対応する管理情報ＩＤを発行する。
【０１４８】
そして、管理アプリケーション３１０は、この管理情報ＩＤと、プロパティ情報５１３に含まれるノード名４１１、バージョン４１２及び互換バージョン４１３と、管理情報４２６の登録先の管理情報テーブル３４２を示すリンク先とを有するリンク情報を生成し、リンクテーブル３４１に登録する（Ｓ６０６）。また、管理アプリケーション３１０は、「成功」の登録結果５１４と、管理情報ＩＤ１７０６とを含む管理情報の登録応答メッセージ５１２を生成する。そして、管理アプリケーション３１０は、Ｓ６１０の処理へ進む。
【０１４９】
空き容量が不足している場合（Ｓ６０３：ＹＥＳ）、又は重複したものがリンクテーブル３４１に存在する場合（Ｓ６０４：ＹＥＳ）、管理アプリケーション３１０は「失敗」の登録結果５１４を含む管理情報の登録応答メッセージ５１２を生成する（Ｓ６０８）。そして、管理アプリケーション３１０は、Ｓ６１０の処理へ進む。
【０１５０】
Ｓ６１０として管理アプリケーション３１０は、上述で生成した管理情報の登録応答メッセージ５１２を、ノード１０２ｂへ送信する（Ｓ６１０）。
【０１５１】
さらに、管理アプリケーション３１０は、その登録した管理情報に係るプロパティ情報（ノード名及びバージョン等）を、通信ネットワーク１０１上の各ノード１０２へ同報通知してもよい。この同報通知を受信した各ノード１０２は、この同報通知と同じノード名であり、且つ、同報通知されたものよりも古いバージョンの管理情報を、キャッシュテーブル２５１から削除してもよい（Ｓ６１１）。
【０１５２】
以上の処理により、管理装置１０３は、管理情報の登録要求メッセージ５１１に対する応答メッセージ５１２を、ノード１０２ｂに返すことができる。
【０１５３】
図２７は、ノード１０２ａがノード１０２ｂからデータを取得する処理の例を表すシーケンスチャートである。
【０１５４】
ノード１０２ａのアプリケーション２１０は、取得対象のデータＩＤ４２１と、所望のエラー処理方法１７１０とを含む取得コマンド７１１を生成する。そして、アプリケーション２１０は、その取得コマンド７１１をアクセスミドルウェア２２０ａへ渡す（Ｓ７０１）。
【０１５５】
ノード１０２ａのアクセスミドルウェア２２０ａは、この取得コマンド７１１に基づき、管理情報の取得処理を実行する（Ｓ８００）。この処理の詳細については後述する。
【０１５６】
アクセスミドルウェア２２０ａは、管理情報の取得処理によって取得した管理情報に基づき、クエリコマンド７４０を生成する（Ｓ７２０）。そして、アクセスミドルウェア２２０ａは、このクエリコマンド７４０に基づき、データ取得処理を実行する（Ｓ７００）。この処理の詳細については後述する。
【０１５７】
アクセスミドルウェア２２０ａは、データ取得処理によって得られたクエリコマンド結果７４１に基づき、取得コマンド結果７１６を生成する（Ｓ７３０）。そして、アクセスミドルウェア２２０ａは、この取得コマンド結果７１６を、アプリケーション２１０へ返す（Ｓ７３１）。
【０１５８】
このとき、アクセスミドルウェア２２０ａは、データ取得処理の対象のクエリコマンド７４０がまだ残っているか否かを判定する（Ｓ７３２）。この判定が肯定的な場合（Ｓ７３２：ＹＥＳ）、アクセスミドルウェア２２０ａは、その残っているクエリコマンド７４０について、データ取得処理（Ｓ７００）を実行する。この判定が否定的な場合（Ｓ７３２：ＮＯ）、アクセスミドルウェア２２０ａは、本処理を終了する。
【０１５９】
以上の処理により、ノード１０２ａのアプリケーション２１０は、ノード１０２ｂからデータ１７１１を取得することができる。なおアプリケーション２１０は、取得コマンド７１１に対する取得コマンド結果７１６を受け取る前に、次の取得コマンド７１１をアクセスミドルウェア２２０へ渡してもよい。すなわち、アクセスミドルウェア２２０は、複数の取得コマンド７１１を並列に処理してもよい。
【０１６０】
図２８は、アクセスミドルウェア２２０ａにおける管理情報の取得処理の例を表すフローチャートである。この処理は、図２７のＳ８００に該当する。
【０１６１】
ノード１０２ａのアクセスミドルウェア２２０ａは、アプリケーション２１０から渡された取得コマンド７１１から、データＩＤ４２１を抽出する（Ｓ８０１）。アクセスミドルウェア２２０ａは、キャッシュテーブル２５２から、データＩＤ４２１に対応する管理情報の取得を試みる（Ｓ８０２）。そして、アクセスミドルウェア２２０ａは、キャッシュテーブル２５２から取得できなかった管理情報が存在するか否かを判定する（Ｓ８０３）。
【０１６２】
キャッシュテーブル２５２から取得できなかった管理情報が存在しない場合（Ｓ８０３：ＮＯ）、アクセスミドルウェア２２０ａは、本処理を終了する。
【０１６３】
キャッシュテーブル２５２から取得できなかった管理情報が存在する場合（Ｓ８０３：ＹＥＳ）、アクセスミドルウェア２２０ａは、その取得できなかったデータＩＤ４２１に関連する管理情報の取得要求メッセージ７１２を生成する。そして、アクセスミドルウェア２２０ａは、その管理情報の取得要求メッセージ７１２を、管理装置１０３へ送信する（Ｓ８０４）。そして、アクセスミドルウェア２２０ａは、タイムアウトが発生するまで、管理情報の取得応答メッセージ７１３の受信を待機する（Ｓ８０７：ＮＯ、Ｓ８０８：ＮＯ）。
【０１６４】
タイムアウトが発生した場合（Ｓ８０８：ＹＥＳ）、アクセスミドルウェア２２０ａは、結果コード７５０「６」（管理情報取得エラー）の実行結果１７０５を含む取得コマンド結果７１６を生成する。そして、アクセスミドルウェア２２０ａは、その取得コマンド結果７１６をアプリケーション２１０に返し（Ｓ８０９）、本処理を終了する。
【０１６５】
タイムアウトが発生する前に管理情報の取得応答メッセージ７１３を受信した場合（Ｓ８０７：ＹＥＳ）、アクセスミドルウェア２２０ａは、その管理情報の取得応答メッセージ７１３から管理情報４２６を抽出する（Ｓ８０５）。アクセスミドルウェア２２０ａは、この抽出した管理情報を、キャッシュテーブル２５１に登録し（Ｓ８０６）、本処理を終了する。
【０１６６】
以上の処理により、アクセスミドルウェア２２０ａは、データの取得に必要な管理情報を取得することができる。
【０１６７】
図２９は、管理情報の取得要求メッセージ７１２を受けた管理装置１０３の処理の例を表すフローチャートである。この処理は、図２７のＳ８００に該当する。
【０１６８】
管理アプリケーション３１０は、ノード１０２ａから管理情報の取得要求メッセージ７１２を受信すると（Ｓ９０１）、その取得要求メッセージ７１２からデータＩＤ４２１及びバージョン４１２を抽出する。
【０１６９】
管理アプリケーション３１０は、リンクテーブル３４１から、その抽出したバージョンと同一または互換性を有するバージョンを有し、且つ、その抽出したデータＩＤと同一のデータＩＤを有する管理情報４２６を検索する（Ｓ９０２）。
【０１７０】
このような管理情報を発見できた場合（Ｓ９０３：ＹＥＳ）、管理アプリケーション３１０は、この発見した管理情報と、実行結果の結果コード「０」（成功）とをセットにした情報を一時的に保持し（Ｓ９０４）、Ｓ９０６の処理へ進む。
【０１７１】
このような管理情報を発見できなかった場合（Ｓ９０３：ＮＯ）、管理アプリケーション３１０は、「ＮＵＬＬ」の管理情報と、実行結果の結果コード「５」（データＩＤエラー）とをセットにした情報を一時的に保持し（Ｓ９０５）、Ｓ９０６の処理へ進む。
【０１７２】
Ｓ９０６において管理アプリケーション３１０は、ノード１０２ａから受信した全てのデータＩＤ４２１の内、未処理のデータＩＤが存在するか否かを判定する（Ｓ９０６）。未処理のデータＩＤが存在する場合（Ｓ９０６：ＹＥＳ）、管理アプリケーション３１０は、Ｓ９０２に戻り、未処理のデータＩＤについて上記と同様の検索を行う。
【０１７３】
未処理のデータＩＤが存在しない場合（Ｓ９０６：ＮＯ）、管理アプリケーション３１０は、ノード１０２ａから受信したデータＩＤ４２１と、一時的に保持していた実行結果と、管理情報４２６とを含む管理情報の取得応答メッセージ７１３を生成する。そして、管理アプリケーション３１０は、その管理情報の取得応答メッセージ７１３を、ノード１０２ａへ返し（Ｓ９０７）、本処理を終了する。
【０１７４】
以上の処理により、管理装置１０３は、管理情報の取得要求メッセージ７１２に対する応答メッセージ７１３をノード１０２ａに返すことができる。
【０１７５】
図３０は、ノード１０２ａにおけるデータ取得処理の例を表すフローチャートである。この処理は、図２７のＳ７００の処理に該当する。
【０１７６】
ノード１０２ａのアクセスミドルウェア２２０ａは、図２７のＳ７２０で生成したクエリコマンド７４０について次の処理を行う。すなわち、アクセスミドルウェア２２０ａは、クエリコマンド７４０をデータ取得方法４２２で分類する（Ｓ１１０１）。そして、アクセスミドルウェア２２０ａは、データ取得方法に対応する処理を実行する。このとき、アクセスミドルウェア２２０ａは、複数のクエリコマンド７４０を並列に処理してよい。
【０１７７】
アクセスミドルウェア２２０ａは、データ取得方法４２２が「Ｒｅｑ／Ｒｅｐ通信」であるクエリコマンド７４０について、Ｒｅｑ／Ｒｅｐ通信によるデータ取得処理（Ｓ１２００）を実行する。この処理の詳細については後述する。
【０１７８】
アクセスミドルウェア２２０ａは、データ取得方法が「共有メモリ参照」であるクエリコマンド７４０について、共有メモリからのデータ取得処理（Ｓ１４００）を実行する。この処理の詳細については後述する。
【０１７９】
アクセスミドルウェア２２０ａは、データ取得方法が「Ｐｕｂ／Ｓｕｂ通信」であるクエリコマンド７４０について、Ｐｕｂ／Ｓｕｂ通信によるデータ取得処理（Ｓ１５００）を実行する。この処理の詳細については後述する。
【０１８０】
アクセスミドルウェア２２０ａは、データ取得方法が未知のもの又は未対応のものであるクエリコマンド７４０について、結果コード「７」（管理情報エラー）の実行結果を生成する（Ｓ１１０７）。
【０１８１】
上記Ｓ１２００、Ｓ１４００、Ｓ１５００又はＳ１１０７の処理を完了したアクセスミドルウェア２２０ａは、それぞれのデータ取得処理の実行結果を参照する（Ｓ１１０２）。
【０１８２】
アクセスミドルウェア２２０ａは、実行結果にエラーが含まれているか否かを判定する（Ｓ１１０３）。実行結果にエラーが含まれていない場合（Ｓ１１０３：ＮＯ）、アクセスミドルウェア２２０ａは、Ｓ１１０８の処理へ進む。
【０１８３】
実行結果にエラーが含まれている場合（Ｓ１１０３：ＹＥＳ）、アクセスミドルウェア２２０ａは、次のエラー処理を行う。アクセスミドルウェア２２０ａは、実行結果の結果コードと、エラー処理方法１７１０とを照らし合わせて、データ取得処理の継続が必要な組み合わせが存在するか否かを判断する（Ｓ１１０４）。
【０１８４】
データ取得処理の継続が必要な組み合わせとは、例えば、結果コードが「１」（Ｒｅｑ／Ｒｅｐ通信：接続エラー）、且つ、再送フラグ７５２が「１」の組み合わせの場合である。又は、結果コードが「２」（Ｒｅｑ／Ｒｅｐ通信：タイムアウトエラー）、且つ、再送フラグ７５２が「１」の組み合わせの場合である。又は、結果コードが「３」（共有メモリ参照：未更新エラー）、且つ、一時取得待ちフラグ７５３若しくは取得待ちフラグ７５４が「１」の組み合わせの場合である。又は、結果コードが「４」（Ｐｕｂ／Ｓｕｂ通信：タイムアウトエラー）、且つ、一時取得待ちフラグ７５３若しくは取得待ちフラグ７５４が「１」の組み合わせの場合である。
【０１８５】
次に、アクセスミドルウェア２２０ａは、再送フラグ７５２が「１」の場合に再送回数が回数制限７４２を超えていないか、及び、一時取得待ちフラグ７５３が「１」の場合に待機時間が期限７４３を超えていないかなどを判断する（Ｓ１１０５）。これらの制限を超えている場合（Ｓ１１０５：ＮＯ）、アクセスミドルウェア２２０ａは、Ｓ１１０８の処理へ進む。
【０１８６】
これらの制限を超えていない場合（Ｓ１１０５：ＹＥＳ）、アクセスミドルウェア２２０ａは、クエリコマンド７４０を再生成する（Ｓ１１０６）。このとき、再送回数や待機時間の加算などを行ってよい。ここで再生成されたクエリコマンド７４０は、図２７のＳ７３１の残りのクエリコマンド７４０として追加され、再実行される。
【０１８７】
Ｓ１１０８としてアクセスミドルウェア２２０ａは、未処理のデータ取得結果が存在するか否かを判定する（Ｓ１１０８）。未処理のデータ取得結果が存在する場合（Ｓ１１０８：ＹＥＳ）、アクセスミドルウェア２２０ａは、その未処理のデータ取得結果について、Ｓ１１０２からの処理を実行する。未処理のデータ取得結果が存在しない場合（Ｓ１１０８：ＮＯ）、アクセスミドルウェア２２０ａは、本処理を終了する。
【０１８８】
以上の処理により、ノード１０２ａは、クエリコマンド７４０に含まれるデータ取得方法４２２及びエラー処理方法１７１０に従ってデータを取得することができる。
【０１８９】
図３１は、ノード１０２ａにおけるＲｅｑ／Ｒｅｐ通信によるデータ取得処理の例を表すフローチャートである。この処理は、図２７のＳ１２００のデータの取得要求メッセージ７１３を送信する側のノード１０２ａの処理に該当する。
【０１９０】
ノード１０２ａのアクセスミドルウェア２２０ａは、クエリコマンド７４０のデータ位置３４２から、データの取得先である他ノード１０２ｂのＩＰアドレス及びメモリアドレスを抽出する。そして、アクセスミドルウェア２２０ａは、他ノード１０２ｂのＩＰアドレスに接続を試みる（Ｓ１２０１）、
【０１９１】
接続が成功した場合（Ｓ１２０１：ＹＥＳ）、アクセスミドルウェア２２０ａは、データの取得要求メッセージ７１４を、他ノード１０２ｂへ送信する（Ｓ１２０２）。そして、アクセスミドルウェア２２０ａは、Ｓ１２１０の処理へ進む。
【０１９２】
接続が失敗した場合（Ｓ１２０１：ＮＯ）、アクセスミドルウェア２２０ａは、結果コード「１」（リクエスト／レスポンス通信：接続エラー）の実行結果を一時的に保持する（Ｓ１２０５）。そして、アクセスミドルウェアは、Ｓ１２１０の処理へ進む。
【０１９３】
Ｓ１２１０としてアクセスミドルウェア２２０ａは、未処理のクエリコマンド７４０が存在するか否かを判定する（Ｓ１２１０）。未処理のクエリコマンド７４０が存在する場合（Ｓ１２１０：ＹＥＳ）、アクセスミドルウェア２２０ａは、未処理のクエリコマンド７４０について、Ｓ１２０１からの処理を実行する。未処理のクエリコマンド７４０が存在しない場合（Ｓ１２１０：ＮＯ）、アクセスミドルウェア２２０ａは、次のＳ１２１２の処理へ進む。
【０１９４】
ノード１０２ａのアクセスミドルウェア２２０ａは、タイムアウトが発生するまで、他ノード１０２ｂからのデータの取得応答メッセージ７１５の受信を待機する（Ｓ１２１２：ＮＯ、Ｓ１２１８：ＮＯ）。
【０１９５】
データの取得応答メッセージ７１５を受信した場合（Ｓ１２１２：ＹＥＳ）、アクセスミドルウェア２２０ａは、そのデータの取得応答メッセージ７１５からデータ１７１１及び実行結果１７０５を抽出する。そして、アクセスミドルウェア２２０ａは、その抽出したデータ１７１１及び実行結果１７０５を含むクエリコマンド結果７４１を生成し、一時的に保持する（Ｓ１２１５）。
【０１９６】
アクセスミドルウェア２２０ａは、未受信のデータの取得応答メッセージ７１５が存在するか否かを判定する（Ｓ１２２０）。未受信のデータの取得応答メッセージ７１５が存在する場合（Ｓ１２２０：ＹＥＳ）、アクセスミドルウェア２２０ａは、Ｓ１２１２の処理に戻り、残りの受信を待機する。未受信のデータの取得応答メッセージ７１２が存在しない場合（Ｓ１２２０：ＮＯ）、アクセスミドルウェア２２０ａは、本処理を終了する。
【０１９７】
データの取得応答メッセージ７１２の受信待機において、タイムアウトが発生した場合（Ｓ１２１８：ＹＥＳ）、アクセスミドルウェア２２０ａは、次の処理を行う。すなわち、アクセスミドルウェア２２０ａは、結果コード「２」（リクエスト／レスポンス通信：タイムアウトエラー）の実行結果を有するクエリコマンド結果７４１を生成し、一時的に保持する（Ｓ１２１９）。そして、アクセスミドルウェア２２０ａは、本処理を終了する。
【０１９８】
上述における一時的に保持されたクエリコマンド結果７４１は、図２７のＳ７３１においてアプリケーション２１０に返される。
【０１９９】
図３２は、ノード１０２ｂにおけるＲｅｑ／Ｒｅｐ通信によるデータ取得処理の例を表すフローチャートである。この処理は、図２７のＳ１２００のデータの取得要求メッセージ７１３を受信する側のノード１０２ｂの処理に該当する。
【０２００】
ノード１０２ｂのアクセスミドルウェア２２０ｂは、ノード１０２ａからのデータの取得要求メッセージ７１４を受信すると（Ｓ１３０１）、以下の処理を実行する。すなわち、アクセスミドルウェア２２０ｂは、そのデータの取得要求メッセージ７１４からメモリアドレス１７１２及びサイズ４２５を抽出する。
【０２０１】
アクセスミドルウェア２２０ｂは、その抽出したメモリアドレス１７１２及びサイズ４２５の示す位置にデータが存在するか否かを判定する（Ｓ１３０２）。データが存在しない場合（Ｓ１３０２：ＮＯ）、アクセスミドルウェア２２０ｂは、データが存在しない旨を表す実行結果を一時的に保持し（Ｓ１３２０）、Ｓ１３０６の処理へ進む。
【０２０２】
データが存在する場合（Ｓ１３０２：ＹＥＳ）、アクセスミドルウェア２２０ａは、その位置からデータを取得する（Ｓ１３０３）。そして、アクセスミドルウェア２２０ａは、データＩＤと結果コード「０」（成功）と現在時刻の取得時刻とを含む実行結果、並びに、その取得したデータを、一時的に保持する（Ｓ１３０４）。
【０２０３】
アクセスミドルウェア２２０ａは、未取得のデータが存在するか否かを判定する（Ｓ１３０５）。未取得のデータが存在する場合（Ｓ１３０５：ＹＥＳ）、アクセスミドルウェア２２０ａは、Ｓ１２０３の処理に戻り、未取得のデータを取得する。
【０２０４】
未取得のデータが存在しない場合（Ｓ１３０５：ＮＯ）、アクセスミドルウェア２２０ａは、上述において一時的に保持した実行結果等を含むデータの取得応答メッセージ７１５を生成し、そのメッセージ７１５をノード１０２ａへ返す（Ｓ１３０６）。そして、アクセスミドルウェア２２０ａは、本処理を終了する。
【０２０５】
以上の処理により、データの取得要求メッセージ７１３を受信したノード１０２ａは、その取得要求メッセージ７１３に対応する取得応答メッセージ７１４を返すことができる。
【０２０６】
なお、上述の処理例では、Ｓ１３０２の判定によって、データの取得要求メッセージ中に存在しないデータが１つでも含まれる場合は、その旨を示す実行結果を含むデータの取得応答メッセージを返している。しかし、取得要求メッセージ中の個々のデータに関して存在の有無の判定を行い、個々のデータに関しての判定結果を実行結果として含むデータの取得応答メッセージを返しても良い。
【０２０７】
図３３は、ノード１０２ａにおける共有メモリ参照によるデータ取得処理の一例を表すフローチャートである。この処理は、図２７のＳ１４００の処理に該当する。
【０２０８】
ノード１０２ａのアクセスミドルウェア２２０ａは、管理情報から、データ位置４２３（共有メモリＩＤ及びメモリアドレス）、データ型及びサイズを取得する。そして、アクセスミドルウェア２２０ａは、これらの情報を用いて共有メモリ２５３からデータを取得する（Ｓ１４０１）。
【０２０９】
アクセスミドルウェア２２０ａは、この取得したデータの更新時刻を確認し（Ｓ１４０２）、このデータが更新されているか否かを判定する（Ｓ１４０３）。例えば、アクセスミドルウェア２２０ａは、この取得したデータの更新時刻が、更新情報テーブル２５４におけるこのデータに対応するレコードのタイムスタンプ４３２よりも新しい場合（又は、このデータが初めて取得したものである場合）、更新されていると判定してよい。
【０２１０】
この取得したデータが更新されていると判定した場合（Ｓ１４０３：ＹＥＳ）、アクセスミドルウェア２２０ａは、この取得したデータと、現在時刻を取得時刻７５１とする実行結果１７０５とを一時的に保持する（Ｓ１４０８）。そして、アクセスミドルウェア２２０ａは、Ｓ１４１０の処理に進む。
【０２１１】
この取得したデータが更新されていないと判定した場合（Ｓ１４０３：ＮＯ）、アクセスミドルウェア２２０ａは、エラー処理方法１７１０のデータ取得フラグ７５５が「１」（未更新であってもデータを取得すべき）であるか否かを判定する（Ｓ１４０４）。
【０２１２】
データ取得フラグ７５５が「１」（未更新であってもデータを取得すべき）である場合（Ｓ１４０４：ＹＥＳ）、アクセスミドルウェア２２０ａは、この取得したデータと、結果コードを「３」（共有メモリ参照：未更新エラー）とし且つこの取得したデータの更新時刻を取得時刻７５１とした実行結果１７０５とを一時的に保持する（Ｓ１４０５、Ｓ１４０８）。そして、アクセスミドルウェア２２０ａは、Ｓ１４１０の処理に進む。
【０２１３】
データ取得フラグ７５５が「０」（未更新の場合はデータを取得すべきでない）の場合（Ｓ１４０４：ＮＯ）、アクセスミドルウェア２２０ａは、「ＮＵＬＬ」のデータと、結果コードを「３」（共有メモリ参照：未更新エラー）とした実行結果１７０５とを一時的に保持する（Ｓ１４０６）。そして、アクセスミドルウェア２２０ａは、Ｓ１４１０の処理に進む。
【０２１４】
Ｓ１４１０としてアクセスミドルウェア２２０ａは、未取得のデータが残っているか否かを判定する（Ｓ１４１０）。未取得のデータが残っている場合（Ｓ１４１０：ＹＥＳ）、アクセスミドルウェア２２０ａは、Ｓ１４０１の処理に戻り、未取得のデータを取得する。未取得のデータが残っていない場合（Ｓ１４１０：ＮＯ）、アクセスミドルウェア２２０ａは、本処理を終了する。
【０２１５】
以上の処理により、ノード１０２ａは、エラー処理方法に基づいて共有メモリからデータを取得することができる。
【０２１６】
図３４は、ノード１０２ａにおけるＰｕｂ／Ｓｕｂ通信によるデータ取得処理の例を表すフローチャートである。この処理は、図２７のＳ１５００の同報通知（Ｐｕｂ／Ｓｕｂメッセージ）を受信（購読）する側のノード１０２ａの処理に該当する。
【０２１７】
ノード１０２ａのアクセスミドルウェア２２０ａは、管理装置１０３から取得した管理情報のデータ取得方法４２２がＰｕｂ／Ｓｕｂ通信の場合（Ｓ１５０１：ＹＥＳ）、以下の処理を実行する。
【０２１８】
ノード１０２ａのアクセスミドルウェア２２０ａは、管理情報のデータ位置４２３から、トランザクションＩＤを抽出する。そして、アクセスミドルウェア２２０ａは、その抽出したトランザクションＩＤを有するＰｕｂ／Ｓｕｂメッセージ１５２０の受信待機を開始する（Ｓ１５０２）。そして、アクセスミドルウェア２２０ａは、タイムアウトが発生するまでこのＰｕｂ／Ｓｕｂメッセージの受信待機を行う（Ｓ１５０３：ＮＯ、Ｓ１５１０：ＮＯ）。
【０２１９】
その抽出したトランザクションＩＤを有するＰｕｂ／Ｓｕｂメッセージ１５２０を受信した場合（Ｓ１５０３：ＹＥＳ）、アクセスミドルウェア２２０ａはＰｕｂ／Ｓｕｂメッセージ１５２０からデータ１７１１を取得する（Ｓ１５０４、Ｓ１５０５）。そして、アクセスミドルウェア２２０ａは、その取得したデータと、結果コード７５０を「０」（成功）とし且つ取得時刻７５１を現在時刻とする実行結果１７０５とを一時的に保持する（Ｓ１５０６）。
【０２２０】
そして、アクセスミドルウェア２２０ａは、未受信データが存在するか否かを判定する（Ｓ１５２０）。未受信データが存在する場合（Ｓ１５２０：ＹＥＳ）、アクセスミドルウェア２２０ａは、Ｓ１５０３に戻り、再び受信待機を行う。未受信データが存在しない場合（Ｓ１５２０：ＮＯ）、本処理を終了する。
【０２２１】
タイムアウトが発生した場合（Ｓ１５１０：ＹＥＳ）、アクセスミドルウェア２２０ａは、「ＮＵＬＬ」のデータと、結果コード７５０を「４」（Ｐｕｂ／Ｓｕｂ通信：タイムアウトエラー）とする実行結果１７０５とを一時的に保持する（Ｓ１５１１）。そして、アクセスミドルウェア２２０ａは、本処理を終了する。
【０２２２】
以上の処理により、ノード１０２ａは、購読対象のトランザクションＩＤを有するＰｕｂ／Ｓｕｂメッセージ１５２０から、データ１７１１を取得することができる。
【０２２３】
図３５は、ノード１０２ｂが管理装置１０３に対して管理情報の削除要求を行う処理の一例を表すシーケンスチャートである。
【０２２４】
ノード１０２ｂのアクセスミドルウェア２２０ｂは、自ノード１０２ｂが分散システム１から離脱するときなどに、以下の処理を開始する。
【０２２５】
ノード１０２ｂのアクセスミドルウェア２２０ｂは、削除対象の管理情報ＩＤを含めた管理情報の削除要求メッセージ１６１１を、管理装置１０３へ送信する（Ｓ１６０１）。
【０２２６】
管理装置１０３の管理アプリケーション３１０は、管理情報の削除要求メッセージ１６１１を受信すると、そのメッセージ１６１１に含まれる管理情報ＩＤ１７０６を特定し、その特定した管理情報ＩＤ１７０６に対応する管理情報４２６を削除する。また、管理アプリケーション３１０は、リンクテーブル３４１から、その特定した管理情報ＩＤ１７０６を有するリンク情報（レコード）を削除する。そして、管理アプリケーション３１０は、削除処理の成功又は失敗の削除結果１６１３を含む管理情報の削除応答メッセージ１６１２をノード１０２ｂに送信する（Ｓ１７００）。ノード１０２ｂは、管理情報の削除応答メッセージ１６１２を受信し（Ｓ１６０３）、処理を終了する。
【０２２７】
以上の処理により、ノード１０２ｂが削除要求した管理情報ＩＤに対応する管理情報が、管理装置１０３から削除される。
【０２２８】
図３６は、管理情報の削除要求メッセージを受信した管理装置１０３の削除処理を表すフローチャートである。この処理は、図３５のＳ１７００の管理装置１０３側の処理に該当する。
【０２２９】
管理装置１０３の管理アプリケーション３１０は、管理情報の削除要求メッセージ１６１１を受信すると、その削除要求メッセージ１６１１を解析する（Ｓ１７０１）。
【０２３０】
管理アプリケーション３１０は、リンクテーブル３４１に、管理情報の削除要求メッセージ１６１１に含まれる管理情報ＩＤ１７０６と一致する管理情報ＩＤを有するリンク情報（レコード）が存在するか否かを判定する（Ｓ１７０２、Ｓ１７０３）。
【０２３１】
リンクテーブル３４１に一致する管理情報ＩＤを有するリンク情報（レコード）が存在する場合（Ｓ１７０３：ＹＥＳ）、管理アプリケーション３１０は、そのリンク情報（レコード）のリンク先４３０に格納されている管理情報を削除する。また、管理アプリケーション３１０は、リンクテーブル３４１からそのリンク情報（レコード）を削除する（Ｓ１７０４）。そして、管理アプリケーション３１０は、「成功」を表す削除結果１６１３を含む管理情報の削除応答メッセージ１６１２を生成し（Ｓ１７０５）、Ｓ１７０７の処理へ進む。
【０２３２】
リンクテーブル３４１に一致する管理情報ＩＤを有するリンク情報（レコード）が存在しない場合（Ｓ１７０３：ＮＯ）、管理アプリケーション３１０は、「失敗」を表す削除結果１６１３を含む管理情報の削除応答メッセージ１６１２を生成し（Ｓ１７０６）、Ｓ１７０７の処理へ進む。
【０２３３】
Ｓ１７０７として管理アプリケーション３１０は、上述で生成した管理情報の削除応答メッセージ１６１２を、ノード１０２ｂへ返し（Ｓ１７０７）、本処理を終了する。
【０２３４】
以上の処理により、管理装置１０３は、ノード１０２ｂから削除要求された管理情報の削除処理を実行し、その結果をノード１０２ｂに返すことができる。
【０２３５】
上述した実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。例えば、本実施形態を以下の様に表現してもよい。
【０２３６】
（表現１）
コンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体であって、分散システムを構成するノードの有するプロセッサにおいて前記コンピュータプログラムが実行されると、
前記プロセッサで実行されるアプリケーションプログラムから、データ識別子と、そのデータ識別子に対応するデータの取得処理においてエラーが発生した場合対応方法を表すエラー処理方法とを含む、データの取得を要求する取得コマンドを、メモリを介して受け取ると、
前記取得コマンドに含まれるデータ識別子に関連する管理情報を、通信インタフェースを介して所定の管理装置から取得し、その取得した管理情報を前記メモリに格納し、前記管理情報には、データ識別子と、そのデータ識別子に対応するデータのデータ取得方法とが含まれており、
その取得した管理情報に含まれるデータ取得方法に基づき、前記データ識別子に対応するデータの取得処理を実行し、
その取得処理においてエラーが発生した場合、前記取得コマンドに含まれる前記エラー処理方法に基づいてエラー処理を実行し、
前記取得処理又は前記エラー処理によって前記データ識別子に対応するデータを取得した場合、その取得したデータを、前記メモリを介して前記アプリケーションプログラムに返す
コンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
【０２３７】
（表現２）
複数のノードによって構成される分散システムに属する管理装置であって、
データを識別するためのデータ識別子と、そのデータ識別子に対応するデータのデータ取得方法とを含む、複数の管理情報を管理し、
前記ノードから、データ識別子を含む管理情報の取得要求メッセージを受信すると、
前記管理情報の取得要求メッセージに含まれるデータ識別子に対応する管理情報を特定し、
その特定した管理情報を含む管理情報の取得応答メッセージを、前記ノードに返す
管理装置。
【０２３８】
（表現３）
分散システムを構成するノードであって、
アプリケーションプログラムから、データ識別子と、そのデータ識別子に対応するデータの取得処理においてエラーが発生した場合の対応方法を表すエラー処理方法とを含む、データの取得を要求する取得コマンドを受け取ると、
前記取得コマンドに含まれるデータ識別子に関連する管理情報を前記管理装置から取得し、
その取得した管理情報に含まれるデータ取得方法に基づき、前記データ識別子に対応するデータの取得処理を実行し、
その取得処理においてエラーが発生した場合、前記取得コマンドに含まれる前記エラー処理方法に基づいてエラー処理を実行し、
前記取得処理又は前記エラー処理によって前記データ識別子に対応するデータを取得した場合、その取得したデータを前記アプリケーションプログラムに返す
ノード。
【符号の説明】
【０２３９】
１：分散システム  １０１：通信ネットワーク  １０２：ノード  １０３：管理装置
【図１】
2016045807.tif 000003
【図２】
2016045807.tif 000004
【図３】
2016045807.tif 000005
【図４】
2016045807.tif 000006
【図５】
2016045807.tif 000007
【図６】
2016045807.tif 000008
【図７】
2016045807.tif 000009
【図８】
2016045807.tif 000010
【図９】
2016045807.tif 000011
【図１０】
2016045807.tif 000012
【図１１】
2016045807.tif 000013
【図１２】
2016045807.tif 000014
【図１３】
2016045807.tif 000015
【図１４】
2016045807.tif 000016
【図１５】
2016045807.tif 000017
【図１６】
2016045807.tif 000018
【図１７】
2016045807.tif 000019
【図１８】
2016045807.tif 000020
【図１９】
2016045807.tif 000021
【図２０】
2016045807.tif 000022
【図２１】
2016045807.tif 000023
【図２２】
2016045807.tif 000024
【図２３】
2016045807.tif 000025
【図２４】
2016045807.tif 000026
【図２５】
2016045807.tif 000027
【図２６】
2016045807.tif 000028
【図２７】
2016045807.tif 000029
【図２８】
2016045807.tif 000030
【図２９】
2016045807.tif 000031
【図３０】
2016045807.tif 000032
【図３１】
2016045807.tif 000033
【図３２】
2016045807.tif 000034
【図３３】
2016045807.tif 000035
【図３４】
2016045807.tif 000036
【図３５】
2016045807.tif 000037
【図３６】
2016045807.tif 000038