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