-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: cache de second niveau
PostPosted: Wed Apr 23, 2008 3:35 am 
Newbie

Joined: Wed Apr 09, 2008 11:59 am
Posts: 2
Bonjour,

Je cherche partout la solution à mon problème, j'ai trouvé beaucoup de réponses, mais rien qui ne le résout.

Je souhaite mettre en cache des objets résultats de requête grâce à EhCache. Jusque là rien de plus simple, sauf que j'ai l'impression que ça ne marche pas. Voici le code, un test tout simple:

dans le fichier hibernate.cfg.xml:
Code:
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
        <property name="hibernate.cache.provider_configuration_file_resource_path">hibernate/ehcache.refgp.xml</property>
      
      <property name="hibernate.cache.use_second_level_cache">true</property>
      <property name="hibernate.cache.use_query_cache">false</property>
            <class-cache class="caam.sits.gp.refgp.dao.instrument.Instrument" usage="read-write"/>


dans le fichier ehcache.refgp.xml
Code:
<cache name="caam.sits.gp.refgp.dao.instrument.Instrument"
           maxElementsInMemory="1000"
           maxElementsOnDisk="2000"
           eternal="true"
           overflowToDisk="true"
           timeToIdleSeconds="3600"
           timeToLiveSeconds="3600"
           memoryStoreEvictionPolicy="LRU"
            />


Le test:
Code:
private void testCache() {
    SessionFactory refGpSessionFactory = HibernateSessionFactory.getRefGpSessionFactory();
    long start = System.currentTimeMillis();
    Transaction tx = refGpSessionFactory.getCurrentSession().beginTransaction();
    tx.begin();
    InstrumentDAO dao = InstrumentDAO.getInstance();
    for (int i = 1; i < 100; i++) {
      dao.findById(new Long(i));
    }
    tx.commit();
    Statistics stats = refGpSessionFactory.getStatistics();
    System.out.println(">> put count 1: " + stats.getQueryCachePutCount());
    System.out.println(">> hit count 1: " + stats.getQueryCacheHitCount());
    System.out.println(">> miss count 1: " + stats.getQueryCacheMissCount());
    System.out.println(">> put count 2: " + stats.getSecondLevelCachePutCount());
    System.out.println(">> hit count 2: " + stats.getSecondLevelCacheHitCount());
    System.out.println(">> miss count 2: " + stats.getSecondLevelCacheMissCount());
    System.out.println("Elapsed Time:" + Tracer.hhmmssmmToNow(start));
    refGpSessionFactory.getCurrentSession().close();
  }


J'exécute le test deux fois de suite, et voici le résultat:

>> put count 1: 0
>> hit count 1: 0
>> miss count 1: 0
>> put count 2: 99
>> hit count 2: 0
>> miss count 2: 0
Elapsed Time:6sec 688ms

-----

>> put count 1: 0
>> hit count 1: 0
>> miss count 1: 0
>> put count 2: 99
>> hit count 2: 0
>> miss count 2: 0
Elapsed Time:5sec 453ms

Le temps d'exécution a tendance à être plus court au deuxième appel, mais ce n'est pas trop ce que je cherche à voir. J'aurais voulu voir les 99 puts, mais aussi les hits après le deuxième passage.

Quelqu'un peut-il m'éclairer ? Est-ce que j'utilise correctement les stats ?

Merci d'avance


Top
 Profile  
 
 Post subject:
PostPosted: Wed Apr 23, 2008 2:15 pm 
Beginner
Beginner

Joined: Thu Jan 31, 2008 6:35 am
Posts: 27
Question bete, la methode testCache() tu la lances deux fois... mais comment ?
Depuis un main qui a 2 appels à celle-ci ?

Si tu lance deux fois via JUnit, ca utilise deux exécutions de JVM différentes.. donc pas de cache de second niveau....

Un conseil, pour mesurer le temps fait le avant et apres la boucle for.
Le temps de création de la transaction est assez variable ce qui explique tes deux mesures.

Samuel


Top
 Profile  
 
 Post subject:
PostPosted: Tue Sep 16, 2008 8:41 am 
Newbie

Joined: Tue Sep 02, 2008 12:19 pm
Posts: 4
Salut,
Je ne sais pas trop pour les hits et les stats (j'ai moi même des problèmes avec les stats mais cela semble venir des stats et pas du comportement réel) en effet mais pour vérifier le contenu de ton cache tu peux utiliser
Code:
Map cacheEntries = HibernateUtil.getSessionFactory().getStatistics()
           .getSecondLevelCacheStatistics("le nom de l'entité cachée")
           .getEntries();
System.out.println("cached entries : " + cacheEntries);
qui te donnera alors les entrées cachées et pourra (ou pas) te rassurer sur le fonctionnement de ton cache.
A+
Lionel.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.