Jade Java Agent DEvelopment framework

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Module 5 : Implémentation de l'impression
La plate-forme MOCA: conception de SMA organisationnel à structure dynamique M. Amiguet, J. Baez, A. Nagy IIUN, Neuchâtel, Suisse J.-P. Müller CIRAD, Montpellier,
Xavier Blanc Web Services Xavier Blanc
Réflexivité et réseaux d’ information
A propos de java Sun, fin 1995 C++ nettoyé semi-interprété
Introduction Pour concrétiser l’enseignement assisté par ordinateur
Dimensions et Java : Plug-in, Build et EAR Elisabeth BAUDOIN STIME CLUB UTILISATEURS ALMA DU 23 NOVEMBRE 2010.
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Object Management Architecture (OMA)
MySQL I / Présentation. II / Administration et Outils.
CONTINUOUS TESTING Hakima Zidouri Informatique Réseau 3
(Classes prédéfinies – API Java)
Introduction à Java - les paquetages -
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Entité Module Java Expert.
Virtools Olivier Lamotte.
UML (Unified Modeling Langage)
Introduction aux services WEB
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Chapitre III Héritage (début)
Etude des Technologies du Web services
Ericsson Communications Inc. Le problème dinteropérabilité entre les plate- formes dagents mobiles Présenté par Bah Thierno CAT 2000.
XML-Family Web Services Description Language W.S.D.L.
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les Systèmes Multi-Agents pour la Gestion de Production
Réalisée par :Samira RAHALI
Bibliothèque standard du C++
JDBC ou comment manipuler une base de données en Java ?
Laboratoire d'Informatique de l’Université de Franche-Comté
Classes abstraites et Interfaces
Modèle, Méthode et Conception
FICHIERS : Définition : Algorithme général:
P. Van Roy, LINF1251 LINF1251: Le Langage Java Peter Van Roy Département dIngénierie Informatique, UCL
Programmation concurrente
Package IFT1025 Jian-Yun Nie.
An Introduction to distributed applications and ecommerce 1 1 Les services Web, XML et les places de marchés.
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Module 1 : Installation de Windows 2000 ou mise à niveau vers Windows 2000.
Séminaire Service Interoperability on Context Level in Ubiquitous Computing Environments Davide Bazzi IIUF Etude de larticle: Service Interoperability.
Java Authentication And Authorization Service API
Sensibilisation a la modelisation
J2EE vs .NET Réaliser par : SEIF ENNACER BADRA && CHETOUI RIM.
Réunion de collaboration du 9-10 Juillet 2008 J.L. Béney 1 Logiciel At  Client-Serveur Tcp/ip de la station autonome  Influence de l'architecture matérielle.
CORBA (Common Request Broker Architecture)
Patrons de conceptions de créations
Travaux Pratiques Représentation des connaissances
Présentation de CORBA et de IIOP
APPLETS. Applets : généralités Applet : application s'exécutant dans une page HTML Le ByteCode (fichiers.class) est téléchargé depuis un serveur. L'exécution.
Java Enterprise Edition, anciennement J2EE
Content Management System CMS. Pourquoi ? Obligation de ressaisir des contenus publiés à plusieurs endroits Pas d’outils de gestion de qualité de l’information.
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
1 A llier R elations et O bjets pour M odéliser Projet Sherpa INRIA Rhône-Alpes Visite Schneider 15/09/99.
12/04/ Le polymorphisme Cours 8 Cours 8.
Struts.
Master 1 SIGLIS Intégration des données dans l’entreprise Stéphane Tallard JDBC: Java Database Connectivity Master 1 SIGLIS1JDBC.
Cours MIAGE « Architectures Orientées Services »Henry Boccon-GibodCours MIAGE « Architectures Orientées Services »Henry Boccon-Gibod 1 Architectures Orientées.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Héritage Conception par Objet et programmation Java
Master 1 SIGLIS Systèmes d’Information pour l’entreprise – Java RMI Stéphane Tallard Mise en œuvre de l’exemple Bonjour RMI Master 1 SIGLIS1 Intégration.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 2 – Java Premiers pas Master 1 SIGLIS1 Java Lecteur - Chapitre 2 - Java Premiers Pas.
21/02/2003DEA DISIC 1 Grid Computing Programming the grid: Distributed Software Components, P2P and Grid Web Services for Scientific Applications Tarak.
(Networked Software Agent) une architecture multiagent
Diagrammes de comportement Présentation. Diagramme de séquence  Permet de modéliser les envois de messages entre objets chronologiquement.  Modélisation.
DWR Jean-Jacques LE COZ. Introduction Projet DWR Framework AJAX Projet Open Source commencé en 2004 Licence GPL (Apache Software License v2) Sponsorisé.
Transcription de la présentation:

Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste

Plan Présentation générale Les agents JADE La plateforme Concrètement Les principaux intérêts Implémentation dans les détails

Présentation générale Plateforme de développement et exécution Multi-Agents JAVA Licence LGPL V2 Architecture distribuée TILab S.p.A.(anciennement CSELT) Turin Italie Compatible avec le standard FIPA

FIPA (Foundation for Intelligent Physical Agent) Formé en 1996 afin de construire des standards pour les agents hétérogènes, en interaction et les SMA Design de spécifications afin de faciliter l’interopérabilité entre les différents SMA développés par différentes sociétés et organisations Relations fortes avec d’autres standard et organisations comme OMG (Object Management Group) www.fipa.org

Différentes plateformes FIPA Zeus British Telecom Java FIPA 97-98 FIPA – OS Emorphia (Nortel Networks) FIPA 2000 (?) …

Plan Présentation générale Les agents JADE La plateforme Concrètement Les principaux intérêts Implémentation dans les détails

Un agent selon JADE Conforme au standard FIPA 2002 (Jade 3) Cycle de vie Possède un ou plusieurs Comportements (Behaviours) qui définissent ses actions Communique et interagit avec les autres agents grâce à des Messages (ACLMessage) Rend des Services

Cycle de vie Un agent possède toujours un état (AP_ACTIVE, AP_DELETED...) Cycle de vie géré par cet état Changement d ’état possible AP_TRANSIT AP_WAITING doMove() doWait() doSuspend() doDelete() AP_DELETED AP_INITIATED AP_ACTIVE doStart() doSuspend() AP_SUSPENDED

Un Comportement (Behaviour) Défini une action d’un agent Ordonnancement et exécution de tâches multiples Peut être de plusieurs types Behaviour SimpleBehaviour CompositeBehaviour ReceiverBehaviour SequentialBehaviour ParallelBehaviour FSMBehaviour CyclicBehaviour OneShotBehaviour WakerBehaviour SenderBehaviour

Un Message Communication entre agents Conforme au standard FIPA ACL Les messages ACL présentent les caractéristiques suivantes : Typage (INFORM, QUERY…) Transport possible d ’objets Sémantique pour les données (Ontologies)

Ontologies Représentation structurée de la connaissance. Concepts (Représentation abstraite d’objets) Prédicats (Condition binaire sur des concepts) Actions (Traitements proposés par des agents sur des concepts) Partager la connaissance en fixant le domaine du discours. Construction graphique avec Protégé lien vers Jade via plug-in (BeanGenerator)

Descendance (personne) : Ontologies exemple Famille Est Père de (personne, personne) Predicat Action Personne :Nom :Age :… Descendance (personne) : séquence de personnes Concept

Un Service Action enregistrée et dispensée par la plateforme Comportements d’un ou plusieurs agents répondant a une demande. Notion de pages jaunes Proche de la notion de « WebServices »

Plan Présentation générale Les Agents JADE La plateforme Concrètement Les principaux intérêts Implémentation dans les détails

Présentation de la plateforme Une plateforme de départ (avec ou sans GUI) 3 agents de base (Conforme FIPA) Agent Management System Directory Facilitator Agent Communication Channel Quelques outils API

Containers (Environnement d’exécution pour les agents) Host 1 JRE 1.2 Host 2 JRE 1.2 Host 3 JRE 1.2 Jade Distributed Platform Main container Container 2 Container 3 Container 1

Une plateforme Jade

Agent Management System (AMS) Gestion du cycle de vie des agents Maintient une liste de tous les agents qui résident sur la plate-forme (White pages) Contrôle l'accès ainsi que l'utilisation du canal de communication des agents (ACC)

Directory Facilitator Enregistre les descriptions des agents ainsi que les services qu'ils offrent Les agents peuvent enregistrer leurs services auprès d'un DF ou demander à DF de découvrir les services offerts par d'autres agents (Yellow Pages)

Agent Communication Channel Gère les communications entre les agents Intra plateformes, Intra containers : Java Events Intra plateformes, Inter containers : RMI Inter Plateformes : IIOP Corba Messages ACL (FIPA)

Outils Jade GUI DF Agent GUI Dummy Agent Sniffer Agent Introspector Agent

Jade GUI Contrôler les agents Démarrer les autres outils Créer Tuer Suspendre … Démarrer les autres outils

DF Agent GUI Inspecter les Yellow Pages (services enregistrés)

Dummy Agent Système de tests Envoyer et recevoir des messages ACL

Sniffer Agent Surveillance des échanges de messages dans une plateforme

Introspector Agent Surveiller état (cycle de vie) d’un agent Ainsi que les messages reçus ou émis par cet agent

API Java Surcharge de classes de base Communication transparente Compatibilité FIPA pour la communication avec des agents non Jade Compatibilité avec Jess et Protege

Plan Présentation générale Les agents JADE La plateforme Concrètement Les principaux intérêts Implémentation dans les détails

Exemple Un application de e-commerce de musique Création des ontologies Création des comportements Création et enregistrement des agents Exécution

Création des ontologies Item Price CreditCard e-shopping Music shop CD Track Single Owns Wine Red White Wine shop Cost Sell

Création des comportements Deux agents distincts (Vendeur et Acheteur) impliquent deux ensembles de comportements Deux types de comportements sont utilisés : Cyclic : Attente d’un message OneShot : Exécution d’une action 

Comportements du vendeur Action effectuée Nom Type Attente d’une requête de disponibilité HandleInform Cyclic Informe l’acheteur sur la disponibilité InformOwns OneShot Attente d’une requête de prix HandleQuery Envoi du prix InformCost Attente d’une demande de transaction HandleRequest Notification du résultat de la transaction InformDone

Comportements de l’acheteur Action effectuée Nom Type Trouver un vendeur InformSearch OneShot Attente d’une réponse HandleInform Cyclic Demander un prix QueryPrice Effectuer la vente RequestSale

Création et enregistrement des agents DF CyclicBehaviour OneShotBehaviour recherche réponse enregistrement Vendeur Acheteur HandleRequest HandleQuery HandleInform HandleInform InformSearch

Déroulement de la transaction CyclicBehaviour OneShotBehaviour ACLMessage Vendeur Acheteur INFORM HandleInform InformSearch HandleQuery HandleInform HandleRequest

Déroulement de la transaction CyclicBehaviour OneShotBehaviour ACLMessage Vendeur Acheteur HandleInform InformOwns INFORM HandleQuery HandleInform HandleRequest

Déroulement de la transaction CyclicBehaviour OneShotBehaviour ACLMessage Vendeur Acheteur HandleInform QUERY-REF HandleQuery QueryPrice HandleInform HandleRequest

Déroulement de la transaction CyclicBehaviour OneShotBehaviour ACLMessage Vendeur Acheteur HandleInform INFORM HandleQuery InformCost HandleInform HandleRequest

Déroulement de la transaction CyclicBehaviour OneShotBehaviour ACLMessage Vendeur Acheteur HandleInform REQUEST HandleQuery RequestSale HandleInform HandleRequest

Déroulement de la transaction CyclicBehaviour OneShotBehaviour ACLMessage Vendeur Acheteur HandleInform INFORM HandleQuery HandleInform HandleRequest InformDone

Déroulement de la transaction CyclicBehaviour OneShotBehaviour ACLMessage Vendeur Acheteur HandleInform HandleQuery HandleInform HandleRequest

Plan Présentation générale Les agents JADE La plateforme Concrètement Les principaux intérêts Implémentation dans les détails

Les principaux intérêts Compatible FIPA Communauté de plus en plus importante Exécution distribuée Exécution concurrente des agents Communication transparente par message (ACL) Notion de services LEAP Relativement facile a utiliser

Perspectives AgentCity MAIA ELIN Robotique Mobile Architecture de filtrage Robotique Mobile Communication entre robots LEAP

Plan Présentation générale Les agents JADE La plateforme Concrètement Les principaux intérêts Implémentation dans les détails

Développer un système à agents Jade

Installer Jade Installer Java (jdk 1.2 ou supérieure) Attention au « path » et au « classpath » Installer le package Jade Copier les classes Mettre a jour le « classpath » : \jade \jade\Lib \jade\Lib\iiop.jar jade\Lib\jade.jar \jade\Lib\jadeTools.jar Installer vos agents comme des classes java classiques Attention au « classpath »

Exécuter Jade Lancer Jade avec la ligne de commandes : java jade.Boot Lancer Jade et la GUI java jade.Boot –gui Lancer un agent au démarrage java jade.Boot –gui [nom de l’agent]:[classe de l’agent] Lancer un agent avec des paramètres java jade.Boot –gui [nom de l’agent]:[classe de l’agent]([Paramètres])

Créer un agent Etendre la classe jade.core.Agent public class monAgent extends Agent Traiter les paramètres de démarrage Object[].getArguments() Dans la méthode setup() (obligatoire) Enregistrer les langages de contenu Enregistrer les Ontologies Enregistrer les Services auprès du DF Démarrer les Comportements (behaviors)

Créer un behaviour Créer (étendre la classe « behaviour ») public class myBehaviour extends SimpleBehaviour Creer le constructeur avec la super classe public myBehaviour(Agent agent) { super(agent);} Il existe différents types de behaviour à étendre (simple, oneshot, cyclic, …) Créer la méthode « action » (obligatoire) qui correspond à l’exécution du behaviour public void action() {<code du behaviour>}

Ajouter et démarrer un behaviour Dans la méthode Setup() de l’agent Ajouter le behaviour addBehaviour(new myBehaviour(this)); Un behaviour ajouté est demarré automatiquement

Créer et enregistrer un service Creer une description du DF Agent DFAgentDescription dfd = new DFAgentDescription() dfd.setName(this.getAID()); Creer la description du service  ServiceDescription sd = new ServiceDescription(); sd.setType(<nom_type_service>); sd.setName(<nom_service>); Enregistrer le service auprès du DF Agent dfd.addServices(sd); try {DFService.register(this, dfd);} catch (FIPAException e) {<code d’erreur>}

Rechercher des agents proposant une service Creer une description du DF Agent DFAgentDescription dfd = new DFAgentDescription(); Retrouver les agents dans un tableau DFAgentDescription[] result = DFService.search(this, dfd); Parcourir le tableau pour retrouver les agents for (int i=0; i<result.length; i++) { Iterator iter = result[i].getAllServices(); On récupere toutes les descriptions de service while (iter.hasNext()) { ServiceDescription sd =(ServiceDescription)iter.next(); <traitement sur les service>}}

Envoyer un message simple Créer l’agent qui envoi ce message Créer une instance de la classe ACLMessage avec un template (Inform, Query,…) ACLMessage msg = new ACLMessage(ACLMessage.INFORM) Remplir l’ensemble des agents receveurs dans l’instance ACLMessage. msg.addReceiver(new AID(« nom_du_receveur, AID.ISLOCALNAME) Remplir le texte du contenu du message msg.setContent(« Salut ça va ? »); Envoyer le message au receveur avec send(ACLMessage m);

Recevoir un message simple Créer l’agent receveur Créer le comportement (behaviour)de réception de message. Déclarer le ou les Templates (Inform, Query,…) de message a recevoir private static final MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM); Dans la méthode action() Créer une instance du message et le recevoir ACLMessage msg = myAgent.receive(mt); La reception peut être bloquante, dans ce cas, utiliser blockingReceive(mt) Ajouter le behaviour a l’agent (dans setup() ) addBehaviour(new ReceiverBehaviour(this));

Créer une ontologie de description de message (1/3) Créer l’objet Java représentant le contenu du message. Créer l’ontologie de description représentant le message son nom et son vocabulaire (exemple avec la description d’un objet  « Personne ») public class PersonOntology extends Ontology { public static final String ONTOLOGY_NAME = "Person-ontology"; public static final String PERSON = "Person"; public static final String PERSON_NAME = "name"; public static final String PERSON_AGE = "age"; Le vocabulaire correspond aux champs de l’objet “personne”

Créer une ontologie de description de message (2/3) Une instance private static Ontology theInstance = new PersonOntology(); public static Ontology getInstance() { return theInstance;} Le constructeur fait office de “traducteur” private PersonOntology() { super(ONTOLOGY_NAME, BasicOntology.getInstance()); try { add(new PredicateSchema(PERSON), Person.class); PredicateSchema ps = (PredicateSchema) getSchema(PERSON); ps.add(PERSON_NAME,(PrimitiveSchema) getSchema(BasicOntology.STRING)); ps.add(PERSON_AGE,(PrimitiveSchema) getSchema(BasicOntology.INTEGER));} catch (OntologyException oe) { oe.printStackTrace(); } }

Créer une ontologie de description de message (3/3) import jade.content.onto.*; import jade.content.schema.*; public class PersonOntology extends Ontology { public static final String ONTOLOGY_NAME = "Person-ontology"; public static final String PERSON = "Person"; public static final String PERSON_NAME = "name"; public static final String PERSON_AGE = "age";   private static Ontology theInstance = new PersonOntology(); public static Ontology getInstance() { return theInstance;} private PersonOntology() { super(ONTOLOGY_NAME, BasicOntology.getInstance()); try { add(new PredicateSchema(PERSON), Person.class); PredicateSchema ps = (PredicateSchema) getSchema(PERSON); ps.add(PERSON_NAME,(PrimitiveSchema) getSchema(BasicOntology.STRING)); ps.add(PERSON_AGE,(PrimitiveSchema) getSchema(BasicOntology.INTEGER)); } catch (OntologyException oe) { oe.printStackTrace();

Envoyer un message avec une ontologie Créer l’ontologie de message Créer l’agent envoyeur Déclarer le content manager,le codec et l’ontologie private ContentManager manager = (ContentManager)getContentManager(); private Codec codec = new SLCodec(); private Ontology ontology = PersonOntology.getInstance(); Envoyer le message en ajoutant l’ontologie ACLMessage msg = new ACLMessage(ACLMessage.INFORM); msg.addReceiver(new AID(“<nom_receveur>",AID.ISLOCALNAME)); msg.setLanguage(codec.getName()); msg.setOntology(ontology.getName()); manager.fillContent(msg,<ontologie>); send(msg);

Recevoir un message avec une ontologie (1/2) Créer le comportement de reception public class ReceiverBehaviour extends CyclicBehaviour { Declarer CM, et le template du message private ContentManager manager = myAgent.getContentManager(); private final static MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM); Constructeur public ReceiverBehaviour(Agent agent) { super(agent);}  Action public void action() { ACLMessage msg = myAgent.receive(mt); if (msg != null) { try { ContentElement ce = manager.extractContent(msg); if (ce instanceof MyOntology) { MyOntology myOntologie = ( MyOntology ) ce;}

Recevoir un message avec une ontologie (2/2) Créer l’agent receveur public class ReceiverAgent extends Agent { Declarer les CM, codec et Ontology  private ContentManager manager = (ContentManager)getContentManager(); private Codec codec = new SLCodec(); private Ontology ontology = MyOntology.getInstance();   Ajouter le comportement protected void setup() { manager.registerLanguage(codec); manager.registerOntology(ontology); addBehaviour(new ReceiverBehaviour(this));}

Retour sur les Behaviours et les Protocoles

Behaviours Une super classe De nombreuses spécialisations Behaviour cf. graphe d ’héritage ci-après

Graphe d ’héritage Behaviour SimpleBehaviour CompositeBehaviour ReceiverBehaviour SequentialBehaviour ParallelBehaviour FSMBehaviour CyclicBehaviour OneShotBehaviour WakerBehaviour SenderBehaviour

Retour sur Behaviour Agent : void setup() void takeDown() ACLMessage receive([MessageTemplate mt]) ACLMessage blockingReceive([MessageTemplate mt[,long Timeout]]) void addBehaviour(Behaviour b)

Fonctionnement des Behaviours Constructeur : Behaviour([Agent a]) Méthodes de gestion du cycle de vie: void onStart() int onEnd() void action() boolean done()

Un peu plus loin Méthodes intéressantes : Attributs: void block([long millisecondes]) void reset() Behaviour root() Attributs: Agent myAgent CompositeBehaviour parent

Problème des CompositeBehaviour Pas d ’échange entre les différents Behaviours composant le CompositeBehaviour Solution : DataStore

DataStore DataStore = HashMap Dans Behaviour : Partageable par plusieurs Behaviours Dans Behaviour : setDataStore(DataStore ds) DataStore getDataStore()

Fonctionnement du DataStore Méthodes : Object get(Object Key) Object put(Object Key,Object Value) Object remove(Object Key) boolean containsKey(Object Key) boolean isEmpty() int size() etc...

Problème du DataStore Pas de typage méthode get retourne un Object nécessite un contrôle fort sur les données

FSMBehaviour Finite State Machine Behaviour Automate dont les nœuds sont des behaviours Enchaîner séquentiellement des Behaviours dans un ordre fixé ou non par des transitions

Fonctionnement Méthodes supplémentaires Gestion des états de l ’automate : registerFirstState(Behaviour b,String name) registerLastState(Behaviour b, String name) registerState(Behaviour b, String name) Gestion des transitions : registerDefaultTransition(String from,String to) registerTransition(String from, String to, int event)

Subtilités Partager les données entre les Behaviours fils Créer un DataStore dans le FSMBehaviour Le partager par tous les états Déterminer les valeurs des transitions ACLMessage performative = int

Protocoles ContractNet : Implémenté par deux FSMBehaviour : ContractNetInitiator ContractNetResponder

Exemple Initiator Responder1 Responder2 Responder3 cfp cfp cfp propose refuse accept-proposal reject-proposal inform

ContractNetInitiator RECEIVE_CFP PREPARE_PROPOSE_STATE SEND_PROPOSE_STATE WAIT_ACCEPTANCE_STATE PREPARE_RESULT_NOTIFICATION_STATE SEND_RESULT_NOTIFICATION_STATE HANDLE_OUT_OF_SEQUENCE_STATE HANDLE_REJECT_STATE RESET_STATE X PROPOSE ACCEPT_PROPOSAL REJECT_PROPOSAL  TIMEOUT_EXPIRED prepareResponse() prepareResultNotification() handleOutOfSequence() handleRejectProposal()

ContractNetResponder PREPARE_CFPS SEND_ALL RECEIVE_REPLY CHECK_ALL_REPLIES_RECEIVED HANDLE_REFUSE HANDLE_NOT_UNDERSTOOD HANDLE_INFORM HANDLE_FAILURE HANDLE_OUT_OF_SEQ HANDLE_PROPOSE HANDLE_ALL_RESPONSES HANDLE_ALL_RESULT_NOTIFICATIONS DUMMY_FINAL CHECK_REPLY X PROPOSE REFUSE NOT_UNDERSTOOD INFORM FAILURE ALL_RESPONSES_RECEIVED ALL_RESULT_NOTIFICATION_RECEIVED prepareCfps() handlePropose() handleRefuse() handleNotUnderstood() handleInform () handleFailure () handleOutOfSequence ()

A noter Notion de « Conversation » Slot protocol à fixer dans les messages Doit prendre en compte : Reply-By (Deadline/Timeout) Reply-with (???)

Bibliographie http://jade.cselt.it/ Tutoriel de Jiri Vokrinek. http://agents.felk.cvut.cz/teaching/ui2/JADEtutorial.doc