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 :

Ecriture concurrente dans un fichier


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut Ecriture concurrente dans un fichier
    Bonjour à tous,

    Je suis en train de créer un programme qui traitera des fichiers xml sur un serveur local. Mon problème étant que plusieurs personnes feront tourner ce programme, parfois en même temps, et dans ce cas là y aura un problème d'écriture concurrente.
    J'ai fait quelques recherches avec mon ami et j'ai trouvé d'autres personnes qui avait ce genre de problèmes mais jamais exactement pour le même cas que moi (concurrence entre threads ou avec un servlet).

    Je pense avoir trouvé la solution grace au package NIO mais j'aimerais avoir une confirmation pour ne pas me lancer à corps perdu dans un travail qui ne servira à rien au final :s

    D'avance merci !

  2. #2
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Pourquoi ne pas utiliser une base de données plutot qu'un fichier ? C'est à ca que ca sert, ca evitera de réinventer la roue et ca sera plus efficace

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Oui je sais, c'est ce que je me suis dit quand on m'a présenter le travail à réaliser, mais visiblement ça n'est pas possible pour des raisons logistiques -__-

    Mais effectivement je m'étais plutôt tourné vers de la persistence parce que y'a pas mieux pour ce genre de truc. Du coup je me retrouve à faire du XML relationnel au feeling (j'apprends sur le tas)

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Honnêtement les problèmes de cohérence et synchronisation sont extrêmement complexes à gérer. Autant à la conception qu'au débogage. Je ne me risquerai pas à essayer de faire mon propre système dessus.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Ha..

    Ca veut dire qu'il n'existe pas de méthode pour gérer un tel système ? Ce serait embêtant...

  6. #6
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Le seul systeme fiable consiste à passer par un programme intermediaire qui gere les transactions (en gros, ce que fait la BDD). Avec des fichiers, tu peux toujours bidouiller en créant par exemple un fichier lock pour indiquer aux autres programmes que tu es en train d'ecrire mais ca vaut ce que ca vaut...
    Apres, ca depend du risque qui est accepté. Soit on veut un truc fiable qui marche et c'est BDD. Soit une bidouille qui marchera 99% du temps mais qui peut poser probleme 1%.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    He bien à priori les autres programmes qui y accederont ce sera celui que j'ai developpé. Il sera utilisé par plusieurs personnes sur le réseau pour consulter et, occasionnellement, modifier les fichiers xml.

    Donc normalement je devrais pouvoir me débrouiller non ? Ces fichiers ne devront (enfin, ne sont pas prévus pour le moment) pas être modifiés par d'autres programmes

  8. #8
    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
    Disons qu'en théorie rien ne t'empêche de faire ton propre algo de mutex, mais que c'est super galère et qu'aucun ne t'est fourni, faut le faire soi-même.
    Pas pour des fichiers sur le réseau en Java, en tout cas.

    D'où l'idée de dire merde à ces soi-disant "raisons logistiques" qui existent pas, et d'utiliser la solution à ce problème la plus simple connue depuis plus de trente ans : une base de données.
    Ou alors d'accepter un risque, et prévoir des outils de réparation dans ce cas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    L'idée de m**** n'est pas besoin mais je suis obligé de faire avec

    J'essaierai de trouver un moyen efficace de contourner le problème où alors je me prendrais vraiment la tête à faire un algo de mutex...

    Je songeais à utiliser ce que j'ai pu trouver là dessus sur Internet.

    Et faire un truc assez simple, je lock tout le fichier le temps de l'écriture et si un utilisateur essaie d'écrire en même temps, un pop-up lui indique d'attendre quelques instants avant de réécrire. Faut juste que je vois si ça lock aussi en écriture ou pas, car dans ce cas je dois trouver autre chose

  10. #10
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    ça n'est pas possible pour des raisons logistiques
    Je n'arrive pas à imaginer quelles "raisons logistiques" pourraient empêcher d'utiliser une BDD... Je serais à ta place, je discuterais. Dans tous les cas de figure, ce que tu t'apprête apparemment à faire, c'est ça [une BDD], de toutes façons, sauf que tu vas devoir réécrire des tas de choses, et qu'il y aura plein de bugs.
    Sans danger si utilisé conformément au mode d'emploi.

    (anciennement BenWillard, enfin moins anciennement que ... enfin bon c'est une longue histoire... Un genre de voyage dans le temps...)

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu viens de dire le mot magique "en réseau". Rien que ça, c'est foutu. Pour info, SQLLite, qui est à ma connaissance la seule base de donnée implémentant un locking fiable permettant à plusieurs processe d'ouvrir simultanément de le fichier de base (pour éviter d'avoir un "serveur" base de données), et qui utilise les systèmes de verrou des OS pour garantir l'exclusivité des écriture... Et incapable de fonctionner fiablement sur un montage réseau. Dès que t'as un montage réseau, il n'existe plus aucune technique fiale de locking des fichiers. Deux process peuvent créer, avec succès, le même fichier lock en même temps, sur deux OS séparés par exemple.

    Les systèmes de locking liés à l'OS sont locaux à la machine.

  12. #12
    Membre éprouvé

    Homme Profil pro
    Ingénieur logiciel embarqué
    Inscrit en
    Juillet 2002
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur logiciel embarqué
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2002
    Messages : 386
    Points : 1 164
    Points
    1 164
    Par défaut
    Je ne sais pas quelles sont tes contraintes logistiques. Quant je relis le problème de base, je passerait par un service RMI (ou corba) pour proposer le service de modification. En utilisant un mutex (simple) tu a ta synchronisation. Le tout sans BDD.

    Après si tu nous donne les contraintes on pourra répondre de manière plus précise.

  13. #13
    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
    Citation Envoyé par forthx Voir le message
    Je ne sais pas quelles sont tes contraintes logistiques. Quant je relis le problème de base, je passerait par un service RMI (ou corba) pour proposer le service de modification. En utilisant un mutex (simple) tu a ta synchronisation. Le tout sans BDD.
    -_-°... Euh... La différence avec une BDD me semble pas évidente. C'est juste moins pratique qu'une vraie BDD.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu es au courant, au passage, qu'il existe des bases de données pure java qui ne nécessitent pas d'installation? tu la fais tourner sur le serveur et tout le monde l'utilise via le réseau...

  15. #15
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    Ouais, ptet qu'un serveur SVN suffirait, en fait...
    Sans danger si utilisé conformément au mode d'emploi.

    (anciennement BenWillard, enfin moins anciennement que ... enfin bon c'est une longue histoire... Un genre de voyage dans le temps...)

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Woah, merci pour vos réponses.

    Le problème c'est que je suis en stage sur un gros site dont la gestion informatique est délocalisée. De plus, je ne suis pas dans le département, je developpe un outil pour l'un des employés. Il a un fichier Excel qui répondait à ses besoins jusque là mais maintenant il désire quelque chose de plus adapté. Les raisons qui me poussent à ne pas faire d'installation sur le réseau sont que ça prendrait visiblement beaucoup de temps pour qu'ils soit sûr que ce que je fais et sûr, d'autres part, et quasiment le plus important, parce qu'il est indiqué dans le cahier des charges que je ne dois pas mettre ce genre de truc en place.

    Autre chose à laquelle j'avais songé, c'est d'utiliser Hibernate, parce que je croyais qu'il permettait de réaliser ce que je veux, mais il semblerait que je me sois trompé et que ce ne soit que le schéma relationnel qui soit en XML. Corrigez moi si je me trompe

    (Je ne suis qu'étudiant d'IUT, il m'arrive de dire des conneries...)

  17. #17
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Donc si je résume.

    Tu dois créer une application pour 1 personne.
    Qui va tourner potentiellement sur plusieurs machine (ça ne me parait pas logique)
    Qui ne peux pas être un serveur parce que ce n'est pas autorisé par l'autorité centrale
    Mais qui a tout à fait le droit de se servir du réseau, d'y lire / écrire des fichiers (encore une fois ça me paraît incompatible).

    Note que si t'as que 4 utilisateurs dans le même bureau -> Dit leur de ne pas bosser en même temps? Sinon, ben il faudra admettre les risque de corruption puisqu'on ne t'autorise pas à mettre en place des verrous efficaces.

  18. #18
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Le probleme n'est pas xml, json, hibernate ou leurs copains. C'est l'acces potentiellement simultané à un fichier par différentes machines reseau. La seule maniere d'etre sur que ca fonctionne est d'utiliser un programme qui gere l'acces. Et, coup de bol, c'est ce que fait une BDD. Donc, il faut soit utiliser une BDD, soit accepter les problemes eventuels. Apres tout, en mettant en place un systeme de sauvegarde, tu peux t'en sortir. Le nombre d'utilisateurs n'etant pas tres élevé, ca peut suffire.
    C'est comme en cuisine. Si tu coupes une carotte avec une fourchette, faut pas s'attendre à ce qu'elle soit bien coupée

  19. #19
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    Après, si c'est juste pour modifier des fichiers XML de manière concurrente, un serveur SVN fait l'affaire... Du coup la réconciliation entre les eventuelles versions est gérée par les users.

    Mais en effet, on comprend mal pourquoi il y a une histoire de modifs concurrentes, s'il y a un seul utilisateur. Par ailleurs, s'il utilisait excel pour faire ça, en principe c'est un lock par fichier, je pense.
    Sans danger si utilisé conformément au mode d'emploi.

    (anciennement BenWillard, enfin moins anciennement que ... enfin bon c'est une longue histoire... Un genre de voyage dans le temps...)

  20. #20
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    En gros, mon tuteur de stage, qui est l'utilisateur principal, a créée un fichier excel qui contient des données sur différents départements du site. Ce fichier est consulté par d'autres personnes (des départements concernés), qui peuvent modifier certains champs du fichiers (pour les prévisions par exemple).

    Désolé pour le manque d'informations, vu que je suis en stage dans une société privée, je ne sais pas quelles sont les informations que je peux transmettre sans me faire taper sur les doigts


    EDIT : du coup je vais faire une application où mon tuteur sera administrateur, et les autres utilisateurs seront des utilisateurs qui auront certains droits. L'idée de base étant de faire tout ça avec des fichiers xml

Discussions similaires

  1. Ecriture multiple dans un fichier Excel
    Par oregos dans le forum MATLAB
    Réponses: 6
    Dernier message: 14/03/2007, 14h50
  2. ecriture lecture dans un fichier
    Par maz dans le forum C
    Réponses: 3
    Dernier message: 19/10/2006, 11h21
  3. [C#]Ecriture/Suppression dans un fichier
    Par torNAdE dans le forum Windows Forms
    Réponses: 8
    Dernier message: 11/05/2006, 09h11
  4. Ecriture simultanée dans un fichier
    Par doudou34 dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 30/09/2005, 14h26
  5. écritures concurrentes dans un fichier
    Par djmalo dans le forum C
    Réponses: 9
    Dernier message: 06/03/2005, 01h45

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