I have used JCache with EhCache as provider. Using the MBean I am able to get cache statistics but there is missing attributes like size of the cache. I see LiveCacheStatistics provide that but how to get instance of it from JCache
List<Map<String,Object>> cacheStatasticsList = new ArrayList<>();
try {
final MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
final Set<ObjectInstance> cacheBeans = beanServer.queryMBeans(ObjectName.getInstance("javax.cache:type=CacheStatistics,CacheManager=*,Cache=*"), null);
for (ObjectInstance cacheBean : cacheBeans) {
final CacheStatisticsMXBean cacheStatisticsMXBean =
MBeanServerInvocationHandler.newProxyInstance(beanServer, cacheBean.getObjectName(), CacheStatisticsMXBean.class, false);
Map<String,Object> cacheStatasticsMap = new HashMap<>();
cacheStatasticsMap.put("Name",cacheBean.getObjectName().getKeyProperty("Cache"));
cacheStatasticsMap.put("Gets",cacheStatisticsMXBean.getCacheGets());
cacheStatasticsMap.put("Hits",cacheStatisticsMXBean.getCacheHits());
cacheStatasticsMap.put("Misses",cacheStatisticsMXBean.getCacheMisses());
cacheStatasticsMap.put("Removals",cacheStatisticsMXBean.getCacheRemovals());
cacheStatasticsMap.put("Evictions", cacheStatisticsMXBean.getCacheEvictions());
cacheStatasticsMap.put("AvgGetTime", cacheStatisticsMXBean.getAverageGetTime());
cacheStatasticsMap.put("AvgPutTime", cacheStatisticsMXBean.getAveragePutTime());
cacheStatasticsMap.put("AvgRemoveTime" , cacheStatisticsMXBean.getAverageRemoveTime());
cacheStatasticsList.add(cacheStatasticsMap);
}
} catch(Exception e){
log.error("Error in getting cache statistics.");
return cacheStatasticsList;
}
return cacheStatasticsList;