[JAVA EE] Sessions simultanées
TempsMort0
Messages postés
43
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Me revoilà avec mon application composé d'outils et de consommables,
aujourd'hui je suis confronté à un problème différent :
J'ai deux sessions classiques : user et admin
Mon application réalise de la lecture/écriture sur un fichier Excel comme pseudo-base de données.
Le problème est que si 2 sessions sont ouvertes en même temps sur 2 machines, la première à faire l'écriture du fichier Excel aura effectuer son écriture, le 2ème utilisateur aura des valeurs faussées.
Solutions envisagées :
- Récupérer le nom des sessions actives s'il y en a et empêcher une deuxième connexion.
- Accorder les droits en lecture et non en écriture de fichier Excel pour un second utilisateur.
Le problème pour moi c'est la technique précise, je peux apporter des précisions sur mon code au besoin.
Merci d'avance.
Corentin
Me revoilà avec mon application composé d'outils et de consommables,
aujourd'hui je suis confronté à un problème différent :
J'ai deux sessions classiques : user et admin
Mon application réalise de la lecture/écriture sur un fichier Excel comme pseudo-base de données.
Le problème est que si 2 sessions sont ouvertes en même temps sur 2 machines, la première à faire l'écriture du fichier Excel aura effectuer son écriture, le 2ème utilisateur aura des valeurs faussées.
Solutions envisagées :
- Récupérer le nom des sessions actives s'il y en a et empêcher une deuxième connexion.
- Accorder les droits en lecture et non en écriture de fichier Excel pour un second utilisateur.
Le problème pour moi c'est la technique précise, je peux apporter des précisions sur mon code au besoin.
Merci d'avance.
Corentin
A voir également:
- [JAVA EE] Sessions simultanées
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
1 réponse
Bonjour,
Il y a plusieurs manières de faire, certaines sont meilleures, d'autres sont plus simples, mais il n'y a jamais de solutions parfaites, le plus important c'est que ça fonctionne.
Je te propose de créer une classe de service, dont tu exposeras un singleton partagé par toutes tes sessions.
À chaque fois que tu veux faire une lecture ou une écriture (peu importe quel user c'est) tu passes par ce singleton et c'est cette classe de service qui se chargera de lire ou modifier le fichier.
Maintenant il faut jouer avec la synchronisation. Deux possibilités :
Bonnes pratiques :
Il y a plusieurs manières de faire, certaines sont meilleures, d'autres sont plus simples, mais il n'y a jamais de solutions parfaites, le plus important c'est que ça fonctionne.
Je te propose de créer une classe de service, dont tu exposeras un singleton partagé par toutes tes sessions.
À chaque fois que tu veux faire une lecture ou une écriture (peu importe quel user c'est) tu passes par ce singleton et c'est cette classe de service qui se chargera de lire ou modifier le fichier.
Maintenant il faut jouer avec la synchronisation. Deux possibilités :
- La plus simple : dès qu'un thread est dans une méthode (lecture ou écriture) tu fais patienter tous les autres thread qui souhaiteraient rentrer dans une autre méthode (lecture ou écriture) du service.
- La plus souple : dès qu'un thread est dans une méthode de lecture, tu fais patienter uniquement les threads qui souhaitent faire de l'écriture. Et si ton thread est dans une méthode d'écriture tu fais patienter tous les autres thread qui souhaiteraient rentrer dans une autre méthode.
Bonnes pratiques :
- Un thread en écriture devrait être prioritaire par rapport à un thread en lecture.
- Chaque modification devrait être la plus petite possible (lire/modifier une case plutôt que tout le fichier)
- Le service qui gère les données n'est pas obligé d'écrire dans le fichier à chaque fois qu'il y a une modification, il peut manipuler un cache et persister le fichier après plusieurs modifications (éventuellement ajouter une méthode flush qui forcerait l'écriture).