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 :

Configurer le résultat des requêtes en cache de second niveau


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Par défaut Configurer le résultat des requêtes en cache de second niveau
    Bonjour,

    Je souhaite utiliser EhCache pour conserver des résultats de plusieurs requêtes dans un cache (au delà de la transaction/session Hibernate) afin d'optimiser un traitement.

    Dans mon fichier hibernate.cfg.xml, j'ai bien déclaré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <property name="hibernate.cache.use_second_level_cache">true</property>
    <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
    <property name="hibernate.cache.use_query_cache">true</property>
    <property name="hibernate.generate_statistics">true</property>
     
    <!-- Force Hibernate à stocker les données dans le cache de 
    second niveau dans un format plus adapté à la 
    visualisation par un humain. -->
    <!-- 
    <property name="hibernate.cache.use_structured_entries">true</property>
    -->

    Voici le contenu de mon fichier ehcache.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <ehcache>
        <diskStore path="java.io.tmpdir"/>
     
        <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            />
     
        <cache name="fr.xxx.yyy.zzz.Voiture"
            maxElementsInMemory="300"
            eternal="true"
            timeToIdleSeconds="3600"
            timeToLiveSeconds="3600"
            overflowToDisk="false"
         />
    </ehcache>
    Voici la classe associée à l'entité Voiture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class Voiture implements Serializable {
         private Long id;
         private String marque;
         private String modele;
         private Date dateMiseCirculation;
     
         // + getters / setters
     
    }
    Au niveau du mapping de cette entité, j'ai bien précisé : « <cache usage="read-write"/> ».

    Si je fais appel aux méthodes load(), get(), iterate() (et pas list() d'après ce que j'ai pu lire) de l'objet SessionFactory, mon cache de second niveau va fonctionner pour me renvoyer instantanément le résultat sans effectuer la requête.

    Maintenant, si j'écris la requête HQL suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Query q = getSession().createQuery("FROM Voiture v WHERE v.marque = ? AND v.modele = ?");
    q.setParameter(0, "PEUGEOT");
    q.setParameter(1, "206");
    q.setCacheable(true);
    q.setRegionCacheable("RecherchePeugeot206");
    return (Voiture)q.uniqueResult();
    Est-ce que lors du premier appel à la méthode HQL ci-dessus, le cache de second niveau sera alimenté ?
    Et donc, est-ce que lors du deuxième appel à cette méthode, Hibernate ira lire l'objet dans le cache de second niveau pour me renvoyer le résultat sans effectuer la requête ?

    Si oui, quels paramètres le cache de second niveau va-t-il prendre dans le fichier ehcache.xml définit précédemment ?
    La durée maximale de présence de mon objet Voiture dans le cache sera-t-elle de 120 ou 3600 secondes ???

    Imaginons une autre requête HQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Query q = getSession().createQuery("SELECT MAX(v.dateMiseCirculation) FROM Voiture v");
    q.setCacheable(true);
    q.setRegionCacheable("RechercheVoiturePlusRecente");
    return (Date)q.uniqueResult();
    Même questions que précédemment :
    - Quels paramètres le cache de second niveau va-t-il prendre dans le fichier ehcache.xml définit précédemment ?
    - La durée maximale de présence de mon objet Date (contenant la date de mise en circulation du véhicule le plus récent) dans le cache sera-t-elle de 120 ou 3600 secondes ???

    Plus, généralement, existe-t-il un moyen de définir le maxElementsInMemory, le eternal, le timeToIdleSeconds, le timeToLiveSeconds, etc pour chaque cache de requêtes ???

    Merci d'éclairer ma lanterne sur le cache de second niveau même si j'ai essayé de me documenter au maximum.

    Merci pour votre aide,
    F.

  2. #2
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Par défaut
    t'es dans le mauvais forum.

Discussions similaires

  1. Afficher les résultats des requêtes SQL
    Par Glauben dans le forum NetBeans
    Réponses: 4
    Dernier message: 04/07/2011, 19h35
  2. Réponses: 2
    Dernier message: 30/03/2011, 15h45
  3. Réponses: 3
    Dernier message: 30/06/2009, 19h16
  4. affichage du résultat des requêtes
    Par Bogs dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/04/2008, 10h55
  5. Opérations sur les résultats des requêtes
    Par Merit dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/03/2008, 19h24

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