使用Aglets开发agents(二)

 
2 、消息处理
       利用 Aglet 开发一个基于消息传递的通信系统:两个 agents 相互交流必须 交换信息。 Messages Message 类的一个实例,他们被一个字符串指定。一个 agent 想清晰地管理消息就必须覆盖 handleMessage(…) 方法,如果信息被该 agent 处理,返回 true ,否则返回 false 。以下的一段代码表明一个 agent 处理所有的消息:
       package examples.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 在一个线程内执行,但是线程被运行 aglet 的平台所管理,为了效率期间,线程可在所有的 agents 间共享。这种效率的方式可通过买卖方的例子来理解:假设有一对 agents ,一方扮演卖方,另一方扮演买方。在这种环境下,没必要使得卖方 agent 将一件商品拿出来出售之前买方 agent 是活动的,因此,这没有理由使用每一个 agent 对应一个线程的方法。而且,卖方能够简单地发送一个消息该需要某件商品的买方,然后必须等待买方的回答(比如说,在回答到来之前,该卖方 agent 必须是不活动的或处于悬挂状态)。以下的这个例子,清晰地表明激活线程(如 agents )的数量每次都被减少。在整个的设计中, Aglets 开发这种状态:如果 agents 能够共享相同的线程,不需要创建额外的线程。换句话说, agents 的数量并不是严格地个线程的数量关联起来的。
       由于 Aglet 线程模型,理解一个消息被一个线程传递是很重要的,这不同于 agent 运行时的情况。因为 aglets 是同步的,如果 agent 是激活和运行的,才能传递消息,这意味着你的 agent 正在执行 run ()方法(或者另一个方法)。事实上,当这个 agent 正在执行 run ()方法(或者另一个方法),在该 agent 内部有一个线程是活动的,由于 java 的同步性,另一个线程(消息传递线程)不能传递消息。
       从以上的考虑中,我们能够明白,一个 agent 执行一个有(无)限循环将不能接受和处理任何进入的消息是有可能的。然而,这有一种方法可以强迫一个 agent 释放锁,该方法就是 exitMonitor (),这将导致所有的等待信息进入双端队列,同时,所有的线程通过 waitMessage ()方法被锁来等待重新开始。注意:迫使一个 agent 来释放锁能产生 race 状态。
3 、事件
       Aglet 支持一个事件 / 事件监听模型,一个 agent 能够注册事件监听器来监听某种事件,因此,它能触发那些事件,这有三类主要的事件,绑定于 agent 生命周期的不同期: closing mobility persinstency 。下表 1 展示了各类事件的类型及关联的监听器。
 
事件类
事件监听器
事件监听器的方法
CloneEvent
Before cloning
CloneListener
onCloning(…)
CloneEvent
After cloning
CloneListener
onCloning(…)
MobilityEvent
Before migrating
MobilityListener
onDispatching(…)
MobilityEvent
When the agent arrives
MobilityListener
onArrival(…)
MobilityEvent
When the agent is being retracted
MobilityListener
onReverting(…)
PersistencyEvent
After the agent activation
PersistencyListener
onActivation(…)
PersistencyEvent
Before the agent deactivation
PersistencyListener
onDeactivating(…)
1: Aglets 中可用的事件
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值