package com.kendelong.util.ehcache; import javax.annotation.PostConstruct; import javax.management.MBeanServer; import net.sf.ehcache.CacheManager; import net.sf.ehcache.management.ManagementService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * This class is used to register all the EhCache level-2 caches with JMX * so that cache statistics etc. are available in the JMX console. * EhCache has this ManagementService class that needs to be called via * a static method, and that method needs a CacheManager. The CacheManager * class has a static list of all the CacheManagers, so you need to register * them all one-by-one. Weird API. * @author kdelong * */ // I think this could/should be a BeanFactoryPostProcessor public class EhcacheJmxBootstrapper { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private MBeanServer mbeanServer; private boolean registerManager = true; private boolean registerCaches = true; private boolean registerConfigurations = false; private boolean registerStatistics = true; @PostConstruct public void init() { // The CacheManager has a static List of all CM instances. for(CacheManager cacheMgr : CacheManager.ALL_CACHE_MANAGERS) { ManagementService.registerMBeans(cacheMgr, mbeanServer, registerManager, registerCaches, registerConfigurations, registerStatistics); logger.info("Registering EhCache CacheManager with MBean server " + cacheMgr.getName()); } } public MBeanServer getMbeanServer() { return mbeanServer; } public void setMbeanServer(MBeanServer mbeanServer) { this.mbeanServer = mbeanServer; } public boolean isRegisterManager() { return registerManager; } public void setRegisterManager(boolean registerManager) { this.registerManager = registerManager; } public boolean isRegisterCaches() { return registerCaches; } public void setRegisterCaches(boolean registerCaches) { this.registerCaches = registerCaches; } public boolean isRegisterConfigurations() { return registerConfigurations; } public void setRegisterConfigurations(boolean registerConfigurations) { this.registerConfigurations = registerConfigurations; } public boolean isRegisterStatistics() { return registerStatistics; } public void setRegisterStatistics(boolean registerStatistics) { this.registerStatistics = registerStatistics; } }