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

Hibernate Java Discussion :

Gestion des sessions « inter-systèmes »


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Homme Profil pro
    baz
    Inscrit en
    Novembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : baz
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 43
    Points : 52
    Points
    52
    Par défaut Gestion des sessions « inter-systèmes »
    Bonjour à tous

    J'ai actuellement un problème à résoudre dont les solutions que j'ai pu trouver ne me conviennent pas parfaitement.

    Dans application sur laquelle je travaille actuellement, il y a 2 composants principaux:
    — Une partie interface, accessible par les différents utilisateurs
    — Une partie traitement, accessible uniquement par le système (une API interne en quelque sorte)

    La partie traitement est lancée dans un thread séparé, en attente des ordres en provenance de la partie utilisateur. D'un point de vue utilisateur, c'est une grande FIFO avec priorité.
    La partie utilisateur peut aussi bien être un site web qu'un client léger.

    Le soucis que j'ai actuellement est sur la transmission de la session (ouverte en espace utilisateur) à l'espace système.
    En gros, 90% de l'application pourrait se résumer à:
    — L'utilisateur remonte des données de la bdd
    — L'utilisateur effectue des modifications sur les données
    — L'utilisateur soumet une demande à la partie système
    — Le système agit SUR LES OBJETS UTILISATEURS après contrôle
    — L'utilisateur récupère le résultat et l'affiche

    Le soucis est sur la transmission de la session ouverte entre la partie utilisateur et la partie système.
    L'utilisateur n'ayant pas connaissance des modifications faites par le système, ce n'est pas lui qui peut les persister en base.
    Mais le système étant dans un autre thread, toute stratégie de « getCurrentSession » est vouée à l'échec, les objets persistants étant déjà raccrochés à la session utilisateur qui ne peut pas être récupérée côté système.

    J'ai trouvé 2 solutions à mon problème, mais aucune n'est correcte à mon goût:
    — À chaque retour du système, l'utilisateur n'ayant aucune idée de quelles données ont été modifiées doit faire un update en cascade sur tous ses objets remontés de la bdd afin de les persister
    — À chaque fois qu'un des composants doit modifier ou accéder (lazy…) aux données, il doit s'assurer de reconnecter l'objet à la session courante. Dès l'entrée dans le système, on lock tout à la session système, à la sortie on relock tout à la session utilisateur, à l'update/save/delete aussi, etc…

    Dans les 2 cas, l'abstraction de la bdd est très faible (le développeur passe plus de temps à gérer la session qu'à développer son code métier), peut mener à des problèmes de performance (updates en cascade inutiles) ou à des erreurs difficilement gérables (lazy loading en particulier).

    Est-ce que vous auriez des idées de comment gérer ce cas de manière propre, c'est-à-dire que l'utilisateur n'ait pas (trop) à se soucier de la gestion des modifications du système sans pour autant nécessiter de trimballer la session utilisateur au 4 coins du système?

    Merci d'avance pour vos idées !

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Je pense qu'il y a un problème dans l'architecture de ton application.
    Si le client n'a pas la "maîtrise" des données de la base de données, il ne devrait pas utiliser d'accès à celle-ci.
    Il serait préférable de passer par une couche de communication (à base de socket ou autre).
    Ta partie "serveur" s'occupe de traiter la demande de "lecture" du client et fournit en retour le graphe d'objets (DTO ou autre classe serializable).
    Pour la modification, le client envoie le graphe au serveur et c'est lui qui s'occupe de mettre à jour la DB.

  3. #3
    Membre du Club
    Homme Profil pro
    baz
    Inscrit en
    Novembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : baz
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 43
    Points : 52
    Points
    52
    Par défaut
    En fait si, il a la maîtrise.
    Théoriquement parlant, je pourrais exécuter tout le code du moteur dans la partie cliente comme un simple accès à la couche service.

    Le moteur est en fait uniquement là pour synchroniser et régulariser temporellement les demandes.
    En gros, si je connais les X clients connectés avec les dates précises de leurs demandes, je dois garantir l'ordre d'exécution en bdd, fonction uniquement de ces paramètres, chaque demande pouvant rendre illégale la demande d'un autre client.
    Sachant en plus que le moteur agit aussi comme un «client» en injectant des demandes régulièrement (tâches d'arrière plan).

    Et les clients ont besoin d'avoir accès aux données, ne serait-ce que pour les afficher. Les demandes au serveur ne sont que facultatives, en fonction de ce sur quoi agit l'utilisateur humain. Les données affichées doivent aussi tenir compte de si la demande potentiellement effectuée s'est bien passée ou non (potentiellement elle sera refusée par le serveur car incompatible avec une autre demande d'un autre client)

Discussions similaires

  1. Gestion des sessions avec applet
    Par Mister Nono dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 01/08/2006, 18h27
  2. [JSP] Gestion des sessions
    Par ze veritable farf dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 28/06/2006, 10h44
  3. [Struts][JSP]gestion des session en JSP
    Par zola dans le forum Struts 1
    Réponses: 6
    Dernier message: 27/04/2006, 16h23
  4. gestion des sessions
    Par jeff_! dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 22h09
  5. [tomcat] gestion des sessions
    Par sebos63 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 12/10/2004, 14h25

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