📄 basemodelmbean.java
字号:
Object handback)
throws IllegalArgumentException {
if (listener == null)
throw new IllegalArgumentException("Listener is null");
if( log.isDebugEnabled() ) log.debug("addNotificationListener " + listener);
if (generalBroadcaster == null)
generalBroadcaster = new BaseNotificationBroadcaster();
generalBroadcaster.addNotificationListener
(listener, filter, handback);
// We'll send the attribute change notifications to all listeners ( who care )
// The normal filtering can be used.
// The problem is that there is no other way to add attribute change listeners
// to a model mbean ( AFAIK ). I suppose the spec should be fixed.
if (attributeBroadcaster == null)
attributeBroadcaster = new BaseNotificationBroadcaster();
if( log.isDebugEnabled() )
log.debug("addAttributeNotificationListener " + listener);
attributeBroadcaster.addNotificationListener
(listener, filter, handback);
}
/**
* Return an <code>MBeanNotificationInfo</code> object describing the
* notifications sent by this MBean.
*/
public MBeanNotificationInfo[] getNotificationInfo() {
// Acquire the set of application notifications
MBeanNotificationInfo current[] = getMBeanInfo().getNotifications();
if (current == null)
current = new MBeanNotificationInfo[0];
MBeanNotificationInfo response[] =
new MBeanNotificationInfo[current.length + 2];
// Descriptor descriptor = null;
// Fill in entry for general notifications
// descriptor = new DescriptorSupport
// (new String[] { "name=GENERIC",
// "descriptorType=notification",
// "log=T",
// "severity=5",
// "displayName=jmx.modelmbean.generic" });
response[0] = new MBeanNotificationInfo
(new String[] { "jmx.modelmbean.generic" },
"GENERIC",
"Text message notification from the managed resource");
//descriptor);
// Fill in entry for attribute change notifications
// descriptor = new DescriptorSupport
// (new String[] { "name=ATTRIBUTE_CHANGE",
// "descriptorType=notification",
// "log=T",
// "severity=5",
// "displayName=jmx.attribute.change" });
response[1] = new MBeanNotificationInfo
(new String[] { "jmx.attribute.change" },
"ATTRIBUTE_CHANGE",
"Observed MBean attribute value has changed");
//descriptor);
// Copy remaining notifications as reported by the application
System.arraycopy(current, 0, response, 2, current.length);
return (response);
}
/**
* Remove a notification event listener from this MBean.
*
* @param listener The listener to be removed (any and all registrations
* for this listener will be eliminated)
*
* @exception ListenerNotFoundException if this listener is not
* registered in the MBean
*/
public void removeNotificationListener(NotificationListener listener)
throws ListenerNotFoundException {
if (listener == null)
throw new IllegalArgumentException("Listener is null");
if (generalBroadcaster == null)
generalBroadcaster = new BaseNotificationBroadcaster();
generalBroadcaster.removeNotificationListener(listener);
}
/**
* Remove a notification event listener from this MBean.
*
* @param listener The listener to be removed (any and all registrations
* for this listener will be eliminated)
* @param handback Handback object to be sent along with event
* notifications
*
* @exception ListenerNotFoundException if this listener is not
* registered in the MBean
*/
public void removeNotificationListener(NotificationListener listener,
Object handback)
throws ListenerNotFoundException {
removeNotificationListener(listener);
}
/**
* Remove a notification event listener from this MBean.
*
* @param listener The listener to be removed (any and all registrations
* for this listener will be eliminated)
* @param filter Filter object used to filter event notifications
* actually delivered, or <code>null</code> for no filtering
* @param handback Handback object to be sent along with event
* notifications
*
* @exception ListenerNotFoundException if this listener is not
* registered in the MBean
*/
public void removeNotificationListener(NotificationListener listener,
NotificationFilter filter,
Object handback)
throws ListenerNotFoundException {
removeNotificationListener(listener);
}
// ------------------------------------------------ PersistentMBean Methods
/**
* Instantiates this MBean instance from data found in the persistent
* store. The data loaded could include attribute and operation values.
* This method should be called during construction or initialization
* of the instance, and before the MBean is registered with the
* <code>MBeanServer</code>.
*
* <p><strong>IMPLEMENTATION NOTE</strong> - This implementation does
* not support persistence.</p>
*
* @exception InstanceNotFoundException if the managed resource object
* cannot be found
* @exception MBeanException if the initializer of the object throws
* an exception
* @exception RuntimeOperationsException if an exception is reported
* by the persistence mechanism
*/
// public void load() throws InstanceNotFoundException,
// MBeanException, RuntimeOperationsException {
// // XXX If a context was set, use it to load the data
// throw new MBeanException
// (new IllegalStateException("Persistence is not supported"),
// "Persistence is not supported");
//
// }
/**
* Capture the current state of this MBean instance and write it out
* to the persistent store. The state stored could include attribute
* and operation values. If one of these methods of persistence is not
* supported, a "service not found" exception will be thrown.
*
* <p><strong>IMPLEMENTATION NOTE</strong> - This implementation does
* not support persistence.</p>
*
* @exception InstanceNotFoundException if the managed resource object
* cannot be found
* @exception MBeanException if the initializer of the object throws
* an exception, or persistence is not supported
* @exception RuntimeOperationsException if an exception is reported
* by the persistence mechanism
*/
// public void store() throws InstanceNotFoundException,
// MBeanException, RuntimeOperationsException {
//
// // XXX if a context was set, use it to store the data
// throw new MBeanException
// (new IllegalStateException("Persistence is not supported"),
// "Persistence is not supported");
//
// }
// -------------------- BaseModelMBean methods --------------------
/** Set the type of the mbean. This is used as a key to locate
* the description in the Registry.
*
* @param type the type of classname of the modeled object
*/
// void setModeledType( String type ) {
// initModelInfo(type);
// createResource();
// }
/** Set the type of the mbean. This is used as a key to locate
* the description in the Registry.
*
* @param type the type of classname of the modeled object
*/
// void initModelInfo( String type ) {
// try {
// if( log.isDebugEnabled())
// log.debug("setModeledType " + type);
//
// log.debug( "Set model Info " + type);
// if(type==null) {
// return;
// }
// resourceType=type;
// //Thread.currentThread().setContextClassLoader(BaseModelMBean.class.getClassLoader());
// Class c=null;
// try {
// c=Class.forName( type);
// } catch( Throwable t ) {
// log.debug( "Error creating class " + t);
// }
//
// // The class c doesn't need to exist
// ManagedBean descriptor=getRegistry().findManagedBean(c, type);
// if( descriptor==null )
// return;
// this.setModelMBeanInfo(descriptor.createMBeanInfo());
// } catch( Throwable ex) {
// log.error( "TCL: " + Thread.currentThread().getContextClassLoader(),
// ex);
// }
// }
/** Set the type of the mbean. This is used as a key to locate
* the description in the Registry.
*/
// protected void createResource() {
// try {
// //Thread.currentThread().setContextClassLoader(BaseModelMBean.class.getClassLoader());
// Class c=null;
// try {
// c=Class.forName( resourceType );
// resource = c.newInstance();
// } catch( Throwable t ) {
// log.error( "Error creating class " + t);
// }
// } catch( Throwable ex) {
// log.error( "TCL: " + Thread.currentThread().getContextClassLoader(),
// ex);
// }
// }
public String getModelerType() {
return resourceType;
}
public String getClassName() {
return getModelerType();
}
public ObjectName getJmxName() {
return oname;
}
public String getObjectName() {
if (oname != null) {
return oname.toString();
} else {
return null;
}
}
// public void setRegistry(Registry registry) {
// this.registry = registry;
// }
//
// public Registry getRegistry() {
// // XXX Need a better solution - to avoid the static
// if( registry == null )
// registry=Registry.getRegistry();
//
// return registry;
// }
// ------------------------------------------------------ Protected Methods
/**
* Create and return a default <code>ModelMBeanInfo</code> object.
*/
// protected ModelMBeanInfo createDefaultModelMBeanInfo() {
//
// return (new ModelMBeanInfoSupport(this.getClass().getName(),
// "Default ModelMBean",
// null, null, null, null));
//
// }
/**
* Is the specified <code>ModelMBeanInfo</code> instance valid?
*
* <p><strong>IMPLEMENTATION NOTE</strong> - This implementation
* does not check anything, but this method can be overridden
* as required.</p>
*
* @param info The <code>ModelMBeanInfo object to check
*/
// protected boolean isModelMBeanInfoValid(ModelMBeanInfo info) {
// return (true);
// }
// -------------------- Registration --------------------
// XXX We can add some method patterns here- like setName() and
// setDomain() for code that doesn't implement the Registration
public ObjectName preRegister(MBeanServer server,
ObjectName name)
throws Exception
{
if( log.isDebugEnabled())
log.debug("preRegister " + resource + " " + name );
oname=name;
if( resource instanceof MBeanRegistration ) {
oname = ((MBeanRegistration)resource).preRegister(server, name );
}
return oname;
}
public void postRegister(Boolean registrationDone) {
if( resource instanceof MBeanRegistration ) {
((MBeanRegistration)resource).postRegister(registrationDone);
}
}
public void preDeregister() throws Exception {
if( resource instanceof MBeanRegistration ) {
((MBeanRegistration)resource).preDeregister();
}
}
public void postDeregister() {
if( resource instanceof MBeanRegistration ) {
((MBeanRegistration)resource).postDeregister();
}
}
static class MethodKey {
private String name;
private String[] signature;
MethodKey(String name, String[] signature) {
this.name = name;
if(signature == null) {
signature = new String[0];
}
this.signature = signature;
}
public boolean equals(Object other) {
if(!(other instanceof MethodKey)) {
return false;
}
MethodKey omk = (MethodKey)other;
if(!name.equals(omk.name)) {
return false;
}
if(signature.length != omk.signature.length) {
return false;
}
for(int i=0; i < signature.length; i++) {
if(!signature[i].equals(omk.signature[i])) {
return false;
}
}
return true;
}
public int hashCode() {
return name.hashCode();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -