ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:18.95KB ,
资源ID:7510208      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7510208.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(agents技术.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

agents技术.docx

1、agents技术本章覆盖一些基本的关于用Aglets库开发agents的问题。在以下的各节中将展示如何配置主要的开发环境来支持Aglets,怎样编译和运行开发的agents,怎样浏览API库。 一个Aglet(比如,一个agent能够运行在aglets平台上)是一个简单的java类,它必须继承基类com.ibm.aglet.Aglet。必须覆盖基类中的相关方法才能定制aglet的行为,至少得重写run()方法,如果你要得到一个完整的aglet,必须重写所有的方法。一、配置你的IDE(集成开发环境),来使用aglets库 Aglets库是由一个唯一的.jar文件组成,称为aglets-x.x.x

2、.jar,其中x.x.x是该库文件的版本号。为了编译你自己的agents,你必须在你的classpath中加入该jar文件的路径。以下的子节中将描述如何用不同的工具和IDEs来编译agents。1、使用命令行工具(cmd) 你开发agents就跟写去其他的java程序一样,这意味着你用你喜欢的编辑器来编辑你的java文件,然后用cmd来编译(比如javac,jikes)。假如你已经创建和保存了名为FirstAglet.java的agent,如下: import com.ibm.aglet.*; public class FirstAglet extends Aglet public void

3、run() System.out.println(ntHellon); 即使如果你的aglets跟其他的java类一样,他们也不能作为独立的程序运行,因此,你必须使agent在平台上运行。在这之前,你必须使得你的agents能够独立的到达该平台,这就是说你的agent(已编译的类)在服务器的公共根目录下,即Aglets安装平台的默认公共文件夹下。换句话说,你必须拷贝你的agents类文件在上面所说的文件夹下,因此,你在创建对话框中指定你的aglet类的名字。2、使用IBM的Eclipse 在Eclipse下导入jar文件3、使用Sun公司的Netbeans IDE(略)4、使用JBuilder

4、(略)二、基础知识 本节提供开发一个aglet的基本的信息。在以下的内容中你将发现你必须重载的方法,怎样处理引入的消息和怎样捕获事件。1、一个Aglet主要的方法 Aglets就是象开发applet一样的agent,这就是说你必须覆盖一些方法。以下的代码展示了你必须覆盖的主要方法。 package example.goofy; import com.ibm.aglet.*;public class agletD extends Aglet public void onCreation(Object init) System.out.println(Agent created +init); p

5、ublic void run() System.out.println(Agent running); public void onDisposing() System.out.println(Agent quitting); 2、消息处理 利用Aglet开发一个基于消息传递的通信系统:两个agents相互交流必须交换信息。Messages是Message类的一个实例,他们被一个字符串指定。一个agent想清晰地管理消息就必须覆盖handleMessage()方法,如果信息被该agent处理,返回true,否则返回false。以下的一段代码表明一个agent处理所有的消息: package e

6、xamples.googy; import com.ibm.aglet.*; public class agletE extends Aglet public void run() System.out.println(Agent running); public boolean handleMessage(Message msg) System.out.println(Receive a message +msg.getKind(); return true;/if the messeage is used 在做消息处理时,必须明确一个概念。首先,每一个aglet在一个线程内执行,但是线程被

7、运行aglet的平台所管理,为了效率期间,线程可在所有的agents间共享。这种效率的方式可通过买卖方的例子来理解:假设有一对agents,一方扮演卖方,另一方扮演买方。在这种环境下,没必要使得卖方agent将一件商品拿出来出售之前买方agent是活动的,因此,这没有理由使用每一个agent对应一个线程的方法。而且,卖方能够简单地发送一个消息该需要某件商品的买方,然后必须等待买方的回答(比如说,在回答到来之前,该卖方agent必须是不活动的或处于悬挂状态)。以下的这个例子,清晰地表明激活线程(如agents)的数量每次都被减少。在整个的设计中,Aglets开发这种状态:如果agents能够共享

8、相同的线程,不需要创建额外的线程。换句话说,agents的数量并不是严格地个线程的数量关联起来的。 由于Aglet线程模型,理解一个消息被一个线程传递是很重要的,这不同于agent运行时的情况。因为aglets是同步的,如果agent是激活和运行的,才能传递消息,这意味着你的agent正在执行run()方法(或者另一个方法)。事实上,当这个agent正在执行run()方法(或者另一个方法),在该agent内部有一个线程是活动的,由于java的同步性,另一个线程(消息传递线程)不能传递消息。 从以上的考虑中,我们能够明白,一个agent执行一个有(无)限循环将不能接受和处理任何进入的消息是有可能

9、的。然而,这有一种方法可以强迫一个agent释放锁,该方法就是exitMonitor(),这将导致所有的等待信息进入双端队列,同时,所有的线程通过waitMessage()方法被锁来等待重新开始。注意:迫使一个agent来释放锁能产生race状态。3、事件 Aglet支持一个事件/事件监听模型,一个agent能够注册事件监听器来监听某种事件,因此,它能触发那些事件,这有三类主要的事件,绑定于agent生命周期的不同期:closing,mobility和persinstency。下表1展示了各类事件的类型及关联的监听器。 事件类事件监听器事件监听器的方法CloneEventBefore clon

10、ingCloneListeneronCloning()CloneEventAfter cloningCloneListeneronCloning()MobilityEventBefore migratingMobilityListeneronDispatching()MobilityEventWhen the agent arrivesMobilityListeneronArrival()MobilityEventWhen the agent is being retractedMobilityListeneronReverting()PersistencyEventAfter the age

11、nt activationPersistencyListeneronActivation()PersistencyEventBefore the agent deactivationPersistencyListeneronDeactivating()表1:在Aglets中可用的事件三、代码例子 这节中提供了一些代码例子关于运行aglets。这些代码仅仅为教学使用。1、一个基本的agent 以下的类展示了一个简单的aglet,该类一旦被加载,以标准输出的方式打印出一些信息。 import com.ibm.aglet.*; public class FirstAglet extends Agle

12、t public void run() System.out.println(ntHellon); for(int i=0;i10;i+) System.out.println(n i is +i); 2、事件监听 以下的代码例子表明,MobilityListene,CloneListener和PersistencyListener怎样被使用。首先,看看监听器类:package example.goofy;import com.ibm.aglet.*;import com.ibm.aglet.event.*;public class myListener implements Mobility

13、Listener,CloneListener,PersistencyListener /mobility listener methods public void onArrival(MobilityEvent event) System.out.println(Agent arrived +event); public void onDispathching(MobilityEvent event) System.out.println(Before moving. +event); public void onReverting(MobilityEvent event) System.ou

14、t.println(Before coming back home. +event); /clone listener methods public void onClone(CloneEvent event) System.out.println(Im the clone +event); public void onCloned(CloneEvent event) System.out.println(A clone of myself created +event); public void onCloning(CloneEvent event) System.out.println(S

15、omeone is cloning myself +event); /Persistency listener methods public void onActivation(PersistencyEvent event) System.out.println(Activating +event); public void onDeactivating(PersistencyEvent event) System.out.println(Deactivating +event); 上面的监听器定义了不同的方法来捕获不同时间的事件,正如代码中解释的一样。以下的agent注册上面的监听器,使用它

16、来触发事件。 package examples.goofy;import com.ibm.aglet.*;import com.ibm.aglet.event.*; public class agletC extends Aglet public boolean move=true; public void onCreation(Object init) /create a listener object myListener listener = new myListener(); /register a mobility listener this.addMobilityListener(

17、MobilityListener)listener); /register a clone listener this.addCloneListener(CloneListener)listener); /register a persistency listener this.addPersistencyListener(PersistencyListener)listener); public void run() System.out.println(Hello!); 例如,在dispatching之后,mobility事件被触发,agent在源控制台打印出如下的语句: Before m

18、ovingMobilityEventDISPATCHING 同时,在目的控制台打印出: Agent arrived MobilityEventARRIVAL HELLO! 为了更好地理解事件监听器是如何工作的,执行以上的agent,cloning,dispatching和deactivating,再看看所有控制台打印出的信息。3、远程消息 以下的代码表明agletA怎样发送一个远程消息给agent agletB。请注意:在发送消息时,必须知道远程agent的agletID,这样才能够通信。 package examples.goofy;import com.ibm.aglet.*;import

19、 .*;/*克隆一个agent,然后发送一个远程Hello消息*/public class agletA extends Agletpublic void run() try /get the aglet context AgletCOntext context = this.getAgletContext(); /create an agletB instance AgletProxy toMove = context.createAglet(null,examples.goofy.agletB,null); /save the new aglet ID AgletID remoteID =

20、 toMove.getAgletID(); System.out.println(The new agent has ID = +remoteID); /migrate the new agent String remoteContext = atp:/localhost:5000; URL url = new URL(remoteContext); toMove.dispatch(url); /get the remote proxy AgletProxy remoteProxy = context.getAgletProxy(url,remoteID); /send a message t

21、o the remote agent remoteProxy.sendMessage(new Message(HELLO); catch (Exception e) System.out.println(Exception +e); /*agletB*/ package examples.goofy;import com.ibm.aglet.*;/*Receive a remote message*/ public class agletB extends Agletpublic void run() try /get my ID AgletID myID = this.getAgletID(

22、); System.out.println(nMy ID is +myID); catch (Exception e) System.out.println(Exception +e); /handle the messagepublic boolean handleMessage(Message msg) if(msg.sameKind(HELLO) System.out.println(HELLO msg received); return true; return false; 请注意:即使在以上的代码中,getAgletProxy()方法是过时了的,但是对于非过时的方法比如: AgletProxy remoteProxy = context.getAgletProxy(remoteID);是不能工作的,因为它仅仅是在本地agents上工作的。MAF(Mobile Agent Finder)的使用将能够更好的工作,但是同时,在Aglets中如何使用它却没有大量的相关文档。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1