package org.radargun.service;
import java.lang.management.ManagementFactory;
import java.util.Properties;
import java.util.Set;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import org.infinispan.configuration.cache.Configuration;
import org.infinispan.configuration.global.GlobalConfiguration;
/**
* ConfigDumpHelper that uses Infinispan 6.0's own property dumping mechanism.
*
* @author Michal Linhard <mlinhard@redhat.com>
*
*/
public class ConfigDumpHelper60 extends ConfigDumpHelper {
private ObjectName findCacheBean(MBeanServer mbeanServer, String domain, String managerName, String cacheName) throws MalformedObjectNameException {
Set<ObjectInstance> beanObjs = mbeanServer.queryMBeans(new ObjectName(
String.format("%s:type=Cache,name=*,manager=\"%s\",component=Cache", domain, managerName)), null);
for (ObjectInstance beanObj : beanObjs) {
String name = beanObj.getObjectName().getKeyProperty("name");
if (name != null && (name.startsWith(cacheName) || name.startsWith("\"" + cacheName))) {
return beanObj.getObjectName();
}
}
return null;
}
@Override
public Properties dumpCache(Configuration configuration, String jmxDomain, String managerName, String cacheName) {
try {
MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName cacheObj = findCacheBean(mbeanServer, jmxDomain, managerName, cacheName);
if (cacheObj == null) {
log.error("No cache named " + cacheName + " found among MBeans");
return null;
}
return (Properties) mbeanServer.getAttribute(cacheObj, "configurationAsProperties");
} catch (Exception e) {
log.error("Error while dumping " + cacheName + " cache config as properties", e);
return null;
}
}
@Override
public Properties dumpGlobal(GlobalConfiguration globalConfiguration, String jmxDomain, String managerName) {
try {
MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName objCacheManager = new ObjectName(String.format("%s:type=CacheManager,name=\"%s\",component=CacheManager", jmxDomain, managerName));
return (Properties) mbeanServer.getAttribute(objCacheManager, "globalConfigurationAsProperties");
} catch (Exception e) {
log.error("Error while dumping global config as properties", e);
return null;
}
}
}