+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    septembre 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : septembre 2010
    Messages : 52
    Points : 18
    Points
    18

    Par défaut [Nhibernate] problème de synchro sur des accès concurrents

    Bonjour

    Je rencontre un problème de synchronisation entre deux applis accédant à la même base de données du fait du cache de nhbernate.

    J'ai une appli A qui lit et affiche régulièrement les enregistrements d'une table .
    J'ai une seconde appli B qui modifie les enregistrements de cette même table.
    Je ne vois pas les données évoluer sur A alors dans la base les données sont bien modifiées.
    Les deux applications tournent sur des machines différentes, la base de données (oracle 10.2 en l’occurrence) est hébergée sur un serveur.

    Comment puis je forcer nhibernate à relire systématiquement les données dans la base ou éventuellement réduire le timeout du cache à quelques secondes.
    Si cela existe je souhaiterais régler sans ajout de code (ajout d'une option dans le fichier de configuration).

    merci de votre aide

  2. #2
    Membre Expert
    Inscrit en
    mars 2005
    Messages
    1 249
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 1 249
    Points : 1 884
    Points
    1 884

    Par défaut

    C'est un peu trop vague pour te répondre.

    Dans tous les cas, nhibernate fonctionne comme ADO.NET :
    Tu te connectes à la base
    Tu manipules la connection
    Tu fermes la connection

    Dans le laps de temps d'une session, il utilise un cache dit de niveau 1 qui est un cache de session.
    Le second de niveau 2 permet de mettre en cache des objets ou des requêtes disonibles pour tous les utilisateurs de la factory (toutes les sessions).

    Si tu as une application A qui lit les données à un instant t; une application B qui écrit les données à un instant t+1; A reste sur les données à t si tu es dans la même session. Si tu recharge les données dans A tu verras biens les modifications.

    C'est à toi de faire le nécessaire pour que B et A dispose d'une notification permettant à A de savoir que B met à jour et qu'il faut rafraichir les données.
    Mais là, ce n'est pas une problèmatique de nhibernate.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    août 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : août 2004
    Messages : 60
    Points : 87
    Points
    87

    Par défaut

    C'est normal comme ta donnée est déjà dans le cache de 2nd niveau, la machine A ne la rechargera pas depuis la bd tant que le cache n'est pas expiré.

    Ton cache de second niveau est associé à un provider de cache (par exemple syscache pour utiliser le cache d'ASP.NET), et ce dernier possède un moyen de régler l'expiration du cache (exemple web.config pour ASP.NET).

    Tu peux aussi configurer pour chaque entité si tu souhaites qu'elle soit cachée ou pas dans le cache de 2nd niveau et lui associer une région pour pouvoir gérer des durées d'expiration différentes suivant la nature des données.

    http://nhforge.org/doc/nh/en/index.h...formance-cache

    Une autre solution serait d'utiliser un cache distribué, dans ce cas, c'est lui qui gère tout seul la synchronisation des données entre A et B.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •