首页

关于dozer源码包中的JMXPlatform注册及卸载MBean服务实现源码示例说明

标签:jmx,JMXPlatform,registerMBean,unregisterMBean,dozer     发布时间:2018-04-08   

一、前言

关于dozer源码包中的org.dozer.jmx.JMXPlatform、org.dozer.jmx.JMXPlatformImpl关于实现jmx的MBean注册接口及实现,基于java.lang.management.ManagementFactory获取MBeanServer服务来注册registerMBean对象服务,具体参见源码说明部分。

二、源码说明

1.JMXPlatform接口

package org.dozer.jmx;@b@@b@import javax.management.MBeanRegistrationException;@b@import javax.management.MalformedObjectNameException;@b@import javax.management.NotCompliantMBeanException;@b@@b@public abstract interface JMXPlatform@b@{@b@  public abstract boolean isAvailable();@b@@b@  public abstract void registerMBean(String paramString, Object paramObject)@b@    throws MalformedObjectNameException, MBeanRegistrationException, NotCompliantMBeanException;@b@@b@  public abstract void unregisterMBean(String paramString)@b@    throws MBeanRegistrationException, MalformedObjectNameException;@b@}

2.JMXPlatformImpl实现类

package org.dozer.jmx;@b@@b@import java.lang.management.ManagementFactory;@b@import javax.management.InstanceAlreadyExistsException;@b@import javax.management.InstanceNotFoundException;@b@import javax.management.MBeanRegistrationException;@b@import javax.management.MBeanServer;@b@import javax.management.MalformedObjectNameException;@b@import javax.management.NotCompliantMBeanException;@b@import javax.management.ObjectName;@b@import org.slf4j.Logger;@b@import org.slf4j.LoggerFactory;@b@@b@public class JMXPlatformImpl@b@  implements JMXPlatform@b@{@b@  private static final Logger log = LoggerFactory.getLogger(JMXPlatformImpl.class);@b@@b@  public boolean isAvailable()@b@  {@b@    try@b@    {@b@      Class.forName("java.lang.management.ManagementFactory");@b@      Class.forName("javax.management.ObjectName");@b@      Class.forName("javax.management.MBeanServer");@b@      return true; } catch (Throwable t) {@b@    }@b@    return false;@b@  }@b@@b@  public void registerMBean(String name, Object bean) throws MalformedObjectNameException, MBeanRegistrationException, NotCompliantMBeanException@b@  {@b@    ObjectName mbeanObjectName = new ObjectName(name);@b@    unregister(name, mbeanObjectName);@b@    register(name, bean, mbeanObjectName);@b@  }@b@@b@  public void unregisterMBean(String name) throws MBeanRegistrationException, MalformedObjectNameException {@b@    ObjectName mbeanObjectName = new ObjectName(name);@b@    unregister(name, mbeanObjectName);@b@  }@b@@b@  private void register(String name, Object bean, ObjectName mbeanObjectName) throws MBeanRegistrationException, NotCompliantMBeanException {@b@    MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();@b@    try {@b@      mbs.registerMBean(bean, mbeanObjectName);@b@      log.info("Dozer JMX MBean [" + name + "] auto registered with the Platform MBean Server");@b@    } catch (InstanceAlreadyExistsException e) {@b@      log.info("JMX MBean instance exists, unable to overwrite [{}].", name);@b@    }@b@  }@b@@b@  private void unregister(String name, ObjectName mbeanObjectName) throws MBeanRegistrationException {@b@    MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();@b@    boolean isMBeanRegistered = mbs.isRegistered(mbeanObjectName);@b@    if (isMBeanRegistered) {@b@      log.info("Unregistering existing Dozer JMX MBean [{}].", name);@b@      try {@b@        mbs.unregisterMBean(mbeanObjectName);@b@      } catch (InstanceNotFoundException e) {@b@        log.info("JMX MBean not found to unregister [{}].", name);@b@      }@b@    }@b@  }@b@}