2011-08-11 74 views
9

Ejecuto JADE integrado en un programa Java, es decir, no con java jade.Boot .... Ahora quería detener el sistema JADE, pero no he encontrado una buena manera de hacerlo. Puedo salir de todo el programa usando System.exit(), pero eso no es lo que quiero hacer.Detener un sistema JADE (agentes Java)

He intentado varias cosas diferentes, y he conseguido detener mis comportamiento de los agentes, pero un par de hilos continúe funcionando: el AMS, el DF, un servidor web, el despachador JADE temporizador, varios hilos Deliverer, etc.

Así es como mi método de apagado actual se parece a:

@Override 
    public void shutdown() { 
    // TODO This does not work yet.. 
    try { 
     for (WeakReference<AgentController> acr : agents) { 
     AgentController ac = acr.get(); // jade.wrapper.AgentController 
     if (ac != null) ac.kill(); 
     } 
     container.kill(); // jade.wrapper.AgentContainer 
     Runtime.instance().shutDown(); // jade.core.Runtime 
    } catch (StaleProxyException e) { 
     e.printStackTrace(); 
    } 
    } 

La razón por la que quiero hacer eso es que tengo algunas pruebas JUnit para mi sistema agente.

¿Alguna idea de cómo lograr eso?

Respuesta

6

Puede solicitar AMS para detener la plataforma de tal manera:

Codec codec = new SLCodec();  
Ontology jmo = JADEManagementOntology.getInstance(); 
getContentManager().registerLanguage(codec); 
getContentManager().registerOntology(jmo); 
ACLMessage msg = new ACLMessage(ACLMessage.REQUEST); 
msg.addReceiver(getAMS()); 
msg.setLanguage(codec.getName()); 
msg.setOntology(jmo.getName()); 
try { 
    getContentManager().fillContent(msg, new Action(getAID(), new ShutdownPlatform())); 
    send(msg); 
} 
catch (Exception e) {} 
+0

todavía tengo varias instancias del Libertador en ejecución ('jade.core.messaging.MessageManager $ Deliverer'). El problema con ellos es que no puedo matar los hilos en los que se ejecutan, porque ignoran InterruptedExceptions ... –