1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | 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); } } } |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |