package com.onaro.sanscreen.client.jmxframework; import java.lang.management.ManagementFactory; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; /** * Contains generic functionalities for MBean services like: * * * @since 05/01/2008 * @author john.cohen */ public abstract class FrameworkService implements FrameworkServiceMBean { /** * Name of SANscreen JMX service */ public static final String CLIENT_JMX_DOMAIN_NAME = "SANscreen GUI"; //$NON-NLS-1$ /** * Name of JMX property holding the service name */ public static final String CLIENT_JMX_SERVICE_NAME_PROPERTY = "name"; //$NON-NLS-1$ private static final Logger logger = LogManager.getLogger(FrameworkService.class); private final String serviceName; private final ObjectName objectName; /** * Constructor. * * @param serviceName name of the service that is going to be exposes by MBean. */ public FrameworkService(final String serviceName){ this.serviceName = serviceName; objectName = createObjectName(); } public String getServiceName() { return serviceName; } public void start() { // Call back to the implementation class, for additional actions. doStart(); // Registers the MBean registerMBean(this, objectName); } public void stop() { // Call back to the implementation class, for additional actions. doStop(); // Registers the MBean unregisterMBean(objectName); } private ObjectName createObjectName() { try { return new ObjectName(CLIENT_JMX_DOMAIN_NAME, CLIENT_JMX_SERVICE_NAME_PROPERTY, getServiceName()); } catch (MalformedObjectNameException e) { logger.error(e.getMessage(), e); return null; } } private void registerMBean(final Object implementation, final ObjectName objectName) { // Unregister any left overs for this MBean (this is usefull only when testing) if (ManagementFactory.getPlatformMBeanServer().isRegistered(objectName)) unregisterMBean(objectName); try { ManagementFactory.getPlatformMBeanServer().registerMBean(implementation, objectName); if (logger.isDebugEnabled()) logger.debug(getServiceName() + " - Registered MBean as " + getServiceName()); //$NON-NLS-1$ } catch (Exception e) { logger.error("Failed to register MBean for " + getServiceName(), e); //$NON-NLS-1$ } } private void unregisterMBean(final ObjectName objectName) { try { ManagementFactory.getPlatformMBeanServer().unregisterMBean(objectName); if (logger.isDebugEnabled()) logger.debug(getServiceName() + " - Unregistered MBean " + getServiceName()); //$NON-NLS-1$ } catch (Exception e) { logger.error("Failed to unregister MBean for " + getServiceName(), e); //$NON-NLS-1$ } } /** * Call back method intendent to be overriden by the implementing class. */ public abstract void doStart(); /** * Call back method intendent to be overriden by the implementing class. */ public abstract void doStop(); }