Accueil > > > JADE PAR LA PRATIQUE
JADE PAR LA PRATIQUE
Information sur la source
Description
Présentation de l'application: C'est une petite application java qui a pour but de récupérer un objet d'après un agent. Enchainements: Création d'un agent Portail. L'agent Portail crée l'interface graphique et lance deux autres agents Acheteur et Vendeur. Un échange de messages se déroule entre les agents. L'agent Portail récupère l'objet et rafraichit l'interface graphique. Arrêt des agents.
Source
- package JADE_exemple_personnel;
-
- import jade.core.Agent;
- import jade.core.Runtime;
- import jade.core.ProfileImpl;
- import jade.core.behaviours.CyclicBehaviour;
- import jade.domain.DFService;
- import jade.domain.FIPAException;
- import jade.domain.FIPAAgentManagement.DFAgentDescription;
- import jade.lang.acl.ACLMessage;
- import jade.lang.acl.MessageTemplate;
- import jade.lang.acl.UnreadableException;
- import jade.wrapper.*;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import java.awt.BorderLayout;
- import java.awt.Dimension;
- import java.awt.Toolkit;
-
- import javax.swing.JTextArea;
- import javax.swing.JButton;
-
-
-
- import java.awt.FlowLayout;
- import javax.swing.JScrollPane;
- import javax.swing.JLabel;
-
- public class Portail extends Agent {
- private JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="135,20"
- private JPanel jContentPane = null;
- private JPanel jPanel = null;
- private JPanel jPanel1 = null;
- private JPanel jPanel2 = null;
- private JTextArea jTextArea=null;
- private JButton jButton = null;
- private JScrollPane jScrollPane=null;
- private JLabel jLabel=null;
-
- /** Cette méthode est appelé directement apèes la création de l'agent pour permettre
- * l'initialisation et l'affectation des différents comportements à cet agent
- * */
- protected void setup() {
- getJFrame().setVisible(true);
- jTextArea.append("Agent "+getLocalName()+" est lancé "+"\n");
- System.out.println("Agent "+getLocalName()+" est lancé ");
- try {
-
- // Création de desciprion de l'agent [Portail]
- DFAgentDescription dfd = new DFAgentDescription();
- dfd.setName(getAID());
-
- // Enregistrement de la description de l'agent dans DF (Directory Facilitator)
- DFService.register(this, dfd);
- jTextArea.append("Agent "+getLocalName()+" est enregistré dans DF (Directory Facilitator) "+"\n");
- System.out.println("Agent "+getLocalName()+" est enregistré dans DF (Directory Facilitator) ");
- } catch (FIPAException e) {
- e.printStackTrace();}
-
- addBehaviour(new CyclicBehaviour(this) {
-
- public void action() {
-
- // Attente de message (de l'agent Acheteur)
- ACLMessage msg = receive(MessageTemplate.MatchPerformative(ACLMessage.INFORM));
- if (msg != null) {
- try {
-
- // Création de l'objet [obj] à partir de du message reçu(de l'agent Acheteur)
- Object[] obj=(Object[]) msg.getContentObject();
- jTextArea.append("Message reçu <la liste des produits>"+"\n");
- jTextArea.append("Contenu de message {"+"\n");
- for(int i=0;i<obj.length;i++){
- jTextArea.append((String) obj[i]+"\n");
- }
- jTextArea.append("}"+"\n");
- jButton.setText("done");
- } catch (UnreadableException e) {
- e.printStackTrace();}
- jTextArea.append("Fin de traitement"+"\n");
-
- // Suppression de l'agent [Portail]
- doDelete();
- }
- else {
-
- //Pendant que le message n'est pas encore arrivé le comportement est bloqué
- block();
- }
- }
- });
-
- }
-
- protected void takeDown() {
- try {
- // Suppression de l'agent [Portail] depuis le DF
- DFService.deregister(this);
- jTextArea.append("Agent "+getLocalName()+" est terminé et supprimé depuis DF (Directory Facilitator) "+"\n");
- System.out.println("Agent "+getLocalName()+" est terminé et supprimé depuis DF (Directory Facilitator) ");
- } catch (FIPAException e) {
- e.printStackTrace();}
- }
-
- public JFrame getJFrame() {
- if (jFrame == null) {
- jFrame = new JFrame();
- jFrame.setSize(new java.awt.Dimension(500,350));
- Dimension tailleEcran =Toolkit.getDefaultToolkit().getScreenSize();
- int largeurEcran = tailleEcran.width;
- int hauteurEcran = tailleEcran.height;
- jFrame.setLocation((largeurEcran-500)/2,(hauteurEcran-350)/2);
- jFrame.setTitle("Exemple de manipulation des agents Jade.");
- jFrame.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
- jFrame.setContentPane(getJContentPane());
- }
- return jFrame;
- }
-
- private JPanel getJContentPane() {
- if (jContentPane == null) {
- jContentPane = new JPanel();
- jContentPane.setLayout(new BorderLayout());
- jContentPane.add(getJPanel2(), java.awt.BorderLayout.NORTH);
- jContentPane.add(getJPanel1(), java.awt.BorderLayout.CENTER);
- jContentPane.add(getJPanel(), java.awt.BorderLayout.SOUTH);
- }
- return jContentPane;
- }
-
- private JPanel getJPanel() {
- if (jPanel == null) {
- FlowLayout flowLayout = new FlowLayout();
- flowLayout.setAlignment(java.awt.FlowLayout.CENTER);
- jPanel = new JPanel();
- jPanel.setLayout(flowLayout);
- jPanel.add(getJButton(), null);
- }
- return jPanel;
- }
-
- private JPanel getJPanel1() {
- if (jPanel1 == null) {
- jPanel1 = new JPanel();
- jPanel1.setLayout(new BorderLayout());
- jPanel1.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
- }
- return jPanel1;
- }
-
- private JTextArea getJTextArea() {
- if (jTextArea == null) {
- jTextArea = new JTextArea();
- }
- return jTextArea;
- }
-
- private JButton getJButton() {
- if (jButton == null) {
- jButton = new JButton();
- jButton.setText("Go");
-
- /** L'objectif de ce button et de créer les deux agents Vendeur et Acheteur
- * et pour cela on doit premièrement récupérer le conteneur en cours (Container) de Jade
- * puis créer deux agents Vendeur et Acheteur pour lancer le processu d'échange de message
- * et cette partie représente la solution la plus robuste pour l'exploitation des agents
- * ansi que leurs service dans des classes java (Application, Applets, Servelets,etc...)
- */
- jButton.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent e) {
- try {
-
- // Récupération du conteneur (Main Container) en cours d'execution de Jade
- Runtime rt = Runtime.instance();
-
- // Création du profil par défault
- ProfileImpl p = new ProfileImpl(false);
- AgentContainer container =rt.createAgentContainer(p);
-
- // Agent controleur pour permettre la création des agents
- AgentController Agent=null;
-
- /* Création de l'agent Vendeur
- cette commande est équivalente à la suivante:
- java jade.Boot Vendeur:JADE_exemple_personnel.Vendeur
- */
- Agent = container.createNewAgent("Vendeur", "JADE_exemple_personnel.Vendeur", null);
-
- // Démarrage de l'agent Vendeur
- Agent.start();
- jTextArea.append("Agent Vendeur est lancé "+"\n");
-
- /* Création de l'agent Acheteur
- cette commande est équivalente à la suivante:
- java jade.Boot Acheteur:JADE_exemple_personnel.Acheteur
- */
- Agent = container.createNewAgent("Acheteur", "JADE_exemple_personnel.Acheteur", null);
-
- // Démarrage de l'agent Acheteur
- Agent.start();
- jTextArea.append("Agent Acheteur est lancé "+"\n");
- } catch (Exception any) {
- any.printStackTrace();}
- }
- });
- }
- return jButton;
- }
-
- private JScrollPane getJScrollPane() {
- if (jScrollPane == null) {
- jScrollPane = new JScrollPane();
- jScrollPane.setViewportView(getJTextArea());
- }
- return jScrollPane;
- }
-
- private JPanel getJPanel2() {
- if (jPanel2 == null) {
- jLabel = new JLabel();
- jLabel.setText("Exemple des agents Jade");
- jLabel.setFont(new java.awt.Font("Perpetua", java.awt.Font.BOLD, 18));
- jPanel2 = new JPanel();
- jPanel2.setBackground(java.awt.SystemColor.info);
- jPanel2.add(jLabel, null);
- }
- return jPanel2;
- }
-
- public static void main(String[] args) {
- try {
- // Récupération du conteneur (Main Container) en cours d'execution de Jade
- Runtime rt = Runtime.instance();
-
- // Création du profil par défault
- ProfileImpl p = new ProfileImpl(false);
- AgentContainer container =rt.createAgentContainer(p); // get a container controller for creating new agents
-
- // Agent controleur pour permettre la création des agents
- AgentController Agent=null;
-
- /* Création de l'agent Portail
- cette commande est équivalente à la suivante:
- java jade.Boot Portail:JADE_exemple_personnel.Portail
- */
- Agent = container.createNewAgent("Portail", "JADE_exemple_personnel.Portail", null);
-
- // Démarrage de l'agent Portail
- Agent.start();
- } catch (Exception any) {
- any.printStackTrace();}
- }
- }
package JADE_exemple_personnel;
import jade.core.Agent;
import jade.core.Runtime;
import jade.core.ProfileImpl;
import jade.core.behaviours.CyclicBehaviour;
import jade.domain.DFService;
import jade.domain.FIPAException;
import jade.domain.FIPAAgentManagement.DFAgentDescription;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
import jade.lang.acl.UnreadableException;
import jade.wrapper.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JTextArea;
import javax.swing.JButton;
import java.awt.FlowLayout;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
public class Portail extends Agent {
private JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="135,20"
private JPanel jContentPane = null;
private JPanel jPanel = null;
private JPanel jPanel1 = null;
private JPanel jPanel2 = null;
private JTextArea jTextArea=null;
private JButton jButton = null;
private JScrollPane jScrollPane=null;
private JLabel jLabel=null;
/** Cette méthode est appelé directement apèes la création de l'agent pour permettre
* l'initialisation et l'affectation des différents comportements à cet agent
* */
protected void setup() {
getJFrame().setVisible(true);
jTextArea.append("Agent "+getLocalName()+" est lancé "+"\n");
System.out.println("Agent "+getLocalName()+" est lancé ");
try {
// Création de desciprion de l'agent [Portail]
DFAgentDescription dfd = new DFAgentDescription();
dfd.setName(getAID());
// Enregistrement de la description de l'agent dans DF (Directory Facilitator)
DFService.register(this, dfd);
jTextArea.append("Agent "+getLocalName()+" est enregistré dans DF (Directory Facilitator) "+"\n");
System.out.println("Agent "+getLocalName()+" est enregistré dans DF (Directory Facilitator) ");
} catch (FIPAException e) {
e.printStackTrace();}
addBehaviour(new CyclicBehaviour(this) {
public void action() {
// Attente de message (de l'agent Acheteur)
ACLMessage msg = receive(MessageTemplate.MatchPerformative(ACLMessage.INFORM));
if (msg != null) {
try {
// Création de l'objet [obj] à partir de du message reçu(de l'agent Acheteur)
Object[] obj=(Object[]) msg.getContentObject();
jTextArea.append("Message reçu <la liste des produits>"+"\n");
jTextArea.append("Contenu de message {"+"\n");
for(int i=0;i<obj.length;i++){
jTextArea.append((String) obj[i]+"\n");
}
jTextArea.append("}"+"\n");
jButton.setText("done");
} catch (UnreadableException e) {
e.printStackTrace();}
jTextArea.append("Fin de traitement"+"\n");
// Suppression de l'agent [Portail]
doDelete();
}
else {
//Pendant que le message n'est pas encore arrivé le comportement est bloqué
block();
}
}
});
}
protected void takeDown() {
try {
// Suppression de l'agent [Portail] depuis le DF
DFService.deregister(this);
jTextArea.append("Agent "+getLocalName()+" est terminé et supprimé depuis DF (Directory Facilitator) "+"\n");
System.out.println("Agent "+getLocalName()+" est terminé et supprimé depuis DF (Directory Facilitator) ");
} catch (FIPAException e) {
e.printStackTrace();}
}
public JFrame getJFrame() {
if (jFrame == null) {
jFrame = new JFrame();
jFrame.setSize(new java.awt.Dimension(500,350));
Dimension tailleEcran =Toolkit.getDefaultToolkit().getScreenSize();
int largeurEcran = tailleEcran.width;
int hauteurEcran = tailleEcran.height;
jFrame.setLocation((largeurEcran-500)/2,(hauteurEcran-350)/2);
jFrame.setTitle("Exemple de manipulation des agents Jade.");
jFrame.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
jFrame.setContentPane(getJContentPane());
}
return jFrame;
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJPanel2(), java.awt.BorderLayout.NORTH);
jContentPane.add(getJPanel1(), java.awt.BorderLayout.CENTER);
jContentPane.add(getJPanel(), java.awt.BorderLayout.SOUTH);
}
return jContentPane;
}
private JPanel getJPanel() {
if (jPanel == null) {
FlowLayout flowLayout = new FlowLayout();
flowLayout.setAlignment(java.awt.FlowLayout.CENTER);
jPanel = new JPanel();
jPanel.setLayout(flowLayout);
jPanel.add(getJButton(), null);
}
return jPanel;
}
private JPanel getJPanel1() {
if (jPanel1 == null) {
jPanel1 = new JPanel();
jPanel1.setLayout(new BorderLayout());
jPanel1.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
}
return jPanel1;
}
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
}
return jTextArea;
}
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("Go");
/** L'objectif de ce button et de créer les deux agents Vendeur et Acheteur
* et pour cela on doit premièrement récupérer le conteneur en cours (Container) de Jade
* puis créer deux agents Vendeur et Acheteur pour lancer le processu d'échange de message
* et cette partie représente la solution la plus robuste pour l'exploitation des agents
* ansi que leurs service dans des classes java (Application, Applets, Servelets,etc...)
*/
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
try {
// Récupération du conteneur (Main Container) en cours d'execution de Jade
Runtime rt = Runtime.instance();
// Création du profil par défault
ProfileImpl p = new ProfileImpl(false);
AgentContainer container =rt.createAgentContainer(p);
// Agent controleur pour permettre la création des agents
AgentController Agent=null;
/* Création de l'agent Vendeur
cette commande est équivalente à la suivante:
java jade.Boot Vendeur:JADE_exemple_personnel.Vendeur
*/
Agent = container.createNewAgent("Vendeur", "JADE_exemple_personnel.Vendeur", null);
// Démarrage de l'agent Vendeur
Agent.start();
jTextArea.append("Agent Vendeur est lancé "+"\n");
/* Création de l'agent Acheteur
cette commande est équivalente à la suivante:
java jade.Boot Acheteur:JADE_exemple_personnel.Acheteur
*/
Agent = container.createNewAgent("Acheteur", "JADE_exemple_personnel.Acheteur", null);
// Démarrage de l'agent Acheteur
Agent.start();
jTextArea.append("Agent Acheteur est lancé "+"\n");
} catch (Exception any) {
any.printStackTrace();}
}
});
}
return jButton;
}
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setViewportView(getJTextArea());
}
return jScrollPane;
}
private JPanel getJPanel2() {
if (jPanel2 == null) {
jLabel = new JLabel();
jLabel.setText("Exemple des agents Jade");
jLabel.setFont(new java.awt.Font("Perpetua", java.awt.Font.BOLD, 18));
jPanel2 = new JPanel();
jPanel2.setBackground(java.awt.SystemColor.info);
jPanel2.add(jLabel, null);
}
return jPanel2;
}
public static void main(String[] args) {
try {
// Récupération du conteneur (Main Container) en cours d'execution de Jade
Runtime rt = Runtime.instance();
// Création du profil par défault
ProfileImpl p = new ProfileImpl(false);
AgentContainer container =rt.createAgentContainer(p); // get a container controller for creating new agents
// Agent controleur pour permettre la création des agents
AgentController Agent=null;
/* Création de l'agent Portail
cette commande est équivalente à la suivante:
java jade.Boot Portail:JADE_exemple_personnel.Portail
*/
Agent = container.createNewAgent("Portail", "JADE_exemple_personnel.Portail", null);
// Démarrage de l'agent Portail
Agent.start();
} catch (Exception any) {
any.printStackTrace();}
}
}
Conclusion
Un petit exemple qui manipule les agents Jade... il est très pratique les classes java sont bien commentées, n'oublier pas de voir les diapositives du fichier .ppt... Bon courage. Moh30
Historique
- 06 mai 2009 21:35:21 :
- une petite modification sur la description.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
programmation agent en java a l'aide de jade [ par sabir1master ]
salut , hello, s.v.p je veux avoir un programme concernant l'identification d'agent par java et aussi l'utilisation de son identifiant pour appeler ou
les agent inttiligent sur laplatform jade et java server page [ par ghezella ]
salut; je suis entrain de developper une application sur la platform jade (des agent intiligents) et je dois intigrer ses agent dans une appletes avec
agent jade ! [ par zininf ]
Bonjour, mon problème est le suivant: je n'ai pas compris la source de cette erreur lors d'une deuxième exécution d'un petit programme qui crée un age
Objet proxy? Est ce bien ce que je dois utiliser? [ par vendrce ]
Bonjour, Je n'irai pas jusqu'à dire que je suis débutant en Java car j'ai déjà créé plusieurs servlet, jsp et autres petites choses, mais là, je bloq
Récupérer la liste des processus système sous Linuc en Java [ par titphil ]
Bonjour, dans le cadre d'un stage en entreprise, je dois lister les processus qui tournent sous Linux. Est-il possible de la faire en Java ou n'obtien
Récupérer la string d'un code java dans la jsp [ par kyzeur ]
Bonjour, Je souhaite dans ma jsp, faire un traitement en java dans le but de récupérer des infos du contexte dans le but de reconstruire une url pour
les agents sous jade [ par ghezella ]
bonjour; je n'arrive pa a faire executer deux agent sous eclipse et avec la platform jade; un des agents envoi un msg a l'autre agent qui doit repndr
Récupérer des données d'une BD en java [ par m3allem58 ]
Bonjour, J'ai des données stockées dans une base de données Mysql et je cherche à implémenter une classe java pour récupérer les données de la base et
Récupérer toutes les classes de sa version java [ par Chatbour ]
Salut à tous et à toutes quelqu'un aurait-il une idée sur le comment récupérer, en code java, toutes les classes de sa version de java ? pour les affi
Jlist+Requete [ par soyonsami ]
Bonjour à tous, c'est mon 1er post :) En java, je dois (si possible à l'aide d'une Jlist) récupérer des éléments d'une base de données ORACLE afin de
|
Derniers Blogs
[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010!LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010! par MPOWARE
Toutes les vidéos de ce lancement sont en ligne!
Partie I - Intro
http://www.youtube.com/watch?v=LkQzTQ8T6CA
Partie II - Démo 1
http://www.youtube.com/watch?v=drAhYQ7lqvo
Partie III - Démo 2
http://www.youtube.com/watch?v=c8KM_1Gqybc...
Cliquez pour lire la suite de l'article par MPOWARE [WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE[WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE par FREMYCOMPANY
Je pense qu'ils ont besoin d'une piqure de rappel chez Microsoft : c'est bien gentil d'avoir une interface jolie, mais si c'est pour avoir un truc qui ne convainct pas dedans, c'est peine perdue.
---->
Système ouvert ----> Fermé ?
P...
Cliquez pour lire la suite de l'article par FREMYCOMPANY
Forum
ABSURDE.ABSURDE. par diospyrus
Cliquez pour lire la suite par diospyrus
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|