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 :

wait et notify


Sujet :

Java

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut wait et notify
    Bonjour,

    Je lance deux requête http et quand le traitement est finit dans la première, je voudrais que cela le notifie dans la seconde. Pour cela j'utilise wait et notify mais cela me provoque une exception pour le notify.

    Première requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //Traitement sur monObjet
    monObjet.notify();
    Seconde requête;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    System.out.println("REQUETE AJAX");
    while(monObjet.getInfo.equals("")){
    try {
    monObjet.wait();
    } catch (InterruptedException e) {
    	e.printStackTrace();
    }
    //Traitement
    Ce que je veut c'est tant qu'une info est pas rempli dans la première requête sur monObjet, cela met en attente la seconde. Et une fois rempli, cela le notifie à la seconde requête.

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Salut, es-tu vraiment sur que wait() et notify() sur "1 objet" répondent à ton besoin, surtout dans un environnement web où tu as potentiellement plusieurs utilisateurs qui vont lancer des requêtes et que tu n'auras de pas de contrôle sur l'ordre des requêtes reçues ? Si c'est toujours en rapport avec ton PDS de la Miage demande à ton enseignant si ce que tu t'appretes à mettre en place n'a pas un lien avec les "pools de threads" plutôt, ne tarde pas trop parce que tu es à 2 mois du passage devant le jury je pense.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Oui c'est ce que je veux faire car on nous a dit d'utiliser un client http java pour le traitement et d'utiliser une requête AJAX avec la jstl pour récupérer le résultat du traitement. C'est pour cela que je souhaite quand le traitement fait par la première requête est terminé, notifier le résultat à la requête lancer en ajax.

  4. #4
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Je ne pense pas que tu ai besoin d'avoir recours à wait() et notify() pour cela. Il suffit juste d'envoyer une requete Ajax avec JavaScript au niveau du front puis de retourner une réponse Json via le back.

    Edit: Je pense que tu devrais nous montrer un schéma de l'architecture que tu souhaites mettre en place.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Sauf que la requete ajax attend la fin du traitement de la requête lancée par le client http pour obtenir le résultat de monObjet

  6. #6
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Une requete Ajax n'est pas bloquante donc je ne vois pas trop ce qui te gène.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Justement, im ne ce passe rien dans ma requête ajax là.

    Partie du switch appelé par ma requête lancé par le client http java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Traitement sur monObjet
    synchronized(monObjet){
    	monObjet.notify();
    }
    break;
    Partie du switch appelé par ma requête lancé en ajax:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    System.out.println("REQUETE AJAX");
    synchronized(monObjet){
    while(monObjet == null){
    	try {
    		monObjet.wait();
    	} catch (InterruptedException e) {
    		e.printStackTrace();
    	}
    }
    }
    Un traitement
    Sauf que mon traitement dans le switch de la requête ajax n'a pas lieu. Il se passe rien alors que j'ai vérifier et la requête se lance bien puisque cela m'affiche bien REQUETE AJAX. Je pense que c'est le notify qui merde.

  8. #8
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Ton objet ne fera pas de notify si personne ne l'appelle. Je n'ai jamais vu quelqu'un utiliser wait et notify comme tu le fais pour ce genre de besoin. Je ne comprends pas la manière dont tu souhaite mettre en place ce tout ceci. Montre nous plus de code en indiquant les différents programmes executés ou un diagramme de séquence au moins.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Méthode service de ma servlet:
    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
    20
    21
    22
    23
    24
    25
     
    MonObjet monObjet = new MonObjet();
     
    switch(request.getParameter("url")){
    case "java" :
    	monObjet = traitement;
    	synchronized(monObjet){
    		monObjet.notify();
    	}
    	break;
    case "ajax" :
    	System.out.println("REQUETE AJAX");
     
    	synchronized(monObjet){
    		while(monObjet.getInfo() == null){
    			try {
    				monObjet.wait();
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    //TRaitement
    	break;
    }
    J'ai une première requête en AJAX qui est lancer et tant que monObjet est à null, on le met en attente.
    J'ai une seconde requête en java qui est lancer et qui affecte le résultat du traitement à monObjet et ensuite je le notifie pour que cela le reveil dans partie appeler en ajax.

  10. #10
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Ce n'est pas du tout comme ca qu'il faut s'y prendre. Tu ne peux pas gérer ton "monObjet" au sein d'une même portée requete avec ce pauvre switch. Je ne sais pas comment t'aider désolé...
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    On avait fait un switch car on nous a dit une seule servlet pour toute notre application.

  12. #12
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    En ce qui me concerne j'en avais 2 ( https://github.com/eau-de-la-seine/p...server/servlet ), une qui gère les requetes de la couche de présentation et l'autre celles des données. Le problème n'est pas là, tu essayes de mettre en place des choses qui ne peuvent pas fonctionner avec ton wait et notify et synchronized.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  13. #13
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    En gros t'est entrain de me dire que je suis grave dans la merde. Car je n'ai aucune solution en vue

  14. #14
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Tu ne peux pas dire que tu n'as aucune solution en vue, tu fais de l'informatique, pour 1 problème tu as N solutions. Le premier problème est que tu n'arrives pas à exprimer ton besoin de manière concis, on n'a aucune visibilité sur ton architecture, le deuxième est que tu te lance dans des solutions pas possible comme l'injection de dépendance ou autre en croisant les doigts pour que ca réponde à ton problème.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  15. #15
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je l'ai déjà exprimer besoin.
    Par exemple, l'utilisateur veut se connecter à l'application. Il saisit les informations et ensuite envoie une requête à la servlet qui va créer un message pour envoyer à une autre couche. Pendant ce temps-là, j'affiche une page d'attente.
    Dans ma page d'attente je lance une requête en AJAX qui va me permettre de récupérer ma JSP que je doit renvoyer à l'utilisateur ensuite. Mais cette jsp est obtenu qu'après traitement du message au retour. Pour cela, je lance un client http en JAVA qui va faire une requête à la servlet pour traiter le message et retourner une page que je devrais retourner à l'utilisateur. Ce que je veux c'est quand la requête du client http java à fait le traitement et est donc capable de me fournir une jsp, la transmettre à la requête en AJAX pour la retourner à l'utilisateur.
    Mais je me pose une autre question: comme c'est deux requête différente: la requête faite par le client http java va écrire dans des beans, la seconde requête en ajax, peut-elle accéder au contenu de ces beans.

  16. #16
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Dans ta première page, lors d'un envoi de message affiche juste un petit message d'attente et utilise juste une requête Ajax, attend en réponse un objet Json, une fois recu (si tu le recois), enlève le message d'attente et affiche le message du Json, t'embete pas à retourner une vue. Il me semble d'ailleurs que qu'un PDS projet aborde les couches n-tiers, ce n'est donc pas au métier de générer une vue.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  17. #17
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je n'est jamais que c'était le métier qui traiter la vue. Le métier envoie un message à la présentation qui va traiter ce message et nous dire ou rediriger l'utilisateur

  18. #18
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Une JSP représente une vue, donc si ton métier retourne une JSP c'est qu'il traite une vue. Regarde la solution de BalusC sur internet avec le traitement des requetes Ajax via une servlet, tu n'as pas de JSP coté métier. Tu peux facilement faire de la sérialisation Json avec les librairies Gson ou Jackson, tu fais de l'Ajax faut donc jouer le jeu, ce n'est pas le format XML avec Jaxb qui pourra t'aider sur ce type d'échange entre la présentation web et le métier Java. Enfin bref, je ne connais pas bien ton sujet, même si j'en ai eu un similaire, donc essaye de le respecter sans forcément te lancer dans des solutions insolubles comme wait/notify/synchonized coté servlet.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  19. #19
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Le métier ne retourne pas de vue. C'est à la suite du traitement dans la couche de présentation que cela me dit qu'elle vue afficher. Par exemple, pour la connexion: je test si le nom et le prénom de l'utilisateur son vide, c'est qu'il n'a pas été trouvé et donc je souhaite le rediriger vers la page de connexion sinon vers la page d'accueil

  20. #20
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Quoiqu'il en soit, je te confirme que si tu utilises une technologie d'auto-binding/génération de beans, bien sûr que deux requêtes différentes vont se retrouver avec des beans différents et seront incapables d'agir l'une sur celui de l'autre -_-°.

    Si par contre tu crées toi-même un objet avec new dans une requête, que tu le stockes dans un objet unique genre ta servlet, et que tu laisses une autre requête accéder à cet objet, alors là il n'y a eu qu'un seul new donc un seul objet, le même.
    Reste à en synchroniser l'accès. En principe wait et notify devraient marcher si c'est bien fait, mais bon c'est un mouton à cinq pattes ton bazar, et tu nous montres rien du tout.

    En principe pour ce genre de besoin on se contente de faire des requêtes AJAX en boucle jusqu'à ce que le traitement ait été fait. Si on n'aime pas ça, on se dirigera plutôt du côté des websockets.
    On faisait comme tu faisais avant l'avènement des requêtes asynchrones côté serveur, des server events et des websockets, et ça posait plein de problèmes de timeout, mais maintenant on fait plus comme ça...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème de wait and notify
    Par Drife dans le forum Général Java
    Réponses: 5
    Dernier message: 06/10/2011, 15h50
  2. Thread et utilisation de wait() et notify()
    Par K-you dans le forum Général Java
    Réponses: 6
    Dernier message: 13/04/2010, 11h19
  3. [Thread] wait and notify
    Par storm_2000 dans le forum Concurrence et multi-thread
    Réponses: 0
    Dernier message: 27/10/2009, 22h24
  4. Réponses: 2
    Dernier message: 03/05/2009, 12h18
  5. Wait() et notify()
    Par rhadamanthe315 dans le forum Langage
    Réponses: 1
    Dernier message: 02/11/2007, 09h01

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