IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation par agent Java Discussion :

[JADE] Interaction Agent->Objet (classe POJO)


Sujet :

Programmation par agent Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [JADE] Interaction Agent->Objet (classe POJO)
    Bonjour,

    Débutant en JADE, j'ai réussi dans un premier temps à faire communiquer des agents entre eux et aussi d'envoyer des données d'un objet simple à un agent en utilisant la méthode putO2AObject() de la classe AgentController.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AgentController myAgentController = myContainer.getAgent("Test");
    Person p1 = new Person("Person1", 0);
    myAgentController.putO2AObject(p1, false);
    Ma question concerne l'opération inverse, c'est à dire comment je puisse envoyer des données d'un agent vers un object (qui n'est pas un agent) ?. Autrement-dit, je veux que mon agent me retourne un résultat à la fin de son traitement ?.

    Je suis vraiment bloqué et j'ai besoin de votre aide !.

    Merci à vous.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 6
    Points
    6
    Par défaut meme op mais dans le sens inverse
    Il te suffit simplement de faire la même operation mais en sens inverse avec des interfaces, je m'explique:
    -Tu crée une interface e.g
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public interface FaireTraitement{
    <div style="margin-left:40px">public int faireQlqChose(String msg);</div>}
    et ton agent doit implémenter cette interface, activer le service O2A et enfin renvoyer l'implémentation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class MonAgent extends Agent implements FaireTraitement{
     
    public MonAgent(){
    <div style="margin-left:40px">
    setEnbaledO2ACommunication(true,10);
    registerO2AInterface(this,this);</div>}
     
    public int faireQlqChose (String msg){//envoyer un msg a un autre agent par example...
    return resultat;
    }
     
    }
    finalement pour le récupérer et l'utiliser c'est tout simple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AgentController agent=container.createNewAgent (nom,MonAgent.class.toString(),null);
    FaireTraitement sender=agent.getO2AInteface(FaireTraitement.class);
    int resultat = sender.faireQlqChose("envoie message");
    le seul hic ici est que la création de l'agent se fait en asynchrone, de ce fait tu risque parfois d’essayer de récupérer l’interface avant même que l'agent est été créer et donc la fonction te retournera null, solution possible, créer une mini class d'alerte comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class Latch{
    private boolean ready=false;
     
    synchronized public void waitOn(){
    try{
    while (!ready){
    wait();
    }
    }catch (Exception e){e.printStackTrace();}
    }
     
    synchronized public void ready(){
    ready=true;
    notifyAll();
    }
    }//fin de la class
    pour l'utiliser voila comment faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Latch latch=new Latch();
    AgentController agent=container.createNewAgent(nom,MonAgent.class.toString().new Object[]{latch});
    latch.waitOn();
    FaireTraitement traiter=agent.getO2AInterface(FaireTraitement.class);
    ainsi tu envoi le latch a ton agent, et lorsqu'il est prêt il t'informe pour que le processus principal puisse reprendre, comme sa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class MonAgent ... {
    ...
    public MonAgent(){
    Object[] argument = getArguments();
    setEnbaledO2ACommunication(true,10);
    registerO2AInterface(this,this);
    ((Latch)argument[0]).ready();
    }
    ....
    voila en gros..

Discussions similaires

  1. Utilisation objet Class
    Par burhud dans le forum Langage
    Réponses: 9
    Dernier message: 31/10/2006, 14h38
  2. Réponses: 3
    Dernier message: 19/10/2006, 20h56
  3. Obtenir un objet classe
    Par sheura dans le forum Langage
    Réponses: 5
    Dernier message: 29/09/2006, 14h59
  4. [POO] Objet classe PHP5
    Par theskel dans le forum Langage
    Réponses: 1
    Dernier message: 08/08/2006, 10h49
  5. Objets/Classes avec un SGBD
    Par tiboleo dans le forum Décisions SGBD
    Réponses: 13
    Dernier message: 09/11/2003, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo