/** * ============================================================================= * * ORCID (R) Open Source * http://orcid.org * * Copyright (c) 2012-2014 ORCID, Inc. * Licensed under an MIT-Style License (MIT) * http://orcid.org/open-source-license * * This copyright and license information (including a link to the full license) * shall be included in its entirety in all copies or substantial portion of * the software. * * ============================================================================= */ package org.orcid.core.utils; import javax.annotation.Resource; import javax.management.InstanceNotFoundException; import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import net.sf.ehcache.CacheException; import net.sf.ehcache.CacheManager; import net.sf.ehcache.hibernate.management.impl.EhcacheHibernateMbeanNames; import net.sf.ehcache.management.ManagementService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author Will Simpson * */ public class OrcidEhcacheManagementService extends ManagementService { @Resource private MBeanServer mbeanServer; @Resource private CacheManager coreCacheManager; private static final Logger LOGGER = LoggerFactory.getLogger(OrcidEhcacheManagementService.class); public OrcidEhcacheManagementService(CacheManager cacheManager, MBeanServer mBeanServer, boolean registerCacheManager, boolean registerCaches, boolean registerCacheConfigurations, boolean registerCacheStatistics) throws CacheException { super(cacheManager, mBeanServer, registerCacheManager, registerCaches, registerCacheConfigurations, registerCacheStatistics); } public OrcidEhcacheManagementService(CacheManager cacheManager, MBeanServer mBeanServer, boolean registerCacheManager, boolean registerCaches, boolean registerCacheConfigurations, boolean registerCacheStatistics, boolean registerCacheStores) throws CacheException { super(cacheManager, mBeanServer, registerCacheManager, registerCaches, registerCacheConfigurations, registerCacheStatistics, registerCacheStores); } @Override public void init() throws CacheException { try { mbeanServer.getObjectInstance(createObjectName(coreCacheManager)); } catch (InstanceNotFoundException e) { super.init(); } } static ObjectName createObjectName(net.sf.ehcache.CacheManager cacheManager) { ObjectName objectName; try { int hashCode = OrcidEhcacheManagementService.class.getClassLoader().hashCode(); String suffix = "_" + hashCode; String safeCacheManagerName = EhcacheHibernateMbeanNames.mbeanSafe(cacheManager.getName() + suffix); LOGGER.info("Cache manager name = {}", safeCacheManagerName); cacheManager.setName(safeCacheManagerName); objectName = new ObjectName("net.sf.ehcache:type=CacheManager,name=" + safeCacheManagerName); } catch (MalformedObjectNameException e) { throw new CacheException(e); } return objectName; } }