一、前言
关于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@}