/*******************************************************************************
* Copyright (c) 2008, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* VMware Inc. - initial contribution
*******************************************************************************/
package org.eclipse.virgo.kernel.management.internal.system;
import java.lang.management.ManagementFactory;
import java.util.List;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A base implementation of the {@SystemManagementExporter} interface that allows you to
* export multiple beans in an automated fashion with consistent naming.
* <p />
*
* <strong>Concurrent Semantics</strong><br />
*
* Threadsafe. All sub-implementations should be threadsafe as well.
*
* @param <T> Type of beans exported
*/
public abstract class AbstractMultiBeanSystemManagementExporter<T> implements SystemManagementExporter {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
public void register(String managementDomain) {
for (T bean : getBeans()) {
try {
server.registerMBean(bean, getObjectName(managementDomain, bean));
} catch (Exception e) {
logger.warn("Unable to register system information {} for management", getName(bean));
}
}
}
public void unregister(String managementDomain) {
for (T bean : getBeans()) {
try {
server.unregisterMBean(getObjectName(managementDomain, bean));
} catch (Exception e) {
logger.warn("Unable to unregister system information {} from management", getName(bean));
}
}
}
abstract List<T> getBeans();
abstract ObjectName getObjectName(String managementDomain, T bean) throws MalformedObjectNameException, NullPointerException;
abstract String getName(T bean);
}