OS +
!"
#$%&'()*+
Migration
B
Agent Context
Agent Agent
Agent Runtime
OS +
Agent Context
Agent
Agent Agent
Agent Runtime
OS +
!"
#$%&'()*+
Migration
B
Agent Context
Agent Agent
Agent Runtime
OS +
Agent Context
Agent
Agent Agent
図 システム構成図
エージェントを実行可能にし,転送要求のあったエージェントを他のエージェントランタ イムシステムに転送する.
エージェントランタイムシステムは,各エージェントのインタフェースとなるエージェ ントコンテキストと,エージェントの移動や永続化を管理するエージェントランタイムか ら構成されている(図参照).
エージェントランタイムシステムの機能には以下のものがある.
¯ エージェントの永続化
のシリアライゼーション機能を利用してエージェントを永続化する機能.永続 化された情報には,エージェントのプログラムコードとインスタンス変数などの実 行状態が含まれる.
¯ エージェントの起動
永続化されたエージェントの情報を読み込み,エージェントを生成する機能.
¯ エージェントの移動
エージェントを指定されたエージェントランタイムシステムに転送する.また,他 のエージェントランタイムシステムから受信したエージェントを実行可能な状態に する.
¯ エージェントの停止
エージェントプログラムの実行を停止する機能.
¯ エージェント間通信
同じエージェントランタイムシステム上のエージェント間通信の実現.エージェン ト間通信には,非同期メッセージ通信,同期メソッド呼び出し,非同期メソッド呼 び出し(フューチャ通信)がある.
コールバックメソッド
におけるモバイルエージェントプログラムは,一つまたは複数のクラ スから構成され,そのうち一つ以上のクラスは,クラス のサブクラスとして定義 される. クラスは,表に示すコールバックメソッドから構成され,各メソッド はエージェントの状態変化の前後に呼び出される.クラス のサブクラスでこれら のメソッドをオーバーライドすることで状態変化に対応した動作の記述が可能となる.
エージェント間通信
では,セキュリティを配慮してエージェントが別のエージェントを直接参照 することができない.そこで,エージェント間で通信を必要とする場合には,
表 のコールバックメソッド
メソッド名 呼び出されるタイミング
*/1 クラスファイルからエージェントを合 成するときに一度だけ呼び出される.
*/1 エージェントを生成した直後に呼び出 される.初期化などはここに記述する.
**/1 エージェントが停止する直前に呼び出 される.
**%/@0 :1 エージェントが他のコンピュータに移 動する直前に呼び出される.引数:に は,移動先の@0アドレスが入る
*/1 エージェントが移動先のコンピュータ に到着した直後に呼び出される.
*:*/1 エージェントが永続化される直前に呼 び出される.
*:,/1 エージェントが活性化された直後に呼 び出される.
**:/1 エージェントの複製が生成される直前 に呼び出される.
*/ &*A *1 エージェントの複製が生成された直後 に,複製元のエージェントで呼び出さ れる.引数*には,複製によって生成 されたエージェントの識別子が入る.
*%*/ &*A *1 エージェントの複製が生成された直後 に,複製によって新たに生成されたエ ージェントで呼び出される.引数*に は,複製元となったエージェントの識 別子が入る.
が提供する $.クラスの &を用いて通信を行う.本節では, が 提供するエージェント間通信について解説する.なお,以下で述べるエージェント間通信
&は,同一ホスト上のエージェントとしか通信ができない.これは,他のホストにいる エージェントとは移動後にローカル通信を行うべきであるという の設計方針 に基づくものである.
エージェント間通信により送信するメッセージは,"クラスによって指定する.
"クラスのコンストラクタで,受信側エージェントが呼び出すメソッド名を指定し,
"クラスのメソッド /=#>1で呼び出すメソッドの引数を指定する.
例えば,
のように作成したメッセージ,を送信した場合,受信側エージェントではメソッドB
*/C-C5C#C1が呼び出される.
¯ 非同期メッセージ通信
識別子*をもつエージェントに"クラスのインスタンス,で与えられた メソッドを呼び出す(図参照).送信側エージェントは,メソッドの返値を受け 取ることはできないが,受信側エージェントの状態に関わらず処理を継続すること ができる.ただし,送信した時点で,受信側エージェント自体および対応するメソッ ドが存在しない場合,そして引数の数や型が一致しない場合でもエラーを返すこと はない.