/*******************************************************************************
* 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 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 a single bean 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 bean exported
*/
public abstract class AbstractSystemManagementExporter<T> implements SystemManagementExporter {
private static final String OBJECT_NAME_PATTERN = "%s:category=System Information,type=%s";
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
public void register(String managementDomain) {
try {
server.registerMBean(getBean(), getObjectName(managementDomain));
} catch (Exception e) {
logger.warn("Unable to register system information {} for management", getName());
}
}
public void unregister(String managementDomain) {
try {
server.unregisterMBean(getObjectName(managementDomain));
} catch (Exception e) {
logger.warn("Unable to unregister system information {} from management", getName());
}
}
private ObjectName getObjectName(String managementDomain) throws MalformedObjectNameException, NullPointerException {
return new ObjectName(String.format(OBJECT_NAME_PATTERN, managementDomain, getName()));
}
abstract T getBean();
abstract String getName();
}