エージェントの作成
エージェントはそのエージェント固有のクラスファイル、つまりそのエージェントを定義するクラスファイルをJar形式でひとまとめにします。なお、Jar形式にまとめるときは、J2SE付属のjarコマンドを使うといいでしょう。次のような形式で実行します。
jar cvfM jar-file.jar agent/simple/*.class
ここではagent/simpleというディレクトリにあるクラスファイルすべて、jar-fileという名前でまとめたエージェントを構成するクラスファイルとします。
例えば配布されたAgentSpaceであれば、agentspace_v3というフォルダーがありますので、これをカレントディレクトリとしましょう。そのディレクトリにはagentというフォルダーがあり、さらにそこにsimpleというフォルダーがあります。そこにはSimple.javaというファイルが
package agent.simple;
import agentspace.Context;
import agentspace.Agent;
import agentspace.Mobile;
import agentspace.Preservable;
import agentspace.event.AgentEvent;
public class Simple implements Agent, Mobile, Preservable {
TestState t = null;
public Simple() {
t = new TestState();
t.setMessage(" in ");
}
public void create(AgentEvent evt, Context context) {
System.out.println("Test: method create() calling "+t.getMessage());
}
public void destroy(AgentEvent evt, Context context) {
System.out.println("Test: method destroy() calling "+t.getMessage());
}
public void suspend(AgentEvent evt, Context context) {
System.out.println("Test: method suspend() calling "+t.getMessage());
}
public void resume(AgentEvent evt, Context context) {
System.out.println("Test: method resume() calling "+t.getMessage());
}
public void arrive(AgentEvent evt, Context context) {
System.out.println("Test: method arrive() calling "+t.getMessage());
}
public void leave(AgentEvent evt, Context context) {
System.out.println("Test: method leave() calling "+t.getMessage());
}
}
class TestState implements java.io.Serializable {
String msg;
int counter = 0;
TestState() {}
public void setMessage(String msg) {
this.msg = msg;
}
public String getMessage() {
counter = counter + 1;
return msg + "("+counter+")";
}
}
|
このエージェントの場合は、SimpleというクラスとTestStateというクラスから構成されるので、それぞれをjavacなどでコンパイルした結果、つまり、Simple.classとTestState.classをひとまとめにします。そこで次のようなjarコマンドを実行します。
jar cvfM Simple-Agent.jar agent/simple/Simple.class agent/simple/TestState.class
ここではエージェントのアーカイブ名をSimple-Agent.jarにしていますが、特にアーカイブ名には制限はありません。なお、エージェントをコンピュータ間で転送する際にはエージェントを構成するオブジェクトをデータ化(整列化または直列化)するに必要があります。このため、エージェントを構成するクラスは、java.io.Serializableを実装する必要があります。
〒101-8430 東京都 千代田区 一ツ橋 2-1-2
国立情報学研究所 アーキテクチャ科学研究系
佐藤一郎 (E-mail: ichiro [at] nii.ac.jp)
Tel: 03-4212-2546
http://research.nii.ac.jp/~ichiro/