(57)【要約】【課題】システムを停止させずにプログラムを更新すること。【解決手段】情報処理装置１００は、制御メッセージ１２０を受信する。情報処理装置１００は、制御メッセージ１２０を受信した場合、受信した制御メッセージ１２０から特定されるイベントの種別を示す情報とプラグイン１３０とを対応付けて記憶部１１０に記憶する。情報処理装置１００は、イベントメッセージ１４０を受信する。情報処理装置１００は、イベントメッセージ１４０を受信した場合、受信したイベントメッセージ１４０から特定されるイベントの種別を示す情報に対応付けて記憶部１１０に記憶されたプラグイン１３０を実行する。【選択図】図１
2019133579.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
プラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す制御メッセージを受信した場合、受信した前記制御メッセージから特定されるイベントの種別を示す情報とプラグインとを対応付けて記憶部に記憶し、
イベントの種別を示す情報を表すイベントメッセージを受信した場合、受信した前記イベントメッセージから特定されるイベントの種別を示す情報に対応付けて前記記憶部に記憶されたプラグインを実行する、
処理を実行させることを特徴とする処理プログラム。
【請求項２】
前記制御メッセージは、さらに、イベントの発生元を識別する情報を表し、
前記イベントメッセージは、さらに、イベントの発生元を識別する情報を表し、
前記記憶する処理は、前記制御メッセージを受信した場合、受信した前記制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグインとを対応付けて前記記憶部に記憶し、
前記実行する処理は、前記イベントメッセージを受信した場合、受信した前記イベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインを実行する、ことを特徴とする請求項１に記載の処理プログラム。
【請求項３】
前記コンピュータに、
イベントの発生元を識別する情報、プラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す第２制御メッセージを受信した場合、受信した前記第２制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインが、前記第２制御メッセージから特定されるプラグインと一致すれば、当該プラグインを削除する、処理を実行させることを特徴とする請求項２に記載の処理プログラム。
【請求項４】
前記制御メッセージは、さらに、プラグインが有効な期間を示す情報を表し、
前記イベントメッセージは、さらに、イベントが発生した時点を示す情報を表し、
前記記憶する処理は、受信した前記制御メッセージから特定される、イベントの発生元を識別する情報と、イベントの種別を示す情報と、プラグインと、当該プラグインが有効な期間を対応付けて前記記憶部に記憶し、
前記実行する処理は、受信した前記イベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインが有効な期間に、前記イベントメッセージから特定されるイベントが発生した時点が含まれれば、当該プラグインを実行する、ことを特徴とする請求項２に記載の処理プログラム。
【請求項５】
前記コンピュータに、
受信した前記イベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインが有効な期間より、前記イベントメッセージから特定されるイベントが発生した時点が後であれば、当該プラグインを削除する、処理を実行させることを特徴とする請求項４に記載の処理プログラム。
【請求項６】
前記コンピュータに、
定期的に発行される同期メッセージを受信した場合、前記記憶部の記憶内容をバックアップした後、前記記憶部に記憶されたプラグインが有効な期間より、最後に受信した前記イベントメッセージから特定されるイベントが発生した時点が後であれば、当該プラグインを削除する、処理を実行させることを特徴とする請求項４に記載の処理プログラム。
【請求項７】
前記記憶する処理は、前記制御メッセージを受信した場合、定期的に発行される同期メッセージを受信し、前記記憶部の記憶内容をバックアップした後に、受信した前記制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグインとを対応付けて前記記憶部に記憶する、ことを特徴とする請求項２に記載の処理プログラム。
【請求項８】
前記コンピュータに、
イベントの発生元を識別する情報、プラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す第２制御メッセージを受信した場合、前記同期メッセージを受信し、前記記憶部の記憶内容をバックアップした後に、受信した前記第２制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインが、前記第２制御メッセージから特定されるプラグインと一致すれば、当該プラグインを削除する、処理を実行させることを特徴とする請求項７に記載の処理プログラム。
【請求項９】
前記プラグインに関する情報は、前記プラグインを符号化した情報であり、
前記コンピュータに、
前記制御メッセージを受信した場合、受信した前記制御メッセージに含まれるプラグインを符号化した情報から、当該プラグインを復号する、処理を実行させ、
前記記憶する処理は、受信した前記制御メッセージに含まれるイベントの発生元を識別する情報とイベントの種別を示す情報と復号したプラグインとを対応付けて前記記憶部に記憶する、ことを特徴とする請求項２〜８のいずれか一つに記載の処理プログラム。
【請求項１０】
前記復号する処理は、前記制御メッセージを受信した場合、受信した前記制御メッセージに含まれるプラグインを符号化した情報から算出されるダイジェスト値が第２記憶部に記憶されていなければ、当該プラグインを復号し、当該ダイジェスト値と対応付けて前記第２記憶部に記憶し、前記第２記憶部に記憶されていれば、前記第２記憶部から当該プラグインを取得する、ことを特徴とする請求項９に記載の処理プログラム。
【請求項１１】
コンピュータが、
プラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す制御メッセージを受信した場合、受信した前記制御メッセージから特定されるイベントの種別を示す情報とプラグインとを対応付けて記憶部に記憶し、
イベントの種別を示す情報を表すイベントメッセージを受信した場合、受信した前記イベントメッセージから特定されるイベントの種別を示す情報に対応付けて前記記憶部に記憶されたプラグインを実行する、
処理を実行することを特徴とするイベント処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理プログラム、およびイベント処理方法に関する。
【背景技術】
【０００２】
従来、複数のノードを含み、それぞれのノードにデータを処理するプログラムを実装し、複数のノードで分散してデータを処理する並列分散処理システムがある。また、並列分散処理システムでは、それぞれのノードが有するプログラムを更新し、それぞれのノードが有するプログラムに機能を追加することが求められる場合がある。
【０００３】
先行技術としては、例えば、イベントに応じた制御情報を読み出し、制御情報に従ってジョブを実行するものがある。また、例えば、現用系と待機系との間で同期対象とされたデータの通知処理を行う技術がある。また、例えば、情報処理システムを構成するデバイスに変更が生じた場合、変更したデバイスに関係する論理構成情報を更新する技術がある。また、例えば、特定のＣＰＵが状態情報を保存する間、他のＣＰＵが処理を継続する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平８−２４９２０１号公報
【特許文献２】特開２０１０−２１８３０４号公報
【特許文献３】特開２０１２−１４６２０７号公報
【特許文献４】国際公開第２０１２／０４６３０２号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、並列分散処理システムでそれぞれのノードが有するプログラムを更新する際、並列分散処理システムを停止することになる場合がある。例えば、複数のノードがデータを処理する際、プログラムが更新済みのノードと未更新のノードとが混在した状態にならないように、すべてのノードが有するプログラムを更新し終えるまで並列分散処理システムが停止される。
【０００６】
１つの側面では、本発明は、システムを停止させずにプログラムを更新することを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様によれば、プラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す制御メッセージを受信した場合、受信した前記制御メッセージから特定されるイベントの種別を示す情報とプラグインとを対応付けて記憶部に記憶し、イベントの種別を示す情報を表すイベントメッセージを受信した場合、受信した前記イベントメッセージから特定されるイベントの種別を示す情報に対応付けて前記記憶部に記憶されたプラグインを実行する処理プログラム、およびイベント処理方法が提案される。
【発明の効果】
【０００８】
一態様によれば、システムを停止させずにプログラムを更新することが可能になる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかるイベント処理方法の一実施例を示す説明図である。
【図２】図２は、並列分散処理システム２００の一例を示す説明図である。
【図３】図３は、分散ノード２０１のハードウェア構成例を示すブロック図である。
【図４】図４は、情報処理装置１００の機能的構成例を示すブロック図である。
【図５】図５は、動作例１における並列分散処理システム２００の動作の流れを示す説明図である。
【図６】図６は、動作例１における各種メッセージの一例を示す説明図である。
【図７】図７は、動作例１における分散ノード２０１の具体的な機能的構成例を示す説明図である。
【図８】図８は、動作例１における全体処理手順の一例を示すフローチャートである。
【図９】図９は、動作例１におけるイベントメッセージ処理手順の一例を示すフローチャートである。
【図１０】図１０は、動作例１におけるプラグイン処理手順の一例を示すフローチャートである。
【図１１】図１１は、動作例１における制御系イベント処理手順の一例を示すフローチャートである。
【図１２】図１２は、動作例１におけるプラグイン追加処理手順の一例を示すフローチャートである。
【図１３】図１３は、動作例１におけるプラグイン削除処理手順の一例を示すフローチャートである。
【図１４】図１４は、動作例１におけるプラグイン更新処理手順の一例を示すフローチャートである。
【図１５】図１５は、動作例２における各種メッセージの一例を示す説明図である。
【図１６】図１６は、動作例２における分散ノード２０１の具体的な機能的構成例を示す説明図である。
【図１７】図１７は、動作例２におけるプラグイン処理手順の一例を示すフローチャートである。
【図１８】図１８は、動作例２における制御系イベント処理手順の一例を示すフローチャートである。
【図１９】図１９は、動作例２における有効期限変更処理手順の一例を示すフローチャートである。
【図２０】図２０は、動作例２におけるプラグイン更新処理手順の一例を示すフローチャートである。
【図２１】図２１は、動作例３における各種メッセージの一例を示す説明図である。
【図２２】図２２は、動作例３における分散ノード２０１の具体的な機能的構成例を示す説明図である。
【図２３】図２３は、動作例３における全体処理手順の一例を示すフローチャートである。
【図２４】図２４は、動作例３におけるプラグイン処理手順の一例を示すフローチャートである。
【図２５】図２５は、動作例３におけるバリア処理手順の一例を示すフローチャートである。
【図２６】図２６は、動作例４における各種メッセージの一例を示す説明図である。
【図２７】図２７は、動作例４における分散ノード２０１の具体的な機能的構成例を示す説明図である。
【図２８】図２８は、動作例４における全体処理手順の一例を示すフローチャートである。
【図２９】図２９は、動作例４におけるプラグイン追加処理手順の一例を示すフローチャートである。
【図３０】図３０は、動作例４におけるプラグイン削除処理手順の一例を示すフローチャートである。
【図３１】図３１は、動作例４におけるプラグイン更新処理手順の一例を示すフローチャートである。
【図３２】図３２は、動作例４におけるバリア処理手順の一例を示すフローチャートである。
【図３３】図３３は、動作例４における追加操作処理手順の一例を示すフローチャートである。
【図３４】図３４は、動作例４における削除操作処理手順の一例を示すフローチャートである。
【図３５】図３５は、動作例５における並列分散処理システム２００の動作の流れを示す説明図である。
【図３６】図３６は、動作例５における各種メッセージの一例を示す説明図である。
【図３７】図３７は、動作例５における分散ノード２０１の具体的な機能的構成例を示す説明図である。
【図３８】図３８は、動作例５におけるプラグイン追加処理手順の一例を示すフローチャートである。
【図３９】図３９は、動作例５におけるデコード処理手順の一例を示すフローチャートである。
【図４０】図４０は、動作例５におけるプラグイン削除処理手順の一例を示すフローチャートである。
【図４１】図４１は、動作例５におけるプラグイン更新処理手順の一例を示すフローチャートである。
【図４２】図４２は、動作例６における並列分散処理システム２００の動作の流れを示す説明図である。
【図４３】図４３は、動作例６における各種メッセージの一例を示す説明図である。
【図４４】図４４は、動作例６における分散ノード２０１の具体的な機能的構成例を示す説明図である。
【図４５】図４５は、動作例６におけるプラグイン追加処理手順の一例を示すフローチャートである。
【図４６】図４６は、動作例６におけるキャッシュ処理手順の一例を示すフローチャートである。
【図４７】図４７は、動作例６におけるプラグイン削除処理手順の一例を示すフローチャートである。
【図４８】図４８は、動作例６におけるプラグイン更新処理手順の一例を示すフローチャートである。
【図４９】図４９は、並列分散処理システム２００の適用例を示す説明図である。
【図５０】図５０は、適用例におけるメッセージフローを示す説明図である。
【図５１】図５１は、適用例における計算機４９０１の具体的な機能的構成例を示す説明図（その１）である。
【図５２】図５２は、適用例における計算機４９０１の具体的な機能的構成例を示す説明図（その２）である。
【図５３】図５３は、適用例におけるイベントメッセージ５３００の具体例を示す説明図である。
【図５４】図５４は、適用例におけるプラグインを追加する制御メッセージ５４００の具体例を示す説明図である。
【図５５】図５５は、適用例におけるプラグインの有効期限を変更する制御メッセージ５５００の具体例を示す説明図である。
【図５６】図５６は、適用例におけるプラグインを更新する制御メッセージ５６００の具体例を示す説明図である。
【図５７】図５７は、並列分散処理システム２００の応用的な適用例を示す説明図である。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して、本発明にかかる処理プログラム、およびイベント処理方法の実施の形態を詳細に説明する。
【００１１】
（実施の形態にかかるイベント処理方法の一実施例）
図１は、実施の形態にかかるイベント処理方法の一実施例を示す説明図である。情報処理装置１００は、並列分散処理システムに含まれる複数のノードのいずれかのノードとして動作することができるコンピュータである。それぞれのノードは、処理対象のデータを処理する処理プログラムを有し、処理対象のデータを処理する。
【００１２】
ここで、並列分散処理システムでは、それぞれのノードが有する処理プログラムを更新し、それぞれのノードが有する処理プログラムに対して機能を追加、削除または更新することが求められる場合がある。
【００１３】
しかしながら、この場合、処理プログラムが更新済みのノードと未更新のノードとが混在し、処理対象のデータが、更新済みの処理プログラムで処理されるか、未更新の処理プログラムで処理されるかが不明確になる。そして、同じタイミングに発生した処理対象データが、更新済みの処理プログラムで処理される場合と、未更新の処理プログラムで処理される場合とが混在し、処理の不整合が発生する。
【００１４】
これに対し、処理の不整合を発生させずに、それぞれのノードが有する処理プログラムを更新する方法として、以下に示す方法１や方法２が考えられる。
【００１５】
方法１は、並列分散処理システムで、処理対象のデータを収集し、それぞれのノードに送信する管理ノードに、処理対象のデータの送信を中断させた状態で、それぞれのノードが有する処理プログラムを更新する方法である。方法１では、具体的には、管理ノードによる送信を中断させ、それぞれのノードの記憶内容を退避し、それぞれのノードが有する処理プログラムを更新し、退避した記憶内容をそれぞれのノードに戻した後、管理ノードによる送信を再開する。
【００１６】
しかしながら、方法１では、管理ノードによる送信を中断させるため、並列分散処理システムが停止し、並列分散処理システムの性能低下を招いてしまう。また、並列分散処理システムに含まれるノードの数が増大するほど、並列分散処理システムが停止する時間が増大してしまう傾向がある。そして、処理のタイムアウトが発生しやすくなる。
【００１７】
方法２は、並列分散処理システムに、現在運用中のノードを含む旧系統と、新たな処理プログラムを有するノードを含む新系統との２系統を用意することにより、見かけ上それぞれのノードが有する処理プログラムを更新する方法である。方法２では、具体的には、管理ノードによる送信を中断させ、旧系統のノードの記憶内容を新系統のノードに複製し、宛先を新系統のノードに切り替えて管理ノードによる送信を再開する。
【００１８】
しかしながら、方法２でも、方法１と同様に、管理ノードによる送信を中断させるため、並列分散処理システムが停止し、並列分散処理システムの性能低下を招いてしまう。そして、処理のタイムアウトが発生しやすくなる。また、並列分散処理システムを実現するために用意するノードの数の増大化を招き、並列分散処理システムのコストの増大化を招いてしまう。
【００１９】
このように、方法１や方法２のいずれの方法でも、それぞれのノードが有する処理プログラムを更新する際、並列分散処理システムが停止してしまい、処理のタイムアウトが発生しやすくなるという問題がある。このため、処理の不整合を発生させず、かつ、並列分散処理システムを停止させず、それぞれのノードが有する処理プログラムを更新可能にすることが望まれる。
【００２０】
そこで、本実施の形態では、制御メッセージに応じてイベント種別に対応するプラグインを追加、削除または更新可能にし、イベント発生時のイベントメッセージに応じてイベント種別に対応するプラグインを実行可能にするイベント処理方法について説明する。これによれば、イベント処理方法は、処理の不整合を発生させず、かつ、並列分散処理システムを停止させず、それぞれのノードが有する処理プログラムを更新可能にすることができる。
【００２１】
図１において、情報処理装置１００は、処理プログラムを有する。処理プログラムは、少なくとも、プラグイン１３０を呼び出すことができるメインプログラムを含む。処理プログラムは、さらに、プラグイン１３０を含むことができる。処理プログラムは、プラグイン１３０を追加、削除または更新されることにより、更新される。
【００２２】
（１−１）情報処理装置１００は、制御メッセージ１２０を受信する。制御メッセージ１２０は、少なくとも、プラグイン１３０の実行条件になるイベントの種別を示す情報、および当該プラグイン１３０に関する情報を対応付けて表す。制御メッセージ１２０は、さらに、イベントの発生元を識別する情報を表してもよい。プラグイン１３０に関する情報は、例えば、プラグイン１３０を記憶した記憶領域のアドレスである。イベントは、例えば、人や物の状態変化である。状態は、例えば、速度である。
【００２３】
情報処理装置１００は、制御メッセージ１２０を受信した場合、受信した制御メッセージ１２０から特定されるイベントの種別を示す情報とプラグイン１３０とを対応付けて記憶部１１０に記憶する。情報処理装置１００は、例えば、制御メッセージ１２０に含まれるアドレスが示す記憶領域から、プラグイン１３０を読み出す。そして、情報処理装置１００は、制御メッセージ１２０に含まれるイベントの種別を示す情報と、読み出したプラグイン１３０とを対応付けて記憶部１１０に記憶する。情報処理装置１００は、具体的には、図５〜図７に後述する動作例１に示すような動作を行う。
【００２４】
（１−２）情報処理装置１００は、イベントメッセージ１４０を受信する。イベントメッセージ１４０は、少なくともイベントの種別を示す情報を表す。イベントメッセージ１４０は、さらに、イベントの内容を示す情報を表してもよい。イベントの内容を示す情報は、例えば、人や物の状態変化があったタイミングにおける、人や物の状態を示す情報である。イベントメッセージ１４０は、さらに、イベントの発生元を識別する情報を表してもよい。
【００２５】
情報処理装置１００は、イベントメッセージ１４０を受信した場合、受信したイベントメッセージ１４０から特定されるイベントの種別を示す情報に対応付けて記憶部１１０に記憶されたプラグイン１３０を実行する。情報処理装置１００は、例えば、プラグイン１３０を実行し、イベントメッセージ１４０に含まれる人や物の状態を示す情報を処理する。情報処理装置１００は、具体的には、図５〜図７に後述する動作例１に示すような動作を行う。
【００２６】
これにより、情報処理装置１００は、制御メッセージ１２０を受信したことに応じて処理プログラムに新たなプラグイン１３０を追加し、処理プログラムを更新することができる。また、情報処理装置１００は、イベントメッセージ１４０と制御メッセージ１２０とを受信順に扱うことができる。このため、並列分散処理システムに含まれる複数のノードのそれぞれのノードとして動作する情報処理装置１００に、一斉に制御メッセージ１２０が送信されれば、処理の不整合が発生しないようにすることができる。
【００２７】
また、情報処理装置１００は、処理プログラムを更新する際もイベントメッセージ１４０を受信可能である。このため、情報処理装置１００は、並列分散処理システムが停止しないようにすることができ、処理のタイムアウトの発生を抑制することができる。また、情報処理装置１００は、並列分散処理システムに含まれるノードの数を増大させずに、処理プログラムの更新を実現することができる。
【００２８】
ここでは、情報処理装置１００が、プラグイン１３０を追加するための制御メッセージ１２０を受信したことに応じて、処理プログラムにプラグイン１３０を追加する場合について説明したが、これに限らない。例えば、プラグイン１３０を削除するための制御メッセージ１２０が用意され、情報処理装置１００が、プラグイン１３０を削除するための制御メッセージ１２０を受信したことに応じて、処理プログラムに含まれるプラグイン１３０を削除する場合があってもよい。
【００２９】
ここでは、情報処理装置１００が、制御メッセージ１２０を受信したタイミングで、プラグイン１３０を記憶部１１０に記憶して有効化する場合について説明したが、これに限らない。例えば、プラグイン１３０が有効な期間が設定され、情報処理装置１００が、プラグイン１３０が有効な期間になったタイミングで、プラグイン１３０を有効化する場合があってもよい。具体的には、情報処理装置１００が、図１５および図１６に後述する動作例２に示すような動作を行う場合があってもよい。
【００３０】
この場合、情報処理装置１００が、有効な期間が過ぎたプラグイン１３０を削除する場合があってもよい。また、情報処理装置１００が、さらに、有効な期間が過ぎた後、特定の同期メッセージを受信するまで、プラグイン１３０の削除を待機する場合があってもよい。具体的には、情報処理装置１００が、図２１および図２２に後述する動作例３に示すような動作を行う場合があってもよい。
【００３１】
ここでは、情報処理装置１００が、制御メッセージ１２０を受信したタイミングで、プラグイン１３０を記憶部１１０に記憶して有効化する場合について説明したが、これに限らない。例えば、情報処理装置１００が、制御メッセージ１２０を受信した後、特定の同期メッセージを受信したタイミングで、プラグイン１３０を有効化する場合があってもよい。具体的には、情報処理装置１００が、図２６および図２７に後述する動作例４に示すような動作を行う場合があってもよい。
【００３２】
ここでは、情報処理装置１００が、特定の記憶領域からプラグイン１３０を読み出す場合について説明したが、これに限らない。例えば、プラグイン１３０に関する情報が、プラグイン１３０を符号化した情報であり、情報処理装置１００が、プラグイン１３０を符号化した情報から、プラグイン１３０を復号する場合があってもよい。具体的には、情報処理装置１００が、図３５〜図３７に後述する動作例５に示すような動作、または、図４２〜図４４に後述する動作例６に示すような動作を行う場合があってもよい。
【００３３】
（並列分散処理システム２００の一例）
次に、図２を用いて、図１に示した情報処理装置１００を適用した、並列分散処理システム２００の一例について説明する。
【００３４】
図２は、並列分散処理システム２００の一例を示す説明図である。図２において、並列分散処理システム２００は、分散ノード２０１−１〜２０１−Ｎと、管理ノード２０２と、端末装置２０３と、開発ノード２０４とを含む。以下の説明では、分散ノード２０１−１〜２０１−Ｎを区別せずに単に「分散ノード２０１」と表記する場合がある。
【００３５】
並列分散処理システム２００において、分散ノード２０１と、管理ノード２０２と、端末装置２０３と、開発ノード２０４とは、有線または無線のネットワーク２１０を介して接続される。ネットワーク２１０は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどである。
【００３６】
分散ノード２０１は、図１に示した情報処理装置１００として動作するコンピュータである。分散ノード２０１は、制御メッセージを受信すると、制御メッセージに応じてプラグインを追加、削除または更新する。分散ノード２０１は、イベントメッセージを受信すると、イベントメッセージに応じてプラグインを実行する。分散ノード２０１は、例えば、サーバ、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）などである。
【００３７】
管理ノード２０２は、端末装置２０３からイベントメッセージを収集し、分散ノード２０１に送信するコンピュータである。また、管理ノード２０２は、制御メッセージを分散ノード２０１に送信する。管理ノード２０２は、例えば、端末装置２０３からイベントメッセージを収集し、入力バッファに蓄積する。また、管理ノード２０２は、例えば、開発ノード２０４からの制御メッセージ生成の指示に基づいて制御メッセージを生成し、入力バッファに蓄積する。そして、管理ノード２０２は、例えば、入力バッファに蓄積されたイベントメッセージおよび制御メッセージを、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）形式で分散ノード２０１に送信する。管理ノード２０２は、例えば、サーバ、ＰＣなどである。
【００３８】
端末装置２０３は、イベントの発生元の事物に対応するコンピュータである。端末装置２０３は、例えば、人に保持される装置である。端末装置２０３は、例えば、移動体に搭載された装置である。移動体は、例えば、車である。端末装置２０３は、イベントの発生に応じてイベントメッセージを生成し、管理ノード２０２に送信する。端末装置２０３は、例えば、ＰＣ、タブレット端末、スマートフォン、ウェアラブル端末などである。
【００３９】
開発ノード２０４は、制御メッセージ生成の指示を管理ノード２０２に送信するコンピュータである。開発ノード２０４は、例えば、分散ノード２０１に対してプラグインの追加、削除または更新をするときに、管理ノード２０２へ制御メッセージ生成の指示を送信する。開発ノード２０４は、例えば、サーバ、ＰＣなどである。
【００４０】
ここでは、管理ノード２０２が、分散ノード２０１とは異なる装置である場合について説明したが、これに限らない。例えば、管理ノード２０２が、いずれかの分散ノード２０１と一体である場合があってもよい。また、例えば、管理ノード２０２が、開発ノード２０４と一体である場合があってもよい。
【００４１】
ここでは、分散ノード２０１と管理ノード２０２と端末装置２０３と開発ノード２０４とが、ネットワーク２１０を介して接続される場合について説明したが、これに限らない。例えば、分散ノード２０１と管理ノード２０２と開発ノード２０４とを接続するネットワークと、管理ノード２０２と端末装置２０３とを接続するネットワークとが異なる場合があってもよい。
【００４２】
（分散ノード２０１のハードウェア構成例）
次に、図３を用いて、分散ノード２０１のハードウェア構成例について説明する。
【００４３】
図３は、分散ノード２０１のハードウェア構成例を示すブロック図である。図３において、分散ノード２０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１と、メモリ３０２と、ネットワークＩ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０３と、記録媒体Ｉ／Ｆ３０４と、記録媒体３０５とを有する。また、各構成部は、バス３００によってそれぞれ接続される。
【００４４】
ここで、ＣＰＵ３０１は、分散ノード２０１の全体の制御を司る。メモリ３０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがＣＰＵ３０１のワークエリアとして使用される。メモリ３０２に記憶されるプログラムは、ＣＰＵ３０１にロードされることで、コーディングされている処理をＣＰＵ３０１に実行させる。
【００４５】
ネットワークＩ／Ｆ３０３は、通信回線を通じてネットワーク２１０に接続され、ネットワーク２１０を介して他のコンピュータに接続される。そして、ネットワークＩ／Ｆ３０３は、ネットワーク２１０と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークＩ／Ｆ３０３には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００４６】
記録媒体Ｉ／Ｆ３０４は、ＣＰＵ３０１の制御に従って記録媒体３０５に対するデータのリード／ライトを制御する。記録媒体Ｉ／Ｆ３０４は、例えば、ディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ポートなどである。記録媒体３０５は、記録媒体Ｉ／Ｆ３０４の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体３０５は、例えば、ディスク、半導体メモリ、ＵＳＢメモリなどである。記録媒体３０５は、分散ノード２０１から着脱可能であってもよい。
【００４７】
分散ノード２０１は、上述した構成部のほか、例えば、キーボード、マウス、ディスプレイ、プリンタ、スキャナ、マイク、スピーカーなどを有してもよい。また、分散ノード２０１は、記録媒体Ｉ／Ｆ３０４や記録媒体３０５を複数有していてもよい。また、分散ノード２０１は、記録媒体Ｉ／Ｆ３０４や記録媒体３０５を有していなくてもよい。
【００４８】
（管理ノード２０２のハードウェア構成例）
管理ノード２０２のハードウェア構成例は、図３に示した分散ノード２０１のハードウェア構成例と同様であるため、説明を省略する。
【００４９】
（端末装置２０３のハードウェア構成例）
端末装置２０３のハードウェア構成例は、図３に示した分散ノード２０１のハードウェア構成例と同様であるため、説明を省略する。端末装置２０３は、さらに、センサ装置を有してもよい。
【００５０】
センサ装置は、例えば、端末装置２０３の状態を検出する。センサ装置は、具体的には、端末装置２０３の位置、動き、および向きのうち少なくともいずれかを検出する。センサ装置は、具体的には、加速度センサ、地磁気センサ、光センサ、振動センサなどの少なくともいずれかにより実現される。センサ装置は、ＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）受信機により実現され、端末装置２０３のＧＰＳ座標を検出してもよい。
【００５１】
センサ装置は、例えば、生体情報を取得してもよい。センサ装置は、例えば、生体情報として、体温、脈拍、心拍、呼吸などに関する情報を取得する。センサ装置は、例えば、生体情報として、指紋、静脈、顔貌、声紋、掌形、網膜、虹彩などに関する情報を取得してもよい。センサ装置は、例えば、画像情報を取得してもよい。
【００５２】
（開発ノード２０４のハードウェア構成例）
開発ノード２０４のハードウェア構成例は、図３に示した分散ノード２０１のハードウェア構成例と同様であるため、説明を省略する。
【００５３】
（情報処理装置１００の機能的構成例）
次に、図４を用いて、情報処理装置１００の機能的構成例について説明する。
【００５４】
図４は、情報処理装置１００の機能的構成例を示すブロック図である。情報処理装置１００は、記憶部４００と、取得部４０１と、更新部４０２と、実行部４０３と、出力部４０４とを含む。
【００５５】
記憶部４００は、例えば、図３に示したメモリ３０２や記録媒体３０５などの記憶領域によって実現される。以下では、記憶部４００が、情報処理装置１００に含まれる場合について説明するが、これに限らない。例えば、記憶部４００が、情報処理装置１００とは異なる装置に含まれ、記憶部４００の記憶内容が情報処理装置１００から参照可能である場合があってもよい。
【００５６】
取得部４０１〜出力部４０４は、制御部の一例として機能する。取得部４０１〜出力部４０４は、具体的には、例えば、図３に示したメモリ３０２や記録媒体３０５などの記憶領域に記憶されたプログラムをＣＰＵ３０１に実行させることにより、または、ネットワークＩ／Ｆ３０３により、その機能を実現する。各機能部の処理結果は、例えば、図３に示したメモリ３０２や記録媒体３０５などの記憶領域に記憶される。
【００５７】
記憶部４００は、各機能部の処理において参照され、または更新される各種情報を記憶する。記憶部４００は、例えば、プラグインを記憶する。プラグインは、メインプログラムから呼出可能なサブプログラムである。記憶部４００は、具体的には、イベントの種別を示す情報と、プラグインとを対応付けて記憶する。イベントは、例えば、事物の状態変化である。種別は、事物の何の状態が変化したかを示す。これにより、記憶部４００は、イベントの種別を示す情報に対応するプラグインを実行可能にすることができる。
【００５８】
ここで、プラグインは、例えば、実行形式データで記憶される。また、プラグインは、符号化して記憶されてもよい。また、プラグインは、プラグインの置き場所を示す情報として記憶されてもよい。置き場所は、例えば、情報処理装置１００の記憶領域である。置き場所は、例えば、情報処理装置１００とは異なる装置の記憶領域であってもよい。
【００５９】
記憶部４００は、具体的には、イベントの発生元を識別する情報と、イベントの種別を示す情報と、プラグインとを対応付けて記憶してもよい。イベントの発生元は、特定の事物である。特定の事物は、例えば、人や自動車などである。これにより、記憶部４００は、イベントの発生元を識別する情報ごとに、イベントの種別を示す情報に対応するプラグインを実行可能にすることができる。
【００６０】
記憶部４００は、具体的には、イベントの発生元を識別する情報と、イベントの種別を示す情報と、プラグインと、当該プラグインが有効な期間を対応付けて記憶してもよい。有効な期間は、プラグインが実行可能な期間である。これにより、記憶部４００は、プラグインが有効な期間を特定可能にすることができる。
【００６１】
記憶部４００は、さらに、プラグインを、プラグインを符号化した情報から算出されるダイジェスト値と対応付けて記憶してもよい。ダイジェスト値は、例えば、ハッシュ値である。プラグインを符号化した情報が、ダイジェスト値として用いられてもよい。これにより、記憶部４００は、プラグインを符号化した情報を復号しなくても、当該プラグインを取得可能にすることができる。
【００６２】
取得部４０１は、各機能部の処理に用いられる各種情報を取得し、各機能部に出力する。取得部４０１は、例えば、各機能部の処理に用いられる各種情報を記憶部４００から取得し、各機能部に出力してもよい。取得部４０１は、例えば、各機能部の処理に用いられる各種情報を、情報処理装置１００とは異なる装置から取得し、各機能部に出力してもよい。
【００６３】
取得部４０１は、第１制御メッセージを受信する。第１制御メッセージは、少なくとも、追加するプラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す。第１制御メッセージは、さらに、イベントの発生元を識別する情報を表してもよい。プラグインに関する情報は、例えば、プラグインを記憶した記憶領域のアドレスである。プラグインに関する情報は、例えば、プラグインを符号化した情報であってもよい。イベントは、例えば、人や物の状態変化である。第１制御メッセージは、さらに、プラグインが有効な期間を示す情報を表してもよい。第１制御メッセージは、例えば、管理ノード２０２から情報処理装置１００として動作する分散ノード２０１に一斉に送信される。
【００６４】
取得部４０１は、第２制御メッセージを受信する。第２制御メッセージは、少なくとも、削除するプラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す。第２制御メッセージは、さらに、イベントの発生元を識別する情報を表してもよい。第２制御メッセージは、例えば、管理ノード２０２から情報処理装置１００として動作する分散ノード２０１に一斉に送信される。
【００６５】
取得部４０１は、イベントの種別を示す情報を表すイベントメッセージを受信する。イベントメッセージは、少なくともイベントの種別を示す情報を表す。イベントメッセージは、さらに、イベントの内容を示す情報を表してもよい。イベントの内容を示す情報は、例えば、人や物の状態変化があったタイミングにおける、人や物の状態を示す情報である。人や物の状態を示す情報は、例えば、端末装置２０３が有するセンサ装置が検出した情報に基づく情報である。イベントメッセージは、さらに、イベントの発生元を識別する情報を表してもよい。イベントメッセージは、さらに、イベントが発生した時点を示す情報を表してもよい。
【００６６】
取得部４０１は、プラグインが有効な期間を変更する第３制御メッセージを受信してもよい。第３制御メッセージは、少なくとも、有効な期間を変更するプラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す。第３制御メッセージは、さらに、イベントの発生元を識別する情報を表してもよい。
【００６７】
取得部４０１は、プラグインを更新する第４制御メッセージを受信してもよい。第４制御メッセージは、例えば、第１制御メッセージと第２制御メッセージとを統合したようなメッセージである。第４制御メッセージは、少なくとも、更新対象であり削除されるプラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報、更新により追加される新しいプラグインに関する情報を対応付けて表す。第４制御メッセージは、さらに、イベントの発生元を識別する情報を表してもよい。
【００６８】
また、第４制御メッセージは、例えば、第１制御メッセージと第３制御メッセージとを統合したようなメッセージであってもよい。第４制御メッセージは、少なくとも、有効な期間を変更することで削除されるプラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報、更新により追加される新しいプラグインに関する情報を対応付けて表す。第４制御メッセージは、さらに、イベントの発生元を識別する情報を表してもよい。
【００６９】
取得部４０１は、定期的に発行される同期メッセージを受信する。同期メッセージは、例えば、バリアメッセージである。バリアメッセージは、記憶部４００の記憶内容をバックアップする指示を表す。バリアメッセージは、具体的には、分散チェックポイントによる障害復旧のためのバックアップの指示を表す。バックアップは、具体的には、チェックポイントとして外部記憶装置に保存することである。バリアメッセージは、例えば、管理ノード２０２から送信される。
【００７０】
更新部４０２は、プラグインを記憶部４００に記憶する。
【００７１】
更新部４０２は、例えば、第１制御メッセージを受信した場合、受信した第１制御メッセージから特定されるイベントの種別を示す情報とプラグインとを対応付けて記憶部４００に記憶する。これにより、更新部４０２は、第１制御メッセージを受信したことに応じて処理プログラムに新たなプラグインを追加することができ、処理プログラムを更新することができる。
【００７２】
更新部４０２は、例えば、第１制御メッセージを受信した場合、受信した第１制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグインとを対応付けて記憶部４００に記憶してもよい。更新部４０２は、具体的には、図５〜図７に後述する動作例１に示すような動作を行う。これにより、更新部４０２は、イベントの発生元ごとに異なるプラグインを記憶することができる。
【００７３】
更新部４０２は、例えば、受信した第１制御メッセージから特定される、イベントの発生元を識別する情報と、イベントの種別を示す情報と、プラグインと、当該プラグインが有効な期間を対応付けて記憶部４００に記憶してもよい。更新部４０２は、具体的には、図１５および図１６に後述する動作例２に示すような動作を行う。これにより、更新部４０２は、処理の不整合を防止可能なようにプラグインを記憶することができる。
【００７４】
更新部４０２は、第１制御メッセージを受信した場合、定期的に発行される同期メッセージを受信するまで待機してもよい。更新部４０２は、同期メッセージを受信し、記憶部４００の記憶内容をバックアップする。バックアップは、具体的には、チェックポイントとして外部記憶装置に保存することである。更新部４０２は、バックアップした後に、受信した第１制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグインとを対応付けて記憶部４００に記憶する。更新部４０２は、具体的には、図２６および図２７に後述する動作例４に示すような動作を行う。これにより、更新部４０２は、バックアップを正常に実施可能にすることができる。
【００７５】
更新部４０２は、例えば、第１制御メッセージを受信した場合、受信した第１制御メッセージに含まれるプラグインを符号化した情報から、当該プラグインを復号してもよい。更新部４０２は、受信した第１制御メッセージに含まれるイベントの発生元を識別する情報とイベントの種別を示す情報と復号したプラグインとを対応付けて記憶部４００に記憶する。更新部４０２は、具体的には、図３５〜図３７に後述する動作例５に示すような動作を行う。これにより、更新部４０２は、プラグイン取得によるアクセス集中を回避することができる。
【００７６】
更新部４０２は、例えば、第１制御メッセージを受信した場合、受信した第１制御メッセージに含まれるプラグインを符号化した情報から算出されるダイジェスト値が記憶部４００に記憶されていなければ、当該プラグインを復号してもよい。更新部４０２は、復号したプラグインを、当該ダイジェスト値と対応付けて記憶部４００に記憶する。更新部４０２は、具体的には、図４２〜図４４に後述する動作例６に示すような動作を行う。これにより、更新部４０２は、今後同じプラグインを符号化した情報を受信した際に、復号済みのプラグインを取得し再利用可能にすることができる。
【００７７】
更新部４０２は、例えば、第１制御メッセージを受信した場合、受信した第１制御メッセージに含まれるプラグインを符号化した情報から算出されるダイジェスト値が記憶部４００に記憶されていれば、記憶部４００から当該プラグインを取得してもよい。更新部４０２は、具体的には、図４２〜図４４に後述する動作例６に示すような動作を行う。これにより、更新部４０２は、復号にかかる負担の低減化を図ることができる。
【００７８】
更新部４０２は、プラグインを記憶部４００から削除する。
【００７９】
更新部４０２は、例えば、第２制御メッセージを受信した場合、受信した第２制御メッセージから特定されるイベントの種別を示す情報に対応付けて記憶部４００に記憶されたプラグインを削除する。これにより、更新部４０２は、処理プログラムからプラグインを削除することができ、処理プログラムを更新することができる。
【００８０】
更新部４０２は、例えば、第２制御メッセージを受信した場合、受信した第２制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部４００に記憶されたプラグインを削除してもよい。これにより、更新部４０２は、特定のイベントの発生元に対応するプラグインを選択的に削除することができ、処理プログラムを更新することができる。
【００８１】
更新部４０２は、例えば、第２制御メッセージを受信した場合、受信した第２制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部４００に記憶されたプラグインを特定してもよい。更新部４０２は、特定したプラグインが、第２制御メッセージから特定されるプラグインと一致すれば、当該プラグインを削除する。更新部４０２は、具体的には、図５〜図７に後述する動作例１に示すような動作を行う。これにより、更新部４０２は、処理プログラムからプラグインを削除することができ、処理プログラムを更新することができる。また、更新部４０２は、イベントの発生元とイベントの種別との同じ組み合わせに対応するプラグインが複数あっても、いずれかのプラグインを選択的に削除することができる。
【００８２】
更新部４０２は、例えば、受信したイベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部４００に記憶されたプラグインが有効な期間を特定してもよい。更新部４０２は、特定した期間より、イベントメッセージから特定されるイベントが発生した時点が後であれば、当該プラグインを削除する。更新部４０２は、具体的には、図１５および図１６に後述する動作例２に示すような動作を行う。これにより、更新部４０２は、処理プログラムからプラグインを削除することができ、処理プログラムを更新することができる。
【００８３】
更新部４０２は、同期メッセージを受信した場合、記憶部４００の記憶内容をバックアップした後、記憶部４００に記憶されたプラグインが有効な期間を特定してもよい。更新部４０２は、特定した期間より、最後に受信したイベントメッセージから特定されるイベントが発生した時点が後であれば、当該プラグインを削除する。更新部４０２は、具体的には、図２１および図２２に後述する動作例３に示すような動作を行う。これにより、更新部４０２は、バックアップを正常に実施可能にすることができる。
【００８４】
更新部４０２は、例えば、第２制御メッセージを受信した場合、同期メッセージを受信するまで待機してもよい。更新部４０２は、同期メッセージを受信し、記憶部４００の記憶内容をバックアップする。更新部４０２は、バックアップした後に、受信した第２制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部４００に記憶されたプラグインを特定する。更新部４０２は、特定したプラグインが、第２制御メッセージから特定されるプラグインと一致すれば、当該プラグインを削除する。更新部４０２は、具体的には、図２６および図２７に後述する動作例４に示すような動作を行う。これにより、更新部４０２は、処理の不整合を防止することができる。
【００８５】
更新部４０２は、プラグインが有効な期間を変更する第３制御メッセージを受信した場合、プラグインが有効な期間を変更してもよい。更新部４０２は、例えば、第３制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部４００に記憶されたプラグインが有効な期間を変更する。これにより、更新部４０２は、プラグインが有効な期間を更新することができる。
【００８６】
更新部４０２は、プラグインを更新する第４制御メッセージを受信した場合、プラグインを更新してもよい。更新部４０２は、例えば、第１制御メッセージに応じたプラグインの追加と、第２制御メッセージに応じたプラグインの削除とを組み合わせることにより、プラグインの更新を実現する。これにより、更新部４０２は、プラグインを更新することができ、処理プログラムを更新することができる。
【００８７】
更新部４０２は、例えば、第１制御メッセージに応じたプラグインの追加と、第３制御メッセージに応じたプラグインが有効な期間の変更によるプラグインの削除とを組み合わせることにより、プラグインの更新を実現してもよい。これにより、更新部４０２は、プラグインを更新することができ、処理プログラムを更新することができる。
【００８８】
実行部４０３は、プラグインを実行する。
【００８９】
実行部４０３は、例えば、イベントメッセージを受信した場合、受信したイベントメッセージから特定されるイベントの種別を示す情報に対応付けて記憶部４００に記憶されたプラグインを実行する。これにより、実行部４０３は、イベントメッセージを処理することができる。
【００９０】
実行部４０３は、例えば、イベントメッセージを受信した場合、受信したイベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部４００に記憶されたプラグインを実行する。実行部４０３は、具体的には、図５〜図７に後述する動作例１に示すような動作を行う。これにより、実行部４０３は、イベントの発生元ごとに、イベントメッセージの処理内容を変更することができる。
【００９１】
実行部４０３は、例えば、受信したイベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部４００に記憶されたプラグインが有効な期間を特定してもよい。実行部４０３は、特定した期間に、イベントメッセージから特定されるイベントが発生した時点が含まれれば、当該プラグインを実行する。実行部４０３は、具体的には、図１５および図１６に後述する動作例２に示すような動作を行う。これにより、実行部４０３は、処理の不整合を防止することができる。
【００９２】
出力部４０４は、プラグインの実行結果を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークＩ／Ｆ３０３による外部装置への送信、または、メモリ３０２や記録媒体３０５などの記憶領域への記憶である。これにより、出力部４０４は、プラグインの実行結果を利用可能にすることができる。
【００９３】
出力部４０４は、各機能部の処理結果を出力してもよい。これにより、出力部４０４は、各機能部の処理結果を利用者に通知可能にし、情報処理装置１００の管理や運用、例えば、情報処理装置１００の設定値の更新などを支援することができ、情報処理装置１００の利便性の向上を図ることができる。
【００９４】
（並列分散処理システム２００の動作例１）
次に、図５〜図７を用いて、並列分散処理システム２００の動作例１について説明する。まず、図５の説明に移行し、動作例１における並列分散処理システム２００の動作の流れについて説明する。
【００９５】
図５は、動作例１における並列分散処理システム２００の動作の流れを示す説明図である。動作例１において、管理ノード２０２は、イベントメッセージと同じ経路で、制御メッセージを分散ノード２０１に送信する。
【００９６】
管理ノード２０２は、具体的には、イベントメッセージを受け付けると、入力バッファに追加する。また、管理ノード２０２は、具体的には、それぞれの分散ノード２０１に宛てた制御メッセージを送信し始めてから送信し終えるまでの間に、イベントメッセージが混在して送信されないように、制御メッセージを纏めて入力バッファに追加する。管理ノード２０２は、入力バッファの格納順に、イベントメッセージや制御メッセージを、分散ノード２０１に送信する。
【００９７】
分散ノード２０１は、イベントメッセージと制御メッセージとを、受信順に処理する。分散ノード２０１は、例えば、制御メッセージを受信すると、制御メッセージに応じてプラグインを追加、削除または更新する。分散ノード２０１は、例えば、イベントメッセージを受信すると、イベントメッセージに応じてプラグインを実行する。これにより、分散ノード２０１は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。
【００９８】
また、並列分散処理システム２００は、それぞれの分散ノード２０１に一斉に制御メッセージが送信されるようにして、処理の不整合が発生しないようにすることができる。並列分散処理システム２００は、例えば、制御メッセージより前に送信されるイベントメッセージが、一律で、更新前の処理プログラムによって処理されるようにすることができる。一方で、並列分散処理システム２００は、例えば、制御メッセージより後に送信されるイベントメッセージが、一律で、更新後の処理プログラムによって処理されるようにすることができる。
【００９９】
また、分散ノード２０１は、処理プログラムを更新する際もイベントメッセージを受信可能である。並列分散処理システム２００は、それぞれの分散ノード２０１に制御メッセージを送信した後、イベントメッセージの送信を停止せずに、続けてイベントメッセージを送信することができる。このため、並列分散処理システム２００は、停止せずに処理プログラムを動的に更新することができ、処理のタイムアウトの発生を抑制することができる。また、並列分散処理システム２００は、分散ノード２０１の数を増大させずに、処理プログラムの更新を実現することができる。
【０１００】
次に、図６の説明に移行し、動作例１における各種メッセージの一例について説明した後、図７の説明に移行し、動作例１における各種メッセージを受信する場合についての分散ノード２０１の具体的な機能的構成例について説明する。
【０１０１】
図６は、動作例１における各種メッセージの一例を示す説明図である。動作例１において、並列分散処理システム２００は、例えば、イベントメッセージ６０１、プラグインを追加する制御メッセージ６０２、プラグインを削除する制御メッセージ６０３、プラグインを更新する制御メッセージ６０４を利用する。
【０１０２】
イベントメッセージ６０１は、ＩＤと、時刻と、種別と、１以上のステートとのフィールドを有する。ステートは、ステート名とステート内容との組み合わせである。ＩＤのフィールドには、イベントの発生元の事物を識別する情報としてＩＤが設定される。時刻のフィールドには、イベントの発生時刻が設定される。種別のフィールドには、メッセージの種別として「イベント」が設定される。
【０１０３】
ステートのフィールドには、事物について発生したイベントに関する情報が設定される。ステートのフィールドには、例えば、ステート名と、ステート内容とが設定される。ステート名は、イベントの種別を示す情報である。ステート名は、具体的には、事物に関する何の状態が変化したイベントであるかを示す。状態は、例えば、速度である。ステート内容は、イベントの内容を示す情報である。ステート内容は、具体的には、事物の状態を示す特徴量である。特徴量は、速度の値である。
【０１０４】
プラグインを追加する制御メッセージ６０２は、ＩＤと、時刻と、種別と、対象ステート名と、追加するプラグインの置き場所についての情報とのフィールドを有する。ＩＤのフィールドには、イベントの発生元の事物を識別する情報としてＩＤが設定される。時刻のフィールドには、制御メッセージの生成時刻が設定される。種別のフィールドには、メッセージの種別として「プラグイン追加」が設定される。
【０１０５】
対象ステート名のフィールドには、プラグインの実行条件となるイベントの種別を示す情報として対象ステート名が設定される。追加するプラグインの置き場所についての情報のフィールドには、プラグインの実行形式データであるプラグインデータが記憶された記憶領域のアドレスが設定される。
【０１０６】
プラグインを削除する制御メッセージ６０３は、ＩＤと、時刻と、種別と、対象ステート名と、削除するプラグインの置き場所についての情報とのフィールドを有する。ＩＤのフィールドには、イベントの発生元の事物を識別する情報としてＩＤが設定される。時刻のフィールドには、制御メッセージの生成時刻が設定される。種別のフィールドには、メッセージの種別として「プラグイン削除」が設定される。
【０１０７】
対象ステート名のフィールドには、プラグインの実行条件となるイベントの種別を示す情報として対象ステート名が設定される。削除するプラグインの置き場所についての情報のフィールドには、プラグインの実行形式データであるプラグインデータが記憶された記憶領域のアドレスが設定される。
【０１０８】
プラグインを更新する制御メッセージ６０４は、ＩＤと、時刻と、種別と、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報とのフィールドを有する。ＩＤのフィールドには、イベントの発生元の事物を識別する情報としてＩＤが設定される。時刻のフィールドには、制御メッセージの生成時刻が設定される。種別のフィールドには、メッセージの種別として「プラグイン更新」が設定される。
【０１０９】
対象ステート名のフィールドには、プラグインの実行条件となるイベントの種別を示す情報として対象ステート名が設定される。更新対象のプラグインの置き場所についての情報のフィールドには、更新により削除されるプラグインの実行形式データであるプラグインデータが記憶された記憶領域のアドレスが設定される。新しいプラグインの置き場所についての情報のフィールドには、更新により追加されるプラグインの実行形式データであるプラグインデータが記憶された記憶領域のアドレスが設定される。
【０１１０】
図７は、動作例１における分散ノード２０１の具体的な機能的構成例を示す説明図である。図７に示すように、分散ノード２０１は、仮想オブジェクトテーブル７２１のリスト７２０を有する。仮想オブジェクトテーブル７２１は、例えば、図３に示した分散ノード２０１のメモリ３０２や記録媒体３０５などの記憶領域により実現される。
【０１１１】
仮想オブジェクトテーブル７２１は、ＩＤのフィールドを有する。仮想オブジェクトテーブル７２１は、ステート名と、ステート内容とのフィールドを対応付けて有する。仮想オブジェクトテーブル７２１は、各フィールドに情報を設定することにより、レコードが記憶される。
【０１１２】
ＩＤのフィールドには、イベントの発生元の事物を識別する情報としてＩＤが設定される。ステート名のフィールドには、イベントの種別を示す情報としてステート名が設定される。ステート内容のフィールドには、イベントの内容を示す情報としてステート内容が設定される。
【０１１３】
図７に示すように、分散ノード２０１は、プラグイン管理テーブル７１１のリスト７１０を有する。プラグイン管理テーブル７１１は、例えば、図３に示した分散ノード２０１のメモリ３０２や記録媒体３０５などの記憶領域により実現される。
【０１１４】
プラグイン管理テーブル７１１は、ＩＤのフィールドを有する。プラグイン管理テーブル７１１は、さらに、対象ステート名と、プラグインデータとのフィールドを対応付けて有する。プラグイン管理テーブル７１１は、各フィールドに情報を設定することにより、レコードが記憶される。以下の説明では、対象ステート名とプラグインデータとを合わせて「プラグイン設定情報」と表記する場合がある。
【０１１５】
ＩＤのフィールドには、イベントの発生元の事物を識別する情報としてＩＤが設定される。対象ステート名のフィールドには、プラグインの実行条件となるイベントの種別を示す情報として対象ステート名が設定される。プラグインデータのフィールドには、プラグインの実行形式データであるプラグインデータが設定される。
【０１１６】
図７に示すように、分散ノード２０１は、メッセージ判別部７０１と、制御メッセージパーサ部７０２と、プラグイン管理部７０３と、イベントメッセージパーサ部７０４と、ステート管理部７０５と、プラグイン実行部７０６とを有する。
【０１１７】
メッセージ判別部７０１は、イベントメッセージ６０１、プラグインを追加する制御メッセージ６０２、プラグインを削除する制御メッセージ６０３、プラグインを更新する制御メッセージ６０４のいずれかのメッセージの入力を受け付ける。メッセージ判別部７０１は、入力されたメッセージの種別を判別し、制御メッセージパーサ部７０２またはイベントメッセージパーサ部７０４に引き渡す。
【０１１８】
制御メッセージパーサ部７０２は、プラグインを追加する制御メッセージ６０２、プラグインを削除する制御メッセージ６０３、プラグインを更新する制御メッセージ６０４を解釈する。制御メッセージパーサ部７０２は、例えば、プラグインを追加する制御メッセージ６０２から、ＩＤと、対象ステート名と、追加するプラグインの置き場所についての情報とを抽出し、プラグイン管理部７０３に引き渡す。
【０１１９】
制御メッセージパーサ部７０２は、例えば、プラグインを削除する制御メッセージ６０３から、ＩＤと、対象ステート名と、削除するプラグインの置き場所についての情報とを抽出し、プラグイン管理部７０３に引き渡す。制御メッセージパーサ部７０２は、例えば、プラグインを更新する制御メッセージ６０４から、ＩＤと、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報とを抽出する。制御メッセージパーサ部７０２は、抽出した情報を、プラグイン管理部７０３に引き渡す。
【０１２０】
プラグイン管理部７０３は、制御メッセージパーサ部７０２から引き渡された情報に基づいて、プラグイン管理テーブル７１１を更新する。プラグイン管理部７０３は、例えば、ＩＤと、対象ステート名と、追加するプラグインの置き場所についての情報とを受け付ける。プラグイン管理部７０３は、受け付けたＩＤに対応するプラグイン管理テーブル７１１を特定する。プラグイン管理部７０３は、追加するプラグインの置き場所についての情報に基づいて、追加するプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部７０３は、特定したプラグイン管理テーブル７１１に、受け付けた対象ステート名と、取得したプラグインデータとを対応付けて追加する。
【０１２１】
プラグイン管理部７０３は、例えば、ＩＤと、対象ステート名と、削除するプラグインの置き場所についての情報とを受け付ける。プラグイン管理部７０３は、受け付けたＩＤに対応するプラグイン管理テーブル７１１を特定する。プラグイン管理部７０３は、削除するプラグインの置き場所についての情報に基づいて、削除するプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部７０３は、特定したプラグイン管理テーブル７１１に、受け付けた対象ステート名に対応付けて、取得したプラグインデータと一致するプラグインデータがあれば、当該プラグインデータを削除する。
【０１２２】
プラグイン管理部７０３は、例えば、ＩＤと、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報とを受け付ける。プラグイン管理部７０３は、受け付けたＩＤに対応するプラグイン管理テーブル７１１を特定する。プラグイン管理部７０３は、更新対象のプラグインの置き場所についての情報に基づいて、更新対象であり削除されるプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部７０３は、新しいプラグインの置き場所についての情報に基づいて、新しいプラグインの実行形式データであるプラグインデータを取得する。
【０１２３】
プラグイン管理部７０３は、特定したプラグイン管理テーブル７１１に、受け付けた対象ステート名に対応付けて、更新対象であり削除されるプラグインデータと一致するプラグインデータがあれば、当該プラグインデータを削除する。プラグイン管理部７０３は、特定したプラグイン管理テーブル７１１に、受け付けた対象ステート名と、取得した新しいプラグインデータとを対応付けて追加する。
【０１２４】
イベントメッセージパーサ部７０４は、イベントメッセージ６０１を解釈し、ＩＤと、１以上のステートを抽出し、ステート管理部７０５に引き渡す。ステート管理部７０５は、ＩＤと、１以上のステートとを受け付ける。ステート管理部７０５は、受け付けたＩＤに対応する仮想オブジェクトテーブル７２１を特定する。ステート管理部７０５は、特定した仮想オブジェクトテーブル７２１を、受け付けた１以上のステートで更新する。ステート管理部７０５は、いずれかのステートのステート内容が変更された場合、ＩＤおよび当該ステートのステート名を含む変更通知を、プラグイン実行部７０６に引き渡す。
【０１２５】
プラグイン実行部７０６は、変更通知に含まれるＩＤに対応するプラグイン管理テーブル７１１を特定する。プラグイン実行部７０６は、変更通知に含まれるステート名で、特定したプラグイン管理テーブル７１１のうちの対象ステート名を検索する。プラグイン実行部７０６は、検索した対象ステート名に対応付けられたプラグインデータを実行する。プラグイン実行部７０６は、対象ステート名が検索できなければ、プラグインデータを実行しない。
【０１２６】
これにより、分散ノード２０１は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。また、並列分散処理システム２００は、それぞれの分散ノード２０１に一斉に制御メッセージが送信されるようにして、処理の不整合が発生しないようにすることができる。並列分散処理システム２００は、例えば、制御メッセージより前に送信されるイベントメッセージが、一律で、更新前の処理プログラムによって処理されるようにすることができる。一方で、並列分散処理システム２００は、例えば、制御メッセージより後に送信されるイベントメッセージが、一律で、更新後の処理プログラムによって処理されるようにすることができる。
【０１２７】
また、分散ノード２０１は、処理プログラムを更新する際もイベントメッセージを受信可能である。並列分散処理システム２００は、それぞれの分散ノード２０１に制御メッセージを送信した後、イベントメッセージの送信を停止せずに、続けてイベントメッセージを送信することができる。このため、並列分散処理システム２００は、停止せずに処理プログラムを動的に更新することができ、処理のタイムアウトの発生を抑制することができる。また、並列分散処理システム２００は、分散ノード２０１の数を増大させずに、処理プログラムの更新を実現することができる。また、管理ノード２０２は、イベントメッセージの送信を中断しなくてよいため、入力バッファに要する記憶領域のサイズの低減化を図ることができる。
【０１２８】
（動作例１における全体処理手順）
次に、図８を用いて、分散ノード２０１が実行する、動作例１における全体処理手順の一例について説明する。全体処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０１２９】
図８は、動作例１における全体処理手順の一例を示すフローチャートである。図８において、分散ノード２０１は、メッセージの到着まで待機する（ステップＳ８０１）。そして、分散ノード２０１は、ステップＳ８０２の処理に移行する。
【０１３０】
ステップＳ８０２では、分散ノード２０１は、処理待ちのメッセージがあるか否かを判定する（ステップＳ８０２）。ここで、処理待ちのメッセージがない場合（ステップＳ８０２：Ｎｏ）、分散ノード２０１は、ステップＳ８０１の処理に戻る。一方で、処理待ちのメッセージがある場合（ステップＳ８０２：Ｙｅｓ）、分散ノード２０１は、ステップＳ８０３の処理に移行する。
【０１３１】
ステップＳ８０３では、分散ノード２０１は、処理待ちのメッセージを１つ取り出す（ステップＳ８０３）。
【０１３２】
次に、分散ノード２０１は、取り出した処理対象のメッセージが制御メッセージであるか否かを判定する（ステップＳ８０４）。ここで、制御メッセージではない場合（ステップＳ８０４：Ｎｏ）、分散ノード２０１は、ステップＳ８０５の処理に移行する。一方で、制御メッセージである場合（ステップＳ８０４：Ｙｅｓ）、分散ノード２０１は、ステップＳ８０６の処理に移行する。
【０１３３】
ステップＳ８０５では、分散ノード２０１は、図９に後述するイベントメッセージ処理を実行する（ステップＳ８０５）。そして、分散ノード２０１は、ステップＳ８０２の処理に戻る。
【０１３４】
ステップＳ８０６では、分散ノード２０１は、図１１に後述する制御系イベント処理を実行する（ステップＳ８０６）。そして、分散ノード２０１は、ステップＳ８０２の処理に戻る。
【０１３５】
（動作例１におけるイベントメッセージ処理手順）
次に、図９を用いて、分散ノード２０１が実行する、動作例１におけるイベントメッセージ処理手順の一例について説明する。イベントメッセージ処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０１３６】
図９は、動作例１におけるイベントメッセージ処理手順の一例を示すフローチャートである。図９において、分散ノード２０１は、仮想オブジェクトテーブル７２１のリスト７２０のうちの仮想オブジェクトテーブル７２１を選択する（ステップＳ９０１）。
【０１３７】
次に、分散ノード２０１は、選択した仮想オブジェクトテーブル７２１のＩＤが、取り出したイベントメッセージのＩＤと一致するか否かを判定する（ステップＳ９０２）。ここで、一致する場合（ステップＳ９０２：Ｙｅｓ）、分散ノード２０１は、ステップＳ９０６の処理に移行する。一方で、一致しない場合（ステップＳ９０２：Ｎｏ）、分散ノード２０１は、ステップＳ９０３の処理に移行する。
【０１３８】
ステップＳ９０３では、分散ノード２０１は、仮想オブジェクトテーブル７２１のリスト７２０のうちのすべての仮想オブジェクトテーブル７２１を選択したか否かを判定する（ステップＳ９０３）。ここで、未選択の仮想オブジェクトテーブル７２１がある場合（ステップＳ９０３：Ｎｏ）、分散ノード２０１は、ステップＳ９０１の処理に戻る。一方で、すべての仮想オブジェクトテーブル７２１を選択している場合（ステップＳ９０３：Ｙｅｓ）、分散ノード２０１は、ステップＳ９０４の処理に移行する。
【０１３９】
ステップＳ９０４では、分散ノード２０１は、新しい仮想オブジェクトテーブル７２１を生成し、仮想オブジェクトテーブル７２１のリスト７２０に登録する（ステップＳ９０４）。次に、分散ノード２０１は、登録した仮想オブジェクトテーブル７２１のＩＤに、イベントメッセージのＩＤを設定する（ステップＳ９０５）。そして、分散ノード２０１は、ステップＳ９０６の処理に移行する。
【０１４０】
ステップＳ９０６では、分散ノード２０１は、イベントメッセージのうちのステート名を選択する（ステップＳ９０６）。次に、分散ノード２０１は、仮想オブジェクトテーブル７２１のうちのステート名を選択する（ステップＳ９０７）。
【０１４１】
そして、分散ノード２０１は、イベントメッセージのうちのステート名と、仮想オブジェクトテーブル７２１のうちのステート名とが一致するか否かを判定する（ステップＳ９０８）。一致しない場合（ステップＳ９０８：Ｎｏ）、分散ノード２０１は、ステップＳ９０９の処理に移行する。一方で、一致する場合（ステップＳ９０８：Ｙｅｓ）、分散ノード２０１は、ステップＳ９１１の処理に移行する。
【０１４２】
ステップＳ９０９では、分散ノード２０１は、仮想オブジェクトテーブル７２１のうちのすべてのステート名を選択したか否かを判定する（ステップＳ９０９）。ここで、未選択のステート名がある場合（ステップＳ９０９：Ｎｏ）、分散ノード２０１は、ステップＳ９０７の処理に戻る。一方で、すべてのステート名を選択している場合（ステップＳ９０９：Ｙｅｓ）、分散ノード２０１は、ステップＳ９１０の処理に移行する。
【０１４３】
ステップＳ９１０では、分散ノード２０１は、仮想オブジェクトテーブル７２１に、イベントメッセージのうちのステート名とステート内容とを対応付けて追加する（ステップＳ９１０）。そして、分散ノード２０１は、ステップＳ９１３の処理に移行する。
【０１４４】
ステップＳ９１１では、分散ノード２０１は、イベントメッセージのうちのステート内容と、仮想オブジェクトテーブル７２１のうちのステート内容とが一致するか否かを判定する（ステップＳ９１１）。ここで、一致しない場合（ステップＳ９１１：Ｎｏ）、分散ノード２０１は、ステップＳ９１２の処理に移行する。一方で、一致する場合（ステップＳ９１１：Ｙｅｓ）、分散ノード２０１は、ステップＳ９１４の処理に移行する。
【０１４５】
ステップＳ９１２では、分散ノード２０１は、イベントメッセージのうちのステート内容で、仮想オブジェクトテーブル７２１のうちのステート内容を更新する（ステップＳ９１２）。そして、分散ノード２０１は、ステップＳ９１３の処理に移行する。
【０１４６】
ステップＳ９１３では、分散ノード２０１は、ステート内容に対して、図１０に後述するプラグイン処理を実行する（ステップＳ９１３）。そして、分散ノード２０１は、ステップＳ９１４の処理に移行する。
【０１４７】
ステップＳ９１４では、分散ノード２０１は、イベントメッセージのうちのすべてのステート名を選択したか否かを判定する（ステップＳ９１４）。ここで、未選択のステート名がある場合（ステップＳ９１４：Ｎｏ）、分散ノード２０１は、ステップＳ９０６の処理に戻る。一方で、すべてのステート名を選択している場合（ステップＳ９１４：Ｙｅｓ）、分散ノード２０１は、イベントメッセージ処理を終了する。
【０１４８】
（動作例１におけるプラグイン処理手順）
次に、図１０を用いて、分散ノード２０１が実行する、動作例１におけるプラグイン処理手順の一例について説明する。プラグイン処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０１４９】
図１０は、動作例１におけるプラグイン処理手順の一例を示すフローチャートである。図１０において、分散ノード２０１は、プラグイン管理テーブル７１１のリスト７１０のうちのプラグイン管理テーブル７１１を選択する（ステップＳ１００１）。
【０１５０】
次に、分散ノード２０１は、選択したプラグイン管理テーブル７１１のＩＤが、取り出したイベントメッセージのＩＤと一致するか否かを判定する（ステップＳ１００２）。ここで、一致しない場合（ステップＳ１００２：Ｎｏ）、分散ノード２０１は、ステップＳ１００３の処理に移行する。一方で、一致する場合（ステップＳ１００２：Ｙｅｓ）、分散ノード２０１は、ステップＳ１００４の処理に移行する。
【０１５１】
ステップＳ１００３では、分散ノード２０１は、プラグイン管理テーブル７１１のリスト７１０のうちのすべてのプラグイン管理テーブル７１１を選択したか否かを判定する（ステップＳ１００３）。ここで、未選択のプラグイン管理テーブル７１１がある場合（ステップＳ１００３：Ｎｏ）、分散ノード２０１は、ステップＳ１００１の処理に戻る。一方で、すべてのプラグイン管理テーブル７１１を選択している場合（ステップＳ１００３：Ｙｅｓ）、分散ノード２０１は、プラグイン処理を終了する。
【０１５２】
ステップＳ１００４では、分散ノード２０１は、プラグイン管理テーブル７１１のうちのプラグイン設定情報を選択する（ステップＳ１００４）。
【０１５３】
次に、分散ノード２０１は、イベントメッセージのステート名とプラグイン設定情報のステート名とが一致するか否かを判定する（ステップＳ１００５）。ここで、一致する場合（ステップＳ１００５：Ｙｅｓ）、分散ノード２０１は、ステップＳ１００６の処理に移行する。一方で、一致しない場合（ステップＳ１００５：Ｎｏ）、分散ノード２０１は、ステップＳ１００７の処理に移行する。
【０１５４】
ステップＳ１００６では、分散ノード２０１は、プラグインを実行する（ステップＳ１００６）。次に、分散ノード２０１は、ステップＳ１００７の処理に移行する。
【０１５５】
ステップＳ１００７では、分散ノード２０１は、プラグイン管理テーブル７１１のうちのすべてのプラグイン設定情報を選択したか否かを判定する（ステップＳ１００７）。ここで、未選択のプラグイン設定情報がある場合（ステップＳ１００７：Ｎｏ）、分散ノード２０１は、ステップＳ１００４の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合（ステップＳ１００７：Ｙｅｓ）、分散ノード２０１は、プラグイン処理を終了する。
【０１５６】
（動作例１における制御系イベント処理手順）
次に、図１１を用いて、分散ノード２０１が実行する、動作例１における制御系イベント処理手順の一例について説明する。制御系イベント処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０１５７】
図１１は、動作例１における制御系イベント処理手順の一例を示すフローチャートである。図１１において、分散ノード２０１は、制御メッセージがプラグイン追加を表すか否かを判定する（ステップＳ１１０１）。ここで、プラグイン追加を表す場合（ステップＳ１１０１：Ｙｅｓ）、分散ノード２０１は、ステップＳ１１０２の処理に移行する。一方で、プラグイン追加を表さない場合（ステップＳ１１０１：Ｎｏ）、分散ノード２０１は、ステップＳ１１０３の処理に移行する。
【０１５８】
ステップＳ１１０２では、分散ノード２０１は、図１２に後述するプラグイン追加処理を実行する（ステップＳ１１０２）。そして、分散ノード２０１は、制御系イベント処理を終了する。
【０１５９】
ステップＳ１１０３では、分散ノード２０１は、制御メッセージがプラグイン削除を表すか否かを判定する（ステップＳ１１０３）。ここで、プラグイン削除を表す場合（ステップＳ１１０３：Ｙｅｓ）、分散ノード２０１は、ステップＳ１１０４の処理に移行する。一方で、プラグイン削除を表さない場合（ステップＳ１１０３：Ｎｏ）、分散ノード２０１は、ステップＳ１１０５の処理に移行する。
【０１６０】
ステップＳ１１０４では、分散ノード２０１は、図１３に後述するプラグイン削除処理を実行する（ステップＳ１１０４）。そして、分散ノード２０１は、制御系イベント処理を終了する。
【０１６１】
ステップＳ１１０５では、分散ノード２０１は、制御メッセージがプラグイン更新を表すか否かを判定する（ステップＳ１１０５）。ここで、プラグイン更新を表す場合（ステップＳ１１０５：Ｙｅｓ）、分散ノード２０１は、ステップＳ１１０６の処理に移行する。一方で、プラグイン更新を表さない場合（ステップＳ１１０５：Ｎｏ）、分散ノード２０１は、制御系イベント処理を終了する。
【０１６２】
ステップＳ１１０６では、分散ノード２０１は、図１４に後述するプラグイン更新処理を実行する（ステップＳ１１０６）。そして、分散ノード２０１は、制御系イベント処理を終了する。
【０１６３】
（動作例１におけるプラグイン追加処理手順）
次に、図１２を用いて、分散ノード２０１が実行する、動作例１におけるプラグイン追加処理手順の一例について説明する。プラグイン追加処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０１６４】
図１２は、動作例１におけるプラグイン追加処理手順の一例を示すフローチャートである。図１２において、分散ノード２０１は、制御メッセージに含まれる追加するプラグインに関する情報に基づいて、プラグインの実行形式データを取得する（ステップＳ１２０１）。次に、分散ノード２０１は、ステップＳ１２０２の処理に移行する。
【０１６５】
ステップＳ１２０２では、分散ノード２０１は、プラグイン管理テーブル７１１のリスト７１０のうちのプラグイン管理テーブル７１１を選択する（ステップＳ１２０２）。
【０１６６】
次に、分散ノード２０１は、制御メッセージのＩＤとプラグイン管理テーブル７１１のＩＤとが一致するか否かを判定する（ステップＳ１２０３）。ここで、一致する場合（ステップＳ１２０３：Ｙｅｓ）、分散ノード２０１は、ステップＳ１２０４の処理に移行する。一方で、一致しない場合（ステップＳ１２０３：Ｎｏ）、分散ノード２０１は、ステップＳ１２０５の処理に移行する。
【０１６７】
ステップＳ１２０４では、分散ノード２０１は、プラグイン管理テーブル７１１のプラグイン設定情報に、制御メッセージに対応する情報を追加する（ステップＳ１２０４）。そして、分散ノード２０１は、ステップＳ１２０８の処理に移行する。
【０１６８】
ステップＳ１２０５では、分散ノード２０１は、プラグイン管理テーブル７１１のリスト７１０のうちのすべてのプラグイン管理テーブル７１１を選択したか否かを判定する（ステップＳ１２０５）。ここで、未選択のプラグイン管理テーブル７１１がある場合（ステップＳ１２０５：Ｎｏ）、分散ノード２０１は、ステップＳ１２０２の処理に戻る。一方で、すべてのプラグイン管理テーブル７１１を選択している場合（ステップＳ１２０５：Ｙｅｓ）、分散ノード２０１は、ステップＳ１２０６の処理に移行する。
【０１６９】
ステップＳ１２０６では、分散ノード２０１は、新しいプラグイン管理テーブル７１１を生成し、プラグイン管理テーブル７１１のリスト７１０に登録する（ステップＳ１２０６）。次に、分散ノード２０１は、生成したプラグイン管理テーブル７１１のＩＤに制御メッセージのＩＤを設定する（ステップＳ１２０７）。そして、分散ノード２０１は、ステップＳ１２０８の処理に移行する。
【０１７０】
ステップＳ１２０８では、分散ノード２０１は、プラグイン管理テーブル７１１のプラグイン設定情報に、制御メッセージに対応する情報を追加する（ステップＳ１２０８）。そして、分散ノード２０１は、プラグイン追加処理を終了する。
【０１７１】
（動作例１におけるプラグイン削除処理手順）
次に、図１３を用いて、分散ノード２０１が実行する、動作例１におけるプラグイン削除処理手順の一例について説明する。プラグイン削除処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０１７２】
図１３は、動作例１におけるプラグイン削除処理手順の一例を示すフローチャートである。図１３において、分散ノード２０１は、制御メッセージに含まれる削除するプラグインに関する情報に基づいて、プラグインの実行形式データを取得する（ステップＳ１３０１）。次に、分散ノード２０１は、ステップＳ１３０２の処理に移行する。
【０１７３】
ステップＳ１３０２では、分散ノード２０１は、プラグイン管理テーブル７１１のリスト７１０のうちのプラグイン管理テーブル７１１を選択する（ステップＳ１３０２）。
【０１７４】
次に、分散ノード２０１は、制御メッセージのＩＤとプラグイン管理テーブル７１１のＩＤとが一致するか否かを判定する（ステップＳ１３０３）。ここで、一致しない場合（ステップＳ１３０３：Ｎｏ）、分散ノード２０１は、ステップＳ１３０４の処理に移行する。一方で、一致する場合（ステップＳ１３０３：Ｙｅｓ）、分散ノード２０１は、ステップＳ１３０５の処理に移行する。
【０１７５】
ステップＳ１３０４では、分散ノード２０１は、プラグイン管理テーブル７１１のリスト７１０のうちすべてのプラグイン管理テーブル７１１を選択したか否かを判定する（ステップＳ１３０４）。ここで、未選択のプラグイン管理テーブル７１１がある場合（ステップＳ１３０４：Ｎｏ）、分散ノード２０１は、ステップＳ１３０２の処理に戻る。一方で、すべてのプラグイン管理テーブル７１１を選択している場合（ステップＳ１３０４：Ｙｅｓ）、分散ノード２０１は、プラグイン削除処理を終了する。
【０１７６】
ステップＳ１３０５では、分散ノード２０１は、プラグイン管理テーブル７１１のうちのプラグイン設定情報を選択する（ステップＳ１３０５）。
【０１７７】
次に、分散ノード２０１は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する（ステップＳ１３０６）。ここで、一致しない場合（ステップＳ１３０６：Ｎｏ）、分散ノード２０１は、ステップＳ１３０９の処理に移行する。一方で、一致する場合（ステップＳ１３０６：Ｙｅｓ）、分散ノード２０１は、ステップＳ１３０７の処理に移行する。
【０１７８】
ステップＳ１３０７では、分散ノード２０１は、削除するプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する（ステップＳ１３０７）。ここで、一致しない場合（ステップＳ１３０７：Ｎｏ）、分散ノード２０１は、ステップＳ１３０９の処理に移行する。一方で、一致する場合（ステップＳ１３０７：Ｙｅｓ）、分散ノード２０１は、ステップＳ１３０８の処理に移行する。
【０１７９】
ステップＳ１３０８では、分散ノード２０１は、プラグイン設定情報を削除する（ステップＳ１３０８）。そして、分散ノード２０１は、ステップＳ１３０９の処理に移行する。
【０１８０】
ステップＳ１３０９では、分散ノード２０１は、プラグイン管理テーブル７１１のうちのすべてのプラグイン設定情報を選択したか否かを判定する（ステップＳ１３０９）。ここで、未選択のプラグイン設定情報がある場合（ステップＳ１３０９：Ｎｏ）、分散ノード２０１は、ステップＳ１３０５の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合（ステップＳ１３０９：Ｙｅｓ）、分散ノード２０１は、プラグイン削除処理を終了する。
【０１８１】
（動作例１におけるプラグイン更新処理手順）
次に、図１４を用いて、分散ノード２０１が実行する、動作例１におけるプラグイン更新処理手順の一例について説明する。プラグイン更新処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０１８２】
図１４は、動作例１におけるプラグイン更新処理手順の一例を示すフローチャートである。図１４において、分散ノード２０１は、制御メッセージに含まれる更新元のプラグインに関する情報に基づいて、更新元のプラグインの実行形式データを取得する（ステップＳ１４０１）。
【０１８３】
次に、分散ノード２０１は、制御メッセージに含まれる更新先のプラグインに関する情報に基づいて、更新先のプラグインの実行形式データを取得する（ステップＳ１４０２）。そして、分散ノード２０１は、ステップＳ１４０３の処理に移行する。
【０１８４】
ステップＳ１４０３では、分散ノード２０１は、プラグイン管理テーブル７１１のリスト７１０のうちのプラグイン管理テーブル７１１を選択する（ステップＳ１４０３）。
【０１８５】
次に、分散ノード２０１は、制御メッセージのＩＤとプラグイン管理テーブル７１１のＩＤとが一致するか否かを判定する（ステップＳ１４０４）。ここで、一致しない場合（ステップＳ１４０４：Ｎｏ）、分散ノード２０１は、ステップＳ１４０５の処理に移行する。一方で、一致する場合（ステップＳ１４０４：Ｙｅｓ）、分散ノード２０１は、ステップＳ１４０６の処理に移行する。
【０１８６】
ステップＳ１４０５では、分散ノード２０１は、プラグイン管理テーブル７１１のリスト７１０のうちすべてのプラグイン管理テーブル７１１を選択したか否かを判定する（ステップＳ１４０５）。ここで、未選択のプラグイン管理テーブル７１１がある場合（ステップＳ１４０５：Ｎｏ）、分散ノード２０１は、ステップＳ１４０３の処理に戻る。一方で、すべてのプラグイン管理テーブル７１１を選択している場合（ステップＳ１４０５：Ｙｅｓ）、分散ノード２０１は、プラグイン更新処理を終了する。
【０１８７】
ステップＳ１４０６では、分散ノード２０１は、プラグイン管理テーブル７１１のうちのプラグイン設定情報を選択する（ステップＳ１４０６）。
【０１８８】
次に、分散ノード２０１は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する（ステップＳ１４０７）。ここで、一致しない場合（ステップＳ１４０７：Ｎｏ）、分散ノード２０１は、ステップＳ１４１０の処理に移行する。一方で、一致する場合（ステップＳ１４０７：Ｙｅｓ）、分散ノード２０１は、ステップＳ１４０８の処理に移行する。
【０１８９】
ステップＳ１４０８では、分散ノード２０１は、更新元のプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する（ステップＳ１４０８）。ここで、一致しない場合（ステップＳ１４０８：Ｎｏ）、分散ノード２０１は、ステップＳ１４１０の処理に移行する。一方で、一致する場合（ステップＳ１４０８：Ｙｅｓ）、分散ノード２０１は、ステップＳ１４０９の処理に移行する。
【０１９０】
ステップＳ１４０９では、分散ノード２０１は、プラグイン設定情報のプラグインデータを、更新先のプラグインの実行形式データで更新する（ステップＳ１４０９）。そして、分散ノード２０１は、ステップＳ１４１０の処理に移行する。
【０１９１】
ステップＳ１４１０では、分散ノード２０１は、プラグイン管理テーブル７１１のうちのすべてのプラグイン設定情報を選択したか否かを判定する（ステップＳ１４１０）。ここで、未選択のプラグイン設定情報がある場合（ステップＳ１４１０：Ｎｏ）、分散ノード２０１は、ステップＳ１４０６の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合（ステップＳ１４１０：Ｙｅｓ）、分散ノード２０１は、プラグイン更新処理を終了する。
【０１９２】
ここで、分散ノード２０１は、一部ステップの処理の順序を入れ替えて実行してもよい場合がある。また、分散ノード２０１は、一部ステップの処理を省略してもよい場合がある。
【０１９３】
（並列分散処理システム２００の動作例２）
次に、図１５および図１６を用いて、並列分散処理システム２００の動作例２について説明する。上述した動作例１は、制御メッセージを受信したタイミングで、プラグインをプラグイン管理テーブルに記憶し、プラグインを有効化する動作例である。有効化は、プラグインの実行形式データであるプラグインデータを実行可能にすることである。
【０１９４】
これに対し、動作例２は、プラグインが有効な期間が設定され、制御メッセージを受信したタイミングに関わらず、プラグインが有効な期間になってからプラグインを有効化する動作例である。これによれば、動作例２は、ネットワーク遅延などの原因で、イベントメッセージと制御メッセージとの分散ノード２０１における到着順が入れ替わった場合にも、処理の不整合を防止することができる。
【０１９５】
まず、図１５の説明に移行し、動作例２における各種メッセージの一例について説明した後、図１６の説明に移行し、動作例２における各種メッセージを受信する場合についての分散ノード２０１の具体的な機能的構成例について説明する。
【０１９６】
図１５は、動作例２における各種メッセージの一例を示す説明図である。動作例２において、並列分散処理システム２００は、例えば、イベントメッセージ１５０１、プラグインを追加する制御メッセージ１５０２、プラグインの有効期限を変更する制御メッセージ１５０３、プラグインを更新する制御メッセージ１５０４を利用する。
【０１９７】
イベントメッセージ１５０１は、図６に示したイベントメッセージ６０１と同様であるため、説明を省略する。
【０１９８】
プラグインを追加する制御メッセージ１５０２は、ＩＤと、時刻と、種別と、対象ステート名と、追加するプラグインの置き場所についての情報と、開始時間と、終了時間とのフィールドを有する。ＩＤと、時刻と、種別と、対象ステート名と、追加するプラグインの置き場所についての情報とのフィールドは、図６に示したプラグインを追加する制御メッセージ６０２と同様であるため、説明を省略する。開始時間のフィールドには、追加するプラグインの有効期限が開始する時刻が設定される。終了時間のフィールドには、追加するプラグインの有効期限が終了する時刻が設定される。
【０１９９】
プラグインの有効期限を変更する制御メッセージ１５０３は、ＩＤと、時刻と、種別と、対象ステート名と、有効期限を変更するプラグインの置き場所についての情報と、開始時間と、終了時間とのフィールドを有する。ＩＤのフィールドには、イベントの発生元の事物を識別する情報としてＩＤが設定される。時刻のフィールドには、制御メッセージの生成時刻が設定される。種別のフィールドには、メッセージの種別として「プラグイン有効期限変更」が設定される。
【０２００】
対象ステート名のフィールドには、プラグインの実行条件となるイベントの種別を示す情報として対象ステート名が設定される。有効期限を変更するプラグインの置き場所についての情報のフィールドには、プラグインの実行形式データであるプラグインデータが記憶された記憶領域のアドレスが設定される。開始時間のフィールドには、有効期限を変更するプラグインの有効期限が開始する時刻が設定される。終了時間のフィールドには、有効期限を変更するプラグインの有効期限が終了する時刻が設定される。
【０２０１】
プラグインを更新する制御メッセージ１５０４は、ＩＤと、時刻と、種別と、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報と、開始時間と、終了時間とのフィールドを有する。ＩＤと、時刻と、種別と、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報とのフィールドは、図６に示したプラグインを更新する制御メッセージ６０４と同様であるため、説明を省略する。開始時間のフィールドには、新しいプラグインの有効期限が開始する時刻が設定される。終了時間のフィールドには、新しいプラグインの有効期限が終了する時刻が設定される。
【０２０２】
図１６は、動作例２における分散ノード２０１の具体的な機能的構成例を示す説明図である。図１６に示すように、分散ノード２０１は、仮想オブジェクトテーブル１６２１のリスト１６２０を有する。仮想オブジェクトテーブル１６２１は、図７に示した仮想オブジェクトテーブル７２１と同様であるため、説明を省略する。
【０２０３】
図１６に示すように、分散ノード２０１は、プラグイン管理テーブル１６１１のリスト１６１０を有する。プラグイン管理テーブル１６１１は、例えば、図３に示した分散ノード２０１のメモリ３０２や記録媒体３０５などの記憶領域により実現される。
【０２０４】
プラグイン管理テーブル１６１１は、ＩＤのフィールドを有する。プラグイン管理テーブル１６１１は、さらに、対象ステート名と、開始時刻と、終了時刻と、プラグインデータとのフィールドを対応付けて有する。プラグイン管理テーブル１６１１は、各フィールドに情報を設定することにより、レコードが記憶される。以下の説明では、対象ステート名と、開始時刻と、終了時刻と、プラグインデータとを合わせて「プラグイン設定情報」と表記する場合がある。
【０２０５】
ＩＤのフィールドには、イベントの発生元の事物を識別する情報としてＩＤが設定される。対象ステート名のフィールドには、プラグインの実行条件となるイベントの種別を示す情報として対象ステート名が設定される。開始時刻のフィールドには、プラグインの有効期限の開始時刻が設定される。終了時刻のフィールドには、プラグインの有効期限の終了時刻が設定される。プラグインデータのフィールドには、プラグインの実行形式データであるプラグインデータが設定される。
【０２０６】
図１６に示すように、分散ノード２０１は、メッセージ判別部１６０１と、制御メッセージパーサ部１６０２と、プラグイン管理部１６０３と、イベントメッセージパーサ部１６０４と、ステート管理部１６０５と、プラグイン実行部１６０６とを有する。
【０２０７】
メッセージ判別部１６０１は、イベントメッセージ１５０１、プラグインを追加する制御メッセージ１５０２、プラグインの有効期限を変更する制御メッセージ１５０３、プラグインを更新する制御メッセージ１５０４のいずれかのメッセージの入力を受け付ける。メッセージ判別部１６０１は、入力されたメッセージの種別を判別し、制御メッセージパーサ部１６０２またはイベントメッセージパーサ部１６０４に引き渡す。
【０２０８】
制御メッセージパーサ部１６０２は、プラグインを追加する制御メッセージ１５０２、プラグインの有効期限を変更する制御メッセージ１５０３、プラグインを更新する制御メッセージ１５０４を解釈する。制御メッセージパーサ部１６０２は、例えば、プラグインを追加する制御メッセージ１５０２から、ＩＤと、対象ステート名と、追加するプラグインの置き場所についての情報と、開始時間と、終了時間とを抽出し、プラグイン管理部１６０３に引き渡す。
【０２０９】
制御メッセージパーサ部１６０２は、例えば、プラグインの有効期限を変更する制御メッセージ１５０３から、ＩＤと、対象ステート名と、有効期限を変更するプラグインの置き場所についての情報と、開始時間と、終了時間とを抽出する。制御メッセージパーサ部１６０２は、抽出した情報を、プラグイン管理部１６０３に引き渡す。制御メッセージパーサ部１６０２は、例えば、制御メッセージ１５０４から、ＩＤと、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報と、開始時間と、終了時間とを抽出する。制御メッセージパーサ部１６０２は、抽出した情報を、プラグイン管理部１６０３に引き渡す。
【０２１０】
プラグイン管理部１６０３は、制御メッセージパーサ部１６０２から引き渡された情報に基づいて、プラグイン管理テーブル１６１１を更新する。プラグイン管理部１６０３は、例えば、ＩＤと、対象ステート名と、追加するプラグインの置き場所についての情報と、開始時間と、終了時間とを受け付ける。プラグイン管理部１６０３は、受け付けたＩＤに対応するプラグイン管理テーブル１６１１を特定する。プラグイン管理部１６０３は、追加するプラグインの置き場所についての情報に基づいて、追加するプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部１６０３は、特定したプラグイン管理テーブル１６１１に、受け付けた対象ステート名と、開始時間と、終了時間と、取得したプラグインデータとを対応付けて追加する。
【０２１１】
プラグイン管理部１６０３は、例えば、ＩＤと、対象ステート名と、有効期限を変更するプラグインの置き場所についての情報と、開始時間と、終了時間とを受け付ける。プラグイン管理部１６０３は、受け付けたＩＤに対応するプラグイン管理テーブル１６１１を特定する。プラグイン管理部１６０３は、有効期限を変更するプラグインの置き場所についての情報に基づいて、有効期限を変更するプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部１６０３は、特定したプラグイン管理テーブル１６１１に、受け付けた対象ステート名に対応付けて、取得したプラグインデータと一致するプラグインデータがあれば、当該プラグインデータの開始時刻と終了時刻とを変更する。
【０２１２】
プラグイン管理部１６０３は、例えば、ＩＤと、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報と、開始時間と、終了時間とを受け付ける。プラグイン管理部１６０３は、受け付けたＩＤに対応するプラグイン管理テーブル１６１１を特定する。プラグイン管理部１６０３は、更新対象のプラグインの置き場所についての情報に基づいて、更新対象であり削除されるプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部１６０３は、新しいプラグインの置き場所についての情報に基づいて、新しいプラグインの実行形式データであるプラグインデータを取得する。
【０２１３】
プラグイン管理部１６０３は、特定したプラグイン管理テーブル１６１１に、受け付けた対象ステート名に対応付けて、更新対象であり有効期限の変更により削除されるプラグインデータと一致するプラグインデータがあるか否かを判定する。プラグイン管理部１６０３は、プラグインデータがあれば、当該プラグインデータの有効期限の終了時刻を、受け付けた開始時間の単位時間前に設定する。プラグイン管理部１６０３は、特定したプラグイン管理テーブル１６１１に、受け付けた対象ステート名と、開始時間と、終了時間と、取得した新しいプラグインデータとを対応付けて追加する。プラグイン管理部１６０３は、有効期限を過ぎたプラグインがあれば、当該プラグインの実行形式データであるプラグインデータを、プラグイン管理テーブル１６１１から削除する。
【０２１４】
イベントメッセージパーサ部１６０４は、イベントメッセージ１５０１を解釈し、ＩＤと、時刻と、１以上のステートを抽出し、ステート管理部１６０５に引き渡す。ステート管理部１６０５は、ＩＤと、時刻と、１以上のステートとを受け付ける。ステート管理部１６０５は、受け付けたＩＤに対応する仮想オブジェクトテーブル１６２１を特定する。ステート管理部１６０５は、特定した仮想オブジェクトテーブル１６２１を、受け付けた１以上のステートで更新する。ステート管理部１６０５は、いずれかのステートのステート内容が変更された場合、抽出したＩＤ、抽出した時刻および当該ステートのステート名を含む変更通知を、プラグイン実行部１６０６に引き渡す。
【０２１５】
プラグイン実行部１６０６は、変更通知に含まれるＩＤに対応するプラグイン管理テーブル１６１１を特定する。プラグイン実行部１６０６は、変更通知に含まれるステート名で、特定したプラグイン管理テーブル１６１１のうちの対象ステート名を検索する。プラグイン実行部１６０６は、検索した対象ステート名に対応付けられた開始時刻から終了時刻までの有効期限に、受け付けた時刻が含まれれば、検索した対象ステート名に対応付けられたプラグインデータを実行する。プラグイン実行部１６０６は、対象ステート名が検索できなければ、プラグインデータを実行しない。
【０２１６】
これにより、分散ノード２０１は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。分散ノード２０１は、例えば、更新対象であり削除される古いプラグインデータの有効期限の終了時刻を、新しいプラグインデータの有効期限の開始時間の単位時間前に設定するため、古いプラグインデータを新しいプラグインデータで更新することができる。また、並列分散処理システム２００は、ネットワーク遅延などの原因で、イベントメッセージと制御メッセージとの分散ノード２０１における到着順が入れ替わった場合にも、処理の不整合を防止することができる。
【０２１７】
（動作例２における全体処理手順）
動作例２における全体処理手順は、図８に示した動作例１における全体処理手順と同様であるため、説明を省略する。また、動作例２における全体処理手順では、図１１に示した動作例１における制御系イベント処理の代わりに、図１８に後述する動作例２における制御系イベント処理が呼び出される。
【０２１８】
（動作例２におけるイベントメッセージ処理手順）
動作例２におけるイベントメッセージ処理手順は、図９に示した動作例１におけるイベントメッセージ処理手順と同様であるため、説明を省略する。また、動作例２におけるイベントメッセージ処理手順では、図１０に示した動作例１におけるプラグイン処理に代わり、図１７に後述する動作例２におけるプラグイン処理が呼び出される。
【０２１９】
（動作例２におけるプラグイン処理手順）
次に、図１７を用いて、分散ノード２０１が実行する、動作例２におけるプラグイン処理手順の一例について説明する。プラグイン処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０２２０】
図１７は、動作例２におけるプラグイン処理手順の一例を示すフローチャートである。図１７において、分散ノード２０１は、プラグイン管理テーブル１６１１のリスト１６１０のうちのプラグイン管理テーブル１６１１を選択する（ステップＳ１７０１）。
【０２２１】
次に、分散ノード２０１は、選択したプラグイン管理テーブル１６１１のＩＤが、取り出したイベントメッセージのＩＤと一致するか否かを判定する（ステップＳ１７０２）。ここで、一致しない場合（ステップＳ１７０２：Ｎｏ）、分散ノード２０１は、ステップＳ１７０３の処理に移行する。一方で、一致する場合（ステップＳ１７０２：Ｙｅｓ）、分散ノード２０１は、ステップＳ１７０４の処理に移行する。
【０２２２】
ステップＳ１７０３では、分散ノード２０１は、プラグイン管理テーブル１６１１のリスト１６１０のうちのすべてのプラグイン管理テーブル１６１１を選択したか否かを判定する（ステップＳ１７０３）。ここで、未選択のプラグイン管理テーブル１６１１がある場合（ステップＳ１７０３：Ｎｏ）、分散ノード２０１は、ステップＳ１７０１の処理に戻る。一方で、すべてのプラグイン管理テーブル１６１１を選択している場合（ステップＳ１７０３：Ｙｅｓ）、分散ノード２０１は、プラグイン処理を終了する。
【０２２３】
ステップＳ１７０４では、分散ノード２０１は、プラグイン管理テーブル１６１１のうちのプラグイン設定情報を選択する（ステップＳ１７０４）。
【０２２４】
次に、分散ノード２０１は、イベントメッセージのステート名とプラグイン設定情報のステート名とが一致するか否かを判定する（ステップＳ１７０５）。ここで、一致する場合（ステップＳ１７０５：Ｙｅｓ）、分散ノード２０１は、ステップＳ１７０６の処理に移行する。一方で、一致しない場合（ステップＳ１７０５：Ｎｏ）、分散ノード２０１は、ステップＳ１７０９の処理に移行する。
【０２２５】
ステップＳ１７０６では、分散ノード２０１は、イベントメッセージの時刻が、プラグインの有効期限内であるか否かを判定する（ステップＳ１７０６）。ここで、有効期限内ではない場合（ステップＳ１７０６：Ｎｏ）、分散ノード２０１は、ステップＳ１７０７の処理に移行する。一方で、有効期限内である場合（ステップＳ１７０６：Ｙｅｓ）、分散ノード２０１は、ステップＳ１７０８の処理に移行する。
【０２２６】
ステップＳ１７０７では、分散ノード２０１は、プラグインを削除する（ステップＳ１７０７）。そして、分散ノード２０１は、ステップＳ１７０９の処理に移行する。
【０２２７】
ステップＳ１７０８では、分散ノード２０１は、プラグインを実行する（ステップＳ１７０８）。そして、分散ノード２０１は、ステップＳ１７０９の処理に移行する。
【０２２８】
ステップＳ１７０９では、分散ノード２０１は、プラグイン管理テーブル１６１１のうちのすべてのプラグイン設定情報を選択したか否かを判定する（ステップＳ１７０９）。ここで、未選択のプラグイン設定情報がある場合（ステップＳ１７０９：Ｎｏ）、分散ノード２０１は、ステップＳ１７０４の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合（ステップＳ１７０９：Ｙｅｓ）、分散ノード２０１は、プラグイン処理を終了する。
【０２２９】
（動作例２における制御系イベント処理手順）
次に、図１８を用いて、分散ノード２０１が実行する、動作例２における制御系イベント処理手順の一例について説明する。制御系イベント処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０２３０】
図１８は、動作例２における制御系イベント処理手順の一例を示すフローチャートである。図１８において、分散ノード２０１は、制御メッセージがプラグイン追加を表すか否かを判定する（ステップＳ１８０１）。ここで、プラグイン追加を表す場合（ステップＳ１８０１：Ｙｅｓ）、分散ノード２０１は、ステップＳ１８０２の処理に移行する。一方で、プラグイン追加を表さない場合（ステップＳ１８０１：Ｎｏ）、分散ノード２０１は、ステップＳ１８０３の処理に移行する。
【０２３１】
ステップＳ１８０２では、分散ノード２０１は、図１２に上述したプラグイン追加処理を実行する（ステップＳ１８０２）。そして、分散ノード２０１は、制御系イベント処理を終了する。
【０２３２】
ステップＳ１８０３では、分散ノード２０１は、制御メッセージが有効期限の変更を表すか否かを判定する（ステップＳ１８０３）。ここで、有効期限の変更を表す場合（ステップＳ１８０３：Ｙｅｓ）、分散ノード２０１は、ステップＳ１８０４の処理に移行する。一方で、有効期限の変更を表さない場合（ステップＳ１８０３：Ｎｏ）、分散ノード２０１は、ステップＳ１８０５の処理に移行する。
【０２３３】
ステップＳ１８０４では、分散ノード２０１は、図１９に後述する有効期限変更処理を実行する（ステップＳ１８０４）。そして、分散ノード２０１は、制御系イベント処理を終了する。
【０２３４】
ステップＳ１８０５では、分散ノード２０１は、制御メッセージがプラグイン更新を表すか否かを判定する（ステップＳ１８０５）。ここで、プラグイン更新を表す場合（ステップＳ１８０５：Ｙｅｓ）、分散ノード２０１は、ステップＳ１８０６の処理に移行する。一方で、プラグイン更新を表さない場合（ステップＳ１８０５：Ｎｏ）、分散ノード２０１は、制御系イベント処理を終了する。
【０２３５】
ステップＳ１８０６では、分散ノード２０１は、図２０に後述するプラグイン更新処理を実行する（ステップＳ１８０６）。そして、分散ノード２０１は、制御系イベント処理を終了する。
【０２３６】
（動作例２におけるプラグイン追加処理手順）
動作例２におけるプラグイン追加処理手順は、図１２に示した動作例１におけるプラグイン追加処理手順と同様であるため、説明を省略する。
【０２３７】
（動作例２における有効期限変更処理手順）
次に、図１９を用いて、分散ノード２０１が実行する、動作例２における有効期限変更処理手順の一例について説明する。有効期限変更処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０２３８】
図１９は、動作例２における有効期限変更処理手順の一例を示すフローチャートである。図１９において、分散ノード２０１は、制御メッセージに含まれる有効期限を変更するプラグインに関する情報に基づいて、プラグインの実行形式データを取得する（ステップＳ１９０１）。次に、分散ノード２０１は、ステップＳ１９０２の処理に移行する。
【０２３９】
ステップＳ１９０２では、分散ノード２０１は、プラグイン管理テーブル１６１１のリスト１６１０のうちのプラグイン管理テーブル１６１１を選択する（ステップＳ１９０２）。
【０２４０】
次に、分散ノード２０１は、制御メッセージのＩＤとプラグイン管理テーブル１６１１のＩＤとが一致するか否かを判定する（ステップＳ１９０３）。ここで、一致しない場合（ステップＳ１９０３：Ｎｏ）、分散ノード２０１は、ステップＳ１９０４の処理に移行する。一方で、一致する場合（ステップＳ１９０３：Ｙｅｓ）、分散ノード２０１は、ステップＳ１９０５の処理に移行する。
【０２４１】
ステップＳ１９０４では、分散ノード２０１は、プラグイン管理テーブル１６１１のリスト１６１０のうちすべてのプラグイン管理テーブル１６１１を選択したか否かを判定する（ステップＳ１９０４）。ここで、未選択のプラグイン管理テーブル１６１１がある場合（ステップＳ１９０４：Ｎｏ）、分散ノード２０１は、ステップＳ１９０２の処理に戻る。一方で、すべてのプラグイン管理テーブル１６１１を選択している場合（ステップＳ１９０４：Ｙｅｓ）、分散ノード２０１は、有効期限変更処理を終了する。
【０２４２】
ステップＳ１９０５では、分散ノード２０１は、プラグイン管理テーブル１６１１のうちのプラグイン設定情報を選択する（ステップＳ１９０５）。
【０２４３】
次に、分散ノード２０１は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する（ステップＳ１９０６）。ここで、一致しない場合（ステップＳ１９０６：Ｎｏ）、分散ノード２０１は、ステップＳ１９０９の処理に移行する。一方で、一致する場合（ステップＳ１９０６：Ｙｅｓ）、分散ノード２０１は、ステップＳ１９０７の処理に移行する。
【０２４４】
ステップＳ１９０７では、分散ノード２０１は、有効期限を変更するプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する（ステップＳ１９０７）。ここで、一致しない場合（ステップＳ１９０７：Ｎｏ）、分散ノード２０１は、ステップＳ１９０９の処理に移行する。一方で、一致する場合（ステップＳ１９０７：Ｙｅｓ）、分散ノード２０１は、ステップＳ１９０８の処理に移行する。
【０２４５】
ステップＳ１９０８では、分散ノード２０１は、プラグイン設定情報の有効期限を変更する（ステップＳ１９０８）。そして、分散ノード２０１は、ステップＳ１９０９の処理に移行する。
【０２４６】
ステップＳ１９０９では、分散ノード２０１は、プラグイン管理テーブル１６１１のうちのすべてのプラグイン設定情報を選択したか否かを判定する（ステップＳ１９０９）。ここで、未選択のプラグイン設定情報がある場合（ステップＳ１９０９：Ｎｏ）、分散ノード２０１は、ステップＳ１９０５の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合（ステップＳ１９０９：Ｙｅｓ）、分散ノード２０１は、有効期限変更処理を終了する。
【０２４７】
（動作例２におけるプラグイン更新処理手順）
次に、図２０を用いて、分散ノード２０１が実行する、動作例２におけるプラグイン更新処理手順の一例について説明する。プラグイン更新処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０２４８】
図２０は、動作例２におけるプラグイン更新処理手順の一例を示すフローチャートである。図２０において、分散ノード２０１は、図１２に上述したプラグイン追加処理を実行する（ステップＳ２００１）。次に、分散ノード２０１は、図１９に上述した有効期限変更処理を実行する（ステップＳ２００２）。そして、分散ノード２０１は、プラグイン更新処理を終了する。
【０２４９】
ここで、分散ノード２０１は、一部ステップの処理の順序を入れ替えて実行してもよい場合がある。また、分散ノード２０１は、一部ステップの処理を省略してもよい場合がある。
【０２５０】
（並列分散処理システム２００の動作例３）
次に、並列分散処理システム２００の動作例３について説明する。上述した動作例２は、有効期限が過ぎたプラグインを削除する動作例である。
【０２５１】
これに対し、動作例３は、有効な期間が過ぎた後、バリアメッセージを受信するまで、プラグインの削除を待機する動作例である。これによれば、動作例３は、バリアメッセージの到着までプラグインを削除せずに保存しておくことができ、分散チェックポイントにより障害復旧可能なように、バリアメッセージに応じたバックアップを正常に実施可能にすることができる。
【０２５２】
分散チェックポイントによる障害復旧は、具体的には、管理ノード２０２が、メッセージを一定時間保存しておき、分散ノード２０１が、内部状態の情報を外部記憶装置にチェックポイントとしてバックアップすることにより、実現される。障害発生時には、分散ノード２０１が内部状態の情報を戻し、管理ノード２０２がメッセージを再送することにより、障害復旧が行われる。
【０２５３】
まず、図２１の説明に移行し、動作例３における各種メッセージの一例について説明した後、図２２の説明に移行し、動作例３における各種メッセージを受信する場合についての分散ノード２０１の具体的な機能的構成例について説明する。
【０２５４】
図２１は、動作例３における各種メッセージの一例を示す説明図である。動作例３において、並列分散処理システム２００は、例えば、イベントメッセージ２１０１、プラグインを追加する制御メッセージ２１０２、プラグインの有効期限を変更する制御メッセージ２１０３、プラグインを更新する制御メッセージ２１０４を利用する。また、並列分散処理システム２００は、例えば、バリアメッセージ２１０５を利用する。
【０２５５】
イベントメッセージ２１０１は、図６に示したイベントメッセージ６０１と同様であるため、説明を省略する。プラグインを追加する制御メッセージ２１０２は、図１５に示したプラグインを追加する制御メッセージ１５０２と同様であるため、説明を省略する。
【０２５６】
プラグインの有効期限を変更する制御メッセージ２１０３は、図１５に示したプラグインの有効期限を変更する制御メッセージ１５０３と同様であるため、説明を省略する。プラグインを更新する制御メッセージ２１０４は、図１５に示したプラグインを更新する制御メッセージ１５０４と同様であるため、説明を省略する。バリアメッセージ２１０５は、特有のバリア番号を有する。
【０２５７】
図２２は、動作例３における分散ノード２０１の具体的な機能的構成例を示す説明図である。図２２に示すように、分散ノード２０１は、仮想オブジェクトテーブル２２２１のリスト２２２０を有する。仮想オブジェクトテーブル２２２１は、図７に示した仮想オブジェクトテーブル７２１と同様であるため、説明を省略する。
【０２５８】
図２２に示すように、分散ノード２０１は、プラグイン管理テーブル２２１１のリスト２２１０を有する。プラグイン管理テーブル２２１１は、図１６に示したプラグイン管理テーブル１６１１と同様であるため、説明を省略する。
【０２５９】
図２２に示すように、分散ノード２０１は、メッセージ判別部２２０１と、制御メッセージパーサ部２２０２と、プラグイン管理部２２０３と、バリア処理部２２０４とを有する。また、分散ノード２０１は、イベントメッセージパーサ部２２０５と、ステート管理部２２０６と、プラグイン実行部２２０７とを有する。
【０２６０】
メッセージ判別部２２０１は、イベントメッセージ２１０１、プラグインを追加する制御メッセージ２１０２、プラグインの有効期限を変更する制御メッセージ２１０３、プラグインを更新する制御メッセージ２１０４の入力を受け付ける。また、メッセージ判別部２２０１は、バリアメッセージ２１０５の入力を受け付ける。メッセージ判別部２２０１は、入力されたメッセージの種別を判別し、制御メッセージパーサ部２２０２、バリア処理部２２０４、またはイベントメッセージパーサ部２２０５に引き渡す。
【０２６１】
制御メッセージパーサ部２２０２は、図１６に示した制御メッセージパーサ部１６０２と同様であるため、説明を省略する。
【０２６２】
プラグイン管理部２２０３は、プラグインを削除する動作以外は、図１６に示したプラグイン管理部１６０３と同様である。プラグイン管理部２２０３は、バリア処理部２２０４から有効期限が過ぎたプラグインの削除依頼を受け付けると、当該プラグインの実行形式データであるプラグインデータを、プラグイン管理テーブル２２１１から削除する。
【０２６３】
バリア処理部２２０４は、バリアメッセージ２１０５を受け付けると、仮想オブジェクトテーブル２２２１やプラグイン管理テーブル２２１１をバックアップする。バリア処理部２２０４は、バックアップが終了した後、プラグイン管理部２２０３に有効期限が過ぎたプラグインの削除依頼を出力する。
【０２６４】
イベントメッセージパーサ部２２０５は、図１６に示したイベントメッセージパーサ部１６０４と同様であるため、説明を省略する。ステート管理部２２０６は、図１６に示したステート管理部１６０５と同様であるため、説明を省略する。プラグイン実行部２２０７は、図１６に示したプラグイン実行部１６０６と同様であるため、説明を省略する。
【０２６５】
これにより、分散ノード２０１は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。また、並列分散処理システム２００は、バリアメッセージに応じたバックアップを正常に実施可能にすることができ、並列分散処理システム２００の状態を正常に巻き戻し可能にすることができる。
【０２６６】
並列分散処理システム２００は、具体的には、分散ノード２０１が、内部状態の情報を外部記憶装置にチェックポイントとしてバックアップするまで、プラグインを削除させず、プラグインをバックアップ可能にすることができる。このため、並列分散処理システム２００は、障害発生時に、分散ノード２０１が内部状態の情報を戻すことを可能にし、障害復旧を実施可能にすることができる。
【０２６７】
（動作例３における全体処理手順）
次に、図２３を用いて、分散ノード２０１が実行する、動作例３における全体処理手順の一例について説明する。全体処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０２６８】
図２３は、動作例３における全体処理手順の一例を示すフローチャートである。図２３において、分散ノード２０１は、メッセージの到着まで待機する（ステップＳ２３０１）。
【０２６９】
次に、分散ノード２０１は、処理待ちのメッセージがあるか否かを判定する（ステップＳ２３０２）。ここで、処理待ちのメッセージがない場合（ステップＳ２３０２：Ｎｏ）、分散ノード２０１は、ステップＳ２３０１の処理に戻る。一方で、処理待ちのメッセージがある場合（ステップＳ２３０２：Ｙｅｓ）、分散ノード２０１は、ステップＳ２３０３の処理に移行する。
【０２７０】
ステップＳ２３０３では、分散ノード２０１は、処理待ちのメッセージを１つ取り出す（ステップＳ２３０３）。
【０２７１】
次に、分散ノード２０１は、取り出した処理対象のメッセージが制御メッセージであるか否かを判定する（ステップＳ２３０４）。ここで、制御メッセージである場合（ステップＳ２３０４：Ｙｅｓ）、分散ノード２０１は、ステップＳ２３０５の処理に移行する。一方で、制御メッセージではない場合（ステップＳ２３０４：Ｎｏ）、分散ノード２０１は、ステップＳ２３０６の処理に移行する。
【０２７２】
ステップＳ２３０５では、分散ノード２０１は、図１１に上述した制御系イベント処理を実行する（ステップＳ２３０５）。そして、分散ノード２０１は、ステップＳ２３０２の処理に戻る。
【０２７３】
ステップＳ２３０６では、分散ノード２０１は、イベントメッセージがバリアメッセージであるか否かを判定する（ステップＳ２３０６）。ここで、バリアメッセージではない場合（ステップＳ２３０６：Ｎｏ）、分散ノード２０１は、ステップＳ２３０７の処理に移行する。一方で、バリアメッセージである場合（ステップＳ２３０６：Ｙｅｓ）、分散ノード２０１は、ステップＳ２３０８の処理に移行する。
【０２７４】
ステップＳ２３０７では、分散ノード２０１は、図９に上述したイベントメッセージ処理を実行する（ステップＳ２３０７）。そして、分散ノード２０１は、ステップＳ２３０２の処理に戻る。
【０２７５】
ステップＳ２３０８では、分散ノード２０１は、図２５に後述するバリア処理を実行する（ステップＳ２３０８）。そして、分散ノード２０１は、ステップＳ２３０２の処理に戻る。
【０２７６】
（動作例３におけるイベントメッセージ処理手順）
動作例３におけるイベントメッセージ処理手順は、図９に示した動作例１におけるイベントメッセージ処理手順と同様であるため、説明を省略する。また、動作例３におけるイベントメッセージ処理手順では、図１０に示した動作例１におけるプラグイン処理に代わり、図２４に後述する動作例３におけるプラグイン処理が呼び出される。
【０２７７】
（動作例３におけるプラグイン処理手順）
次に、図２４を用いて、分散ノード２０１が実行する、動作例３におけるプラグイン処理手順の一例について説明する。プラグイン処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０２７８】
図２４は、動作例３におけるプラグイン処理手順の一例を示すフローチャートである。図２４において、分散ノード２０１は、プラグイン管理テーブル２２１１のリスト２２１０のうちのプラグイン管理テーブル２２１１を選択する（ステップＳ２４０１）。
【０２７９】
次に、分散ノード２０１は、選択したプラグイン管理テーブル２２１１のＩＤが、取り出したイベントメッセージのＩＤと一致するか否かを判定する（ステップＳ２４０２）。ここで、一致しない場合（ステップＳ２４０２：Ｎｏ）、分散ノード２０１は、ステップＳ２４０３の処理に移行する。一方で、一致する場合（ステップＳ２４０２：Ｙｅｓ）、分散ノード２０１は、ステップＳ２４０４の処理に移行する。
【０２８０】
ステップＳ２４０３では、分散ノード２０１は、プラグイン管理テーブル２２１１のリスト２２１０のうちのすべてのプラグイン管理テーブル２２１１を選択したか否かを判定する（ステップＳ２４０３）。ここで、未選択のプラグイン管理テーブル２２１１がある場合（ステップＳ２４０３：Ｎｏ）、分散ノード２０１は、ステップＳ２４０１の処理に戻る。一方で、すべてのプラグイン管理テーブル２２１１を選択している場合（ステップＳ２４０３：Ｙｅｓ）、分散ノード２０１は、プラグイン処理を終了する。
【０２８１】
ステップＳ２４０４では、分散ノード２０１は、プラグイン管理テーブル２２１１のうちのプラグイン設定情報を選択する（ステップＳ２４０４）。
【０２８２】
次に、分散ノード２０１は、イベントメッセージのステート名とプラグイン設定情報のステート名とが一致するか否かを判定する（ステップＳ２４０５）。ここで、一致する場合（ステップＳ２４０５：Ｙｅｓ）、分散ノード２０１は、ステップＳ２４０６の処理に移行する。一方で、一致しない場合（ステップＳ２４０５：Ｎｏ）、分散ノード２０１は、ステップＳ２４０８の処理に移行する。
【０２８３】
ステップＳ２４０６では、分散ノード２０１は、イベントメッセージの時刻が、プラグインの有効期限内であるか否かを判定する（ステップＳ２４０６）。ここで、有効期限内ではない場合（ステップＳ２４０６：Ｎｏ）、分散ノード２０１は、ステップＳ２４０８の処理に移行する。一方で、有効期限内である場合（ステップＳ２４０６：Ｙｅｓ）、分散ノード２０１は、ステップＳ２４０７の処理に移行する。
【０２８４】
ステップＳ２４０７では、分散ノード２０１は、プラグインを実行する（ステップＳ２４０７）。そして、分散ノード２０１は、ステップＳ２４０８の処理に移行する。
【０２８５】
ステップＳ２４０８では、分散ノード２０１は、プラグイン管理テーブル２２１１のうちのすべてのプラグイン設定情報を選択したか否かを判定する（ステップＳ２４０８）。ここで、未選択のプラグイン設定情報がある場合（ステップＳ２４０８：Ｎｏ）、分散ノード２０１は、ステップＳ２４０４の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合（ステップＳ２４０８：Ｙｅｓ）、分散ノード２０１は、プラグイン処理を終了する。
【０２８６】
（動作例３における制御系イベント処理手順）
動作例３における制御系イベント処理手順は、図１８に示した動作例２における制御系イベント処理手順と同様であるため、説明を省略する。
【０２８７】
（動作例３におけるプラグイン追加処理手順）
動作例３におけるプラグイン追加処理手順は、図１２に示した動作例１におけるプラグイン追加処理手順と同様であるため、説明を省略する。
【０２８８】
（動作例３における有効期限変更処理手順）
動作例３における有効期限変更処理手順は、図１９に示した動作例２における有効期限変更処理手順と同様であるため、説明を省略する。
【０２８９】
（動作例３におけるプラグイン更新処理手順）
動作例３におけるプラグイン更新処理手順は、図２０に示した動作例２におけるプラグイン更新処理手順と同様であるため、説明を省略する。
【０２９０】
（動作例３におけるバリア処理手順）
次に、図２５を用いて、分散ノード２０１が実行する、動作例３におけるバリア処理手順の一例について説明する。バリア処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０２９１】
図２５は、動作例３におけるバリア処理手順の一例を示すフローチャートである。図２５において、分散ノード２０１は、仮想オブジェクトテーブル２２２１およびプラグイン管理テーブル２２１１を外部記憶装置に保存する（ステップＳ２５０１）。次に、分散ノード２０１は、ステップＳ２５０２の処理に移行する。
【０２９２】
ステップＳ２５０２では、分散ノード２０１は、プラグイン管理テーブル２２１１のリスト２２１０のうちのプラグイン管理テーブル２２１１を選択する（ステップＳ２５０２）。次に、分散ノード２０１は、ステップＳ２５０３の処理に移行する。
【０２９３】
ステップＳ２５０３では、分散ノード２０１は、プラグイン管理テーブル２２１１のうちのプラグイン設定情報を選択する（ステップＳ２５０３）。
【０２９４】
次に、分散ノード２０１は、プラグインの有効期限が、最後に処理したメッセージの時刻よりも前であるか否かを判定する（ステップＳ２５０４）。ここで、前である場合（ステップＳ２５０４：Ｙｅｓ）、分散ノード２０１は、ステップＳ２５０５の処理に移行する。一方で、前ではない場合（ステップＳ２５０４：Ｎｏ）、分散ノード２０１は、ステップＳ２５０６の処理に移行する。
【０２９５】
ステップＳ２５０５では、分散ノード２０１は、プラグインを削除する（ステップＳ２５０５）。次に、分散ノード２０１は、ステップＳ２５０６の処理に移行する。
【０２９６】
ステップＳ２５０６では、分散ノード２０１は、プラグイン管理テーブル２２１１のうちのすべてのプラグイン設定情報を選択したか否かを判定する（ステップＳ２５０６）。ここで、未選択のプラグイン設定情報がある場合（ステップＳ２５０６：Ｎｏ）、分散ノード２０１は、ステップＳ２５０３の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合（ステップＳ２５０６：Ｙｅｓ）、ステップＳ２５０７の処理に移行する。
【０２９７】
ステップＳ２５０７では、分散ノード２０１は、プラグイン管理テーブル２２１１のリスト２２１０のうちのすべてのプラグイン管理テーブル２２１１を選択したか否かを判定する（ステップＳ２５０７）。ここで、未選択のプラグイン管理テーブル２２１１がある場合（ステップＳ２５０７：Ｎｏ）、分散ノード２０１は、ステップＳ２５０２の処理に戻る。一方で、すべてのプラグイン管理テーブル２２１１を選択している場合（ステップＳ２５０７：Ｙｅｓ）、分散ノード２０１は、バリア処理を終了する。
【０２９８】
ここで、分散ノード２０１は、一部ステップの処理の順序を入れ替えて実行してもよい場合がある。また、分散ノード２０１は、一部ステップの処理を省略してもよい場合がある。
【０２９９】
（並列分散処理システム２００の動作例４）
次に、並列分散処理システム２００の動作例４について説明する。上述した動作例１は、制御メッセージを受信したタイミングで、プラグインをプラグイン管理テーブルに記憶し、プラグインを有効化する動作例である。
【０３００】
これに対し、動作例４は、制御メッセージを受信した後、バリアメッセージを受信したタイミングで、プラグインを有効化する動作例である。これによれば、動作例４は、ネットワーク遅延などの原因で、イベントメッセージと制御メッセージとの分散ノード２０１における到着順が入れ替わった場合にも、処理の不整合を防止することができる。
【０３０１】
まず、図２６の説明に移行し、動作例４における各種メッセージの一例について説明した後、図２７の説明に移行し、動作例４における各種メッセージを受信する場合についての分散ノード２０１の具体的な機能的構成例について説明する。
【０３０２】
図２６は、動作例４における各種メッセージの一例を示す説明図である。動作例４において、並列分散処理システム２００は、例えば、イベントメッセージ２６０１、プラグインを追加する制御メッセージ２６０２、プラグインを削除する制御メッセージ２６０３、プラグインを更新する制御メッセージ２６０４を利用する。また、並列分散処理システム２００は、例えば、バリアメッセージ２６０５を利用する。
【０３０３】
イベントメッセージ２６０１は、図６に示したイベントメッセージ６０１と同様であるため、説明を省略する。プラグインを追加する制御メッセージ２６０２は、図６に示したプラグインを追加する制御メッセージ６０２と同様であるため、説明を省略する。
【０３０４】
プラグインを削除する制御メッセージ２６０３は、図６に示したプラグインを削除する制御メッセージ６０３と同様であるため、説明を省略する。プラグインを更新する制御メッセージ２６０４は、図６に示したプラグインを更新する制御メッセージ６０４と同様であるため、説明を省略する。バリアメッセージ２６０５は、バリア番号を有する。
【０３０５】
図２７は、動作例４における分散ノード２０１の具体的な機能的構成例を示す説明図である。図２７に示すように、分散ノード２０１は、仮想オブジェクトテーブル２７２１のリスト２７２０を有する。仮想オブジェクトテーブル２７２１は、図７に示した仮想オブジェクトテーブル７２１と同様であるため、説明を省略する。
【０３０６】
図２７に示すように、分散ノード２０１は、プラグイン管理テーブル２７１１のリスト２７１０を有する。プラグイン管理テーブル２７１１は、図７に示したプラグイン管理テーブル７１１と同様であるため、説明を省略する。
【０３０７】
図２７に示すように、分散ノード２０１は、プラグイン操作待機テーブル２７３０を有する。プラグイン操作待機テーブル２７３０は、例えば、図３に示した分散ノード２０１のメモリ３０２や記録媒体３０５などの記憶領域により実現される。
【０３０８】
プラグイン操作待機テーブル２７３０は、ＩＤのフィールドを有する。プラグイン操作待機テーブル２７３０は、さらに、対象ＩＤと、ステート名と、プラグインデータと、操作種別とのフィールドを対応付けて有する。プラグイン操作待機テーブル２７３０は、各フィールドに情報を設定することにより、レコードが記憶される。
【０３０９】
対象ＩＤのフィールドには、プラグインの追加や削除が行われるプラグイン管理テーブル２７１１に対応するＩＤが設定される。ステート名のフィールドには、追加や削除が行われるプラグインの実行条件となるイベントの種別を示す情報としてステート名が設定される。プラグインデータのフィールドには、プラグインの実行形式データであるプラグインデータが設定される。操作種別のフィールドには、プラグインの追加や削除のいずれの操作を行うかを識別する操作種別が設定される。
【０３１０】
図２７に示すように、分散ノード２０１は、メッセージ判別部２７０１と、制御メッセージパーサ部２７０２と、プラグイン管理部２７０３と、バリア処理部２７０４とを有する。また、分散ノード２０１は、イベントメッセージパーサ部２７０５と、ステート管理部２７０６と、プラグイン実行部２７０７とを有する。
【０３１１】
メッセージ判別部２７０１は、イベントメッセージ２６０１、プラグインを追加する制御メッセージ２６０２、プラグインを削除する制御メッセージ２６０３、プラグインを更新する制御メッセージ２６０４の入力を受け付ける。また、メッセージ判別部２７０１は、バリアメッセージ２６０５の入力を受け付ける。メッセージ判別部２７０１は、入力されたメッセージの種別を判別し、制御メッセージパーサ部２７０２、バリア処理部２７０４、またはイベントメッセージパーサ部２７０５に引き渡す。
【０３１２】
制御メッセージパーサ部２７０２は、図７に示した制御メッセージパーサ部７０２と同様であるため、説明を省略する。
【０３１３】
プラグイン管理部２７０３は、制御メッセージパーサ部２７０２から引き渡された情報に基づいて、プラグイン管理テーブル２７１１を更新する。プラグイン管理部２７０３は、例えば、ＩＤと、対象ステート名と、追加するプラグインの置き場所についての情報とを受け付ける。プラグイン管理部２７０３は、受け付けたＩＤに対応するプラグイン管理テーブル２７１１を特定する。プラグイン管理部２７０３は、追加するプラグインの置き場所についての情報に基づいて、追加するプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部２７０３は、特定したプラグイン管理テーブル２７１１に、受け付けた対象ステート名と、取得したプラグインデータとを対応付けて追加する追加操作を待機する。プラグイン管理部２７０３は、例えば、プラグイン操作待機テーブル２７３０に、追加操作のレコードを記憶して、追加操作を待機する。
【０３１４】
プラグイン管理部２７０３は、例えば、ＩＤと、対象ステート名と、削除するプラグインの置き場所についての情報とを受け付ける。プラグイン管理部２７０３は、受け付けたＩＤに対応するプラグイン管理テーブル２７１１を特定する。プラグイン管理部２７０３は、削除するプラグインの置き場所についての情報に基づいて、削除するプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部２７０３は、特定したプラグイン管理テーブル２７１１に、受け付けた対象ステート名に対応付けて、取得したプラグインデータと一致するプラグインデータがあれば、当該プラグインデータを削除する削除操作を待機する。プラグイン管理部２７０３は、例えば、プラグイン操作待機テーブル２７３０に、削除操作のレコードを記憶して、削除操作を待機する。
【０３１５】
プラグイン管理部２７０３は、例えば、ＩＤと、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報とを受け付ける。プラグイン管理部２７０３は、受け付けたＩＤに対応するプラグイン管理テーブル２７１１を特定する。プラグイン管理部２７０３は、更新対象のプラグインの置き場所についての情報に基づいて、更新対象であり削除されるプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部２７０３は、新しいプラグインの置き場所についての情報に基づいて、新しいプラグインの実行形式データであるプラグインデータを取得する。
【０３１６】
プラグイン管理部２７０３は、特定したプラグイン管理テーブル２７１１に、受け付けた対象ステート名に対応付けて、更新対象であり削除されるプラグインデータと一致するプラグインデータがあれば、当該プラグインデータを削除する削除操作を待機する。プラグイン管理部２７０３は、例えば、プラグイン操作待機テーブル２７３０に、削除操作のレコードを記憶して、削除操作を待機する。プラグイン管理部２７０３は、特定したプラグイン管理テーブル２７１１に、受け付けた対象ステート名と、取得した新しいプラグインデータとを対応付けて追加する追加操作を待機する。プラグイン管理部２７０３は、例えば、プラグイン操作待機テーブル２７３０に、追加操作のレコードを記憶して、追加操作を待機する。プラグイン管理部２７０３は、プラグイン更新起動通知を受け付けると、待機した追加操作および削除操作を実行する。
【０３１７】
バリア処理部２７０４は、バリアメッセージ２６０５を受け付けると、仮想オブジェクトテーブル２７２１やプラグイン管理テーブル２７１１をバックアップする。バリア処理部２７０４は、バックアップが終了した後、プラグイン管理部２７０３にプラグイン更新起動通知を出力する。
【０３１８】
イベントメッセージパーサ部２７０５は、図７に示したイベントメッセージパーサ部７０４と同様であるため、説明を省略する。ステート管理部２７０６は、図７に示したステート管理部７０５と同様であるため、説明を省略する。プラグイン実行部２７０７は、図７に示したプラグイン実行部７０６と同様であるため、説明を省略する。
【０３１９】
これにより、分散ノード２０１は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。また、並列分散処理システム２００は、ネットワーク遅延などの原因で、イベントメッセージと制御メッセージとの分散ノード２０１における到着順が入れ替わった場合にも、処理の不整合を防止することができる。並列分散処理システム２００は、具体的には、バリアメッセージ２６０５が、それぞれの分散ノード２０１に、前後のメッセージとの到着順が入れ替わらない性質を有するため、バリアメッセージ２６０５を基準に、処理の不整合を防止することができる。
【０３２０】
また、並列分散処理システム２００は、バリアメッセージ２６０５に応じたバックアップを正常に実施可能にすることができ、並列分散処理システム２００の状態を正常に巻き戻し可能にすることができる。
【０３２１】
（動作例４における全体処理手順）
次に、図２８を用いて、分散ノード２０１が実行する、動作例４における全体処理手順の一例について説明する。全体処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０３２２】
図２８は、動作例４における全体処理手順の一例を示すフローチャートである。図２８において、分散ノード２０１は、メッセージの到着まで待機する（ステップＳ２８０１）。そして、分散ノード２０１は、ステップＳ２８０２の処理に移行する。
【０３２３】
ステップＳ２８０２では、分散ノード２０１は、処理待ちのメッセージがあるか否かを判定する（ステップＳ２８０２）。ここで、処理待ちのメッセージがない場合（ステップＳ２８０２：Ｎｏ）、分散ノード２０１は、ステップＳ２８０１の処理に戻る。一方で、処理待ちのメッセージがある場合（ステップＳ２８０２：Ｙｅｓ）、分散ノード２０１は、ステップＳ２８０３の処理に移行する。
【０３２４】
ステップＳ２８０３では、分散ノード２０１は、処理待ちのメッセージを１つ取り出す（ステップＳ２８０３）。
【０３２５】
次に、分散ノード２０１は、取り出した処理対象のメッセージが制御メッセージであるか否かを判定する（ステップＳ２８０４）。ここで、制御メッセージではない場合（ステップＳ２８０４：Ｎｏ）、分散ノード２０１は、ステップＳ２８０６の処理に移行する。一方で、制御メッセージである場合（ステップＳ２８０４：Ｙｅｓ）、分散ノード２０１は、ステップＳ２８０５の処理に移行する。
【０３２６】
ステップＳ２８０５では、分散ノード２０１は、図１１に上述した制御系イベント処理を実行する（ステップＳ２８０５）。そして、分散ノード２０１は、ステップＳ２８０２の処理に戻る。
【０３２７】
ステップＳ２８０６では、分散ノード２０１は、イベントメッセージがバリアメッセージであるか否かを判定する（ステップＳ２８０６）。ここで、バリアメッセージではない場合（ステップＳ２８０６：Ｎｏ）、分散ノード２０１は、ステップＳ２８０７の処理に移行する。一方で、バリアメッセージである場合（ステップＳ２８０６：Ｙｅｓ）、分散ノード２０１は、ステップＳ２８０８の処理に移行する。
【０３２８】
ステップＳ２８０７では、分散ノード２０１は、図９に上述したイベントメッセージ処理を実行する（ステップＳ２８０７）。そして、分散ノード２０１は、ステップＳ２８０２の処理に戻る。
【０３２９】
ステップＳ２８０８では、分散ノード２０１は、図３２に後述するバリア処理を実行する（ステップＳ２８０８）。そして、分散ノード２０１は、ステップＳ２８０２の処理に戻る。
【０３３０】
（動作例４におけるイベントメッセージ処理手順）
動作例４におけるイベントメッセージ処理手順は、図９に示した動作例１におけるイベントメッセージ処理手順と同様であるため、説明を省略する。
【０３３１】
（動作例４におけるプラグイン処理手順）
動作例４におけるプラグイン処理手順は、図１０に示した動作例１におけるプラグイン処理手順と同様であるため、説明を省略する。
【０３３２】
（動作例４における制御系イベント処理手順）
動作例４における制御系イベント処理手順は、図１１に示した動作例１における制御系イベント処理手順と同様であるため、説明を省略する。また、動作例４における制御系イベント処理では、図１２に示した動作例１におけるプラグイン追加処理の代わりに、図２９に後述する動作例４におけるプラグイン追加処理が呼び出される。
【０３３３】
また、動作例４における制御系イベント処理では、図１３に示した動作例１におけるプラグイン削除処理の代わりに、図３０に後述する動作例４におけるプラグイン削除処理が呼び出される。また、動作例４における制御系イベント処理では、図１４に示した動作例１におけるプラグイン更新処理の代わりに、図３１に後述する動作例４におけるプラグイン更新処理が呼び出される。
【０３３４】
（動作例４におけるプラグイン追加処理手順）
次に、図２９を用いて、分散ノード２０１が実行する、動作例４におけるプラグイン追加処理手順の一例について説明する。プラグイン追加処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０３３５】
図２９は、動作例４におけるプラグイン追加処理手順の一例を示すフローチャートである。図２９において、分散ノード２０１は、制御メッセージに含まれる追加するプラグインに関する情報に基づいて、プラグインの実行形式データを取得する（ステップＳ２９０１）。
【０３３６】
次に、分散ノード２０１は、プラグイン操作待機テーブル２７３０に、追加するプラグインに関する情報を、操作種別＝追加と対応付けて登録する（ステップＳ２９０２）。そして、分散ノード２０１は、プラグイン追加処理を終了する。
【０３３７】
（動作例４におけるプラグイン削除処理手順）
次に、図３０を用いて、分散ノード２０１が実行する、動作例４におけるプラグイン削除処理手順の一例について説明する。プラグイン削除処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０３３８】
図３０は、動作例４におけるプラグイン削除処理手順の一例を示すフローチャートである。図３０において、分散ノード２０１は、制御メッセージに含まれる削除するプラグインに関する情報に基づいて、プラグインの実行形式データを取得する（ステップＳ３００１）。
【０３３９】
次に、分散ノード２０１は、プラグイン操作待機テーブル２７３０に、削除するプラグインに関する情報を、操作種別＝削除と対応付けて登録する（ステップＳ３００２）。そして、分散ノード２０１は、プラグイン削除処理を終了する。
【０３４０】
（動作例４におけるプラグイン更新処理手順）
次に、図３１を用いて、分散ノード２０１が実行する、動作例４におけるプラグイン更新処理手順の一例について説明する。プラグイン更新処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０３４１】
図３１は、動作例４におけるプラグイン更新処理手順の一例を示すフローチャートである。図３１において、分散ノード２０１は、制御メッセージに含まれる更新元のプラグインに関する情報に基づいて、更新元のプラグインの実行形式データを取得する（ステップＳ３１０１）。次に、分散ノード２０１は、制御メッセージに含まれる更新先のプラグインに関する情報に基づいて、更新先のプラグインの実行形式データを取得する（ステップＳ３１０２）。
【０３４２】
そして、分散ノード２０１は、プラグイン操作待機テーブル２７３０に、更新元のプラグインに関する情報を、操作種別＝削除と対応付けて登録する（ステップＳ３１０３）。次に、分散ノード２０１は、プラグイン操作待機テーブル２７３０に、更新先のプラグインに関する情報を、操作種別＝追加と対応付けて登録する（ステップＳ３１０４）。そして、分散ノード２０１は、プラグイン更新処理を終了する。
【０３４３】
（動作例４におけるバリア処理手順）
次に、図３２を用いて、分散ノード２０１が実行する、動作例４におけるバリア処理手順の一例について説明する。バリア処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０３４４】
図３２は、動作例４におけるバリア処理手順の一例を示すフローチャートである。図３２において、分散ノード２０１は、仮想オブジェクトテーブル２７２１およびプラグイン管理テーブル２７１１を外部記憶装置に保存する（ステップＳ３２０１）。そして、分散ノード２０１は、ステップＳ３２０２の処理に移行する。
【０３４５】
ステップＳ３２０２では、分散ノード２０１は、プラグイン操作待機テーブル２７３０のうちのレコードを選択する（ステップＳ３２０２）。
【０３４６】
次に、分散ノード２０１は、レコードの操作種別＝追加であるか否かを判定する（ステップＳ３２０３）。ここで、追加である場合（ステップＳ３２０３：Ｙｅｓ）、分散ノード２０１は、ステップＳ３２０４の処理に移行する。一方で、追加ではない場合（ステップＳ３２０３：Ｎｏ）、分散ノード２０１は、ステップＳ３２０５の処理に移行する。
【０３４７】
ステップＳ３２０４では、分散ノード２０１は、図３３に後述する追加操作処理を実行する（ステップＳ３２０４）。そして、分散ノード２０１は、ステップＳ３２０７の処理に移行する。
【０３４８】
ステップＳ３２０５では、分散ノード２０１は、レコードの操作種別＝削除であるか否かを判定する（ステップＳ３２０５）。ここで、削除である場合（ステップＳ３２０５：Ｙｅｓ）、分散ノード２０１は、ステップＳ３２０６の処理に移行する。一方で、削除ではない場合（ステップＳ３２０５：Ｎｏ）、分散ノード２０１は、ステップＳ３２０７の処理に移行する。
【０３４９】
ステップＳ３２０６では、分散ノード２０１は、図３４に後述する削除操作処理を実行する（ステップＳ３２０６）。そして、分散ノード２０１は、ステップＳ３２０７の処理に移行する。
【０３５０】
ステップＳ３２０７では、分散ノード２０１は、プラグイン操作待機テーブル２７３０のうちのすべてのレコードを選択したか否かを判定する（ステップＳ３２０７）。ここで、未選択のレコードがある場合（ステップＳ３２０７：Ｎｏ）、分散ノード２０１は、ステップＳ３２０２の処理に移行する。一方で、すべてのレコードを選択している場合（ステップＳ３２０７：Ｙｅｓ）、分散ノード２０１は、バリア処理を終了する。
【０３５１】
（動作例４における追加操作処理手順）
次に、図３３を用いて、分散ノード２０１が実行する、動作例４における追加操作処理手順の一例について説明する。追加操作処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０３５２】
図３３は、動作例４における追加操作処理手順の一例を示すフローチャートである。図３３において、分散ノード２０１は、プラグイン管理テーブル２７１１のリスト２７１０のうちのプラグイン管理テーブル２７１１を選択する（ステップＳ３３０１）。
【０３５３】
次に、分散ノード２０１は、制御メッセージのＩＤとプラグイン管理テーブル２７１１のＩＤとが一致するか否かを判定する（ステップＳ３３０２）。ここで、一致する場合（ステップＳ３３０２：Ｙｅｓ）、分散ノード２０１は、ステップＳ３３０３の処理に移行する。一方で、一致しない場合（ステップＳ３３０２：Ｎｏ）、分散ノード２０１は、ステップＳ３３０４の処理に移行する。
【０３５４】
ステップＳ３３０３では、分散ノード２０１は、プラグイン管理テーブル２７１１のプラグイン設定情報に、プラグイン操作待機テーブル２７３０のレコードに対応する情報を追加する（ステップＳ３３０３）。そして、分散ノード２０１は、追加操作処理を終了する。
【０３５５】
ステップＳ３３０４では、分散ノード２０１は、プラグイン管理テーブル２７１１のリスト２７１０のうちのすべてのプラグイン管理テーブル２７１１を選択したか否かを判定する（ステップＳ３３０４）。ここで、未選択のプラグイン管理テーブル２７１１がある場合（ステップＳ３３０４：Ｎｏ）、分散ノード２０１は、ステップＳ３３０１の処理に戻る。一方で、すべてのプラグイン管理テーブル２７１１を選択している場合（ステップＳ３３０４：Ｙｅｓ）、分散ノード２０１は、ステップＳ３３０５の処理に移行する。
【０３５６】
ステップＳ３３０５では、分散ノード２０１は、新しいプラグイン管理テーブル２７１１を生成し、プラグイン管理テーブル２７１１のリスト２７１０に登録する（ステップＳ３３０５）。次に、分散ノード２０１は、生成したプラグイン管理テーブル２７１１のＩＤに制御メッセージのＩＤを設定する（ステップＳ３３０６）。
【０３５７】
そして、分散ノード２０１は、プラグイン管理テーブル２７１１のプラグイン設定情報に、制御メッセージに対応する情報を追加する（ステップＳ３３０７）。その後、分散ノード２０１は、追加操作処理を終了する。
【０３５８】
（動作例４における削除操作処理手順）
次に、図３４を用いて、分散ノード２０１が実行する、動作例４における削除操作処理手順の一例について説明する。削除操作処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０３５９】
図３４は、動作例４における削除操作処理手順の一例を示すフローチャートである。図３４において、分散ノード２０１は、プラグイン管理テーブル２７１１のリスト２７１０のうちのプラグイン管理テーブル２７１１を選択する（ステップＳ３４０１）。
【０３６０】
次に、分散ノード２０１は、制御メッセージのＩＤとプラグイン管理テーブル２７１１のＩＤとが一致するか否かを判定する（ステップＳ３４０２）。ここで、一致しない場合（ステップＳ３４０２：Ｎｏ）、分散ノード２０１は、ステップＳ３４０３の処理に移行する。一方で、一致する場合（ステップＳ３４０２：Ｙｅｓ）、分散ノード２０１は、ステップＳ３４０４の処理に移行する。
【０３６１】
ステップＳ３４０３では、分散ノード２０１は、プラグイン管理テーブル２７１１のリスト２７１０のうちすべてのプラグイン管理テーブル２７１１を選択したか否かを判定する（ステップＳ３４０３）。未選択のプラグイン管理テーブル２７１１がある場合（ステップＳ３４０３：Ｎｏ）、分散ノード２０１は、ステップＳ３４０１の処理に戻る。一方で、すべてのプラグイン管理テーブル２７１１を選択している場合（ステップＳ３４０３：Ｙｅｓ）、分散ノード２０１は、削除操作処理を終了する。
【０３６２】
ステップＳ３４０４では、分散ノード２０１は、プラグイン管理テーブル２７１１のうちのプラグイン設定情報を選択する（ステップＳ３４０４）。
【０３６３】
次に、分散ノード２０１は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する（ステップＳ３４０５）。ここで、一致しない場合（ステップＳ３４０５：Ｎｏ）、分散ノード２０１は、ステップＳ３４０８の処理に移行する。一方で、一致する場合（ステップＳ３４０５：Ｙｅｓ）、分散ノード２０１は、ステップＳ３４０６の処理に移行する。
【０３６４】
ステップＳ３４０６では、分散ノード２０１は、削除するプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する（ステップＳ３４０６）。ここで、一致しない場合（ステップＳ３４０６：Ｎｏ）、分散ノード２０１は、ステップＳ３４０８の処理に移行する。一方で、一致する場合（ステップＳ３４０６：Ｙｅｓ）、分散ノード２０１は、ステップＳ３４０７の処理に移行する。
【０３６５】
ステップＳ３４０７では、分散ノード２０１は、プラグイン設定情報を削除する（ステップＳ３４０７）。そして、分散ノード２０１は、ステップＳ３４０８の処理に移行する。
【０３６６】
ステップＳ３４０８では、分散ノード２０１は、プラグイン管理テーブル２７１１のうちのすべてのプラグイン設定情報を選択したか否かを判定する（ステップＳ３４０８）。ここで、未選択のプラグイン設定情報がある場合（ステップＳ３４０８：Ｎｏ）、分散ノード２０１は、ステップＳ３４０４の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合（ステップＳ３４０８：Ｙｅｓ）、分散ノード２０１は、削除操作処理を終了する。
【０３６７】
ここで、分散ノード２０１は、一部ステップの処理の順序を入れ替えて実行してもよい場合がある。また、分散ノード２０１は、一部ステップの処理を省略してもよい場合がある。
【０３６８】
（並列分散処理システム２００の動作例５）
次に、並列分散処理システム２００の動作例５について説明する。上述した動作例１〜動作例４は、分散ノード２０１が、特定の記憶領域からプラグインを読み出す動作例である。特定の記憶領域は、例えば、ダウンロード先である。特定の記憶領域は、例えば、分散ノード２０１とは異なるコンピュータの記憶領域である。
【０３６９】
これに対し、動作例５は、分散ノード２０１が、プラグインを符号化した情報から、プラグインを復号する動作例である。これによれば、動作例５は、複数の分散ノード２０１が、特定の記憶領域からプラグインを読み出すことによる、特定の記憶領域へのアクセス集中を回避することができる。
【０３７０】
まず、図３５の説明に移行し、動作例５における並列分散処理システム２００の動作の流れについて説明する。
【０３７１】
図３５は、動作例５における並列分散処理システム２００の動作の流れを示す説明図である。動作例５において、並列分散処理システム２００は、各種制御メッセージ３５００に、プラグインデータを符号化した状態で含むようにする。プラグイン管理テーブル３５１０は、プラグインデータを符号化したデータから復号されたプラグインデータを記憶する。これにより、並列分散処理システム２００は、複数の分散ノード２０１が、特定の記憶領域からプラグインを読み出すことによるアクセス集中を回避することができる。
【０３７２】
次に、図３６の説明に移行し、動作例５における各種メッセージの一例について説明した後、図３７の説明に移行し、動作例５における各種メッセージを受信する場合についての分散ノード２０１の具体的な機能的構成例について説明する。
【０３７３】
図３６は、動作例５における各種メッセージの一例を示す説明図である。動作例５において、並列分散処理システム２００は、例えば、イベントメッセージ３６０１、プラグインを追加する制御メッセージ３６０２、プラグインの有効期限を変更する制御メッセージ３６０３、プラグインを更新する制御メッセージ３６０４を利用する。
【０３７４】
イベントメッセージ３６０１は、図６に示したイベントメッセージ６０１と同様であるが、プラグインの置き場所についての情報の代わりに、プラグインを符号化したデータを含む。プラグインを追加する制御メッセージ３６０２は、図６に示したプラグインを追加する制御メッセージ６０２と同様であるが、プラグインの置き場所についての情報の代わりに、プラグインを符号化したデータを含む。
【０３７５】
プラグインを削除する制御メッセージ３６０３は、図６に示したプラグインを削除する制御メッセージ６０３と同様であるが、プラグインの置き場所についての情報の代わりに、プラグインを符号化したデータを含む。プラグインを更新する制御メッセージ３６０４は、図６に示したプラグインを更新する制御メッセージ６０４と同様であるが、プラグインの置き場所についての情報の代わりに、プラグインを符号化したデータを含む。
【０３７６】
図３７は、動作例５における分散ノード２０１の具体的な機能的構成例を示す説明図である。図３７に示すように、分散ノード２０１は、仮想オブジェクトテーブル３７２１のリスト３７２０を有する。仮想オブジェクトテーブル３７２１は、図７に示した仮想オブジェクトテーブル７２１と同様であるため、説明を省略する。
【０３７７】
図３７に示すように、分散ノード２０１は、プラグイン管理テーブル３７１１のリスト３７１０を有する。プラグイン管理テーブル３７１１は、図７に示したプラグイン管理テーブル７１１や図３５に示したプラグイン管理テーブル３５１０と同様であるため、説明を省略する。
【０３７８】
図３７に示すように、分散ノード２０１は、メッセージ判別部３７０１と、制御メッセージパーサ部３７０２と、プラグイン管理部３７０３と、プラグインデコード部３７０４とを有する。分散ノード２０１は、イベントメッセージパーサ部３７０５と、ステート管理部３７０６と、プラグイン実行部３７０７とを有する。
【０３７９】
メッセージ判別部３７０１は、図７に示したメッセージ判別部７０１と同様であるため、説明を省略する。制御メッセージパーサ部３７０２は、図７に示した制御メッセージパーサ部７０２と同様であるため、説明を省略する。
【０３８０】
プラグイン管理部３７０３は、プラグインデータを取得する動作以外は、図７に示したプラグイン管理部３７０３と同様である。プラグイン管理部３７０３は、プラグインの置き場所に基づきプラグインデータを取得する代わりに、プラグインデコード部３７０４を介して、プラグインを符号化したデータに基づいて、プラグインデータを取得する。プラグインデコード部３７０４は、プラグインを符号化したデータから、プラグインデータを復号する。
【０３８１】
イベントメッセージパーサ部３７０５は、図７に示したイベントメッセージパーサ部７０４と同様であるため、説明を省略する。ステート管理部３７０６は、図７に示したステート管理部７０５と同様であるため、説明を省略する。プラグイン実行部３７０７は、図７に示したプラグイン実行部７０６と同様であるため、説明を省略する。
【０３８２】
これにより、分散ノード２０１は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。また、並列分散処理システム２００は、複数の分散ノード２０１が、特定の記憶領域からプラグインを読み出すことによる、特定の記憶領域へのアクセス集中を回避することができる。
【０３８３】
（動作例５における全体処理手順）
動作例５における全体処理手順は、図８に示した動作例１における全体処理手順と同様であるため、説明を省略する。
【０３８４】
（動作例５におけるイベントメッセージ処理手順）
動作例５におけるイベントメッセージ処理手順は、図９に示した動作例１におけるイベントメッセージ処理手順と同様であるため、説明を省略する。
【０３８５】
（動作例５におけるプラグイン処理手順）
動作例５におけるプラグイン処理手順は、図１０に示した動作例１におけるプラグイン処理手順と同様であるため、説明を省略する。
【０３８６】
（動作例５における制御系イベント処理手順）
動作例５における制御系イベント処理手順は、図１１に示した動作例１における制御系イベント処理手順と同様であるため、説明を省略する。また、動作例５における制御系イベント処理では、図１２に示した動作例１におけるプラグイン追加処理の代わりに、図３８に後述する動作例５におけるプラグイン追加処理が呼び出される。
【０３８７】
また、動作例５における制御系イベント処理では、図１３に示した動作例１におけるプラグイン削除処理の代わりに、図４０に後述する動作例５におけるプラグイン削除処理が呼び出される。また、動作例５における制御系イベント処理では、図１４に示した動作例１におけるプラグイン更新処理の代わりに、図４１に後述する動作例５におけるプラグイン更新処理が呼び出される。
【０３８８】
（動作例５におけるプラグイン追加処理手順）
次に、図３８を用いて、分散ノード２０１が実行する、動作例５におけるプラグイン追加処理手順の一例について説明する。プラグイン追加処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０３８９】
図３８は、動作例５におけるプラグイン追加処理手順の一例を示すフローチャートである。図３８において、分散ノード２０１は、制御メッセージに対して、図３９に後述するデコード処理を実行する（ステップＳ３８０１）。次に、分散ノード２０１は、ステップＳ３８０２の処理に移行する。
【０３９０】
ステップＳ３８０２では、分散ノード２０１は、プラグイン管理テーブル３７１１のリスト３７１０のうちのプラグイン管理テーブル３７１１を選択する（ステップＳ３８０２）。
【０３９１】
次に、分散ノード２０１は、制御メッセージのＩＤとプラグイン管理テーブル３７１１のＩＤとが一致するか否かを判定する（ステップＳ３８０３）。ここで、一致する場合（ステップＳ３８０３：Ｙｅｓ）、分散ノード２０１は、ステップＳ３８０４の処理に移行する。一方で、一致しない場合（ステップＳ３８０３：Ｎｏ）、分散ノード２０１は、ステップＳ３８０５の処理に移行する。
【０３９２】
ステップＳ３８０４では、分散ノード２０１は、プラグイン管理テーブル３７１１のプラグイン設定情報に、制御メッセージに対応する情報を追加する（ステップＳ３８０４）。そして、分散ノード２０１は、ステップＳ３８０８の処理に移行する。
【０３９３】
ステップＳ３８０５では、分散ノード２０１は、プラグイン管理テーブル３７１１のリスト３７１０のうちのすべてのプラグイン管理テーブル３７１１を選択したか否かを判定する（ステップＳ３８０５）。ここで、未選択のプラグイン管理テーブル３７１１がある場合（ステップＳ３８０５：Ｎｏ）、分散ノード２０１は、ステップＳ３８０２の処理に戻る。一方で、すべてのプラグイン管理テーブル３７１１を選択している場合（ステップＳ３８０５：Ｙｅｓ）、分散ノード２０１は、ステップＳ３８０６の処理に移行する。
【０３９４】
ステップＳ３８０６では、分散ノード２０１は、新しいプラグイン管理テーブル３７１１を生成し、プラグイン管理テーブル３７１１のリスト３７１０に登録する（ステップＳ３８０６）。次に、分散ノード２０１は、生成したプラグイン管理テーブル３７１１のＩＤに制御メッセージのＩＤを設定する（ステップＳ３８０７）。そして、分散ノード２０１は、ステップＳ３８０８の処理に移行する。
【０３９５】
ステップＳ３８０８では、分散ノード２０１は、プラグイン管理テーブル３７１１のプラグイン設定情報に、制御メッセージに対応する情報を追加する（ステップＳ３８０８）。そして、分散ノード２０１は、プラグイン追加処理を終了する。
【０３９６】
（動作例５におけるデコード処理手順）
次に、図３９を用いて、分散ノード２０１が実行する、動作例５におけるデコード処理手順の一例について説明する。デコード処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０３９７】
図３９は、動作例５におけるデコード処理手順の一例を示すフローチャートである。図３９において、分散ノード２０１は、制御メッセージから符号化されたプラグインを抽出する（ステップＳ３９０１）。次に、分散ノード２０１は、抽出した符号化されたプラグインから、プラグインを復号する（ステップＳ３９０２）。そして、分散ノード２０１は、デコード処理を終了する。
【０３９８】
（動作例５におけるプラグイン削除処理手順）
次に、図４０を用いて、分散ノード２０１が実行する、動作例５におけるプラグイン削除処理手順の一例について説明する。プラグイン削除処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０３９９】
図４０は、動作例５におけるプラグイン削除処理手順の一例を示すフローチャートである。図４０において、分散ノード２０１は、制御メッセージに対して、図３９に上述したデコード処理を実行する（ステップＳ４００１）。次に、分散ノード２０１は、ステップＳ４００２の処理に移行する。
【０４００】
ステップＳ４００２では、分散ノード２０１は、プラグイン管理テーブル３７１１のリスト３７１０のうちのプラグイン管理テーブル３７１１を選択する（ステップＳ４００２）。
【０４０１】
次に、分散ノード２０１は、制御メッセージのＩＤとプラグイン管理テーブル３７１１のＩＤとが一致するか否かを判定する（ステップＳ４００３）。ここで、一致しない場合（ステップＳ４００３：Ｎｏ）、分散ノード２０１は、ステップＳ４００４の処理に移行する。一方で、一致する場合（ステップＳ４００３：Ｙｅｓ）、分散ノード２０１は、ステップＳ４００５の処理に移行する。
【０４０２】
ステップＳ４００４では、分散ノード２０１は、プラグイン管理テーブル３７１１のリスト３７１０のうちすべてのプラグイン管理テーブル３７１１を選択したか否かを判定する（ステップＳ４００４）。ここで、未選択のプラグイン管理テーブル３７１１がある場合（ステップＳ４００４：Ｎｏ）、分散ノード２０１は、ステップＳ４００２の処理に戻る。一方で、すべてのプラグイン管理テーブル３７１１を選択している場合（ステップＳ４００４：Ｙｅｓ）、分散ノード２０１は、プラグイン削除処理を終了する。
【０４０３】
ステップＳ４００５では、分散ノード２０１は、プラグイン管理テーブル３７１１のうちのプラグイン設定情報を選択する（ステップＳ４００５）。
【０４０４】
次に、分散ノード２０１は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する（ステップＳ４００６）。ここで、一致しない場合（ステップＳ４００６：Ｎｏ）、分散ノード２０１は、ステップＳ４００９の処理に移行する。一方で、一致する場合（ステップＳ４００６：Ｙｅｓ）、分散ノード２０１は、ステップＳ４００７の処理に移行する。
【０４０５】
ステップＳ４００７では、分散ノード２０１は、削除するプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する（ステップＳ４００７）。ここで、一致しない場合（ステップＳ４００７：Ｎｏ）、分散ノード２０１は、ステップＳ４００９の処理に移行する。一方で、一致する場合（ステップＳ４００７：Ｙｅｓ）、分散ノード２０１は、ステップＳ４００８の処理に移行する。
【０４０６】
ステップＳ４００８では、分散ノード２０１は、プラグイン設定情報を削除する（ステップＳ４００８）。そして、分散ノード２０１は、ステップＳ４００９の処理に移行する。
【０４０７】
ステップＳ４００９では、分散ノード２０１は、プラグイン管理テーブル３７１１のうちのすべてのプラグイン設定情報を選択したか否かを判定する（ステップＳ４００９）。ここで、未選択のプラグイン設定情報がある場合（ステップＳ４００９：Ｎｏ）、分散ノード２０１は、ステップＳ４００５の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合（ステップＳ４００９：Ｙｅｓ）、分散ノード２０１は、プラグイン削除処理を終了する。
【０４０８】
（動作例５におけるプラグイン更新処理手順）
次に、図４１を用いて、分散ノード２０１が実行する、動作例５におけるプラグイン更新処理手順の一例について説明する。プラグイン更新処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０４０９】
図４１は、動作例５におけるプラグイン更新処理手順の一例を示すフローチャートである。図４１において、分散ノード２０１は、制御メッセージに対して、図３９に上述したデコード処理を実行し、更新元のプラグインの実行形式データを取得する（ステップＳ４１０１）。
【０４１０】
次に、分散ノード２０１は、制御メッセージに対して、図３９に上述したデコード処理を実行し、更新先のプラグインの実行形式データを取得する（ステップＳ４１０２）。そして、分散ノード２０１は、ステップＳ４１０３の処理に移行する。
【０４１１】
ステップＳ４１０３では、分散ノード２０１は、プラグイン管理テーブル３７１１のリスト３７１０のうちのプラグイン管理テーブル３７１１を選択する（ステップＳ４１０３）。
【０４１２】
次に、分散ノード２０１は、制御メッセージのＩＤとプラグイン管理テーブル３７１１のＩＤとが一致するか否かを判定する（ステップＳ４１０４）。ここで、一致しない場合（ステップＳ４１０４：Ｎｏ）、分散ノード２０１は、ステップＳ４１０５の処理に移行する。一方で、一致する場合（ステップＳ４１０４：Ｙｅｓ）、分散ノード２０１は、ステップＳ４１０６の処理に移行する。
【０４１３】
ステップＳ４１０５では、分散ノード２０１は、プラグイン管理テーブル３７１１のリスト３７１０のうちすべてのプラグイン管理テーブル３７１１を選択したか否かを判定する（ステップＳ４１０５）。ここで、未選択のプラグイン管理テーブル３７１１がある場合（ステップＳ４１０５：Ｎｏ）、分散ノード２０１は、ステップＳ４１０３の処理に戻る。一方で、すべてのプラグイン管理テーブル３７１１を選択している場合（ステップＳ４１０５：Ｙｅｓ）、分散ノード２０１は、プラグイン更新処理を終了する。
【０４１４】
ステップＳ４１０６では、分散ノード２０１は、プラグイン管理テーブル３７１１のうちのプラグイン設定情報を選択する（ステップＳ４１０６）。
【０４１５】
次に、分散ノード２０１は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する（ステップＳ４１０７）。ここで、一致しない場合（ステップＳ４１０７：Ｎｏ）、分散ノード２０１は、ステップＳ４１１０の処理に移行する。一方で、一致する場合（ステップＳ４１０７：Ｙｅｓ）、分散ノード２０１は、ステップＳ４１０８の処理に移行する。
【０４１６】
ステップＳ４１０８では、分散ノード２０１は、更新元のプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する（ステップＳ４１０８）。ここで、一致しない場合（ステップＳ４１０８：Ｎｏ）、分散ノード２０１は、ステップＳ４１１０の処理に移行する。一方で、一致する場合（ステップＳ４１０８：Ｙｅｓ）、分散ノード２０１は、ステップＳ４１０９の処理に移行する。
【０４１７】
ステップＳ４１０９では、分散ノード２０１は、プラグイン設定情報のプラグインデータを、更新先のプラグインの実行形式データで更新する（ステップＳ４１０９）。そして、分散ノード２０１は、ステップＳ４１１０の処理に移行する。
【０４１８】
ステップＳ４１１０では、分散ノード２０１は、プラグイン管理テーブル３７１１のうちのすべてのプラグイン設定情報を選択したか否かを判定する（ステップＳ４１１０）。ここで、未選択のプラグイン設定情報がある場合（ステップＳ４１１０：Ｎｏ）、分散ノード２０１は、ステップＳ４１０６の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合（ステップＳ４１１０：Ｙｅｓ）、分散ノード２０１は、プラグイン更新処理を終了する。
【０４１９】
ここで、分散ノード２０１は、一部ステップの処理の順序を入れ替えて実行してもよい場合がある。また、分散ノード２０１は、一部ステップの処理を省略してもよい場合がある。
【０４２０】
（並列分散処理システム２００の動作例６）
次に、並列分散処理システム２００の動作例６について説明する。上述した動作例５は、分散ノード２０１が、プラグインを符号化した情報から、プラグインを毎回復号する動作例である。
【０４２１】
これに対し、動作例６は、分散ノード２０１が、プラグインを復号した際に、プラグインをキャッシュし、再利用可能にする動作例である。これによれば、動作例６は、同じプラグインを符号化した情報を複数回受け付けた場合に、プラグインの復号による処理量の増大化を抑制することができる。
【０４２２】
まず、図４２の説明に移行し、動作例６における並列分散処理システム２００の動作の流れについて説明する。
【０４２３】
図４２は、動作例６における並列分散処理システム２００の動作の流れを示す説明図である。動作例６において、分散ノード２０１は、プラグインキャッシュ管理部４２０１と、プラグインデコード部４２０２と、プラグインキャッシュ管理テーブル４２１０を有する。プラグインデコード部４２０２は、依頼された復号処理を実行する。
【０４２４】
プラグインキャッシュ管理部４２０１は、プラグインを符号化したデータのハッシュ値と対応付けて、プラグインデコード部４２０２に依頼して復号したプラグインデータを、プラグインキャッシュ管理テーブル４２１０に記憶しておく。そして、プラグインキャッシュ管理部４２０１は、新たにデコード対象になったプラグインを符号化したデータのハッシュ値に対応付けて、プラグインキャッシュ管理テーブル４２１０にプラグインデータが記憶されていれば、当該プラグインデータを取得する。これにより、分散ノード２０１は、復号を省略することができ、プラグインの復号による処理量の増大化を抑制することができる。
【０４２５】
次に、図４３の説明に移行し、動作例６における各種メッセージの一例について説明した後、図４４の説明に移行し、動作例６における各種メッセージを受信する場合についての分散ノード２０１の具体的な機能的構成例について説明する。
【０４２６】
図４３は、動作例６における各種メッセージの一例を示す説明図である。動作例６において、並列分散処理システム２００は、例えば、イベントメッセージ４３０１、プラグインを追加する制御メッセージ４３０２、プラグインの有効期限を変更する制御メッセージ４３０３、プラグインを更新する制御メッセージ４３０４を利用する。
【０４２７】
イベントメッセージ４３０１は、図３６に示したイベントメッセージ３６０１と同様であるため、説明を省略する。プラグインを追加する制御メッセージ４３０２は、図３６に示したプラグインを追加する制御メッセージ３６０２と同様であるため、説明を省略する。
【０４２８】
プラグインを削除する制御メッセージ４３０３は、図３６に示したプラグインを削除する制御メッセージ３６０３と同様であるため、説明を省略する。プラグインを更新する制御メッセージ４３０４は、図３６に示したプラグインを更新する制御メッセージ３６０４と同様であるため、説明を省略する。
【０４２９】
図４４は、動作例６における分散ノード２０１の具体的な機能的構成例を示す説明図である。図４４に示すように、分散ノード２０１は、仮想オブジェクトテーブル４４２１のリスト４４２０を有する。仮想オブジェクトテーブル４４２１は、図７に示した仮想オブジェクトテーブル７２１と同様であるため、説明を省略する。
【０４３０】
図４４に示すように、分散ノード２０１は、プラグイン管理テーブル４４１１のリスト４４１０を有する。プラグイン管理テーブル４４１１は、図７に示したプラグイン管理テーブル７１１と同様であるため、説明を省略する。
【０４３１】
図４４に示すように、分散ノード２０１は、メッセージ判別部４４０１と、制御メッセージパーサ部４４０２と、プラグイン管理部４４０３と、イベントメッセージパーサ部４４０４と、ステート管理部４４０５と、プラグイン実行部４４０６とを有する。分散ノード２０１は、さらに、プラグインデコード部４２０２と、プラグインキャッシュ管理部４２０１とを有する。
【０４３２】
メッセージ判別部４４０１は、図７に示したメッセージ判別部７０１と同様であるため、説明を省略する。制御メッセージパーサ部４４０２は、図７に示した制御メッセージパーサ部７０２と同様であるため、説明を省略する。
【０４３３】
プラグイン管理部４４０３は、図７に示したプラグイン管理部７０３と同様である。プラグイン管理部４４０３は、プラグインの置き場所に基づきプラグインデータを取得する代わりに、プラグインデコード部４２０２およびプラグインキャッシュ管理部４２０１を介してプラグインを符号化したデータに基づきプラグインデータを取得する。
【０４３４】
プラグインキャッシュ管理部４２０１は、プラグインを符号化したデータのハッシュ値と対応付けて、プラグインデコード部４２０２に依頼して復号したプラグインデータを、プラグインキャッシュ管理テーブル４２１０に記憶しておく。プラグインキャッシュ管理部４２０１は、新たにデコード対象になったプラグインを符号化したデータのハッシュ値に対応付けて、プラグインキャッシュ管理テーブル４２１０にプラグインデータが記憶されていれば、当該プラグインデータを取得する。プラグインキャッシュ管理部４２０１は、プラグインデータを取得した場合、プラグインデコード部４２０２に復号を省略させる。プラグインデコード部４２０２は、プラグインを符号化したデータから、プラグインデータを復号する。
【０４３５】
イベントメッセージパーサ部４４０４は、図７に示したイベントメッセージパーサ部７０４と同様であるため、説明を省略する。ステート管理部４４０５は、図７に示したステート管理部７０５と同様であるため、説明を省略する。プラグイン実行部４４０６は、図７に示したプラグイン実行部７０６と同様であるため、説明を省略する。
【０４３６】
これにより、分散ノード２０１は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。また、分散ノード２０１は、プラグインの復号による処理量の増大化を抑制することができる。分散ノード２０１は、例えば、異なるＩＤに対して同じプラグインを対応付ける場合のような、同じプラグインを符号化した情報を複数回受け付ける場合に、プラグインの復号による処理量の増大化を抑制することができる。
【０４３７】
（動作例６における全体処理手順）
動作例６における全体処理手順は、図８に示した動作例１における全体処理手順と同様であるため、説明を省略する。
【０４３８】
（動作例６におけるイベントメッセージ処理手順）
動作例６におけるイベントメッセージ処理手順は、図９に示した動作例１におけるイベントメッセージ処理手順と同様であるため、説明を省略する。
【０４３９】
（動作例６におけるプラグイン処理手順）
動作例６におけるプラグイン処理手順は、図１０に示した動作例１におけるプラグイン処理手順と同様であるため、説明を省略する。
【０４４０】
（動作例６における制御系イベント処理手順）
動作例６における制御系イベント処理手順は、図１１に示した動作例１における制御系イベント処理手順と同様であるため、説明を省略する。また、動作例６における制御系イベント処理では、図１２に示した動作例１におけるプラグイン追加処理の代わりに、図４５に後述する動作例６におけるプラグイン追加処理が呼び出される。
【０４４１】
また、動作例６における制御系イベント処理では、図１３に示した動作例１におけるプラグイン削除処理の代わりに、図４７に後述する動作例６におけるプラグイン削除処理が呼び出される。また、動作例６における制御系イベント処理では、図１４に示した動作例１におけるプラグイン更新処理の代わりに、図４８に後述する動作例６におけるプラグイン更新処理が呼び出される。
【０４４２】
（動作例６におけるプラグイン追加処理手順）
次に、図４５を用いて、分散ノード２０１が実行する、動作例６におけるプラグイン追加処理手順の一例について説明する。プラグイン追加処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０４４３】
図４５は、動作例６におけるプラグイン追加処理手順の一例を示すフローチャートである。図４５において、分散ノード２０１は、制御メッセージに対して、図４６に後述するキャッシュ処理を実行する（ステップＳ４５０１）。次に、分散ノード２０１は、ステップＳ４５０２の処理に移行する。
【０４４４】
ステップＳ４５０２では、分散ノード２０１は、プラグイン管理テーブル４４１１のリスト４４１０のうちのプラグイン管理テーブル４４１１を選択する（ステップＳ４５０２）。
【０４４５】
次に、分散ノード２０１は、制御メッセージのＩＤとプラグイン管理テーブル４４１１のＩＤとが一致するか否かを判定する（ステップＳ４５０３）。ここで、一致する場合（ステップＳ４５０３：Ｙｅｓ）、分散ノード２０１は、ステップＳ４５０４の処理に移行する。一方で、一致しない場合（ステップＳ４５０３：Ｎｏ）、分散ノード２０１は、ステップＳ４５０５の処理に移行する。
【０４４６】
ステップＳ４５０４では、分散ノード２０１は、プラグイン管理テーブル４４１１のプラグイン設定情報に、制御メッセージに対応する情報を追加する（ステップＳ４５０４）。そして、分散ノード２０１は、ステップＳ４５０８の処理に移行する。
【０４４７】
ステップＳ４５０５では、分散ノード２０１は、プラグイン管理テーブル４４１１のリスト４４１０のうちのすべてのプラグイン管理テーブル４４１１を選択したか否かを判定する（ステップＳ４５０５）。ここで、未選択のプラグイン管理テーブル４４１１がある場合（ステップＳ４５０５：Ｎｏ）、分散ノード２０１は、ステップＳ４５０２の処理に戻る。一方で、すべてのプラグイン管理テーブル４４１１を選択している場合（ステップＳ４５０５：Ｙｅｓ）、分散ノード２０１は、ステップＳ４５０６の処理に移行する。
【０４４８】
ステップＳ４５０６では、分散ノード２０１は、新しいプラグイン管理テーブル４４１１を生成し、プラグイン管理テーブル４４１１のリスト４４１０に登録する（ステップＳ４５０６）。次に、分散ノード２０１は、生成したプラグイン管理テーブル４４１１のＩＤに制御メッセージのＩＤを設定する（ステップＳ４５０７）。そして、分散ノード２０１は、ステップＳ４５０８の処理に移行する。
【０４４９】
ステップＳ４５０８では、分散ノード２０１は、プラグイン管理テーブル４４１１のプラグイン設定情報に、制御メッセージに対応する情報を追加する（ステップＳ４５０８）。そして、分散ノード２０１は、プラグイン追加処理を終了する。
【０４５０】
（動作例６におけるキャッシュ処理手順）
次に、図４６を用いて、分散ノード２０１が実行する、動作例６におけるキャッシュ処理手順の一例について説明する。キャッシュ処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０４５１】
図４６は、動作例６におけるキャッシュ処理手順の一例を示すフローチャートである。図４６において、分散ノード２０１は、制御メッセージに含まれる符号化されたプラグインのダイジェスト値を算出する（ステップＳ４６０１）。そして、分散ノード２０１は、ステップＳ４６０２の処理に移行する。
【０４５２】
ステップＳ４６０２では、分散ノード２０１は、プラグインキャッシュ管理テーブル４２１０のうちのレコードを選択する（ステップＳ４６０２）。
【０４５３】
次に、分散ノード２０１は、算出したダイジェスト値とレコードのダイジェスト値とが一致するか否かを判定する（ステップＳ４６０３）。ここで、一致する場合（ステップＳ４６０３：Ｙｅｓ）、分散ノード２０１は、ステップＳ４６０４の処理に移行する。一方で、一致しない場合（ステップＳ４６０３：Ｎｏ）、分散ノード２０１は、ステップＳ４６０５の処理に移行する。
【０４５４】
ステップＳ４６０４では、分散ノード２０１は、ダイジェスト値に対応するプラグインデータを取得する（ステップＳ４６０４）。そして、分散ノード２０１は、キャッシュ処理を終了する。
【０４５５】
ステップＳ４６０５では、分散ノード２０１は、プラグインキャッシュ管理テーブル４２１０のうちのすべてのレコードを選択したか否かを判定する（ステップＳ４６０５）。ここで、未選択のレコードがある場合（ステップＳ４６０５：Ｎｏ）、分散ノード２０１は、ステップＳ４６０２の処理に戻る。一方で、すべてのレコードを選択している場合（ステップＳ４６０５：Ｙｅｓ）、分散ノード２０１は、ステップＳ４６０６の処理に移行する。
【０４５６】
ステップＳ４６０６では、分散ノード２０１は、制御メッセージに対して、図３９に上述したデコード処理を実行する（ステップＳ４６０６）。
【０４５７】
次に、分散ノード２０１は、プラグインキャッシュ管理テーブル４２１０に、復号されたプラグインを、復号されたプラグインのダイジェスト値をキーにして登録する（ステップＳ４６０７）。そして、分散ノード２０１は、キャッシュ処理を終了する。
【０４５８】
（動作例６におけるプラグイン削除処理手順）
次に、図４７を用いて、分散ノード２０１が実行する、動作例６におけるプラグイン削除処理手順の一例について説明する。プラグイン削除処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０４５９】
図４７は、動作例６におけるプラグイン削除処理手順の一例を示すフローチャートである。図４７において、分散ノード２０１は、制御メッセージに対して、図４６に上述したキャッシュ処理を実行する（ステップＳ４７０１）。次に、分散ノード２０１は、ステップＳ４７０２の処理に移行する。
【０４６０】
ステップＳ４７０２では、分散ノード２０１は、プラグイン管理テーブル４４１１のリスト４４１０のうちのプラグイン管理テーブル４４１１を選択する（ステップＳ４７０２）。
【０４６１】
次に、分散ノード２０１は、制御メッセージのＩＤとプラグイン管理テーブル４４１１のＩＤとが一致するか否かを判定する（ステップＳ４７０３）。ここで、一致しない場合（ステップＳ４７０３：Ｎｏ）、分散ノード２０１は、ステップＳ４７０４の処理に移行する。一方で、一致する場合（ステップＳ４７０３：Ｙｅｓ）、分散ノード２０１は、ステップＳ４７０５の処理に移行する。
【０４６２】
ステップＳ４７０４では、分散ノード２０１は、プラグイン管理テーブル４４１１のリスト４４１０のうちすべてのプラグイン管理テーブル４４１１を選択したか否かを判定する（ステップＳ４７０４）。ここで、未選択のプラグイン管理テーブル４４１１がある場合（ステップＳ４７０４：Ｎｏ）、分散ノード２０１は、ステップＳ４７０２の処理に戻る。一方で、すべてのプラグイン管理テーブル４４１１を選択している場合（ステップＳ４７０４：Ｙｅｓ）、分散ノード２０１は、プラグイン削除処理を終了する。
【０４６３】
ステップＳ４７０５では、分散ノード２０１は、プラグイン管理テーブル４４１１のうちのプラグイン設定情報を選択する（ステップＳ４７０５）。
【０４６４】
次に、分散ノード２０１は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する（ステップＳ４７０６）。ここで、一致しない場合（ステップＳ４７０６：Ｎｏ）、分散ノード２０１は、ステップＳ４７０９の処理に移行する。一方で、一致する場合（ステップＳ４７０６：Ｙｅｓ）、分散ノード２０１は、ステップＳ４７０７の処理に移行する。
【０４６５】
ステップＳ４７０７では、分散ノード２０１は、削除するプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する（ステップＳ４７０７）。ここで、一致しない場合（ステップＳ４７０７：Ｎｏ）、分散ノード２０１は、ステップＳ４７０９の処理に移行する。一方で、一致する場合（ステップＳ４７０７：Ｙｅｓ）、分散ノード２０１は、ステップＳ４７０８の処理に移行する。
【０４６６】
ステップＳ４７０８では、分散ノード２０１は、プラグイン設定情報を削除する（ステップＳ４７０８）。そして、分散ノード２０１は、ステップＳ４７０９の処理に移行する。
【０４６７】
ステップＳ４７０９では、分散ノード２０１は、プラグイン管理テーブル４４１１のうちのすべてのプラグイン設定情報を選択したか否かを判定する（ステップＳ４７０９）。ここで、未選択のプラグイン設定情報がある場合（ステップＳ４７０９：Ｎｏ）、分散ノード２０１は、ステップＳ４７０５の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合（ステップＳ４７０９：Ｙｅｓ）、分散ノード２０１は、プラグイン削除処理を終了する。
【０４６８】
（動作例６におけるプラグイン更新処理手順）
次に、図４８を用いて、分散ノード２０１が実行する、動作例６におけるプラグイン更新処理手順の一例について説明する。プラグイン更新処理は、例えば、図３に示したＣＰＵ３０１と、メモリ３０２や記録媒体３０５などの記憶領域と、ネットワークＩ／Ｆ３０３とによって実現される。
【０４６９】
図４８は、動作例６におけるプラグイン更新処理手順の一例を示すフローチャートである。図４８において、分散ノード２０１は、制御メッセージに対して、図４６に上述したキャッシュ処理を実行し、更新元のプラグインの実行形式データを取得する（ステップＳ４８０１）。
【０４７０】
次に、分散ノード２０１は、制御メッセージに対して、図４６に上述したキャッシュ処理を実行し、更新先のプラグインの実行形式データを取得する（ステップＳ４８０２）。そして、分散ノード２０１は、ステップＳ４８０３の処理に移行する。
【０４７１】
ステップＳ４８０３では、分散ノード２０１は、プラグイン管理テーブル４４１１のリスト４４１０のうちのプラグイン管理テーブル４４１１を選択する（ステップＳ４８０３）。
【０４７２】
次に、分散ノード２０１は、制御メッセージのＩＤとプラグイン管理テーブル４４１１のＩＤとが一致するか否かを判定する（ステップＳ４８０４）。ここで、一致しない場合（ステップＳ４８０４：Ｎｏ）、分散ノード２０１は、ステップＳ４８０５の処理に移行する。一方で、一致する場合（ステップＳ４８０４：Ｙｅｓ）、分散ノード２０１は、ステップＳ４８０６の処理に移行する。
【０４７３】
ステップＳ４８０５では、分散ノード２０１は、プラグイン管理テーブル４４１１のリスト４４１０のうちすべてのプラグイン管理テーブル４４１１を選択したか否かを判定する（ステップＳ４８０５）。ここで、未選択のプラグイン管理テーブル４４１１がある場合（ステップＳ４８０５：Ｎｏ）、分散ノード２０１は、ステップＳ４８０３の処理に戻る。一方で、すべてのプラグイン管理テーブル４４１１を選択している場合（ステップＳ４８０５：Ｙｅｓ）、分散ノード２０１は、プラグイン更新処理を終了する。
【０４７４】
ステップＳ４８０６では、分散ノード２０１は、プラグイン管理テーブル４４１１のうちのプラグイン設定情報を選択する（ステップＳ４８０６）。
【０４７５】
次に、分散ノード２０１は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する（ステップＳ４８０７）。ここで、一致しない場合（ステップＳ４８０７：Ｎｏ）、分散ノード２０１は、ステップＳ４８１０の処理に移行する。一方で、一致する場合（ステップＳ４８０７：Ｙｅｓ）、分散ノード２０１は、ステップＳ４８０８の処理に移行する。
【０４７６】
ステップＳ４８０８では、分散ノード２０１は、更新元のプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する（ステップＳ４８０８）。ここで、一致しない場合（ステップＳ４８０８：Ｎｏ）、分散ノード２０１は、ステップＳ４８１０の処理に移行する。一方で、一致する場合（ステップＳ４８０８：Ｙｅｓ）、分散ノード２０１は、ステップＳ４８０９の処理に移行する。
【０４７７】
ステップＳ４８０９では、分散ノード２０１は、プラグイン設定情報のプラグインデータを、更新先のプラグインの実行形式データで更新する（ステップＳ４８０９）。そして、分散ノード２０１は、ステップＳ４８１０の処理に移行する。
【０４７８】
ステップＳ４８１０では、分散ノード２０１は、プラグイン管理テーブル４４１１のうちのすべてのプラグイン設定情報を選択したか否かを判定する（ステップＳ４８１０）。ここで、未選択のプラグイン設定情報がある場合（ステップＳ４８１０：Ｎｏ）、分散ノード２０１は、ステップＳ４８０６の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合（ステップＳ４８１０：Ｙｅｓ）、分散ノード２０１は、プラグイン更新処理を終了する。
【０４７９】
ここで、分散ノード２０１は、一部ステップの処理の順序を入れ替えて実行してもよい場合がある。また、分散ノード２０１は、一部ステップの処理を省略してもよい場合がある。
【０４８０】
（並列分散処理システム２００の適用例）
次に、図４９〜図５６を用いて、並列分散処理システム２００の適用例について説明する。
【０４８１】
図４９は、並列分散処理システム２００の適用例を示す説明図である。図４９に示すように、並列分散処理システム２００は、例えば、フレームワークとしてＡｐａｃｈｅ  Ｆｌｉｎｋを利用する。並列分散処理システム２００は、上述した分散ノード２０１に対応する計算機４９０１−１〜４９０１−Ｎと、マスタノードである計算機４９０２と、上述した管理ノード２０２に対応する計算機４９０３とを含む。以下の説明では、計算機４９０１−１〜４９０１−Ｎを区別せずに単に「計算機４９０１」と表記する場合がある。
【０４８２】
計算機４９０１は、Ｆｌｉｎｋ  Ｓｌａｖｅ  Ｒｕｎｔｉｍｅを動作させ、分散ノードソフトウェアを動作させる。計算機４９０１は、Ａｐａｃｈｅ  Ｆｌｉｎｋのジョブとして、上述した動作例１〜動作例６の動作を実現する。計算機４９０２は、Ｆｌｉｎｋ  Ｓｌａｖｅ  Ｒｕｎｔｉｍｅを動作させる。計算機４９０３は、メッセージキューを有し、イベントメッセージを受け付け、計算機４９０１に送信する。
【０４８３】
計算機４９０２間は、例えば、クラスタ間通信ネットワーク４９１０により接続される。計算機４９０２と計算機４９０３とは、例えば、クラスタ間通信ネットワーク４９１０により接続される。次に、図５０の説明に移行する。
【０４８４】
図５０は、適用例におけるメッセージフローを示す説明図である。図５０に示すように、計算機４９０３からイベントメッセージや制御メッセージが、計算機４９０１に送信される。計算機４９０１は、文字列解釈ブロック５００１と仮想オブジェクトブロック５００２とを有する。
【０４８５】
文字列解釈ブロック５００１は、受け付けたイベントメッセージや制御メッセージの文字列を解釈し、受け付けたイベントメッセージや制御メッセージの宛先を判別する。そして、文字列解釈ブロック５００１は、受け付けたイベントメッセージや制御メッセージを、自装置の仮想オブジェクトブロック５００２、または他装置の仮想オブジェクトブロック５００２に送信する。
【０４８６】
仮想オブジェクトブロック５００２は、イベントメッセージや制御メッセージを処理する。仮想オブジェクトブロック５００２は、具体的には、上述した動作例１〜動作例６のいずれかの動作、または、上述した動作例１〜動作例６のうちの２以上を組み合わせた動作を実現するように、イベントメッセージや制御メッセージを処理する。次に、図５１および図５２の説明に移行し、動作例３と動作例６とを組み合わせた動作を実現する機能的構成例について説明する。
【０４８７】
図５１および図５２は、適用例における計算機４９０１の具体的な機能的構成例を示す説明図である。図５１に示すように、文字列解釈ブロック５００１は、文字列解釈モジュール５１０１と、宛先決定モジュール５１０２とを有する。
【０４８８】
文字列解釈ブロック５００１は、受け付けたイベントメッセージや制御メッセージのＪＳＯＮ形式の文字列を内部表現に変換し、宛先決定モジュール５１０２に出力する。宛先決定モジュール５１０２は、内部表現に基づいて、受け付けたイベントメッセージや制御メッセージの宛先を判別し、自装置の仮想オブジェクトブロック５００２、または他装置の仮想オブジェクトブロック５００２に送信する。次に、図５２の説明に移行する。
【０４８９】
図５２に示すように、仮想オブジェクトブロック５００２は、仮想オブジェクトテーブル５２２１のリスト５２２０と、プラグイン管理テーブル５２１１のリスト５２１０と、プラグインキャッシュ管理テーブル５２３０とを有する。
【０４９０】
仮想オブジェクトテーブル５２２１は、図２２に示した仮想オブジェクトテーブル２２２１や図４４に示した仮想オブジェクトテーブル４４２１と同様である。プラグイン管理テーブル５２１１は、図２２に示したプラグイン管理テーブル２２１１や図４４に示したプラグイン管理テーブル４４１１と同様である。プラグインキャッシュ管理テーブル５２３０は、図４２に示したプラグインキャッシュ管理テーブル４２１０と同様である。
【０４９１】
また、仮想オブジェクトブロック５００２は、メッセージ判別部５２０１と、制御メッセージパーサ部５２０２と、プラグイン管理部５２０３と、バリア処理部５２０４とを有する。また、仮想オブジェクトブロック５００２は、プラグインキャッシュ管理部５２０５と、プラグインデコード部５２０６とを有する。また、仮想オブジェクトブロック５００２は、イベントメッセージパーサ部５２０７と、ステート管理部５２０８と、プラグイン実行部５２０９とを有する。
【０４９２】
メッセージ判別部５２０１は、図２２に示したメッセージ判別部２２０１および図４４に示したメッセージ判別部４４０１と同様に動作する。制御メッセージパーサ部５２０２は、図２２に示した制御メッセージパーサ部２２０２および図４４に示した制御メッセージパーサ部４４０２と同様に動作する。プラグイン管理部５２０３は、図２２に示したプラグイン管理部２２０３および図４４に示したプラグイン管理部４４０３と同様に動作する。
【０４９３】
バリア処理部５２０４は、図２２に示したバリア処理部２２０４と同様に動作する。プラグインキャッシュ管理部５２０５は、図４２に示したプラグインキャッシュ管理部４２０１と同様に動作する。プラグインデコード部５２０６は、図４２に示したプラグインデコード部４２０２と同様に動作する。
【０４９４】
イベントメッセージパーサ部５２０７は、図２２に示したイベントメッセージパーサ部２２０５および図４４に示したイベントメッセージパーサ部４４０４と同様に動作する。ステート管理部５２０８は、図２２に示したステート管理部２２０６および図４４に示したステート管理部４４０５と同様に動作する。プラグイン実行部５２０９は、図２２に示したプラグイン実行部２２０７および図４４に示したプラグイン実行部４４０６と同様に動作する。次に、図５３〜図５６の説明に移行し、各種メッセージの具体例について説明する。
【０４９５】
図５３は、適用例におけるイベントメッセージ５３００の具体例を示す説明図である。イベントメッセージ５３００は、イベントメッセージ６０１と同様に、ＩＤと、時刻と、種別と、１以上のステートとのフィールドを有する。
【０４９６】
図５３の“ｉｄ”はＩＤのフィールドに対応する。図５３の“ｌａｔ”、“ｌｏｎ”、“ｓｐｅｅｄ”はステートのフィールドに対応し、ステート名を表す。図５３の“ｔｉｍｅ”は時刻のフィールドに対応する。図５３の“ｔｙｐｅ”は種別のフィールドに対応する。次に、図５４の説明に移行する。
【０４９７】
図５４は、適用例におけるプラグインを追加する制御メッセージ５４００の具体例を示す説明図である。制御メッセージ５４００は、制御メッセージ２１０２や制御メッセージ４３０２を統合したメッセージに対応する。制御メッセージ５４００は、ＩＤと、時刻と、種別と、対象ステート名と、追加するプラグインを符号化したデータと、開始時間と、終了時間とのフィールドを有する。
【０４９８】
図５４の“ｅｎｄ”は終了時間のフィールドに対応する。“−１”は終了時間が未定を示す。図５４の“ｉｄ”はＩＤのフィールドに対応する。図５４の“ｐｌｕｇｉｎ＿ｄａｔａ”は追加するプラグインを符号化したデータのフィールドに対応する。図５４の“ｓｔａｒｔ”は開始時間のフィールドに対応する。図５４の“ｔａｒｇｅｔ＿ｓｔａｔｅ＿ｎａｍｅ”は対象ステート名のフィールドに対応する。図５４の“ｔｉｍｅ”は時刻のフィールドに対応する。図５４の“ｔｙｐｅ”は種別のフィールドに対応する。次に、図５５の説明に移行する。
【０４９９】
図５５は、適用例におけるプラグインの有効期限を変更する制御メッセージ５５００の具体例を示す説明図である。制御メッセージ５５００は、制御メッセージ２１０３や制御メッセージ４３０３を統合したメッセージに対応する。制御メッセージ５５００は、ＩＤと、時刻と、種別と、対象ステート名と、有効期限を変更するプラグインを符号化したデータと、終了時間とのフィールドを有する。
【０５００】
図５５の“ｅｎｄ”は終了時間のフィールドに対応する。図５５の“ｉｄ”はＩＤのフィールドに対応する。図５５の“ｐｌｕｇｉｎ＿ｄａｔａ”は有効期限を変更するプラグインを符号化したデータのフィールドに対応する。図５５の“ｔａｒｇｅｔ＿ｓｔａｔｅ＿ｎａｍｅ”は対象ステート名のフィールドに対応する。図５５の“ｔｉｍｅ”は時刻のフィールドに対応する。図５５の“ｔｙｐｅ”は種別のフィールドに対応する。次に、図５６の説明に移行する。
【０５０１】
図５６は、適用例におけるプラグインを更新する制御メッセージ５６００の具体例を示す説明図である。制御メッセージ５６００は、制御メッセージ２１０４や制御メッセージ４３０４を統合したメッセージに対応する。制御メッセージ５６００は、ＩＤと、時刻と、種別と、対象ステート名と、更新対象のプラグインを符号化したデータと、新しいプラグインを符号化したデータと、開始時間と、終了時間とのフィールドを有する。
【０５０２】
図５６の“ｔｙｐｅ”は種別のフィールドに対応する。図５６の“ｉｄ”はＩＤのフィールドに対応する。図５６の“ｔｉｍｅ”は時刻のフィールドに対応する。図５６の“ｓｔａｒｔ”は開始時間のフィールドに対応する。図５６の“ｅｎｄ”は終了時間のフィールドに対応する。図５６の“ｔａｒｇｅｔ＿ｓｔａｔｅ＿ｎａｍｅ”は対象ステート名のフィールドに対応する。図５６の“ｏｌｄ＿ｐｌｕｇｉｎ＿ｄａｔａ”は更新対象のプラグインを符号化したデータのフィールドに対応する。図５６の“ｎｅｗ＿ｐｌｕｇｉｎ＿ｄａｔａ”は新しいプラグインを符号化したデータのフィールドに対応する。
【０５０３】
図５７は、並列分散処理システム２００の応用的な適用例を示す説明図である。図５７に示すように、計算機４９０１は、仮想オブジェクトブロックを複数有する場合があってもよい。図５７の例では、計算機４９０１は、文字列解釈ブロック５７０１と仮想オブジェクトブロック５７０２と仮想オブジェクトブロック５７０３とを有する。文字列解釈ブロック５７０１は、図５０に示した文字列解釈ブロック５００１と同様であるが、各種メッセージを、直接、仮想オブジェクトブロック５７０３に入力可能である。仮想オブジェクトブロック５７０２は、イベントメッセージを生成し、仮想オブジェクトブロック５７０３に入力可能である。
【０５０４】
具体的には、並列分散処理システム２００が、自動車を監視するＩｏＴシステムを実現する場合が考えられる。この場合、前段の各仮想オブジェクトブロック５７０２は、個々の自動車の端末装置で発生したイベントデータを処理する。前段の各仮想オブジェクトブロック５７０２は、例えば、各自動車の現在の位置と速度、位置と速度の履歴などの情報をステートとして記憶する。
【０５０５】
後段の仮想オブジェクトブロック５７０３は、特定の条件に該当する自動車を集計するサービスに対応し、前段の各仮想オブジェクトブロック５７０２で発生したイベントデータを処理する。後段の仮想オブジェクトブロック５７０３は、例えば、前段の各仮想オブジェクトブロック５７０２から連続運転時間を示すイベントデータを受け付け、連続運転時間が４時間を超える自動車を検出し、運転手に警告を送る。
【０５０６】
以上説明したように、情報処理装置１００によれば、制御メッセージ１２０を受信することができる。情報処理装置１００によれば、制御メッセージ１２０を受信した場合、受信した制御メッセージ１２０から特定されるイベントの種別を示す情報とプラグイン１３０とを対応付けて記憶部１１０に記憶することができる。情報処理装置１００によれば、イベントメッセージ１４０を受信することができる。情報処理装置１００によれば、イベントメッセージ１４０を受信した場合、受信したイベントメッセージ１４０から特定されるイベントの種別を示す情報に対応付けて記憶部１１０に記憶されたプラグイン１３０を実行することができる。これにより、情報処理装置１００は、制御メッセージ１２０を受信したことに応じて処理プログラムに新たなプラグイン１３０を追加し、処理プログラムを更新することができる。
【０５０７】
情報処理装置１００によれば、受信した制御メッセージ１２０から特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグイン１３０とを対応付けて記憶部１１０に記憶することができる。情報処理装置１００によれば、受信したイベントメッセージ１４０から特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部１１０に記憶されたプラグイン１３０を実行することができる。これにより、情報処理装置１００は、イベントの発生元ごとに、同じ種別のイベントについて異なるプラグインを実行可能にすることができる。
【０５０８】
情報処理装置１００によれば、削除するプラグイン１３０についての第２制御メッセージを受信することができる。情報処理装置１００によれば、第２制御メッセージから特定されるプラグイン１３０を削除することができる。これにより、情報処理装置１００は、制御メッセージ１２０を受信したことに応じて処理プログラムからプラグイン１３０を削除し、処理プログラムを更新することができる。
【０５０９】
情報処理装置１００によれば、受信した制御メッセージ１２０から特定されるプラグイン１３０が有効な期間を記憶部１１０に記憶することができる。情報処理装置１００によれば、記憶部１１０に記憶されたプラグイン１３０が有効な期間に、イベントメッセージ１４０から特定されるイベントが発生した時点が含まれれば、当該プラグイン１３０を実行することができる。これにより、情報処理装置１００は、ネットワーク遅延などの原因で、イベントメッセージと制御メッセージとの到着順が入れ替わった場合にも、処理の不整合を防止することができる。
【０５１０】
情報処理装置１００によれば、記憶部１１０に記憶されたプラグイン１３０が有効な期間より、受信したイベントメッセージ１４０から特定されるイベントが発生した時点が後であれば、当該プラグイン１３０を削除することができる。これにより、情報処理装置１００は、処理プログラムからプラグイン１３０を削除し、処理プログラムを更新することができる。
【０５１１】
情報処理装置１００によれば、定期的に発行される同期メッセージを受信した場合、記憶部１１０の記憶内容をバックアップすることができる。情報処理装置１００によれば、バックアップ後、記憶部１１０に記憶されたプラグイン１３０が有効な期間より、最後に受信したイベントメッセージ１４０から特定されるイベントが発生した時点が後であれば、当該プラグイン１３０を削除することができる。これにより、情報処理装置１００は、バックアップを正常に実施し、巻き戻し可能にすることができる。
【０５１２】
情報処理装置１００によれば、バックアップ後、受信した制御メッセージ１２０から特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグイン１３０とを対応付けて記憶部１１０に記憶することができる。これにより、情報処理装置１００は、ネットワーク遅延などの原因で、イベントメッセージと制御メッセージとの到着順が入れ替わった場合にも、処理の不整合を防止することができる。
【０５１３】
情報処理装置１００によれば、削除するプラグイン１３０についての第２制御メッセージを受信することができる。情報処理装置１００によれば、第２制御メッセージを受信した場合、同期メッセージを受信し、記憶部１１０の記憶内容をバックアップした後に、プラグイン１３０を削除することができる。これにより、情報処理装置１００は、処理プログラムからプラグイン１３０を削除し、処理プログラムを更新することができる。
【０５１４】
情報処理装置１００によれば、プラグイン１３０に関する情報として、プラグイン１３０を記憶した記憶領域のアドレスを利用することができる。これにより、情報処理装置１００は、プラグイン１３０を取得することができ、制御メッセージ１２０のデータ量の増大化を抑制することができる。
【０５１５】
情報処理装置１００によれば、プラグイン１３０に関する情報として、プラグイン１３０を符号化した情報を利用することができる。これにより、情報処理装置１００は、プラグイン１３０を取得する際に、アクセス集中を回避することができる。
【０５１６】
情報処理装置１００によれば、復号したプラグイン１３０を、ダイジェスト値と対応付けてキャッシュすることができる。これにより、情報処理装置１００は、プラグイン１３０を再利用可能にし、復号にかかる処理量の低減化を図ることができる。
【０５１７】
情報処理装置１００は、並列分散処理システムに含まれる複数のノードのいずれかのノードのコンピュータとして動作することができる。情報処理装置１００は、イベントメッセージ１４０を収集して複数のノードのいずれかのノードに送信するコンピュータから複数のノードに一斉に送信された制御メッセージ１２０を受信することができる。これにより、情報処理装置１００は、処理の不整合が発生しないようにすることができる。
【０５１８】
なお、本実施の形態で説明したイベント処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本実施の形態で説明した処理プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本実施の形態で説明した処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【０５１９】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０５２０】
（付記１）コンピュータに、
プラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す制御メッセージを受信した場合、受信した前記制御メッセージから特定されるイベントの種別を示す情報とプラグインとを対応付けて記憶部に記憶し、
イベントの種別を示す情報を表すイベントメッセージを受信した場合、受信した前記イベントメッセージから特定されるイベントの種別を示す情報に対応付けて前記記憶部に記憶されたプラグインを実行する、
処理を実行させることを特徴とする処理プログラム。
【０５２１】
（付記２）前記制御メッセージは、さらに、イベントの発生元を識別する情報を表し、
前記イベントメッセージは、さらに、イベントの発生元を識別する情報を表し、
前記記憶する処理は、前記制御メッセージを受信した場合、受信した前記制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグインとを対応付けて前記記憶部に記憶し、
前記実行する処理は、前記イベントメッセージを受信した場合、受信した前記イベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインを実行する、ことを特徴とする付記１に記載の処理プログラム。
【０５２２】
（付記３）前記コンピュータに、
イベントの発生元を識別する情報、プラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す第２制御メッセージを受信した場合、受信した前記第２制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインが、前記第２制御メッセージから特定されるプラグインと一致すれば、当該プラグインを削除する、処理を実行させることを特徴とする付記２に記載の処理プログラム。
【０５２３】
（付記４）前記制御メッセージは、さらに、プラグインが有効な期間を示す情報を表し、
前記イベントメッセージは、さらに、イベントが発生した時点を示す情報を表し、
前記記憶する処理は、受信した前記制御メッセージから特定される、イベントの発生元を識別する情報と、イベントの種別を示す情報と、プラグインと、当該プラグインが有効な期間を対応付けて前記記憶部に記憶し、
前記実行する処理は、受信した前記イベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインが有効な期間に、前記イベントメッセージから特定されるイベントが発生した時点が含まれれば、当該プラグインを実行する、ことを特徴とする付記２に記載の処理プログラム。
【０５２４】
（付記５）前記コンピュータに、
受信した前記イベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインが有効な期間より、前記イベントメッセージから特定されるイベントが発生した時点が後であれば、当該プラグインを削除する、処理を実行させることを特徴とする付記４に記載の処理プログラム。
【０５２５】
（付記６）前記コンピュータに、
定期的に発行される同期メッセージを受信した場合、前記記憶部の記憶内容をバックアップした後、前記記憶部に記憶されたプラグインが有効な期間より、最後に受信した前記イベントメッセージから特定されるイベントが発生した時点が後であれば、当該プラグインを削除する、処理を実行させることを特徴とする付記４に記載の処理プログラム。
【０５２６】
（付記７）前記記憶する処理は、前記制御メッセージを受信した場合、定期的に発行される同期メッセージを受信し、前記記憶部の記憶内容をバックアップした後に、受信した前記制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグインとを対応付けて前記記憶部に記憶する、ことを特徴とする付記２に記載の処理プログラム。
【０５２７】
（付記８）前記コンピュータに、
イベントの発生元を識別する情報、プラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す第２制御メッセージを受信した場合、前記同期メッセージを受信し、前記記憶部の記憶内容をバックアップした後に、受信した前記第２制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインが、前記第２制御メッセージから特定されるプラグインと一致すれば、当該プラグインを削除する、処理を実行させることを特徴とする付記７に記載の処理プログラム。
【０５２８】
（付記９）前記プラグインに関する情報は、前記プラグインを記憶した記憶領域のアドレスである、ことを特徴とする付記２〜８のいずれか一つに記載の処理プログラム。
【０５２９】
（付記１０）前記プラグインに関する情報は、前記プラグインを符号化した情報であり、
前記コンピュータに、
前記制御メッセージを受信した場合、受信した前記制御メッセージに含まれるプラグインを符号化した情報から、当該プラグインを復号する、処理を実行させ、
前記記憶する処理は、受信した前記制御メッセージに含まれるイベントの発生元を識別する情報とイベントの種別を示す情報と復号したプラグインとを対応付けて前記記憶部に記憶する、ことを特徴とする付記２〜８のいずれか一つに記載の処理プログラム。
【０５３０】
（付記１１）前記復号する処理は、前記制御メッセージを受信した場合、受信した前記制御メッセージに含まれるプラグインを符号化した情報から算出されるダイジェスト値が第２記憶部に記憶されていなければ、当該プラグインを復号し、当該ダイジェスト値と対応付けて前記第２記憶部に記憶し、前記第２記憶部に記憶されていれば、前記第２記憶部から当該プラグインを取得する、ことを特徴とする付記１０に記載の処理プログラム。
【０５３１】
（付記１２）前記コンピュータは、並列分散処理システムに含まれる複数のノードのいずれかのノードのコンピュータであり、
前記コンピュータに、前記イベントメッセージを収集して前記複数のノードのいずれかのノードに送信する情報処理装置から前記複数のノードに一斉に送信された前記制御メッセージを受信する、処理を実行させることを特徴とする付記１〜１１のいずれか一つに記載の処理プログラム。
【０５３２】
（付記１３）コンピュータが、
プラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す制御メッセージを受信した場合、受信した前記制御メッセージから特定されるイベントの種別を示す情報とプラグインとを対応付けて記憶部に記憶し、
イベントの種別を示す情報を表すイベントメッセージを受信した場合、受信した前記イベントメッセージから特定されるイベントの種別を示す情報に対応付けて前記記憶部に記憶されたプラグインを実行する、
処理を実行することを特徴とするイベント処理方法。
【符号の説明】
【０５３３】
１００  情報処理装置
１１０，４００  記憶部
１２０，６０２〜６０４，１５０２〜１５０４，２１０２〜２１０４，２６０２〜２６０４，３５００，３６０２〜３６０４，４３０２〜４３０４，５４００，５５００，５６００  制御メッセージ
１３０  プラグイン
１４０，６０１，１５０１，２１０１，２６０１，３６０１，４３０１，５３００  イベントメッセージ
２００  並列分散処理システム
２０１  分散ノード
２０２  管理ノード
２０３  端末装置
２１０  ネットワーク
３００  バス
３０１  ＣＰＵ
３０２  メモリ
３０３  ネットワークＩ／Ｆ
３０４  記録媒体Ｉ／Ｆ
３０５  記録媒体
４０１  取得部
４０２  更新部
４０３  実行部
４０４  出力部
７０１，１６０１，２２０１，２７０１，３７０１，４４０１，５２０１  メッセージ判別部
７０２，１６０２，２２０２，２７０２，３７０２，４４０２，５２０２  制御メッセージパーサ部
７０３，１６０３，２２０３，２７０３，３７０３，４４０３，５２０３  プラグイン管理部
７０４，１６０４，２２０５，２７０５，３７０５，４４０４，５２０７  イベントメッセージパーサ部
７０５，１６０５，２２０６，２７０６，３７０６，４４０５，５２０８  ステート管理部
７０６，１６０６，２２０７，２７０７，３７０７，４４０６，５２０９  プラグイン実行部
７１０，７２０，１６１０，１６２０，２２１０，２２２０，２７１０，２７２０，３７１０，３７２０，４４１０，４４２０，５２１０，５２２０  リスト
７１１，１６１１，２２１１，２７１１，３７１１，４４１１，５２１１  プラグイン管理テーブル
７２１，１６２１，２２２１，２７２１，３７２１，４４２１，５２２１  仮想オブジェクトテーブル
２１０５，２６０５  バリアメッセージ
２２０４，２７０４，５２０４  バリア処理部
３７０４，４２０２，５２０６  プラグインデコード部
４２０１，５２０５  プラグインキャッシュ管理部
４２１０，５２３０  プラグインキャッシュ管理テーブル
４９０１〜４９０３  計算機
４９１０  クラスタ間通信ネットワーク
５００１  文字列解釈ブロック
５００２，５７０２，５７０３  仮想オブジェクトブロック
５１０１  文字列解釈モジュール
５１０２  宛先決定モジュール
【図１】
2019133579.tif 000003
【図２】
2019133579.tif 000004
【図３】
2019133579.tif 000005
【図４】
2019133579.tif 000006
【図５】
2019133579.tif 000007
【図６】
2019133579.tif 000008
【図７】
2019133579.tif 000009
【図８】
2019133579.tif 000010
【図９】
2019133579.tif 000011
【図１０】
2019133579.tif 000012
【図１１】
2019133579.tif 000013
【図１２】
2019133579.tif 000014
【図１３】
2019133579.tif 000015
【図１４】
2019133579.tif 000016
【図１５】
2019133579.tif 000017
【図１６】
2019133579.tif 000018
【図１７】
2019133579.tif 000019
【図１８】
2019133579.tif 000020
【図１９】
2019133579.tif 000021
【図２０】
2019133579.tif 000022
【図２１】
2019133579.tif 000023
【図２２】
2019133579.tif 000024
【図２３】
2019133579.tif 000025
【図２４】
2019133579.tif 000026
【図２５】
2019133579.tif 000027
【図２６】
2019133579.tif 000028
【図２７】
2019133579.tif 000029
【図２８】
2019133579.tif 000030
【図２９】
2019133579.tif 000031
【図３０】
2019133579.tif 000032
【図３１】
2019133579.tif 000033
【図３２】
2019133579.tif 000034
【図３３】
2019133579.tif 000035
【図３４】
2019133579.tif 000036
【図３５】
2019133579.tif 000037
【図３６】
2019133579.tif 000038
【図３７】
2019133579.tif 000039
【図３８】
2019133579.tif 000040
【図３９】
2019133579.tif 000041
【図４０】
2019133579.tif 000042
【図４１】
2019133579.tif 000043
【図４２】
2019133579.tif 000044
【図４３】
2019133579.tif 000045
【図４４】
2019133579.tif 000046
【図４５】
2019133579.tif 000047
【図４６】
2019133579.tif 000048
【図４７】
2019133579.tif 000049
【図４８】
2019133579.tif 000050
【図４９】
2019133579.tif 000051
【図５０】
2019133579.tif 000052
【図５１】
2019133579.tif 000053
【図５２】
2019133579.tif 000054
【図５３】
2019133579.tif 000055
【図５４】
2019133579.tif 000056
【図５５】
2019133579.tif 000057
【図５６】
2019133579.tif 000058
【図５７】
2019133579.tif 000059