2009-02-03 4 views
4

Java 코드를 통해 사용 가능한 에이전트 컨테이너를 찾는 방법을 알려줄 사람이 있습니까? JADE 에이전트 프레임 워크를 사용하고 있는데 새 컨테이너를 만드는 방법을 알아 냈지만 기존 컨테이너를 찾을 수 없으므로 에이전트를 배치 할 수 있습니다.Jade Agent Containers

+0

을이 도움이

public class AMSListenerBehaviour extends AMSSubscriber { @Override public void installHandlers(Map handlersTable) { handlersTable.put(AddedContainer.NAME, addedContainerHandler); } public final class AddedContainerHandler implements EventHandler { @Override public void handle(Event ev) { AddedContainer event = (AddedContainer) ev; ContainerID addedContainer = event.getContainer(); System.out.println(addedContainer.getID()); } 

희망 다음 AddedContainer 이벤트에 대한 핸들러를 등록하고 새로 가능한 컨테이너의 ContainerID에 액세스 할 수 있습니다 거기에 더 비슷한 질문이 있습니다. 대답은 컨테이너를 "지속적인 서비스"로 만드는 것에 초점을 맞추고 있습니다 : http://stackoverflow.com/questions/9094522/getting-a-list-of-all-jade-containers – edmundo096

답변

5

진행중인 서비스를 통해 정보를 수신할지 또는 메시지의 현재 스냅 샷을 수신할지 여부에 따라이 작업을 수행하는 두 가지 방법이 있습니다.

현재 사용 가능한 에이전트 컨테이너의 ID 스냅 샷을 보려면 AMS (Agent Management Service)에 요청 메시지를 보내고 응답을 기다립니다.

private void queryAMS() throws CodecException, OntologyException { 
    QueryPlatformLocationsAction query = new QueryPlatformLocationsAction(); 
    Action action = new Action(myAgent.getAID(), query); 

    ACLMessage message = new ACLMessage(ACLMessage.REQUEST); 
    message.addReceiver(myAgent.getAMS()); 
    message.setLanguage(FIPANames.ContentLanguage.FIPA_SL); 
    message.setOntology(JADEManagementOntology.getInstance().getName()); 
    myAgent.getContentManager().fillContent(message, action); 
    myAgent.send(message); 
} 
private void listenForAMSReply() throws UngroundedException, CodecException, 
OntologyException { 
    ACLMessage receivedMessage = myAgent.blockingReceive(MessageTemplate 
      .MatchSender(myAgent.getAMS())); 
    ContentElement content = myAgent.getContentManager().extractContent(
     receivedMessage); 

    // received message is a Result object, whose Value field is a List of 
    // ContainerIDs 
    Result result = (Result) content; 
    List listOfPlatforms = (List) result.getValue(); 

    // use it 
    Iterator iter = listOfPlatforms.iterator(); 
    while (iter.hasNext()) { 
     ContainerID next = (ContainerID) iter.next(); 
     System.out.println(next.getID()); 
    } 
} 

는 지속적인 서비스로이 정보를 얻으려면, 그리고는 AMS에 등록 각 컨테이너의 ContainerID를받을 : 옥 관리 온톨로지와 QueryPlatformLocationsAction 용어, 송신 및 수신 방법을 사용하는 것 , AMSSubscriber를 확장하는 Behavior를 작성하십시오. 이 오래된 질문이지만, 누군가를 위해,

러스

+0

in 새로운 JADE는 AMS와 통신하는 것 외에 다른 방법이 있습니까? – Purushottam

+0

AMS는 에이전트가 시스템 레벨 정보에 액세스 할 수있게 해줍니다.이 작업은 정확하게이 작업을 위해 설계되었습니다! 유사한 작업을 수행하기 위해 커널 서비스를 작성할 수도 있지만, 실제로는 매우 까다 롭습니다. – DoctorRuss

관련 문제