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 :

Utilisation des timer


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 Utilisation des timer
    Bonjour,

    J'ai un site avec REST et je souhaite que toute les x second cela renvoie une valeur à mon front. Pour cela, j'utilise le timer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class MaTask extends TimerTask {
     
    	Integer i = 0;
     
    	@Override
    	public void run() {
    		i++;
    		System.out.println("I : "+i);
    	}
     
    	public Integer getI(){
    		return i;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		MaTask tache = new MaTask();
    		Timer timer;
    		timer = new Timer();
    		timer.schedule(tache, 1000, 5000);
     
    		System.out.println(tache.getI());
    		return new ResponseEntity<Integer>(tache.getI(), HttpStatus.OK);
    Quand j'appel cela avec mon front, cela lance bien le timer, mais cela retourne 0 à mon front et cela une seul fois.
    Je voudrais que toute les 5 secondes cela renvoie à mon front la valeur mise à jour

  2. #2
    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
    Hello,

    C'est pas comme ça que fonctionne REST.

    REST c'est un truc qui marche sur HTTP. Le principe est simple : quand le client fait une requête, il reçoit une réponse. S'il veut recevoir autre chose, il doit refaire une requête. Une requête par truc reçu. A la rigueur si tu as plusieurs trucs à recevoir en même temps, tu peux les donner en réponse à la même requête. Mais pas à des moments différents.

    Ça c'est le principe de base. En réalité HTTP est capable de conserver une réponse en état ouvert pour continuer à envoyer du contenu, genre envoyer du contenu toutes les x secondes. HTTP peut le faire et en principe REST aussi, sauf que ça change tout : les réponses n'ont rien à voir et donc le client REST n'est pas du tout programmé pareil, il faut tout changer. De plus JAX-RS n'est pas prévu pour ça et la seule manière de le gérer avec une ResponseEntity, c'est d'envoyer un objet qui décrit ce que tu veux faire, puis associer un @Provider à cet objet, et c'est le provider qui contient un timer pour envoyer du contenu toutes les x secondes.

    Du coup,

    - Normalement REST ça marche pas comme ça, et tu ferais mieux de dire à ton front de faire une requête toutes les x secondes pour recevoir du contenu toutes les x secondes. Si par hasard ton front est une page web, il ferait encore mieux d'utiliser des websockets au lieu d'un service REST : les websockets ça sert à ça.
    - Si vraiment tu veux une URI REST qui renvoie du contenu toutes les x secondes, il faut que ce soit un contenu en streaming. Ca ne peut se faire avec JAX-RS qu'en utilisant un @Provider qui transforme l'objet réponse en une réponse customisée. Tu dois d'abord apprendre comment faire une réponse customisée avec un @Provider en REST. Puis ensuite comment faire des réponses streamées avec ça. Puis une fois que tu as appris tout ça et que tu es à l'aise, tu pourras faire des réponses qui envoient toutes les x secondes avec un Timer. Pas avant.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  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
    J'ai regardé du côté de Spring Boot pour lancer une tâche toutes les 5 secondes.
    Par exemple, je veux faire un random pour trouver un nombre.
    Pour cela, j'ai une méthode main qui va lancer le timer. J'ai repris les 2 premiers bouts de code de ce site :
    http://jmdoudoux.developpez.com/cour...ication_taches

    Mais une fois la valeur mise à jour, je voudrais quand je le demande via une requête http REST, pouvoir la récupérer. Je vois pas comment faire pour la récupérer du côté de mon controller

  4. #4
    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
    Montre ton code à toi, on va pas deviner.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/08/2016, 09h49
  2. [Turbo Pascal] Unité Timer : Utilisation des fonctionnalités du timer du BIOS
    Par Eric Sigoillot dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 07/04/2014, 20h31
  3. Utilisation des Timer
    Par Patrice.H dans le forum C#
    Réponses: 3
    Dernier message: 06/05/2011, 09h18
  4. utilisation des timers
    Par iwio dans le forum Allegro
    Réponses: 1
    Dernier message: 25/06/2006, 23h55
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

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