je suis en train de créer une appli qui utilise un fichier de données XML.
Lors d'un action particulière de l'utilisateur, le fichier est mis à jour.
Le problème arrive lorsque plusieurs utilisateurs ouvre l'appli en même temps car il n'y a qu'un seul fichier de données (commun à tous).
Si par exemple l'utilisateur A ouvre l'appli, l'utilisateur B aussi, et qu'ils mettent à jour le fichier commun à quelques seconde d'intervalle, le second ecrasera la modification éventuelle du premier.
(le problème ne se pose que lorsque plusieurs utilisateurs ont démmarré l'appli au même moment, car si B ouvre l'appli après la mise à jour, elle tient compte des données mises à jour).
Comment faire pour ne pas écraser les données du premier ?
(je peux ajouter des infos dans le fichier pour m'aider si je le souhaite comme l'heure de dernière modif ou autre...)
remarquez, j'y pense à l'instant, il me suffirait de relire le fichier juste avant de mettre à jour, mais ça risque d'êrte un peu long...
Régis.
Hors ligne
Est ce que tu peux modifier le type d'état du fichier? (archive, lecture seule., ou chmod).
Si oui, c'est simple, lorsqu'un utilisateur arrive, tu changes l'état du fichier...L'utilisateur B arrive, regarde l'état du fichier, si pas le bon état il attend...
Ou alors, tu utilises les sémaphores
Hors ligne
séémaphores ou verrous t'as le choix.
Hors ligne
heu...sémaphore ?
Connais pas.
Verrous : cela pose un problème, je ne veux pas qules utilisateurs "attendent leur tour" pour acceder aux données.
Sinon pourquoi ne pas ajouter l'heure de dernière modif dans mon fichier, et mon appli compare l'heure de dernière modif avec l'heure à laquelle il a mit en mémoire le fichier à l'ouverture.
exemple:
A ouvre l'appli et lis les données à 14h00 B ouvre l'appli et lis les données à 14h01 A modifie les données à 14H02 B veut modifier les données à 14h03==> le systeme détecte une modif faite à 14h02 alor squ'il avait "14h00" en mémoire. ==>Le système relis l'ensemble des données et modifie ensuite.
Dernière modification par papy (21-01-2005 16:01:16)
Hors ligne
Dans mon exemple j'utilise les minutes, mais on peut le faire avec les secondes
What do you think about it ?
Dernière modification par papy (21-01-2005 16:01:52)
Hors ligne
Qd klk1 ouvre le fichier, tu ajoutes une * en haut du fichier
un utilisateur B arrive, voit *, et donc ne peut la modifier
Qd l'utilisateur A a fini, il enlève l'*...
voit pas plus simple...
Hors ligne
Le problème c'ets que je ne veux pas que l'utilisateur ne puisse pas modifier.
Je souhaite que tous les utilisateurs puissent le modifier à tous moment, mais qu'en cas de modif faite juste avant, le système n'écrase pas la modif précédente.
Hors ligne
ce n'est pas possible, tu es obligé d'interdir l'accès au moment ou un utilisateur ouvre un fichier et le modifie...
A moins d'écrire dans une base de données...
Hors ligne
tangui a écrit:
ce n'est pas possible, tu es obligé d'interdir l'accès au moment ou un utilisateur ouvre un fichier et le modifie...
A moins d'écrire dans une base de données...
Ok.
Bon alors il faut que j'écrive dedans et je le bloque ?
ou bien je verouille et j'ecrit ?
Comment on vérouille un fichier ????
je sais pas faire!!!
A L AIDE!!
Hors ligne
Qd klk1 ouvre le fichier, tu ajoutes une * en haut du fichier
un utilisateur B arrive, voit *, et donc ne peut la modifier
Qd l'utilisateur A a fini, il enlève l'*...
voit pas plus simple...
Les gens arrivent par un script que tu as fait? ou bien ils ont accès via l'explorateur windows?
Hors ligne
En fait j'écrit dans un buffer en java et j'écrase le fichier existant par une methode "miseAjour()".
(il écrit la totalité des données mises en forme).
Hors ligne
Je rejoint encore Yoda, putain on fait que de se rejoindre, faut s'arreter là dans nos rejoiement Yoda, sa peut plus durée.
En cours nous avons vu les lecteur, rédacteurs et même un TP sur le chemin de fer ou il fallait faire se croiser 2 trains, et ben c'est le même principe.
Heu sémaphore me rappel plus comment sa marche, je sais seulement que nous l'avons fait en C.
C'est le principe des comptes bancaires, que nous avons aussi vu en cours et TP.
Sinon si tu veut du code, j'en ai pas sous la main, par contre je passe chez toi ce soir papy, te faire plein de bisoux
Hors ligne
Si l'heure au moment de l'enregistrement des données est exactement ( a la seconde près) la même que celle du fichier, j'interdis l'éciture, basta, non?!
Hors ligne
Allo ?
Hors ligne
ween !
Stop flood non d'une pipe
Hors ligne
Tiens au fait Bobo, j'ai trouvé l'erreur qui m'empechait de gerer la fermeture de la fenetre principale (encore une fois grace au bloc-note, car au moins l'oeil ne voit que du code).
J'implémentais une methode tout en bas de ma classe :
protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } }
Donc forcément...
Je l'ai virée et tout marche impéc' !
Dernière modification par papy (25-01-2005 19:29:49)
Hors ligne
Donc en gros ça donne ça pour la gestion fermeture sur la croix de la fenetre (c'ets juste le début de la classe car j'ai 360 lignes sans avoir implémenté les 3/4 qu'il me reste à faire!)
public IhmGemach(String title)//Constructeur { super(title);//On instancie une JFrame final IhmGemach traille=this;//permet l'instanciation de la boite de dialogue dans le windowListener this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//Gestion perso de la fermeture de la fentre principale // On gère les liens de la fenètre principale //============================================================================== this.addWindowListener(new WindowAdapter() { public void windowIconified(WindowEvent e) {} public void windowClosing(WindowEvent e){ tool.beep(); BoiteDialogue dila = new BoiteDialogue(traille, "Quitter", "Voulez-vous quitter Imaje Gemach Center ?"); if (dila.résultat == true) { traille.dispose(); System.exit(0); } else { System.out.println("Utilisateur à cliqué sur annuler"); } } }); ... ...
Dernière modification par papy (25-01-2005 19:33:06)
Hors ligne
si tu veux installer un notepad avec coloration:
notepad plus plus: http://ovh.dl.sourceforge.net/sourcefor … taller.exe
Hors ligne