MBeanManager.java 3.49 KB
package com.sitech.jmx.manage;

import com.sitech.ismp.messageObject.AgentSyncObject;
import com.sitech.schedule.Scheduler;
import org.apache.log4j.Logger;

import javax.management.MBeanServer;
import javax.management.ObjectName;

/**
 * ClassName:MBeanRegister Description: 注册采集MBean
 * 
 * @author Linxc
 * @version
 * @since Ver 1.1
 * @Date 2012 Jan 1, 2012 6:46:00 PM
 */
public class MBeanManager {
	private static Logger logger = Logger.getLogger("LOGER");
	private static Logger error = Logger.getLogger("ERROR");

	private MBeanServer mbs = null;

	private static MBeanManager mbeanManager;

	public static MBeanManager getInstance() {
		if (mbeanManager == null) {
			try {
				mbeanManager = new MBeanManager();
			} catch (Exception e) {
				error.error("Exception while init coll schedule.", e);
				return null;
			}
		}
		return mbeanManager;
	}

	/**
	 * 6.1版本之前使用该方法
	 */
	public void registCollMBean(AgentSyncObject obj) {
		String objectName = obj.getObjectName();
		String className = obj.getClassName();

		try {
			Object mbeanclass = Class.forName(className).newInstance();

			ObjectName name = new ObjectName(objectName);

			if (mbs.isRegistered(name)) {
				if (mbs.isInstanceOf(name, className)) {
					return;
				} else {
					mbs.unregisterMBean(name);
				}
			}

			mbs.registerMBean(mbeanclass, name);

			logger.info("Regist MBean successful : NAME={" + objectName
					+ "},CLASS_NAME={" + className + "}");

		} catch (Exception e) {
			error.error("Exception while regist mbean. NAME={" + objectName
					+ "},CLASS_NAME={" + className + "}", e);
		}
	}
	
	/**
	 * 7.0版本之后使用该方法
	 */
	public void registCollMBean(Scheduler schedule) {
		String objectName = schedule.getObjectName();
		String className = schedule.getClassName();
//		String className ="com.sitech.ismp.coll.CollMySQL";
		Class mbeanclasses = null;
		try {
			mbeanclasses = Class.forName(className);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		Object mbeanclass = null;
		try {
			mbeanclass = mbeanclasses.newInstance();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
		try {



			ObjectName name = new ObjectName(objectName);

			if (mbs.isRegistered(name)) {
				if (mbs.isInstanceOf(name, className)) {
					return;
				} else {
					mbs.unregisterMBean(name);
				}
			}

			mbs.registerMBean(mbeanclass, name);

			logger.info("Regist MBean successful : NAME={" + objectName
					+ "},CLASS_NAME={" + className + "}");

		} catch (Exception e) {
			e.printStackTrace();
			error.error("Exception while regist mbean. NAME={" + objectName
					+ "},CLASS_NAME={" + className + "}", e);
		}
	}
	
	/**
	 * 7.0版本之后使用该方法
	 */
	public synchronized void registCollMBean(String objectName, String className) {
		try {
			Object mbeanclass = Class.forName(className).newInstance();

			ObjectName name = new ObjectName(objectName);

			if (mbs.isRegistered(name)) {
				if (mbs.isInstanceOf(name, className)) {
					return;
				} else {
					mbs.unregisterMBean(name);
				}
			}

			mbs.registerMBean(mbeanclass, name);

			logger.info("Regist MBean successful : NAME={" + objectName
					+ "},CLASS_NAME={" + className + "}");

		} catch (Exception e) {
			error.error("Exception while regist mbean. NAME={" + objectName
					+ "},CLASS_NAME={" + className + "}", e);
		}
	}

	public MBeanServer getMBeanServer() {
		return mbs;
	}

	public void setMBeanServer(MBeanServer mbs) {
		this.mbs = mbs;
	}
}