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

Développement Web en Java Discussion :

[Spring MVC] Comment faire un traitement asynchrone


Sujet :

Développement Web en Java

  1. #1
    Invité
    Invité(e)
    Par défaut [Spring MVC] Comment faire un traitement asynchrone
    Bonjour à tous,
    je vous explique mon problème:

    je dois recevoir un fichier d'un client sur le serveur hébergeant mon application.

    Le fichier est envoyé via un POST http, je dois (séquentiellement parlant):

    - 1. Renvoyer une réponse au client pour confirmer la bonne réception du fichier (le client se moque du traitement fait sur le fichier)
    - 2. ouverture fichier
    -3. traitement fichier (insertion/maj en bd via jpa/hibernate, donc obligation de passer via DispatcherServlet, j'utilise celle par défaut)
    - 4. suppression du fichier

    Pouvez vous me donner des pistes de réflexion pour répondre à ce problème?

    Merci par avance,

    Bonne journée

  2. #2
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Si tu dois le faire de manière asynchrone et dans cet ordre (envoi d'un message comme quoi tu as reçu le document PUIS traitement), il n'y a pas 36 possibilités : il faut utiliser un thread qui fera ton traitement.

    Il y a normalement des éléments dans SpringMVC pour faire ça, mais n'ayant jamais bien creusé la question moi même, je vais te diriger vers un petit article pour mettre ça en place

    https://spring.io/blog/2012/05/07/sp...-async-support

    Et la doc officielle :

    http://docs.spring.io/spring/docs/3....#mvc-ann-async

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour eulbobo,

    Je te remercie pour les liens transmis, c'est à partir de ceux là que je comptais implémenter ma solution, mais je n'arrive pas à comprendre le côté asynchrone du traitement via les "Callable" et "DeferredResult". La doc en elle même également.

    J'ai tenté une ébauche ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @RequestMapping(value="public/saveFile",method=RequestMethod.POST)
    	public CustomCallable save(@RequestParam("file") MultipartFile file) {
    		Logger.getLogger(getClass()).info("toto");
    		return new CustomCallable(file); 
    	}
    Et le code de CustomCallable

    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
    public class CustomCallable implements Callable<File>{
    		private File file= null;
    		public CustomCallable(File tmp){
    			super();
    			file= tmp;
    		}
    		@Override
    		public File call()  {
    			try {
    				onFileReception(file);//code metier
    			}
    			catch(Exception e){
    				e.printStackTrace();
    			}
    			return null;
    		}
     
    	};

    Lors d'un POST, le log de la methode save, passe bien, mais le code de CustomCallable est jamais appelé, je ne sais même pas où est fait le retour au client.

  4. #4
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Ouais, mais en fait, j'ai l'impression que ça ne répondra pas à ton besoin : toi tu as besoin de toute de suite renvoyer une réponse à ton client. Le async de SpringMVC permet juste de pouvoir calculer cette réponse à part au cas par cas sans bloquer de ressources.


    Du coup, à part faire un traitement classique qui fait ensuite appel à une couche de service qui se chargera de lancer soi-même un Thread, je ne vois pas.
    Si tu pars sur la solution du Thread maison, regarde du côté de la classe Executors et Callable (vu que tu as déjà ta classe Callable après tout)

    Ou sinon, regarde du côté exécutors Spring
    http://docs.spring.io/spring/docs/cu...cheduling.html

Discussions similaires

  1. [Débutant] comment faire un traitement en sequence
    Par hardman dans le forum Images
    Réponses: 4
    Dernier message: 23/08/2009, 11h49
  2. Réponses: 5
    Dernier message: 03/03/2009, 17h02
  3. Comment faire du traitement d'image avec C?
    Par The-msx dans le forum Débuter
    Réponses: 12
    Dernier message: 29/07/2008, 14h41
  4. Comment faire du traitement d'images avec C?
    Par The-msx dans le forum C
    Réponses: 5
    Dernier message: 07/07/2008, 10h05
  5. [Spring MVC] Comment crée une session dans Spring
    Par dominou73 dans le forum Spring Web
    Réponses: 3
    Dernier message: 29/08/2007, 14h32

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