# Java Agent Development Framework

Java Agent DEvelopment Framework, o JADE, es una plataforma software para el desarrollo de agentes, implementada en Java. La plataforma JADE soporta la coordinación de múltiples agentes FIPA y proporciona una implementación estándar del lenguaje de comunicación FIPA-ACL, que facilita la comunicación entre agentes y permite la detección de servicios que se proporcionan en el sistema. JADE fue desarrollado originalmente por Telecom Italia y se distribuye como software libre.

## Resumen

JADE es un middleware que facilita el desarrollo de sistemas multi-agente bajo el estándar FIPA para lo cual crea múltiples contenedores destinados a los agentes, cada uno de los cuales puede ejecutarse en uno o en varios sistemas. Queda establecido que un conjunto de contenedores constituye una plataforma.
Adicionalmente JADE proporciona:
* Un entorno de ejecución en el que los agentes de JADE se ejecutan.
* Bibliotecas de clases para la creación de agentes mediante la herencia y la redefinición de comportamientos.
* Un conjunto de herramientas gráficas para la monitorización y administración de la plataforma de agentes.

## Historia

JADE fue desarrollado inicialmente por Telecom Italia Lab. Este sector es la rama de I + D del Grupo Telecom Italia que se encarga de promover la innovación tecnológica. Telecom Italia concibió y promovió JADE, fundándolo en el año 2000. La última versión disponible data del mes de marzo de 2013 (versión 4.3) La primera versión de JADE distribuida como software libre está disponible desde el mes de febrero del 2000 (versión 1.3).
En marzo de 2003 Motorola y Telecom Italia crearon la JADE Governing Board con el objetivo de promover la evolución y la adopción de JADE en la industria de las telecomunicaciones móviles como middleware de base. Dicha organización (JADE Governing Board) acepta a toda empresa y/o organización interesada en el uso comercial y explotación de JADE que se comprometan a su desarrollo y promoción.

## Plataforma

Se trata de una plataforma de agentes distribuida, que tiene un contenedor por cada host en el que se están ejecutando los agentes. De manera adicional la plataforma posee diferentes herramientas de depuración, movilidad de los agentes de código y contenido, la posibilidad de la ejecución paralela del comportamiento de los agentes, así como el soporte para la definición de lenguajes y ontologías. Cada plataforma debe tener un contenedor principal que tiene dos agentes especiales denominados AMS y DF.
* El DF (Directory Facilitator) proporciona un directorio que anuncia qué agentes hay disponibles en la plataforma.
* El AMS (Agent Management System) controla la plataforma. Es el único que puede crear y destruir a otros agentes, destruir contenedores y parar la plataforma.

### Agente DF

Para acceder al agente DF se usa la clase "jade.domain.DFService" y sus métodos estáticos: register, deregistrer, modify y Search.

### Agente AMS

Para acceder a la información del AMS Service se crea un agente el cual se ejecuta automáticamente el método register del AMS por defecto antes de ejecutar el método setup del nuevo agente. Cuando se destruye un agente se ejecuta su método takedown y automáticamente se llama a deregister del AMS por defecto.

## Clase Agent

La clase Agent es una super clase común que permite a los usuarios crear software de agentes JADE. Para crear un agente solo hay que heredar de la clase Agent. Habitualmente cada agente registrará varios servicios los cuales a su vez deberían de ser implementados por uno o más comportamientos.
Esta clase suministra métodos que permiten ejecutar las tareas básicas de los agentes como:
* Pasar mensajes utilizando objetos ACLMessage, con correspondencia de patrones.
* Dar soporte al ciclo de vida de un agente.
* Planificar y ejecutar múltiples actividades al mismo tiempo.

## Agente JADE

El ciclo de vida de un agente JADE sigue el ciclo propuesto por FIPA. Estos agentes pasaran por diferentes estados definidos como:
* Initiated/ Iniciado: El agente se ha creado pero no se ha registrado todavía el AMS.
* Active/ Activo: El agente ya ha sido registrado y posee nombre. En este estado puede comunicar con otros agentes.
* Suspended/ Suspendido: El agente se encuentra parado porque su hilo de ejecución se encuentra suspendida.
* Waiting/ Esperando: Se encuentra bloqueado a la espera de un suceso.
* Deleted/ Eliminado: El agente ha terminado por tanto el hilo terminó su ejecución y ya no estará más en el AMS.
* Transit/ Transito: El agente se está migrando a una nueva ubicación.

## Comportamiento de Agentes

El comportamiento define las acciones bajo un determinado evento. Dicho comportamiento del agente se define en el método setup mediante el método addBehaviour. Los diferentes comportamientos que el agente adoptará se definen a partir de la clase abstracta Behaviour. La clase Behaviour contiene los métodos abstractos:
* action: Se ejecuta cuando la acción tiene lugar.
* done: Se ejecuta al finalizar el comportamiento.
Por otra parte el usuario puede redefinir los métodos onStart y onEnd que el agente poseerá. Adicionalmente existen otros métodos como block y restart usados para la modificación del comportamiento del agente. Cuando un agente esté bloqueado se puede desbloquear de diferentes maneras.

## Mensajes ACL

El paso de mensajes ACL (Agent Communication Language) es la base de la comunicación entre agentes. El envío de mensajes se realiza mediante el método send de la clase Agent. A dicho método hay que pasarle un objeto de tipo ACLMessage que contiene la información de los destinatarios, lenguaje, codificación y el contenido del mensaje. Estos mensajes se envían de modo asíncrono, mientras que los mensajes que se van recibiendo se irán almacenando en una cola de mensajes. Existen dos tipos de recepción de los mensajes ACL, bloqueante o no bloqueante. Para ello se proporcionan los métodos blockingReceive y receive respectivamente. En ambos métodos se puede hacer filtrado de los mensajes que se quieren recuperar de la cola estableciendo diferentes plantillas.

## Extensiones

JADE tiene una extensión denominada WADE (Workflows and Agents Development Environment) que es un sistema de workflow que permite crear procesos mediante un editor gráfico llamado WOLF.