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

Java Discussion :

Attendre la réponse du server


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Par défaut Attendre la réponse du server
    Bonjour,

    J'ai cherché sur le forum des posts à ce sujet mais n'ayant rien trouvé, je me lance...
    Voilà, j'ai une méthode du genre :
    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
    17
    18
    19
     
    private String methodDo() {
    	final StringBuffer sb = new StringBuffer();
    	final MyObject client = new MyObject ();
    	client.do(qqchose, new EventListener(){
    	public void onException(ForbiddenChargeException e) {
    		sb.append(e.getMessage());
     
    	}
    	public void onException(TransactionClearingException e) {
    		sb.append(e.getMessage());
     
    	}
     
    	public void onResult(PurchaseOrder order) {
    		sb.append("Success");		
    	});
    	return sb.toString();
    }
    La méthode "do" permet d'envoyer une requête à un server distant. La réponse est renvoyée par l'intermédiaire de EventListener().
    Mais cette méthode "methodDo" me renvoie une chaîne vide car elle se termine avant que l'EventListener() ne renvoie la réponse.
    Comment faire pour que la méthode ne se termine pas tant que je n'ai pas eu de retour de l'EventListener?

    Merci!

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Tu peux inverser le problème : "methodDo" ne renvoit plus rien mais prend une interface en paramètre. Dans le listener, tu vas appeler une méthode de l'interface.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void methodeDo( MonInterface interface )
    {
      public void onException(ForbiddenChargeException e)
      {
        interface.appendMessage( e.getMessage() );
      }
      ...
    }
    C'est dans la classe appelante qu'il faut faire quelques modifications. Elle doit implémenter l'interface MonInterface, et définir la méthode "appendMessage".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Tu peux inverser le problème : "methodDo" ne renvoit plus rien mais prend une interface en paramètre. Dans le listener, tu vas appeler une méthode de l'interface.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void methodeDo( MonInterface interface )
    {
      public void onException(ForbiddenChargeException e)
      {
        interface.appendMessage( e.getMessage() );
      }
      ...
    }
    C'est dans la classe appelante qu'il faut faire quelques modifications. Elle doit implémenter l'interface MonInterface, et définir la méthode "appendMessage".
    Le seul hic c'est que ma methode "methodDo" est déployée en tant que webservice via Axis. Et que le retour de cette méthode est en réalité la réponse SOAP de mon service. En gros, la méthode est bien exécutée mais la réponse n'attend pas la fin d'exécution...

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ah ok. Alors change le fonctionnement interne de ta méthode en supprimant le listener. Ton "client.do" lance un nouveau Thread, c'est ce qu'il faut éviter.
    Une autre solution, très moche, consiste à faire un "wait" dans ta méthode tant que tu n'as pas reçu de réponse. Ta méthode devient bloquante. Pense à ne pas attendre à l'infini
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Par défaut
    Merci pour l'info.
    Je vais réfléchir aux deux solutions :
    - soit mettre un sleep(x milisecondes)
    - soit quand je reçois la réponse du server au niveau de mon listener, je renvoie cette réponse vers l'appli qui utilise mon web service....
    ou un mix des deux...


    Merki!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Attendre la réponse d'une boite de dialogue ??
    Par Ben_Le_Cool dans le forum Delphi
    Réponses: 16
    Dernier message: 15/12/2006, 20h41
  2. [JDialog] attendre une réponse
    Par RR instinct dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 28/11/2006, 08h34
  3. Attendre une réponse du périphérique USB
    Par Arnaud Malabeux dans le forum C++
    Réponses: 6
    Dernier message: 17/06/2006, 22h45

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