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
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
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
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 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
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
Récupérer événements en C++ sur une fenêtre Java via JNI [ par PleoX ]
Bonjour,Je suis en train de créer une application multi-touch. Pour cela, je travaille sur la béta de Windows 7 avec VC6 pour le C++ et eclipse pour J
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|