(57)【特許請求の範囲】
【請求項１】
マルチエージェントシステムにおけるエージェントを実行する装置であって、
トランザクションに参画している複数のエージェントの何れかによって出力されたメッセージのうち、応答メッセージを生じさせない一方向メッセージであって当該トランザクション内で未処理の一方向メッセージの有無を示す状況情報を管理する第１の管理部と、
前記トランザクションに対応し、かつ、前記複数のエージェントのうちの実行中のエージェントに割り当てられたスレッドを管理する第２の管理部と、
前記複数のエージェントのうちの実行中のエージェントの実行が終了したときに、未処理の前記一方向メッセージがあることを前記状況情報が示していれば、当該複数のエージェントのうちの他のエージェントに前記スレッドを割り当てて前記トランザクションを継続することを決定し、未処理の前記一方向メッセージがないことを前記状況情報が示していれば、前記トランザクションを終了することを決定する決定部と
を備え、
前記第１の管理部は、前記複数のエージェントの各々の識別情報を含むエージェント情報を更に管理し、
前記決定部は、前記一方向メッセージの宛先エージェントの識別情報が前記エージェント情報に含まれていなければ、当該宛先エージェントを前記他のエージェントとして前記トランザクションに参画させるための処理を行う、装置。
【請求項２】
各エージェントを実行前の段階において記憶する第１の記憶部と、
各エージェントを実行段階において記憶する第２の記憶部と
を更に備え、
前記決定部は、前記宛先エージェントを前記トランザクションに参画させるための処理として、当該宛先エージェントが前記第２の記憶部に記憶されていなければ、当該宛先エージェントを前記第１の記憶部から当該第２の記憶部に読み込む処理を行う、請求項１の装置。
【請求項３】
前記第１の管理部は、前記状況情報と、前記エージェント情報とを、前記スレッドに関連付けて管理する、請求項１の装置。
【請求項４】
各エージェントが何れかのトランザクションに参画しているかどうかを示す処理情報を管理する第３の管理部を更に備え、
前記決定部は、前記宛先エージェントの識別情報が前記エージェント情報に含まれておらず、当該宛先エージェントが何れかのトランザクションに参画していることを前記処理情報が示している場合に、当該宛先エージェントが何れかのトランザクションに参画していることを当該処理情報が示さなくなるまで、当該宛先エージェントを前記トランザクションに参画させるための処理を行わずに待つ、請求項１の装置。
【請求項５】
マルチエージェントシステムにおけるエージェントを実行する装置であって、
トランザクションに参画している複数のエージェントの何れかによって出力されたメッセージのうち、応答メッセージを生じさせない一方向メッセージであって当該トランザクション内で未処理の一方向メッセージの有無を示す状況情報を管理する第１の管理部と、
前記トランザクションに対応し、かつ、前記複数のエージェントのうちの実行中のエージェントに割り当てられたスレッドを管理する第２の管理部と、
前記複数のエージェントのうちの実行中のエージェントの実行が終了したときに、未処理の前記一方向メッセージがあることを前記状況情報が示していれば、当該複数のエージェントのうちの他のエージェントに前記スレッドを割り当てて前記トランザクションを継続することを決定し、未処理の前記一方向メッセージがないことを前記状況情報が示していれば、前記トランザクションを終了することを決定する決定部と、
各エージェントを実行前の段階において記憶する第１の記憶部と、
各エージェントを実行段階において記憶する第２の記憶部と、
各エージェントが何れかのトランザクションに参画しているかどうかを示す処理情報を管理する第３の管理部と、
前記第１の記憶部から読み込まれて前記第２の記憶部に記憶されている特定のエージェントが何れかのトランザクションに参画していることを前記処理情報が示している場合に、当該特定のエージェントが前記第２の記憶部から削除されないように制御する制御部と
を備えた、装置。
【請求項６】
マルチエージェントシステムにおけるエージェントを実行する装置であって、
トランザクションに参画している複数のエージェントの何れかによって出力されたメッセージのうち、応答メッセージを生じさせない一方向メッセージであって当該トランザクション内で未処理の一方向メッセージの有無を示す状況情報を管理する第１の管理部と、
前記トランザクションに対応し、かつ、前記複数のエージェントのうちの実行中のエージェントに割り当てられたスレッドを管理する第２の管理部と、
前記複数のエージェントのうちの実行中のエージェントの実行が終了したときに、未処理の前記一方向メッセージがあることを前記状況情報が示していれば、当該複数のエージェントのうちの他のエージェントに前記スレッドを割り当てて前記トランザクションを継続することを決定し、未処理の前記一方向メッセージがないことを前記状況情報が示していれば、前記トランザクションを終了することを決定する決定部と
を備え、
前記第１の管理部は、前記複数のエージェントの各々の識別情報を含むエージェント情報を更に管理し、
前記決定部は、前記複数のエージェントのうちの実行中のエージェントが、応答メッセージを生じさせる要求応答メッセージを出力したときに、当該要求応答メッセージの宛先エージェントの識別情報が前記エージェント情報に含まれていなければ、当該宛先エージェントを前記トランザクションに参画させるための処理を行う、装置。
【請求項７】
マルチエージェントシステムにおけるエージェントを実行する方法であって、
トランザクションに参画している複数のエージェントの何れかによって出力されたメッセージのうち、応答メッセージを生じさせない一方向メッセージであって当該トランザクション内で未処理の一方向メッセージの有無を示す状況情報を管理するステップと、
前記トランザクションに対応し、かつ、前記複数のエージェントのうちの実行中のエージェントに割り当てられたスレッドを管理するステップと、
前記複数のエージェントのうちの実行中のエージェントの実行が終了したときに、未処理の前記一方向メッセージがあることを前記状況情報が示していれば、当該複数のエージェントのうちの他のエージェントに前記スレッドを割り当てて前記トランザクションを継続することを決定し、未処理の前記一方向メッセージがないことを前記状況情報が示していれば、前記トランザクションを終了することを決定するステップと、
前記複数のエージェントの各々の識別情報を含むエージェント情報を管理するステップと
を含み、
前記決定するステップでは、前記一方向メッセージの宛先エージェントの識別情報が前記エージェント情報に含まれていなければ、当該宛先エージェントを前記他のエージェントとして前記トランザクションに参画させるための処理を行う、方法。
【請求項８】
マルチエージェントシステムにおけるエージェントを実行する方法であって、
トランザクションに参画している複数のエージェントの何れかによって出力されたメッセージのうち、応答メッセージを生じさせない一方向メッセージであって当該トランザクション内で未処理の一方向メッセージの有無を示す状況情報を管理するステップと、
前記トランザクションに対応し、かつ、前記複数のエージェントのうちの実行中のエージェントに割り当てられたスレッドを管理するステップと、
前記複数のエージェントのうちの実行中のエージェントの実行が終了したときに、未処理の前記一方向メッセージがあることを前記状況情報が示していれば、当該複数のエージェントのうちの他のエージェントに前記スレッドを割り当てて前記トランザクションを継続することを決定し、未処理の前記一方向メッセージがないことを前記状況情報が示していれば、前記トランザクションを終了することを決定するステップと、
各エージェントが何れかのトランザクションに参画しているかどうかを示す処理情報を管理するステップと、
各エージェントを実行前の段階において記憶する第１の記憶部から読み込まれて、各エージェントを実行段階において記憶する第２の記憶部に記憶されている、特定のエージェントが何れかのトランザクションに参画していることを前記処理情報が示している場合に、当該特定のエージェントが前記第２の記憶部から削除されないように制御するステップと
を含む、方法。
【請求項９】
マルチエージェントシステムにおけるエージェントを実行する装置としてコンピュータを機能させるプログラムであって、
前記コンピュータを、
トランザクションに参画している複数のエージェントの何れかによって出力されたメッセージのうち、応答メッセージを生じさせない一方向メッセージであって当該トランザクション内で未処理の一方向メッセージの有無を示す状況情報を管理する手段と、
前記トランザクションに対応し、かつ、前記複数のエージェントのうちの実行中のエージェントに割り当てられたスレッドを管理する手段と、
前記複数のエージェントのうちの実行中のエージェントの実行が終了したときに、未処理の前記一方向メッセージがあることを前記状況情報が示していれば、当該複数のエージェントのうちの他のエージェントに前記スレッドを割り当てて前記トランザクションを継続することを決定し、未処理の前記一方向メッセージがないことを前記状況情報が示していれば、前記トランザクションを終了することを決定する手段と
して機能させ、
前記状況情報を管理する手段は、前記複数のエージェントの各々の識別情報を含むエージェント情報を更に管理し、
前記決定する手段は、前記一方向メッセージの宛先エージェントの識別情報が前記エージェント情報に含まれていなければ、当該宛先エージェントを前記他のエージェントとして前記トランザクションに参画させるための処理を行う、プログラム。
【請求項１０】
マルチエージェントシステムにおけるエージェントを実行する装置としてコンピュータを機能させるプログラムであって、
前記コンピュータを、
トランザクションに参画している複数のエージェントの何れかによって出力されたメッセージのうち、応答メッセージを生じさせない一方向メッセージであって当該トランザクション内で未処理の一方向メッセージの有無を示す状況情報を管理する手段と、
前記トランザクションに対応し、かつ、前記複数のエージェントのうちの実行中のエージェントに割り当てられたスレッドを管理する手段と、
前記複数のエージェントのうちの実行中のエージェントの実行が終了したときに、未処理の前記一方向メッセージがあることを前記状況情報が示していれば、当該複数のエージェントのうちの他のエージェントに前記スレッドを割り当てて前記トランザクションを継続することを決定し、未処理の前記一方向メッセージがないことを前記状況情報が示していれば、前記トランザクションを終了することを決定する手段と、
各エージェントが何れかのトランザクションに参画しているかどうかを示す処理情報を管理する手段と、
各エージェントを実行前の段階において記憶する第１の記憶部から読み込まれて、各エージェントを実行段階において記憶する第２の記憶部に記憶されている、特定のエージェントが何れかのトランザクションに参画していることを前記処理情報が示している場合に、当該特定のエージェントが前記第２の記憶部から削除されないように制御する手段と
して機能させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エージェントを実行する装置及び方法に関する。特に、本発明は、マルチエージェントシステムにおけるエージェントを実行する装置及び方法に関する。
【背景技術】
【０００２】
近年、インターネットの普及等に伴い、マルチエージェント技術が注目を集めている（例えば、非特許文献１参照）。マルチエージェントとは、多数の自律的に行動するプログラムであるエージェントが協調して問題解決を行うシステムである。非特許文献１では、不特定多数に対する多種類の動画配信を効率的に行うためにマルチエージェントとその組織化による動画配信手法が提案されている。
【０００３】
【非特許文献１】寺内敦、外６名、“エージェントの組織化による広帯域ストリーム向け適応型配信アーキテクチャの提案”、［online］、平成１６年１２月１４日、日本ソフトウェア科学会、インターネットテクノロジー研究会、［平成２０年３月１５日検索］、インターネット＜URL：http://wit.jssst.or.jp/2004/WIT2004/WIT2004-terauchi.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【０００４】
このようなマルチエージェント技術を利用した業務システムでは、複数のエージェントが協調して１つのトランザクションを遂行する場合がある（以下、このように遂行されるトランザクションを「協調トランザクション」と呼ぶ）。しかしながら、そのようなシステムでのトランザクション処理機構は提案されていない。このような機構がない場合、１つのトランザクションを複数のトランザクションに分割する必要がある。ところが、そうなると、トランザクションのロールバックを補償トランザクションにより行うという方法しか採れなくなる。この方法は複雑であり、開発工数の増加につながる。従って、複数のエージェントが１つのトランザクションを遂行できるようにする協調トランザクション処理機構が必要である。
【０００５】
本発明の目的は、マルチエージェントシステムにおいて、複数のエージェントが協調して１つのトランザクションを実行することにある。
【課題を解決するための手段】
【０００６】
かかる目的のもと、本発明は、マルチエージェントシステムにおけるエージェントを実行する装置であって、トランザクションに参画している複数のエージェントの何れかによって出力されたメッセージのうち、応答メッセージを生じさせない一方向メッセージのトランザクション内での処理状況を示す状況情報を管理する第１の管理部と、トランザクションに対応し、かつ、複数のエージェントのうちの実行中のエージェントに割り当てられたスレッドを管理する第２の管理部と、複数のエージェントのうちの実行中のエージェントの実行が終了したときに、複数のエージェントのうちの他のエージェントにスレッドを割り当ててトランザクションを継続するか、トランザクションを終了するかを、状況情報に基づいて決定する決定部とを備えた、装置を提供する。
【０００７】
また、この装置において、状況情報は、未処理の一方向メッセージの有無を示し、決定部は、複数のエージェントのうちの実行中のエージェントの実行が終了したときに、未処理の一方向メッセージがあることを状況情報が示していれば、トランザクションを継続することを決定し、未処理の一方向メッセージがないことを状況情報が示していれば、トランザクションを終了することを決定する、ものであってよい。
更に、状況情報は、未処理の一方向メッセージの有無を、未処理の一方向メッセージの数によって示し、第１の管理部は、複数のエージェントのうちの実行中のエージェントが一方向メッセージを出力したときに、状況情報をより多い数を示すように更新し、複数のエージェントのうちの実行中のエージェントの実行が終了したときに、未処理の一方向メッセージがあることを状況情報が示していれば、状況情報をより少ない数を示すように更新する、ものであってよい。
【０００８】
また、この装置において、第１の管理部は、複数のエージェントの各々の識別情報を含むエージェント情報を更に管理し、決定部は、一方向メッセージの宛先エージェントの識別情報がエージェント情報に含まれていなければ、宛先エージェントを他のエージェントとしてトランザクションに参画させるための処理を行う、ものであってよい。
更に、各エージェントを実行前の段階において記憶する第１の記憶部と、各エージェントを実行段階において記憶する第２の記憶部とを更に備え、決定部は、宛先エージェントをトランザクションに参画させるための処理として、宛先エージェントが第２の記憶部に記憶されていなければ、宛先エージェントを第１の記憶部から第２の記憶部に読み込む処理を行う、ものであってよい。
また、第１の管理部は、状況情報と、エージェント情報とを、スレッドに関連付けて管理する、ものであってよい。
更に、各エージェントが何れかのトランザクションに参画しているかどうかを示す処理情報を管理する第３の管理部を更に備え、決定部は、宛先エージェントの識別情報がエージェント情報に含まれておらず、宛先エージェントが何れかのトランザクションに参画していることを処理情報が示している場合に、宛先エージェントが何れかのトランザクションに参画していることを処理情報が示さなくなるまで、宛先エージェントをトランザクションに参画させるための処理を行わずに待つ、ものであってよい。
【０００９】
また、この装置において、各エージェントを実行前の段階において記憶する第１の記憶部と、各エージェントを実行段階において記憶する第２の記憶部と、各エージェントが何れかのトランザクションに参画しているかどうかを示す処理情報を管理する第３の管理部と、第１の記憶部から読み込まれて第２の記憶部に記憶されている特定のエージェントが何れかのトランザクションに参画していることを処理情報が示している場合に、特定のエージェントが第２の記憶部から削除されないように制御する制御部とを更に備えた、ものであってよい。
【００１０】
また、この装置において、第１の管理部は、複数のエージェントの各々の識別情報を含むエージェント情報を更に管理し、決定部は、複数のエージェントのうちの実行中のエージェントが、応答メッセージを生じさせる要求応答メッセージを出力したときに、要求応答メッセージの宛先エージェントの識別情報がエージェント情報に含まれていなければ、宛先エージェントをトランザクションに参画させるための処理を行う、ものであってよい。
【００１１】
また、本発明は、マルチエージェントシステムにおけるエージェントを実行する方法であって、トランザクションに参画している複数のエージェントのうちの第１のエージェントにトランザクションに対応するスレッドを割り当てるステップと、第１のエージェントによって出力されたメッセージのうち、応答メッセージを生じさせない一方向メッセージのトランザクション内での処理状況を示す状況情報を管理するステップと、第１のエージェントの実行が終了したときに、複数のエージェントのうちの第２のエージェントにスレッドを割り当ててトランザクションを継続するか、トランザクションを終了するかを、状況情報に基づいて決定するステップとを含む、方法も提供する。
【００１２】
更に、本発明は、マルチエージェントシステムにおけるエージェントを実行する装置としてコンピュータを機能させるプログラムであって、コンピュータを、トランザクションに参画している複数のエージェントの何れかによって出力されたメッセージのうち、応答メッセージを生じさせない一方向メッセージのトランザクション内での処理状況を示す状況情報を管理する手段と、トランザクションに対応し、かつ、複数のエージェントのうちの実行中のエージェントに割り当てられたスレッドを管理する手段と、複数のエージェントのうちの実行中のエージェントの実行が終了したときに、複数のエージェントのうちの他のエージェントにスレッドを割り当ててトランザクションを継続するか、トランザクションを終了するかを、状況情報に基づいて決定する手段として機能させる、プログラムも提供する。
【発明の効果】
【００１３】
本発明によれば、マルチエージェントシステムにおいて、複数のエージェントが協調して１つのトランザクションを実行することができる。
【発明を実施するための最良の形態】
【００１４】
以下、添付図面を参照して、本発明を実施するための最良の形態（以下、「実施の形態」という）について詳細に説明する。
まず、本実施の形態の前提となる大規模マルチエージェントシステム（Massively Multi-agent System，ＭＭＡＳ）について説明する。
ＭＭＡＳは、多数のエージェントが協調しながらタスクを実行するプログラミングモデルである。ＭＭＡＳ実行環境では、数十万のエージェントがメッセージ処理を行う。そのため、エージェントは、メッセージを受けて処理を開始する（メッセージドリブンである）。メッセージは、外部システムやエージェントから送信され、エージェント実行環境内のメッセージキューに格納される。エージェント実行環境は、適切なタイミングでスレッドプールのスレッドをエージェントに割り当て、メッセージ処理を行わせる。その後、エージェントのメッセージ処理は、短い時間で完了する。また、ＭＭＡＳは、非同期メッセージングモデルであり、エージェントは他のエージェントからメッセージを待つことはできない。そして、エージェントは独立しており、他のエージェントの振る舞いに依存しない。
【００１５】
ところで、通常、トランザクションは１つのエージェントのメッセージ処理だけに対応している。つまり、メッセージ処理とトランザクションとは一対一対応である。
しかし、ＭＭＡＳでは、同一のエージェント実行環境で活動する複数のエージェントが協調して１つのトランザクションを実行する協調トランザクションを行う場合がある。例えば、電子商取引アプリケーションで、利用者エージェントと店舗エージェントが購入処理を行う場合、利用者エージェントは、自身が保持するカートの中の商品の購入要求を店舗エージェントに送る。この処理では、利用者エージェントによるカートからのエントリの削除と店舗エージェントによる購入要求の記録とが、１つのトランザクションで実行される必要がある。上述したようなメッセージ処理とトランザクションとが一対一対応のトランザクションモデルでは、このような処理を実現できない。
【００１６】
このようなエージェント同士の協調処理をトランザクションとする場合、下記の問題が浮上する。
第１の問題は「トランザクション完了問題」である。各エージェントは自律的に処理を遂行するため、独自に別のエージェントを呼び出す。そのため、参画しているエージェントが全体の協調処理の完了、つまり、トランザクションの完了を知ることはできない。
第２の問題は「スレッド問題」である。トランザクション処理に参画するエージェントのメッセージ処理は、同一のスレッドで処理されなければならない。
【００１７】
ここで、第１の問題について詳しく述べる。
エージェント同士の協調処理は、メッセージングにより行われる。メッセージングのタイプには、要求応答メッセージと一方向メッセージとがある。前者は、要求応答メッセージ送信用ＡＰＩの戻り値として、返答メッセージを受けるメッセージングである。この場合、返答メッセージは、送信メッセージの処理を宛先エージェントが完了してから受け取ることになる。また、後者は、一方向メッセージ送信用ＡＰＩの戻り値がないメッセージングである。この場合、送信したメッセージは一旦メッセージキューに格納されるため、ＡＰＩは宛先エージェントが処理する前に元の処理に戻る可能性もある。
【００１８】
また、エージェントは自律的に処理を遂行するため、協調処理に参画するエージェントは動的に決定される。例えば、エージェントＡが協調処理を開始し、エージェントＢに要求応答メッセージを送信したとする。そして、エージェントＢがそのメッセージ処理において、エージェントＣに要求応答メッセージを送信し、エージェントＡに返答メッセージを返送し、エージェントＣがエージェントＤに一方向メッセージを送信したとする。このような場合、協調処理はエージェントＡ、Ｂ、Ｃ、Ｄにより行われているが、エージェントＡは、エージェントＣ、Ｄの参画を知ることができない。エージェントＢは、エージェントＤの参画を知ることができない。また、エージェントＣは、エージェントＡの参画を知ることができない。更に、エージェントＤは、エージェントＡ、Ｂの参画を知ることができない。
【００１９】
次に、第２の問題について詳しく述べる。
通常、ＭＭＡＳでは、エージェント実行環境がエージェントのメッセージ処理を遂行するときに、スレッドプールのスレッドをそのエージェントに割り当て、メッセージ処理が完了したらスレッドはそのエージェントから開放する。そのため、複数のエージェントが協調処理を行う場合、各エージェントには別々のスレッドが割り振られる。トランザクション処理でなければ、このようなスレッドの割り振り方で問題は発生しない。しかしながら、トランザクション処理の場合、多くの商用データベース管理システムがスレッドとトランザクションを一対一に対応付けているため、１つのトランザクションが複数のスレッドに跨ることはできない。
【００２０】
つまり、複数のエージェントの協調処理を１つのトランザクションとすることは、上記２点を解決すれば、実現可能である。
この解決すべき課題について、図を参照して具体的に説明する。
図１は、解決すべき課題を模式的に示したものである。
既に述べたように、解決すべき課題は、複数のエージェントが協調して１つの処理を遂行するが、その処理を１つのトランザクションとして行えない、ということである。
その第１の問題として、前述の通り、複数のエージェントを同一スレッドで処理できない、ということがある。図は、トランザクションを開始したエージェント＃１がエージェント＃２にメッセージを送信し、エージェント＃２がエージェント＃３にメッセージを送信し、エージェント＃３がエージェント＃１にメッセージを返信する例を示している。この例において、トランザクションを開始したときにエージェント＃１に割り当てられたスレッドは、エージェント＃２にメッセージを送信して処理が終了するとエージェント＃１から開放される。そして、エージェント＃２、＃３に割り当てられたスレッドもそれぞれのメッセージ処理が完了すると開放される。このように、メッセージ処理が終了するとスレッドはシステムに戻されるので、上記問題が発生する。
【００２１】
また、第２の問題として、前述の通り、トランザクションを開始したエージェントは、そのトランザクションがいつ完了するか分からない、ということがある。これは、図において、エージェント＃１がエージェント＃３から受信したメッセージを処理した後、トランザクションを完了するようになっているが、実際には、本当にここでトランザクションを完了してよいか分からないことを意味する。例えば、エージェント＃３が、エージェント＃１にメッセージを返信するだけでなく、別のエージェントにメッセージを送信しているかもしれないからである。
【００２２】
図２は、協調トランザクションの別の例を示す。
この例では、エージェント＃１がエージェント＃２に要求応答メッセージを送信し、エージェント＃２から返答メッセージを受信した後、エージェント＃３に一方向メッセージを送信している。そして、エージェント＃３は、エージェント＃４に一方向メッセージを送信し、その後、エージェント＃５にも一方向メッセージを送信している。この場合、エージェント＃１は、エージェント＃３にメッセージを送信した後、返答メッセージを受信することはなく、エージェント＃３がどのエージェントにメッセージを送信したかも知ることができない。従って、この例は、トランザクションがいつ完了するか分からない典型的な例であると言える。尚、協調トランザクション内のエージェントが別トランザクションのエージェントにメッセージを送信することもあるので、図では、エージェント＃１から別トランザクションのエージェント＃６へのメッセージ送信についても示している。
【００２３】
以上述べたような問題点を解決するため、本実施の形態では、メッセージ機構にトランザクション内メッセージ機能とトランザクション外メッセージ機能を設け、トランザクション内メッセージ機構として下記の３つの機構を提供する。
第１の機構は、トランザクションに参画するエージェントを特定する情報をリスト化する機構とトランザクション内での一方向メッセージのカウンタ機構とを持つエージェントトランザクションコンテクスト（以下、「ＡＴＣ」という）である。
第２の機構は、トランザクション内メッセージのメッセージ処理を同一スレッドで処理する機構である。
第３の機構は、ＡＴＣ内のカウンタ機構が未処理メッセージが存在しないと判断した場合にトランザクション終了とする機構である。
【００２４】
また、ＭＭＡＳでは、全エージェントをキャッシュ中におくことができるとは限らないため、一部のエージェントがキャッシュから破棄される場合がある。しかし、協調トランザクション処理では、まだコミットしていないトランザクションに参画しているエージェントをキャッシュから破棄することはできない。そこで、本実施の形態では、トランザクションに参画したエージェントの状態を「処理中」とし、このエージェントがキャッシュから破棄されるのを防ぐことも行う。そして、トランザクションが終了したら、エージェントの状態の「処理中」を削除する。
【００２５】
このような本実施の形態の概要について、図を参照して説明する。
図３は、本実施の形態の概要を模式的に示したものである。
ここでも、図１に示したのと同様、トランザクションを開始したエージェント＃１がエージェント＃２にメッセージを送信し、エージェント＃２がエージェント＃３にメッセージを送信し、エージェント＃３がエージェント＃１にメッセージを返信する例を示している。そして、上記の各機構を用いて、これらの処理を１つのスレッドで行う場合を示している。即ち、ＡＴＣ４１がこのスレッドに対して生成されている。そして、ＡＴＣ４１が、トランザクションに参画するエージェントを特定する情報をリスト化する機構の一例として、エージェントＩＤをリスト化したエージェントリスト４２を有することを示している。また、トランザクション内での一方向メッセージのカウンタ機構の一例として、トランザクション内での一方向メッセージを一時的に格納するトランザクション内メッセージキュー４３を有することも示している。更に、エージェントの状態が「処理中」かどうかを示すエージェント状態情報３３ａも示している。
【００２６】
次に、本実施の形態を実現するためのコンピュータシステムについて、詳細に説明する。
図４は、本実施の形態におけるコンピュータシステムの機能構成例を示したブロック図である。
このコンピュータシステムは、データベース１０と、キャッシュ２０と、エージェント実行装置３０とを含む。
このうち、データベース１０は、実行状態になる前のエージェントを記憶する永続記憶装置の一例であり、具体的には、リレーショナルデータベース、オブジェクト指向データベース、ファイルシステム等である。尚、データベース１０としてリレーショナルデータベースを用いる場合は、オブジェクト／リレーショナルマッピングを行う機能が必要となる。このデータベース１０は、例えば、磁気ディスク装置によって実現するとよい。本実施の形態では、各エージェントを実行前の段階において記憶する第１の記憶部の一例として、データベース１０を設けている。
【００２７】
また、キャッシュ２０は、エージェントの活動空間として捉えることができるものであり、活動中のエージェント２１ａ，２１ｂ，２１ｃ，…を格納するメモリである。このキャッシュ２０は、例えば、半導体メモリによって実現するとよい。尚、以下の説明において、エージェント２１ａ，２１ｂ，２１ｃ，…を区別しない場合は、単にエージェント２１と表記するものとする。本実施の形態では、各エージェントを実行段階において記憶する第２の記憶部の一例として、キャッシュ２０を設けている。
更に、エージェント実行装置３０は、エージェント実行環境が構築されたコンピュータである。エージェント実行装置３０は、複数のエージェント２１を管理し、その活動を制御する。また、外界とのメッセージ交換を司り、エージェント２１の生成や削除の機能も提供する。このエージェント実行装置３０は、例えば、汎用のサーバコンピュータで実現するとよい。
【００２８】
ここで、エージェント実行装置３０の機能について更に詳細に説明する。
エージェント実行装置３０は、メッセージング部３１と、メッセージキュー３２と、エージェント管理部３３と、メモリ管理部３４と、スケジューラ３５と、スレッド管理部３６と、通信部３７とを備える。また、ＡＴＣ管理部４０を備え、このＡＴＣ管理部４０がＡＴＣ４１を管理し、ＡＴＣ４１がエージェントリスト４２とトランザクション内メッセージキュー４３とを含んでいる。
【００２９】
メッセージング部３１は、外部からのメッセージをメッセージタイプに応じてメッセージキュー３２に追加していく。ここで、メッセージングタイプには、前述した要求応答メッセージと一方向メッセージという区分の他に、例えば、宛先特定メッセージと宛先不特定メッセージという区分がある。ここで、宛先特定メッセージとは、メッセージ送信元が宛先となるエージェント２１を指定している場合のメッセージである。一方、宛先不特定メッセージとは、メッセージ送信元が宛先となるエージェント２１を指定していない場合のメッセージなので、これに対しては、アプリケーションがメッセージング部３１に登録するコンポーネントにより、宛先を特定するための処理を行う。
メッセージキュー３２は、エージェント２１に送信されるメッセージを一時的に保持する記憶領域である。また、各メッセージのメッセージングタイプを管理する機能も持つ。更に、メッセージキュー３２は、エージェント２１がトランザクション外に送信したメッセージも一時的に格納する。
【００３０】
エージェント管理部３３は、エージェント２１の状態を管理する。エージェント２１の状態は、図４には示していないが、エージェント２１にスレッドが割り当てられて処理されていることを「処理中」のフラグで示すエージェント状態情報３３ａ（図３参照）として管理される。本実施の形態では、処理情報の一例として、「処理中」のフラグを用い、処理情報を管理する第３の管理部の一例として、エージェント管理部３３を設けている。
【００３１】
メモリ管理部３４は、エージェント２１のデータをデータベース１０からキャッシュ２０に読み込む。全てのエージェント２１のデータをキャッシュ２０におくことができない場合、一部のエージェント２１のデータをデータベース１０に書き出し、必要に応じてデータベース１０から読み込む「エージェントスワップ処理」を行う。その際、どのエージェント２１をキャッシュ２０におき、どのエージェント２１をデータベース１０におくかを決める必要がある。例えば、ＬＲＵ（Least Recently Used）方式により決めることが考えられるが、本実施の形態では、状態が「処理中」であるエージェント２１はキャッシュ２０においたまま、データベース１０には書き出さないようにする。本実施の形態では、特定のエージェントが第２の記憶部から削除されないように制御する制御部の一例として、メモリ管理部３４を設けている。
【００３２】
スケジューラ３５は、スレッドから一方向メッセージを送出する旨の情報を受け取ると、そのメッセージの宛先エージェントのエージェントＩＤがエージェントリスト４２に登録されているかをＡＴＣ管理部４０に問い合わせる。そして、登録されていなければ、その宛先エージェントをトランザクションに参画させ、メッセージをトランザクション内メッセージキュー４３に格納するようスレッドに指示する。また、スレッドからメッセージ処理が終了した旨の情報を受け取ると、次に処理すべきエージェント２１を決定し、該当するメッセージをトランザクション内メッセージキュー４３から取得してスレッドに受け渡す。本実施の形態では、トランザクションを継続するか終了するかを決定する決定部の一例として、スケジューラ３５を設けている。
【００３３】
スレッド管理部３６は、エージェント２１のメッセージ処理のために使用されるスレッドを複数持つ。各スレッドは、次に処理すべきエージェント２１とメッセージをスケジューラ３５から取得し、エージェント２１のメッセージ処理ロジック（メッセージハンドラ）を呼び出す。その処理が完了すると、次のエージェント２１とメッセージをスケジューラ３５から取得する。このようなスレッド管理方式は、一般に「スレッドプール」と呼ばれる。本実施の形態では、スレッドを管理する第２の管理部の一例として、スレッド管理部３６を設けている。
通信部３７は、外部コンポーネントとメッセージ交換を行う。また、エージェント２１の環境全体が複数の実行環境のクラスタから構成されている場合に、他の実行環境とのメッセージ交換にも使われる。
【００３４】
ＡＴＣ管理部４０は、スレッドの数、つまり、トランザクションの数だけ生成されたＡＴＣを管理する。
ＡＴＣ４１は、スレッドごとに生成され、エージェントリスト４２とトランザクション内メッセージキュー４３とを含む。このＡＴＣ４１は、例えば、Ｊａｖａ（登録商標）のオブジェクトで実現され、次のように生成される。即ち、まず、ＡＴＣクラスを定義しておく。このとき、ＡＴＣクラスは、エージェントリスト４２とトランザクション内メッセージキュー４３とを持つようにしておく。その後、あるエージェント２１がメッセージ処理中に協調トランザクションを開始すると、ＡＴＣインスタンスが生成される。このインスタンスは、その協調トランザクションに対するエージェントリスト４２とトランザクション内メッセージキュー４３とを持つ。そして、エージェント２１は、自エージェントをエージェントリスト４２に追加する。一方、既にＡＴＣ４１が存在している場合はエラーとする。ここで、既に述べたが、エージェントリスト４２は、エージェントＩＤをリスト化して記憶するリストであり、トランザクション内メッセージキュー４３は、トランザクション内での一方向メッセージを一時的に格納するキューである。
本実施の形態では、エージェント情報の一例として、エージェントリスト４２を用い、状況情報の一例として、トランザクション内メッセージキュー４３を用い、エージェント情報及び状況情報を管理する第１の管理部の一例として、ＡＴＣ管理部４０を設けている。
【００３５】
次いで、本実施の形態におけるエージェント実行装置３０の動作を説明する。尚、本実施の形態では、エージェント実行装置３０の各機能をスケジューラ３５が制御して全体の動作を実現するので、スケジューラ３５の動作を中心に説明する。また、上述したように、エージェント２１が送信するメッセージには、一方向メッセージと要求応答メッセージとがある。従って、ここでは、一方向メッセージに関する処理と要求応答メッセージに関する処理に分けて説明する。
【００３６】
［一方向メッセージに関する処理］
まず、スケジューラ３５は、スレッドからトランザクションを開始する旨の情報を受け取る。そして、最初に処理するエージェント２１（以下、「初期エージェント」という）を決定し、該当するメッセージをスレッドに渡して、初期エージェントのメッセージハンドラを呼び出すように指示する。これにより、初期エージェントにスレッドが割り当てられ、この初期エージェントがトランザクションを開始する。尚、このトランザクション開始時のスケジューラ３５の動作は、後で詳しく説明する。
【００３７】
その後、現在実行中のエージェント２１（初期エージェントか、初期エージェントが送信したメッセージを直接又は間接的に受け取ったエージェントかは問わない）が一方向メッセージを送信することになったとする。すると、エージェント２１に割り当てられたスレッドが、エージェント２１が一方向メッセージを送信する旨の情報をスケジューラ３５に伝える。
図５は、この情報を受け取ったときのスケジューラ３５の動作例を示したフローチャートである。尚、このとき、スレッドからは、スレッドの識別情報が送られてくるものとする。ここでは、このスレッドの識別情報として「スレッドＩＤ」を用いる。
スレッドから一方向メッセージを送信する旨の情報を受信すると、スケジューラ３５は、まず、ＡＴＣ管理部４０に問い合わせることにより、一方向メッセージの宛先として指定されている宛先エージェントのエージェントＩＤがエージェントリスト４２に存在するかどうかを判定する（ステップ３０１）。
【００３８】
ここで、宛先エージェントのエージェントＩＤがエージェントリスト４２に存在すると判定された場合は、ステップ３０５に進む。
一方、宛先エージェントのエージェントＩＤがエージェントリスト４２に存在しないと判定された場合、スケジューラ３５は、宛先エージェントをトランザクションに参画させるための処理を行う。
即ち、まず、メモリ管理部３４に対して、宛先エージェントがキャッシュ２０に存在するかどうかを確認し、存在しなければ、宛先エージェントをデータベース１０から読み込み、キャッシュ２０に貼り付けるよう、指示する（ステップ３０２）。これにより、メモリ管理部３４は、宛先エージェントがキャッシュ２０に置かれるよう、指示された動作を行う。
【００３９】
次に、スケジューラ３５は、エージェント管理部３３に対して、宛先エージェントのエージェント状態情報３３ａを「処理中」にするよう、指示する（ステップ３０３）。これにより、エージェント管理部３３は、宛先エージェントのエージェント状態情報３３ａを「処理中」に更新する。尚、エージェント２１の同時並行処理が許されない場合に、エージェント状態情報３３ａが既に「処理中」であれば、そのエージェント２１は他のトランザクションに参画していると考えられる。従って、スケジューラ３５は、その状態が解除されるまで待つ。
そして、スケジューラ３５は、ＡＴＣ管理部４０に対して、エージェントリスト４２に宛先エージェントのエージェントＩＤを追加するよう、指示する（ステップ３０４）。これにより、ＡＴＣ管理部４０は、エージェントリスト４２に宛先エージェントのエージェントＩＤを登録する。
【００４０】
これらの処理により、宛先エージェントがトランザクションに参画すると、スケジューラ３５は、スレッドに対して、送信しようとしている一方向メッセージをトランザクション内メッセージキュー４３に格納するよう、指示する（ステップ３０５）。これにより、スレッドは、一方向メッセージをトランザクション内メッセージキュー４３に格納する。
【００４１】
また、現在実行中のエージェント２１がメッセージ処理を終了することになったとする。すると、エージェント２１に割り当てられたスレッドが、エージェント２１が処理を終了する旨の情報をスケジューラ３５に伝える。
図６は、この情報を受け取ったときのスケジューラ３５の動作例を示したフローチャートである。ところで、この動作は、あるエージェント２１の処理が終了したときに次に処理すべきエージェント２１を決定するものであるが、トランザクションの開始時に初期エージェントを決定するときの動作とも共通している。そこで、図６には、トランザクションを開始する旨の情報を受け取ったときの動作例も併せて示す。尚、このとき、スレッドからは、スレッドの識別情報が送られてくるものとする。ここでも、このスレッドの識別情報として「スレッドＩＤ」を用いる。
【００４２】
スレッドから、トランザクションを開始する旨の情報、又は、エージェント２１が処理を終了する旨の情報を受信すると、スケジューラ３５は、まず、ＡＴＣ管理部４０に問い合わせることにより、スレッドＩＤに対応するＡＴＣが存在するかどうかを判定する（ステップ３２１）。
ここで、ＡＴＣが存在しないと判定された場合は、トランザクションを開始する旨の情報を受信した場合であるので、スケジューラ３５は、トランザクションの開始のための処理を行う。
即ち、まず、後述する初期エージェント選択処理を行う（ステップ３２２）。
次に、ＡＴＣ管理部４０に対して、スレッドＩＤに関連付けてＡＴＣを作成するよう指示する（ステップ３２３）。これにより、ＡＴＣ管理部４０は、スレッドＩＤに関連付けてＡＴＣを作成する。尚、このとき、ＡＴＣ管理部４０は、トランザクションを開始しようとしているエージェント２１のエージェントＩＤをエージェントリスト４２に登録する。
そして、スレッドに対して、トランザクションの開始を指示する（ステップ３２４）。また、スレッドに対して、ステップ３２２で選択されたエージェント２１が処理すべきメッセージを渡して、そのエージェント２１のメッセージハンドラを呼び出すよう指示する（ステップ３２５）。これにより、スレッドはそのエージェント２１に割り当てられ、トランザクションが開始され、そのエージェント２１がメッセージを処理する。
【００４３】
一方、ステップ３２１でＡＴＣが存在すると判定された場合は、エージェント２１が処理を終了する旨の情報を受信した場合であるので、スケジューラ３５は、次に処理すべきエージェント２１を決定するための処理を行う。
即ち、まず、ＡＴＣ管理部４０に問い合わせることにより、トランザクション内メッセージキュー４３が空か（メッセージが存在しない状態であるか）を判定する（ステップ３２６）。
その結果、トランザクション内メッセージキュー４３が空でないと判定されれば、スケジューラ３５は、ＡＴＣ管理部４０に対して、トランザクション内メッセージキュー４３からメッセージを取得するよう指示する（ステップ３２７）。これにより、ＡＴＣ管理部４０は、トランザクション内メッセージキュー４３からメッセージを取得してスケジューラ３５に受け渡す。
そして、スレッドに対して、このメッセージを渡して、そのエージェント２１のメッセージハンドラを呼び出すよう指示する（ステップ３２５）。これにより、スレッドはそのエージェント２１に割り当てられ、そのエージェント２１がメッセージを処理する。
【００４４】
ところで、ステップ３２６でトランザクション内メッセージキュー４３が空であると判定された場合は、あるエージェント２１が処理を終了するため、次に処理すべきエージェント２１の選定をスレッドが依頼してきたにも関わらず、トランザクション内メッセージキュー４３内に処理すべきメッセージが存在しないという状態である。しかも、スレッドは複数のエージェント２１を同時並行して実行することはないので、この時点で動作中のエージェント２１は存在しない。従って、全てのエージェント２１の処理は完了しており、トランザクションを終了してよいことが分かる。
【００４５】
そこで、この場合、スケジューラ３５は、まず、スレッドに対して、トランザクションのコミットを指示する（ステップ３２８）。これにより、スレッドは、トランザクションのコミットを行う。尚、このコミット処理は、エージェント実行環境が持つトランザクション処理機構のコミット処理を呼び出すことにより、実現される。
次に、スケジューラ３５は、エージェント管理部３３に対して、エージェント状態情報３３ａの「処理中」を削除するよう指示する（ステップ３２９）。これにより、エージェント管理部３３は、エージェント状態情報３３ａの「処理中」を削除する。
そして最後に、スケジューラ３５は、ＡＴＣ管理部４０に対して、スレッドＩＤに関連付けられたＡＴＣを削除するよう指示する（ステップ３３０）。これにより、ＡＴＣ管理部４０は、スレッドＩＤに関連付けられたＡＴＣを削除する。
【００４６】
ここで、図６のステップ３２２の初期エージェント選択処理について説明する。
図７は、初期エージェント選択処理の動作例を示したフローチャートである。
まず、スケジューラ３５は、最高優先度のメッセージを持つエージェント２１が存在するかどうかを判定する（ステップ３４１）。そして、最高優先度のメッセージを持つエージェント２１があれば、エージェント管理部３３に問い合わせることにより、そのエージェント２１のエージェント状態情報３３ａが「処理中」となっているかどうかを判定する（ステップ３４２）。また、そのエージェント２１のエージェント状態情報３３ａが「処理中」となっていなければ、そのエージェント２１を初期エージェントとして選択する（ステップ３４３）。
一方、ステップ３４１で最高優先度のメッセージを持つエージェント２１が存在しないと判定された場合、及び、ステップ３４２でエージェント状態情報３３ａが「処理中」になっていると判定された場合には、次の選択処理に移る。
【００４７】
即ち、スケジューラ３５は、直前まで処理していたエージェント２１のメッセージキュー３２にメッセージがあるかどうかを判定する（ステップ３４４）。そして、直前まで処理していたエージェント２１のメッセージキュー３２にメッセージがあれば、そのエージェント２１の連続処理回数が一定値以下であるかどうかを判定する（ステップ３４５）。また、そのエージェント２１の連続処理回数が一定値以下であれば、そのエージェント２１を初期エージェントとして選択する（ステップ３４６）。
一方、ステップ３４４で直前まで処理していたエージェント２１のメッセージキュー３２にメッセージがないと判定された場合、及び、ステップ３４５でエージェント２１の連続処理回数が一定値以下でないと判定された場合には、次の選択処理に移る。
【００４８】
即ち、スケジューラ３５は、未処理のメッセージを持つエージェント２１があるかどうかを判定する（ステップ３４７）。そして、未処理のメッセージを持つエージェント２１がある場合、キャッシュ２０に置かれているエージェント２１があれば、そのエージェント２１を優先的に選択し、キャッシュ２０に置かれているエージェント２１がなければ、データベース１０に置かれているエージェント２１を選択する（ステップ３４８）。
一方、ステップ３４７で未処理のメッセージを持つエージェント２１がないと判定された場合は、ステップ３４１に戻り、選択可能なエージェント２１が現れるまで処理を繰り返す。
【００４９】
尚、この動作例では、図５のステップ３０２〜３０４で、即ち、スレッドが一方向メッセージをトランザクション内メッセージキュー４３に格納するに先立ち、宛先エージェントがトランザクションに参画しているかどうかを確認し、参画していなければ、参画させるための処理を行った。しかしながら、この処理を行うタイミングは、必ずしもこれに限られない。例えば、図６のステップ３２６の直後、即ち、トランザクション内メッセージキュー４３からメッセージを取り出すときにこの処理を行うようにしてもよい。
【００５０】
［要求応答メッセージに関する処理］
まず、スケジューラ３５は、スレッドからトランザクションを開始する旨の情報を受け取る。そして、初期エージェントを決定し、該当するメッセージをスレッドに渡して、初期エージェントのメッセージハンドラを呼び出すように指示する。これにより、初期エージェントにスレッドが割り当てられ、この初期エージェントがトランザクションを開始する。尚、このトランザクション開始時のスケジューラ３５の動作は、図６のステップ３２２〜３２５と同様なので、ここでの詳しい説明は省略する。
【００５１】
その後、現在実行中のエージェント２１（初期エージェントか、初期エージェントが送信したメッセージを直接又は間接的に受け取ったエージェントかは問わない）が要求応答メッセージを送信することになったとする。すると、エージェント２１に割り当てられたスレッドが、エージェント２１が要求応答メッセージを送信する旨の情報をスケジューラ３５に伝える。
図８は、この情報を受け取ったときのスケジューラ３５の動作例を示したフローチャートである。尚、このとき、スレッドからは、スレッドの識別情報が送られてくるものとする。ここでも、このスレッドの識別情報として「スレッドＩＤ」を用いる。
スレッドから要求応答メッセージを送信する旨の情報を受信すると、スケジューラ３５は、まず、ＡＴＣ管理部４０に問い合わせることにより、要求応答メッセージの宛先として指定されている宛先エージェントのエージェントＩＤがエージェントリスト４２に存在するかどうかを判定する（ステップ３６１）。
【００５２】
ここで、宛先エージェントのエージェントＩＤがエージェントリスト４２に存在すると判定された場合は、ステップ３６５に進む。
一方、宛先エージェントのエージェントＩＤがエージェントリスト４２に存在しないと判定された場合、スケジューラ３５は、宛先エージェントをトランザクションに参画させるための処理を行う。
即ち、まず、メモリ管理部３４に対して、宛先エージェントがキャッシュ２０に存在するかどうかを確認し、存在しなければ、宛先エージェントをデータベース１０から読み込み、キャッシュ２０に貼り付けるよう、指示する（ステップ３６２）。これにより、メモリ管理部３４は、宛先エージェントがキャッシュ２０に置かれるよう、指示された動作を行う。
【００５３】
次に、スケジューラ３５は、エージェント管理部３３に対して、宛先エージェントのエージェント状態情報３３ａを「処理中」にするよう、指示する（ステップ３６３）。これにより、エージェント管理部３３は、宛先エージェントのエージェント状態情報３３ａを「処理中」に更新する。尚、エージェント２１の同時並行処理が許されない場合に、エージェント状態情報３３ａが既に「処理中」であれば、そのエージェント２１は他のトランザクションに参画していると考えられる。従って、スケジューラ３５は、その状態が解除されるまで待つ。
そして、スケジューラ３５は、ＡＴＣ管理部４０に対して、エージェントリスト４２に宛先エージェントのエージェントＩＤを追加するよう、指示する（ステップ３６４）。これにより、ＡＴＣ管理部４０は、エージェントリスト４２に宛先エージェントのエージェントＩＤを登録する。
【００５４】
これらの処理により、宛先エージェントがトランザクションに参画すると、スケジューラ３５は、スレッドに対して、宛先エージェントのメッセージハンドラを呼び出すよう、指示する（ステップ３６５）。これにより、スレッドは、要求応答メッセージを宛先エージェントに送信する。
【００５５】
以上、本実施の形態について詳細に述べてきた。
ところで、上記説明では、エージェント２１を特定する情報をリスト化する機構として、エージェントＩＤをリスト化したエージェントリスト４２を用いたが、これはあくまで一例である。例えば、エージェント２１のアドレス等の参照情報をリスト化したエージェントリストを用いてもよい。また、トランザクション内での一方向メッセージのカウンタ機構として、トランザクション内メッセージキュー４３を用いたが、単にメッセージの数を記憶しておくカウンタを用いてもよい。或いは、トランザクション内に未処理の一方向メッセージがあるかどうかを示す情報や、トランザクション内での一方向メッセージの処理状況を示す情報を用いることも考えられる。
【００５６】
このように、本実施の形態では、協調処理に参加するエージェント２１を１つのスレッドで順番に処理するようにした。これにより、先に述べた「スレッド問題」が解決される。
また、本実施の形態では、トランザクション内での一方向メッセージのカウンタがゼロになれば、トランザクションを完了と判断し、そうでなければ，未完了と判断するようにした。これにより、先に述べた「トランザクション完了問題」が解決される。
そして、このような構成を採用したことにより、複数のエージェントによる１つのトランザクション処理を簡単に記述できるようになる。従って、プログラムが簡単になり、開発工数が削減される。また、保守性の向上にもつながる。
【００５７】
最後に、本実施の形態を適用するのに好適なコンピュータのハードウェア構成について説明する。図９は、このようなコンピュータのハードウェア構成の一例を示した図である。図示するように、コンピュータは、演算手段であるＣＰＵ(Central Processing Unit）９０ａと、Ｍ／Ｂ(マザーボード）チップセット９０ｂを介してＣＰＵ９０ａに接続されたメインメモリ９０ｃと、同じくＭ／Ｂチップセット９０ｂを介してＣＰＵ９０ａに接続された表示機構９０ｄとを備える。また、Ｍ／Ｂチップセット９０ｂには、ブリッジ回路９０ｅを介して、ネットワークインターフェイス９０ｆと、磁気ディスク装置（ＨＤＤ）９０ｇと、音声機構９０ｈと、キーボード／マウス９０ｉと、フレキシブルディスクドライブ９０ｊとが接続されている。
【００５８】
尚、図９において、各構成要素は、バスを介して接続される。例えば、ＣＰＵ９０ａとＭ／Ｂチップセット９０ｂの間や、Ｍ／Ｂチップセット９０ｂとメインメモリ９０ｃの間は、ＣＰＵバスを介して接続される。また、Ｍ／Ｂチップセット９０ｂと表示機構９０ｄとの間は、ＡＧＰ（Accelerated Graphics Port）を介して接続されてもよいが、表示機構９０ｄがＰＣＩ Ｅｘｐｒｅｓｓ対応のビデオカードを含む場合、Ｍ／Ｂチップセット９０ｂとこのビデオカードの間は、ＰＣＩ Ｅｘｐｒｅｓｓ（ＰＣＩｅ）バスを介して接続される。また、ブリッジ回路９０ｅと接続する場合、ネットワークインターフェイス９０ｆについては、例えば、ＰＣＩ Ｅｘｐｒｅｓｓを用いることができる。また、磁気ディスク装置９０ｇについては、例えば、シリアルＡＴＡ（AT Attachment）、パラレル転送のＡＴＡ、ＰＣＩ（Peripheral Components Interconnect）を用いることができる。更に、キーボード／マウス９０ｉ、及び、フレキシブルディスクドライブ９０ｊについては、ＵＳＢ（Universal Serial Bus）を用いることができる。
【００５９】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム（装置又は機器）、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−リード／ライト（ＣＤ−Ｒ／Ｗ）及びＤＶＤが含まれる。
【００６０】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【図面の簡単な説明】
【００６１】
【図１】本発明の実施の形態が解決すべき課題を説明するのに用いる協調トランザクションの第１の例を示した図である。
【図２】本発明の実施の形態が解決すべき課題を説明するのに用いる協調トランザクションの第２の例を示した図である。
【図３】本発明の実施の形態の概要について示した図である。
【図４】本発明の実施の形態におけるコンピュータシステムの機能構成例を示したブロック図である。
【図５】本発明の実施の形態において一方向メッセージを送信する旨の情報を受信したときのスケジューラの動作例を示したフローチャートである。
【図６】本発明の実施の形態においてトランザクションを開始する旨又はエージェントが処理を終了する旨の情報を受信したときのスケジューラの動作例を示したフローチャートである。
【図７】本発明の実施の形態における初期エージェント選択処理の動作例を示したフローチャートである。
【図８】本発明の実施の形態において要求応答メッセージを送信する旨の情報を受信したときのスケジューラの動作例を示したフローチャートである。
【図９】本発明の実施の形態を適用可能なコンピュータのハードウェア構成を示した図である。
【符号の説明】
【００６２】
１０…データベース、２０…キャッシュ、２１…エージェント、３０…エージェント実行装置、３１…メッセージング部、３２…メッセージキュー、３３…エージェント管理部、３４…メモリ管理部、３５…スケジューラ、３６…スレッド管理部、３７…通信部、４０…ＡＴＣ管理部、４１…ＡＴＣ、４２…エージェントリスト、４３…トランザクション内メッセージキュー
【図１】
0005181184.tif 000002
【図２】
0005181184.tif 000003
【図３】
0005181184.tif 000004
【図４】
0005181184.tif 000005
【図５】
0005181184.tif 000006
【図６】
0005181184.tif 000007
【図７】
0005181184.tif 000008
【図８】
0005181184.tif 000009
【図９】
0005181184.tif 000010