org.infinispan.jmx.CacheManagerJmxRegistration Maven / Gradle / Ivy
package org.infinispan.jmx;
import java.util.Set;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.infinispan.configuration.global.GlobalConfiguration;
import org.infinispan.factories.AbstractComponentRegistry;
import org.infinispan.factories.GlobalComponentRegistry;
import org.infinispan.factories.annotations.Inject;
import org.infinispan.factories.annotations.SurvivesRestarts;
import org.infinispan.util.logging.Log;
import org.infinispan.util.logging.LogFactory;
/**
* Registers all the components from global component registry to the mbean server.
*
* @author [email protected]
* @author Galder Zamarreño
* @since 4.0
*/
@SurvivesRestarts
public class CacheManagerJmxRegistration extends AbstractJmxRegistration {
private static final Log log = LogFactory.getLog(CacheManagerJmxRegistration.class);
public static final String CACHE_MANAGER_JMX_GROUP = "type=CacheManager";
private GlobalComponentRegistry globalReg;
private boolean needToUnregister = false;
private boolean stopped;
@Inject
public void init(GlobalComponentRegistry registry, GlobalConfiguration configuration) {
this.globalReg = registry;
this.globalConfig = configuration;
}
/**
* On start, the mbeans are registered.
*/
public void start() {
if (registerMBeans(globalReg.getRegisteredComponents(), globalConfig)) {
needToUnregister = true;
} else {
log.unableToRegisterCacheManagerMBeans();
}
stopped = false;
}
/**
* On stop, the mbeans are unregistered.
*/
public void stop() {
// This method might get called several times.
if (stopped) return;
if (needToUnregister) {
try {
unregisterMBeans(globalReg.getRegisteredComponents());
needToUnregister = false;
} catch (Exception e) {
log.problemsUnregisteringMBeans(e);
}
}
stopped = true;
}
@Override
protected ComponentsJmxRegistration buildRegistrar(Set components) {
// Quote group name, to handle invalid ObjectName characters
String groupName = CACHE_MANAGER_JMX_GROUP
+ "," + ComponentsJmxRegistration.NAME_KEY
+ "=" + ObjectName.quote(globalConfig.globalJmxStatistics().cacheManagerName());
ComponentsJmxRegistration registrar = new ComponentsJmxRegistration(mBeanServer, components, groupName);
updateDomain(registrar, mBeanServer, groupName);
return registrar;
}
protected void updateDomain(ComponentsJmxRegistration registrar, MBeanServer mBeanServer, String groupName) {
if (jmxDomain == null) {
jmxDomain = JmxUtil.buildJmxDomain(globalConfig, mBeanServer, groupName);
String configJmxDomain = globalConfig.globalJmxStatistics().domain();
if (!jmxDomain.equals(configJmxDomain) && !globalConfig.globalJmxStatistics().allowDuplicateDomains()) {
throw log.jmxMBeanAlreadyRegistered(groupName, configJmxDomain);
}
}
registrar.setJmxDomain(jmxDomain);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy