モバイルエージェントの実装技術

モバイルエージェントの実装技術
モバイルエージェントの実装技術










エージェント移動
エージェントの機能
AgentSpaceシステム
エージェントの移動要求
エージェント移動(複数サイト)
エージェントの永続化
エージェントの複製
エージェント間通信
コールバックメソッド
エージェントプログラム例
モバイルエージェントの実装技術
エージェント移動
 エージェントは自律的に移動先(コンピュータ)を選択・移動
 移動先において移動前の状態から処理を継続
プログラム移動
エージェント間通信
計算処理
コンピュータA
ネットワーク
特徴:
• コンピュータ間通信回数の最小化
• コンピュータ間の非同期協調
コンピュータB
モバイルエージェントの実装技術
エージェントの機能

能動的計算実体
コンピュータ間移動(移動先では処理を継続)
生成、永続化、複製、停止
エージェント間通信(フュチャー・同期・非同期メソッド呼び出し)
モバイルエージェントの実装技術
AgentSpaceシステム


AgentSpace [佐藤, 1997]
Java(JDK1.1以上)上に実現(100% pure Java)
エージェント エージェント
エージェントはJava言語
オブジェクトとして実現
エージェント エージェント
ランタイムシステム
ランタイムシステム
Java言語仮想機械
Java言語仮想機械
ハードウェア
コンピュータA
エージェント
移動
ハードウェア
コンピュータB
ネットワーク
エージェントは実行状態・プログラムコード共に移動
モバイルエージェントの実装技術
エージェントの移動要求

エージェントの移動要求
dispatch(“islab.is.ocha.ac.jp”);

コンピュータ islab.is.ocha.ac.jp に移動
移動
コンピュータ
エージェント
エージェント
コンピュータ
移動
current.here.com
islab.is.ocha.ac.jp
モバイルエージェントの実装技術
エージェント移動(複数サイト)

複数のコンピュータを処理をしながら移動していく
void method0() {
Route route = new Route();
route.set(“computer1.com”, “method1”);
route.set(“computer2.com”, “method2”);
dispatch(route);
}
method1()
void method1() {...}
void method2() {...}
エージェント を実行
移動
コンピュータ
computer1.com
コンピュータ
エージェント
移動
method2()
を実行
エージェント
コンピュータ
computer2.com
モバイルエージェントの実装技術
エージェントの永続化

エージェントの実行状態・コードをファイルに永続化
suspend(“file”);

ファイル上の永続化エージェントを活性化
AgentIdentifier aid = resume(“file”);
エージェント
永続化
ファイル
current.here.com
ファイル
活性化
エージェント
current.here.com
モバイルエージェントの実装技術
エージェントの複製

エージェントをその実行状態を含めて複製
AgentIdentifier aid = duplicate();
クローン
複製
エージェント
current.here.com
エージェント
モバイルエージェントの実装技術
エージェント間通信

他のエージェントのメソッドを呼び出し、実行を依頼
Message msg = new Message(“hello”);
msg.setTarget(aid);
msg.setArg(“world”);
send(msg);
呼び出し
エージェント
エージェント
結果(省略化)
同一コンピュータ内のみ
同期方式:非同期メッセージ、同期呼び出し
モバイルエージェントの実装技術
コールバックメソッド


エージェントはコールバックメソッドを定義
システムはエージェントが状態変化の前後に所定
のコールバックメソッドを呼び出す。
移動中
dispatch()
実行前
create()
コールバック
メソッド呼び出し
実行中
arrive()
destroy()
停止
コールバック
メソッド呼び出し
システム
(エージェント管理)
モバイルエージェントの実装技術
エージェントプログラム例

コールバックメソッド
生成直後、移動前後、終了直前にランタイムシステムより
所定のコールバックメソッドが呼び出される
移動中

arrive()
dispatch()
実行前
実行中
create()
停止
destroy()
public class HelloWorld extends Agent {
public HelloWorld() {}
public void create() {
add(new Label("Hello World"));
show();
}
public void arrive() {
show();
}
public void dispatch(URL url) {
dispose();
}
public void destroy() {
dispose();
}
}