/012/BCD5 6
5.6 各エージェントの実装
5.6.1 CommunicatableAgent
クラス
CommunicatableAgentクラスは,本システムが提供するエージェント間通信APIを実
装する.なお,本システムにおける異なるホスト間のエージェント間通信は,ServerAgent
, Delivery Agent を用いて行われるが,CommunicatableAgent クラスによって提供され るAPIを用いることによって,これらのエージェントを意識することなくエージェント 間通信を行うことができる.
例えば,CommunicatableAgentクラスを継承しているエージェントが,ホスト urlに
いる Agent Identier aid のエージェントからのappend(\foo","bar") の返値を得たい場 合は次のように記述する.
Message msg = new Message("append"); //メッセージを作成
msg.setArg("foo"); //引数を指定
msg.setArg("bar");
try{
//受取側エージェントを指定してメッセージを送信
String result = (String) call(aid,url,msg);
}catch(Exception e){
//相手ホストで例外が発生した場合は,例外を出力
System.err.println("caught Exception "+e.getMessage());
}
この記述では,受信側エージェントが存在しなかった場合,または,受信側エージェント がメソッドを実行した際に例外が発生した場合に,例外が捕捉され,例外のメッセージが 出力される.
CommunicatableAgentクラスの概要を表5.4に示す.
表 5.4: CommunicatableAgentクラスの概要
クラスの概要
エージェント間通信APIを実装したクラス.
主なフィールドの概要
publicstatic nalStringSERVER AGENT NAME
ServerAgent の名前.
主なメソッドの概要
publicvoid send(Messagemessage)
publicvoid send(Stringname,Messagemessage, boolean broadcast)
publicvoid send(Stringname,URLurl,Message message, boolean broadcast)
publicvoid send(AgentIdentier aid,Message message)
publicvoid send(AgentIdentier adi,URLurl, Message message)
非同期エージェント間通信.受信側エージェントの実行したメソッドの返値は得ることがで きない.
publicObjectcall(Message message)
publicObjectcall(Stringname,Message message,boolean broadcast)
publicObjectcall(Stringname,URLurl, Message message,boolean broadcast)
publicObjectcall(AgentIdentieraid, Message message)
publicObjectcall(AgentIdentieradi, URLurl,Messagemessage)
同期エージェント間通信.受信側エージェントの実行したメソッドの返値を得ることができ る.
publicvoid future(Messagemessage)
publicvoid future(Stringname,Message message,boolean broadcast)
publicvoid future(Stringname,URLurl, Message message,booleanbroadcast)
publicvoid future(AgentIdentieraid, Message message)
publicvoid future(AgentIdentieradi, URLurl,Message message)
publicObjectgetReply()
非同期エージェント間通信.エージェントはgetReplyを呼び出すことで返値を得ることが できる.
publicvoid callback(Message callback, Message message)
publicvoid callback(Message callback, Stringname,Messagemessage, boolean broadcast)
publicvoid callback(Message callback, Stringname,URLurl,Message message, boolean broadcast)
publicvoid callback(Message callback, AgentIdentieraid, Message message)
publicvoid callback(Message callback, AgentIdentieradi, URLurl,Message message)
コールバックメソッド呼び出し.メッセージ送信後,送信側エージェントでは,callbackで 指定したメソッドが,受信側エージェントからの返値を引数の最後にセットしてして呼び出
5.6.2 ServerAgent
クラス
Server Agentは,各ホストのサーバとして活動し,ユーザインタフェース(GUI)の提
供,エージェント間通信の中継といった機能を持つ.ここで,ServerAgent は,エージェ ントのロード,エージェントの状態の監視など AgentSpace上の通常のエージェントでは 利用できないAPIを利用する.また,本システムでは各ホストに必ずServer Agentが存 在していなければならないため,Server Agent は抽象クラスではなく具象クラスとして 提供する.
ServerAgent クラスの概要を表5.5に示す.
表 5.5: ServerAgentクラスの概要 クラスの概要
ServerAgent を実装したクラス 主なフィールドの概要
protected ServerAgentProleprole
プロファイル 主なメソッドの概要
publicvoid remoteSend(AgentMailmail)
DeliveryAgent をロードし, 受信側エージェントのホストへ移動させる.
publicvoid remoteCall(Future futureObj,AgentMailmail)
DeliveryAgent をロードし, 受信側エージェントのホストへ移動させる.
publicvoid remoteFuture(FuturefutureObj,AgentMail mail)
DeliveryAgent をロードし, 受信側エージェントのホストへ移動させる.
publicvoid remoteCallback(Message callbackMessage,AgentMail mail)
DeliveryAgent をロードし, 受信側エージェントのホストへ移動させる.
publicvoid requestUserAgent(ServiceAgentProle prole)
proleを持つServiceAgent へUser Agentを要求する.
publicvoid requestOwnAgentList()
DirectoryAgent へユーザが所有者となっているエージェントのプロファイルを問い合わせ
る.問い合わせ結果は,ServerAgentのGUIへ反映される.
publicvoid requestServiceAgentList()
DirectoryAgent へ 公開されているServiceAgent の一覧を問い合わせる.問い合わせ結果 は,ServerAgentのGUIへ反映される.
publicvoid report()
プロファイル(サーバの状態)をDirectory Agent へproleを送る.
ServerAgentの実行画面を図5.4に示す.ユーザは,ServerAgentのGUIを用いて
Direc-toryAgent への問合せ,ServiceAgent へのUserAgentの要求などを行うことができる.
Service Agent !
"#Directory Agent$%&'()*+, -.User Agent /012)*3
4563789*:,-% ;<
=(;<"Directory Agent$%&
'(>?:@ABC!)*D Server Agent EFGHF
I;< !
図 5.4: Server Agent の実行画面
5.6.3 DirectoryAgent
クラス
DirectoryAgentクラスの概要を表5.6に示す.DirectoryAgentは,本システム上のエー ジェントにディレクトリサービスを提供するため,DirectoryAgent クラスの主なメソッ ドは,ディレクトリへの問い合わせである.また,サービス開発者は,本システムが提供 する DirectoryAgent クラスのサブクラスとして独自のDirectory Agentクラスを実装す ることにより,独自のDirectoryAgentを実装することができる.
なお,本システムでは,最低ひとつのDirectoryAgentが存在していなければならない ため,SimpleDirectoryAgent を DirectoryAgentとして実装している.
表 5.6: DirectoryAgentクラスの概要 クラスの概要
DirectoryAgent の雛型クラス 主なフィールドの概要
protected DirectoryAgentProle prole
プロファイル 主なメソッドの概要
publicabstract Vector select(Stringname)
名前がname であるエージェントの一覧を返す
publicabstract Vector select(URLurl)
ホストurlに存在する,エージェントの一覧を返す
publicabstract Vector select(ClassproleClass)
プロファイルとしてproleClassクラスを持つエージェントの一覧を返す.proleClassは,
AgentProleクラスまたは,AgentProle のサブクラスとする.例えば,proleClassとし てServiceAgentProleクラスを指定すると,ServiceAgent の一覧を返す.
publicVector ownAgents(Stringowner, URLurl)
引数で指定した所有者が持つエージェントのプロファイル一覧を返す
publicURLwhere(AgentIdentieraid)
引数で指定したエージェントが現在活動するURLを返す.該当するエージェントがいなかっ た場合は,nullを返す.
publicabstract voidinsert(AgentProle prole)
エージェントのプロファイルproleをディレクトリに登録する
publicabstract voiddelete(AgentProleprole)
エージェントのプロファイルproleをディレクトリから削除する
publicabstract voidupdate(AgentProle prole)
エージェントのプロファイルproleを更新する
publicabstract voidreport()
エージェント自身が登録されている,DirectoryAgent へproleを送る.
本システムでは,ひとつ以上のDirectoryAgent がシステム上のエージェントにディレ クトリサービスを提供していなければならない.よって,本研究では,Simple Directory
Agent をデフォルトのDirectory Agent として提供する(図5.5参照).Simple Directory
Agentは,抽象クラスであるDirectoryAgentクラスを実装しGUIを付加したものである.
ここで,複雑な条件を指定しての検索などの機能を持った独自のDirectoryAgentを用 意したいユーザは,DirectoryAgentクラスを継承した独自のDirectoryAgentを実装する ことができる.
図 5.5: Simple DirectoryAgent の実行画面
5.6.4 ServiceAgent
クラス
本システムでは,ServiceAgent は,CommunicatableAgentクラスを継承した抽象クラ スとして定義される.サービス開発者は,本システムが提供する ServiceAgent クラスの サブクラスとして独自サービスを実装する.ServiceAgent クラスの概要を表5.7に示す.
ここで,matchメソッドは,引数で指定されたプロファイルを持ったエージェントが提
を提供しているServiceAgentが複数存在した場合,matchメソッドを用いてユーザの条 件に合うService Agentを選択する.
表 5.7: ServiceAgentクラスの概要 クラスの概要
ServiceAgent の雛型クラス 主なフィールドの概要
protected ServiceAgentProle prole
プロファイル 主なメソッドの概要
publicabstract voidstartService()
サービスの提供を開始する
publicabstract voidstopService()
サービスの提供を停止する
publicabstract Integer match(UserAgentProle prole)
proleを持ったUser Agent と提供しているサービスとの適合度を返す
publicabstract Boolean addMember(AgentContext ac,UserAgentProleprole)
proleを持った UserAgent をメンバーに登録する.登録に成功したら真を,失敗したら偽
を返す.
publicabstract Boolean removeMember(AgentContext ac,UserAgentProle prole)
proleを持った UserAgent をメンバーから削除する.削除に成功したら真を,失敗したら
偽を返す.
publicabstract Vector listMember()
共有中のエージェントのプロファイル一覧を返す.
publicabstract voiddispatchUserAgent(URLurl)
UserAgent をロードし,urlへ移動させる
publicabstract voidreport()
DirectoryAgent へ自身のproleを送る.
5.6.5 UserAgent
クラス
本システムでは,UserAgentは,CommunicatableAgentクラスを継承した抽象クラス として定義される.サービス開発者は,本システムが提供する UserAgent クラスのサブ クラスとして独自User Agentを実装する.UserAgent クラスの概要を表5.8に示す.
表 5.8: UserAgentクラスの概要 クラスの概要
User Agent の雛型クラス 主なフィールドの概要
protected UserAgentProle prole
プロファイル
protected ServerAgentProlemyServiceAgentProle
エージェントがサービスを受けるServiceAgentのプロファイル.
主なメソッドの概要
publicvoid goHome()
UserAgentを所有しているユーザのホストへ移動する
publicvoid setUserPreference(Object preference)
ユーザの嗜好を設定する.
publicObjectgetUserPreference()
ユーザの嗜好を返す.
publicvoid setServiceAgentProle(ServiceAgentProleprole)
このエージェントがサービスを受けるServiceAgentのプロファイルを指定する.proleは,
DirectoryAgent に問い合わせるか,他のエージェントからエージェント間通信で受け取る.
publicServiceAgentProlegetServiceAgentProle()
このエージェントがサービスを受けるServiceAgent のプロファイルを返す.
publicabstract voidreport()
DirectoryAgent へ自身のproleを送る.
第
6章
例題
:ブックマーク共有システム
本章では,本研究で提案した情報共有システムの例題としてブックマーク共有システム を実装し,考察する.