⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modelmbeanextension.java

📁 jmx在spring中的实现
💻 JAVA
字号:
/*
======================================================================

  ModelMBeanExtension.java

  Created by Claude Duguay
  Copyright (c) 2005

======================================================================
*/

package com.claudeduguay.mbeans.spring;

import java.lang.reflect.*;

import javax.management.*;
import javax.management.modelmbean.*;

public class ModelMBeanExtension extends RequiredModelMBean
{
	protected NotificationInfoMap notificationInfoMap;
	protected ModelMBeanInfo modelMBeanInfo;
	protected Object managedBean;
	
	public ModelMBeanExtension() throws MBeanException {}

	public ModelMBeanExtension(ModelMBeanInfo modelMBeanInfo) throws MBeanException
	{
		super(modelMBeanInfo);
		this.modelMBeanInfo = modelMBeanInfo;
		notificationInfoMap = new NotificationInfoMap(modelMBeanInfo);
	}
	
	public void setModelMBeanInfo(ModelMBeanInfo modelMBeanInfo)  throws MBeanException
	{
		this.modelMBeanInfo = modelMBeanInfo;
		notificationInfoMap = new NotificationInfoMap(modelMBeanInfo);
		super.setModelMBeanInfo(modelMBeanInfo);
	}
	
	public MBeanNotificationInfo[] getNotificationInfo()
	{
		return modelMBeanInfo.getNotifications();
	}
	
	public void setManagedResource(Object managedBean, String type) throws MBeanException,
		RuntimeOperationsException, InstanceNotFoundException, InvalidTargetObjectTypeException
	{
		super.setManagedResource(managedBean, type);
		this.managedBean = managedBean;
	}
	
	protected void maybeSendMethodNotification(String type, String name)
		throws MBeanException
	{
		MBeanNotificationInfo info = notificationInfoMap.
			findNotificationInfo(type, name);
		if (info != null)
		{
			long timeStamp = System.currentTimeMillis();
			String notificationType = ModelMBeanUtil.
				matchType(info, "." + type + "." + name);
			sendNotification(new Notification(
				notificationType, this, timeStamp,
				info.getDescription()));
		}
	}

	protected void maybeSendAttributeNotification(Attribute attribute)
		throws MBeanException, AttributeNotFoundException,
		InvalidAttributeValueException, ReflectionException
	{
		String name = attribute.getName();
		MBeanNotificationInfo info = notificationInfoMap.
			findNotificationInfo("set", attribute.getName());
		if (info != null)
		{
			Object oldValue = getAttribute(name);
			Object newValue = attribute.getValue();
			long timeStamp = System.currentTimeMillis();
			String notificationType = ModelMBeanUtil.
				matchType(info, ".set." + name);
			sendNotification(new AttributeChangeNotification(
				this, timeStamp, timeStamp,
				info.getDescription(), info.getName(),
				notificationType, oldValue, newValue));
		}
	}
	
	public Object invoke(String name, Object[] args, String[] signature)
		throws MBeanException, ReflectionException
	{
		maybeSendMethodNotification("before", name);
		Object returnValue = super.invoke(name, args, signature);
		maybeSendMethodNotification("after", name);
		return returnValue;
	}

	public Object getAttribute(String name) throws MBeanException,
		AttributeNotFoundException, ReflectionException
	{
		try
		{
	  	Method method = ModelMBeanUtil.findGetMethod(
	  		modelMBeanInfo, managedBean, name);
			return method.invoke(managedBean, new Object[] {});
		}
		catch (IllegalAccessException e)
		{
			throw new MBeanException(e);
		}
		catch (InvocationTargetException e)
		{
			throw new MBeanException(e);
		}
	}

	public void setAttribute(Attribute attribute) throws MBeanException,
		AttributeNotFoundException, InvalidAttributeValueException, ReflectionException
	{
		try
		{
			Method method = ModelMBeanUtil.findSetMethod(
				modelMBeanInfo, managedBean, attribute.getName());
			method.invoke(managedBean, attribute.getValue());
			maybeSendAttributeNotification(attribute);
		}
		catch (InvocationTargetException e)
		{
			throw new MBeanException(e);
		}
		catch (IllegalAccessException e)
		{
			throw new MBeanException(e);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -