エージェントの作成

エージェントはそのエージェント固有のクラスファイル、つまりそのエージェントを定義するクラスファイルを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@nii.ac.jp)
Tel: 03-4212-2546 Fax: 03-3556-1916
http://research.nii.ac.jp/~ichiro/