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?
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 ... –