获取所有JADE容器的列表

时间:2012-02-01 10:47:46

标签: javaagents agents-jade

我想获得当前平台中所有容器的列表。 This question类似,但答案已过时,方法是查询AMS代理。有没有比通过ACL消息进行通信更简单的方法,我认为这很复杂,应该有一个方法来获得一个简单的容器列表。谢谢你的帮助

1 个答案:

答案 0 :(得分:5)

您可以通过使用AMSSubscriber类来实现此目的,并在添加或删除容器时监听事件。请参阅以下示例代码:

public class myAgent extends Agent {

  private ArrayList<ContainerID> availableContainers = new ArrayList<ContainerID>();

  /**
   * Agent initializations
  **/
  protected void setup() {

    AMSSubscriber subscriber = new AMSSubscriber(){
      protected void installHandlers(Map handlers){
        EventHandler addedHandler = new EventHandler(){
          public void handle(Event event){
              AddedContainer addedContainer = (AddedContainer) event;
              availableContainers.add(addedContainer.getContainer());
          }
        };
    handlers.put(IntrospectionVocabulary.ADDEDCONTAINER,addedHandler);


        EventHandler removedHandler = new EventHandler(){
          public void handle(Event event){
              RemovedContainer removedContainer = (RemovedContainer) event;
              ArrayList<ContainerID> temp = new ArrayList<ContainerID>(availableContainers);
              for(ContainerID container : temp){
                  if(container.getID().equalsIgnoreCase(removedContainer.getContainer().getID()))
                      availableContainers.remove(container);
              }
          }
        };
        handlers.put(IntrospectionVocabulary.REMOVEDCONTAINER,removedHandler);
      }
    };
    addBehaviour(subscriber);
  }
}

参考:1)使用JADE开发多代理系统  作者:Fabio Luigi Bellifemine,Giovanni Caire,Dominic Greenwood(第111页) 2)Jade API