モバイルエージェントの実装技術 モバイルエージェントの実装技術 エージェント移動 エージェントの機能 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(); } }
© Copyright 2024 ExpyDoc