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

Concurrence et multi-thread Java Discussion :

Appels WS , Thread - Concurence


Sujet :

Concurrence et multi-thread Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    novembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : novembre 2021
    Messages : 3
    Points : 6
    Points
    6
    Par défaut Appels WS , Thread - Concurence
    Bonjour
    dans une application Web, avec des End point WS, je rencontre un problème d'accès/modification en concurrence des données.
    data, pour faire simple:
    - Panier a des attributs (simple: string et number) et une liste d'objet Articles
    endPoint ws:
    - WS1 : /updatePanier : ce ws passe une liste des id de panier à modifier
    -coté service: on parcours la liste des ids
    - charger le panier ia son id
    - faire les modif demandées sur l'objet panier
    - parcourir la liste des articles et faire les modifis nécessaires article par article
    - renvoyer le résultat au client
    -WS2: movePanier: permet de déplacer l'ensemble des articles du panier 1 vers panier 2 (appel avec un flux xml, donc je px avoir liste des movePanier)
    -coté service: on parcourt la liste du flux en entrée.
    -pour chaque opération de movePanier,
    - je charge le panier origine, si panier destination n'existe pas je le crée
    - je duplique les articles et je les associe avec panier de destination
    - j'annule les articles du panier origine ==> modification article
    - je ferme le panier origine ==> modification de l'objet panier

    problème 1:
    mon problème des fois, je reçois plusieurs appels WS1 sur les mêmes paniers et à quelques nanosecondes:et comme les objets sont gérés par hibernate @version, souvent la deuxième modification tombe en erreurs.

    problème 2:
    je reçois des appels WS1 et WS2 au même temps et comme dans Problème 1 les deux appels se mélangent


    Solution a court terme:
    WS2: j'ai un seul client qui est autorisé à faire le movePaner, nous lui avons demandé de ne pas lancer plusieurs appels en même temps.
    WS1 et WS2 de travailler a des créneaux horaire différents.

    Solution envisagée
    gérer une file d'attente, quand WS1 prend un panier il le lock, et si le WS2 a besoin de modifier le même panier il doit attend.

    auriez vous une solution à mon problème ?

    je suis preneur de toutes idée & piste de réflexion (bonnes et mauvaises sachant qu'il n'y a pas de mauvaise idée dans notre domaine )

    cordialement

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    octobre 2005
    Messages
    2 697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2005
    Messages : 2 697
    Points : 4 706
    Points
    4 706
    Par défaut
    Solution envisagée
    gérer une file d'attente, quand WS1 prend un panier il le lock, et si le WS2 a besoin de modifier le même panier il doit attend.
    J'ai eu un problème très similaire sur un poste qui devait gérer une chaîne de production industrielle.
    Le poste recevait des informations dans un ordre aléatoire sur plusieurs ports COM et devait à chaque fois déclencher un processus.
    Les processus devaient impérativement se faire les uns à la suite des autres.

    J'ai programmé chaque processus comme étant un objet qui étend Runnable (avec le processus à effectuer dans la méthode run)
    Chaque fois qu'une tâche arrivait sur un des ports COM, le processus runnable était créé et placé dans un ArrayList<Runnable>
    Par ailleurs il y avait une tâche qui vérifiait en permanence s'il y avait un objet dans l'ArrayList à la position 0.
    Si oui, la tâche déclenchait le processus/runnable et, une fois terminé, le runnable était retiré de l'Arraylist.
    Si entre temps, un autre processus/runnable avait été ajouté à l'ArrayList alors il se retrouve à son tour en position 0 pour être déclenché.
    A aucun moment les processus ne pouvaient se retrouver en concurrence.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

Discussions similaires

  1. Pb affichage Edit Control appelé depuis thread
    Par Emyleet dans le forum MFC
    Réponses: 15
    Dernier message: 10/06/2008, 15h11
  2. Comment appeler les threads
    Par raphi93 dans le forum Débuter
    Réponses: 2
    Dernier message: 10/04/2008, 11h01
  3. Appel inter thread
    Par duaner dans le forum C#
    Réponses: 3
    Dernier message: 23/11/2007, 19h25
  4. Réponses: 15
    Dernier message: 07/07/2005, 12h05

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