Using Hibernate 4.3.11 and Ehcache 2.7.0
Why does the hits/Misses returned by Hibernates getStatistics() not matched values returned by CacheManager. I have enabled 2nd level caching for a single class.
So with this code
Statistics stats = HibernateUtil.getFactory().getStatistics();
writeToBothLogs("Report:" + currentReportId + ":DbConnect:" + stats.getConnectCount());
writeToBothLogs("Report:" + currentReportId + ":DbQueries:" + stats.getQueryExecutionCount());
writeToBothLogs("Report:" + currentReportId + ":2ndLevelPut:" + stats.getSecondLevelCachePutCount());
writeToBothLogs("Report:" + currentReportId + ":2ndLevelHit:" + stats.getSecondLevelCacheHitCount());
writeToBothLogs("Report:" + currentReportId + ":2ndLevelMiss:" + stats.getSecondLevelCacheMissCount());
String[] cacheNames = CacheManager.getInstance().getCacheNames();
for(String cacheName:cacheNames)
{
SecondLevelCacheStatistics secondLeveleStats = stats.getSecondLevelCacheStatistics(cacheName);
writeToBothLogs("Report:" + currentReportId + ":"+cacheName+":2ndLevelPut:" + secondLeveleStats.getPutCount());
writeToBothLogs("Report:" + currentReportId + ":"+cacheName+":2ndLevelHit:" + secondLeveleStats.getHitCount());
writeToBothLogs("Report:" + currentReportId + ":"+cacheName+":2ndLevelMiss:" + secondLeveleStats.getMissCount());
writeToBothLogs("Report:" + currentReportId + ":"+cacheName+":2ndLevelSizeInMemory:" + secondLeveleStats.getSizeInMemory());
Cache cache = CacheManager.getInstance().getCache(cacheName);
writeToBothLogs("CacheName:"+cacheName
+":Put:"+cache.getStatistics().cachePutCount()
+":Hit:"+cache.getStatistics().cacheHitCount()
+":Miss:"+cache.getStatistics().cacheMissCount()
+":Size:"+cache.getSize()
);
}
writeToBothLogs("Report:" + currentReportId + ":DeleteCount:" + stats.getEntityDeleteCount());
writeToBothLogs("Report:" + currentReportId + ":InsertCount:" + stats.getEntityInsertCount());
writeToBothLogs("Report:" + currentReportId + ":FetchCount:" + stats.getEntityFetchCount());
writeToBothLogs("Report:" + currentReportId + ":UpdateCount:" + stats.getEntityUpdateCount());
writeToBothLogs("Report:" + currentReportId + ":LoadCount:" + stats.getEntityLoadCount());
I get:
29/10/2018 17.16.35:GMT:SummaryReportSection:writeToBothLogs:SEVERE: Report:295:2ndLevelPut:778
29/10/2018 17.16.35:GMT:SummaryReportSection:writeToBothLogs:SEVERE: Report:295:2ndLevelHit:0
29/10/2018 17.16.35:GMT:SummaryReportSection:writeToBothLogs:SEVERE: Report:295:2ndLevelMiss:0
29/10/2018 17.16.35:GMT:SummaryReportSection:writeToBothLogs:SEVERE: Report:295:com.jthink.songlayer.Song:2ndLevelPut:778
29/10/2018 17.16.35:GMT:SummaryReportSection:writeToBothLogs:SEVERE: Report:295:com.jthink.songlayer.Song:2ndLevelHit:0
29/10/2018 17.16.35:GMT:SummaryReportSection:writeToBothLogs:SEVERE: Report:295:com.jthink.songlayer.Song:2ndLevelMiss:0
29/10/2018 17.16.35:GMT:SummaryReportSection:writeToBothLogs:SEVERE: Report:295:com.jthink.songlayer.Song:2ndLevelSizeInMemory:1672432
29/10/2018 17.16.35:GMT:SummaryReportSection:writeToBothLogs:SEVERE: CacheName:com.jthink.songlayer.Song:Put:1333:Hit:2088:Miss:223:Size:223
So Hibernate shows no hits, but CacheManager does show hits, what accounts for this difference ?
BTW my ehcache.xml file is
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<defaultCache
maxEntriesLocalHeap="500"
eternal="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
>
<persistence strategy="localTempSwap"/>
</defaultCache>
<cache
name="com.jthink.songlayer.Song"
maxEntriesLocalHeap="5000"
eternal="false"
memoryStoreEvictionPolicy="LRU"
>
<persistence strategy="localTempSwap"/>
</cache>
</ehcache>