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

Services Web Java Discussion :

Comment implémenter des Web Services asynchrones?


Sujet :

Services Web Java

  1. #1
    Membre régulier Avatar de solawe
    Inscrit en
    Juillet 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2006
    Messages : 368
    Points : 97
    Points
    97
    Par défaut Comment implémenter des Web Services asynchrones?
    Bonjour,

    j'utilise JAX-WS pour le developpement de mes Web Services.Jusqu'à présent je les consomme d'une façon synchrone.

    Mais pour des besoins spécifiques,je veux consommer mes web services de façon asynchrone mais je sais pas comment.

    avez vous une idée?

    j'ai trouvé un article sur le net qui parle de ça dans le passage suivant :

    vous devrez probablement publier 2 opérations dans le document WSDL par Web Service asynchrone :

    Une première pour envoyer la requête et obtenir en retour un identifiant (le job id) ;
    Une deuxième pour interroger régulièrement le serveur (polling) avec cet identifiant.
    Prévoir aussi une opération (commune à tous les Web Services asynchrones) pour annuler un Web Service lancé ou un paramètre supplémentaire lors de l’appel, pour régler un timeout.
    Je voudrais avoir plus de clarification svp à propos de ce mécanisme.

    merci beaucoup d'avance

  2. #2
    oca
    oca est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 354
    Points : 421
    Points
    421
    Par défaut
    effectivement, dans la plus part des cas, un web service fait du soap over http.
    et comme http est basé sur une requête/réponse synchrone... on est embêté

    Je crois qu'il y a un début d'asynchrone depuis SOAP 1.2
    Sinon peut-être que BPEL pourrais être utile dans ce cas ?
    ou peut-être une solution qui mixerait du messaging (JMS) et du Web Service pour avoir le meilleur des deux mondes ?
    JMS et BPEL gèrent les correlations de message par exemple.
    A+

  3. #3
    Membre régulier Avatar de solawe
    Inscrit en
    Juillet 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2006
    Messages : 368
    Points : 97
    Points
    97
    Par défaut
    Bonjour,merci pour la réponse.

    j'ai trouvé que jax-ws permet des appels asynchrones mais j'arrive toujours pas à les implémenter,j'espere que quelqu'un a déja travaillé avec.

    merci bcp

  4. #4
    oca
    oca est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 354
    Points : 421
    Points
    421
    Par défaut
    Ah oui tiens... je connaissais pas...
    j'ai fais un essai rapido et voila ce que cela donne :

    Lorsque je crée mes classes client avec wsimport, je dois lui
    spécifier que je veux des classes qui puissent travailler en asynchrone.
    il faut donc lui passer l'option -b bindings.xml
    dans mon cas, cela donne qqch du genre :
    wsimport -s D:\eclipse\Test\TestJaxWSClientAsynch\src -b D:\eclipse\Test\TestJaxWSClientAsynch\src\asynch\bindings.xml http://localhost:9083/hello?wsdl
    bindings.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <bindings
        wsdlLocation="http://localhost:9083/hello?wsdl"
        xmlns="http://java.sun.com/xml/ns/jaxws">
    	<enableAsyncMapping>true</enableAsyncMapping>
    </bindings>
    ensuite, les classes générées donnent accès à une méthode
    sayHello et deux méthodes sayHelloAsync qui sont prévues pour une utilisation asynchrone, en polling ou en callback (event).

    le client peut ensuite utiliser soit le polling
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // polling 
    Response<SayHelloResponse> resp =  port.sayHelloAsync("Hi", "Oli");
    while(!resp.isDone()){
    	 System.out.println("waiting");
    } 
    SayHelloResponse sayRep = resp.get();
    System.out.println(sayRep.getReturn());
    soit en callback

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     port.sayHelloAsync("Hello","Oli",new MyAsyncHandler());
    MyAsyncHandler
    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
     
    public class MyAsyncHandler implements AsyncHandler<SayHelloResponse>{
     
    	@Override
    	public void handleResponse(Response<SayHelloResponse> res){
    		try {
    			SayHelloResponse resp = res.get();
    			System.out.println("Event -> "+resp.getReturn());
     
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		} catch (ExecutionException e) {
    			e.printStackTrace();
    		}
     
    	}
    }
    A+

  5. #5
    Membre régulier Avatar de solawe
    Inscrit en
    Juillet 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2006
    Messages : 368
    Points : 97
    Points
    97
    Par défaut
    merci beaucoup pour votre réponse et pour le temps que vous avez pris pour faire le test,c'est tres gentil ta part.

    J'étais entrain de faire la meme chose mais j'ai pas encore terminé,je te tiens au courant dès que j'obtiendrai un résultat.

    Je voudrais seulement te demander une explication d'une notion que j'arrive pas à assimiler:
    Voila : on dit
    The JAX-WS programming model offers two models for invoking operations asynchronously – polling and callback. Both methods allow the client to continue processing while waiting for a response.
    J'ai pas compris comment le client peut continuer ses opérations en attendant la réponse du web service? qu'est ce qu'il va faire par exemple dans ce temps?

    merci beaucoup

  6. #6
    Membre régulier Avatar de solawe
    Inscrit en
    Juillet 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2006
    Messages : 368
    Points : 97
    Points
    97
    Par défaut
    peux tu m'envoyer stp ta classe Hello de ton web service de test?

    merci

  7. #7
    oca
    oca est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 354
    Points : 421
    Points
    421
    Par défaut
    Citation Envoyé par solawe Voir le message
    J'ai pas compris comment le client peut continuer ses opérations en attendant la réponse du web service? qu'est ce qu'il va faire par exemple dans ce temps?
    C'est justement le but de l'asynchone, libérer le client pendant que le web service s'execute.

    le client peut alors continuer à faire d'autre choses (pour autant qu'il aie autre chose a faire) puis il sera "appelé" lorsque la réponse arrive (concètement la méthode du client passée en callback sera executée lorsque la réponse arrive)

    dans le cas du polling, le client a accès a une méthode isDone() pour savoir si la reponse est arrivée.

    voila mon code : la prtie serveur contient plein de chose qui ne servent a rien dans ce cas (pour mes tests d'authentification)

    le package oca du client est généré autoumatiquement par la commande wsimport.

    le package oca du server est générer par la commande wsgen

    A+
    Fichiers attachés Fichiers attachés

  8. #8
    Membre régulier Avatar de solawe
    Inscrit en
    Juillet 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2006
    Messages : 368
    Points : 97
    Points
    97
    Par défaut
    merci beaucoup pour ton retour et pour les codes sources des exemples,

    je suis toujours entrain d adapter mon client pour un appel asynchrone,je te tiens au courant de toute nouveauté.

    merci encore une fois

Discussions similaires

  1. Comment implémenter un Web Service asynchrones?
    Par sillimi18 dans le forum Services Web
    Réponses: 2
    Dernier message: 30/07/2013, 12h00
  2. Comment implémenter des Web Services asynchrones?
    Par sillimi18 dans le forum Services Web
    Réponses: 1
    Dernier message: 11/05/2013, 21h11
  3. [JAX-WS] Comment sécuriser des Web Services JAX-WS?
    Par solawe dans le forum Services Web
    Réponses: 6
    Dernier message: 23/05/2008, 10h07
  4. Réponses: 3
    Dernier message: 08/03/2007, 10h16
  5. Comment consommer un web service en java
    Par Vins83 dans le forum Services Web
    Réponses: 1
    Dernier message: 16/01/2006, 23h33

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