Class: javax.management.modelmbean.RequiredModelMBean
- public class RequiredModelMBean
- implements ModelMBean, MBeanRegistration, NotificationEmitter
Java resources wishing to be manageable instantiate the RequiredModelMBean using the MBeanServer's createMBean method. The resource then sets the MBeanInfo and Descriptors for the RequiredModelMBean instance. The attributes and operations exposed via the ModelMBeanInfo for the ModelMBean are accessible from MBeans, connectors/adaptors like other MBeans. Through the Descriptors, values and methods in the managed application can be defined and mapped to attributes and operations of the ModelMBean. This mapping can be defined in an XML formatted file or dynamically and programmatically at runtime.
Every RequiredModelMBean which is instantiated in the MBeanServer
becomes manageable:
its attributes and operations become remotely accessible through the
connectors/adaptors connected to that MBeanServer.
A Java object cannot be registered in the MBeanServer unless it is a JMX compliant MBean. By instantiating a RequiredModelMBean, resources are guaranteed that the MBean is valid. MBeanException and RuntimeOperationsException must be thrown on every public method. This allows for wrapping exceptions from distributed communications (RMI, EJB, etc.)
Inheritance
Superclass tree:- java.lang.Object
- javax.management.modelmbean.RequiredModelMBean
Methods
-
RequiredModelMBeantop
public RequiredModelMBean() throws MBeanException, RuntimeOperationsExceptionConstructs anRequiredModelMBeanwith an empty ModelMBeanInfo.The RequiredModelMBean's MBeanInfo and Descriptors can be customized using the javax.management.modelmbean.RequiredModelMBean.setModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo) method. After the RequiredModelMBean's MBeanInfo and Descriptors are customized, the RequiredModelMBean can be registered with the MBeanServer.
-
RequiredModelMBeantop
public RequiredModelMBean(ModelMBeanInfo mbi) throws MBeanException, RuntimeOperationsExceptionConstructs a RequiredModelMBean object using ModelMBeanInfo passed in. As long as the RequiredModelMBean is not registered with the MBeanServer yet, the RequiredModelMBean's MBeanInfo and Descriptors can be customized using the javax.management.modelmbean.RequiredModelMBean.setModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo) method. After the RequiredModelMBean's MBeanInfo and Descriptors are customized, the RequiredModelMBean can be registered with the MBeanServer. -
addAttributeChangeNotificationListenertop
public void addAttributeChangeNotificationListener(NotificationListener inlistener, String inAttributeName, Object inhandback) throws MBeanException, RuntimeOperationsException, IllegalArgumentExceptionRegisters an object which implements the NotificationListener interface as a listener. This object's 'handleNotification()' method will be invoked when any attributeChangeNotification is issued through or by the ModelMBean. This does not include other Notifications. They must be registered for independently. An AttributeChangeNotification will be generated for this attributeName.- Specified by:
- addAttributeChangeNotificationListener from ModelMBeanNotificationBroadcaster
-
addNotificationListenertop
public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws IllegalArgumentExceptionRegisters an object which implements the NotificationListener interface as a listener. This object's 'handleNotification()' method will be invoked when any notification is issued through or by the ModelMBean. This does not include attributeChangeNotifications. They must be registered for independently.- Specified by:
- addNotificationListener from NotificationBroadcaster
-
getAttributetop
public Object getAttribute(String attrName) throws AttributeNotFoundException, MBeanException, ReflectionExceptionReturns the value of a specific attribute defined for this ModelMBean. The last value returned by an attribute may be cached in the attribute's descriptor. The valid value will be in the 'value' field if there is one. If the 'currencyTimeLimit' field in the descriptor is:- <0 Then the value is not cached and is never valid. The getter method is invoked for the attribute. The 'value' and 'lastUpdatedTimeStamp' fields are cleared.
- =0 Then the value is always cached and always valid. The 'value' field is returned. If there is no'value' field then the getter method is invoked for the attribute. The 'lastUpdatedTimeStamp' field and `value' fields are set to the attribute's value and the current time stamp.
- >0 Represents the number of seconds that the 'value'
field is valid.
The 'value' field is no longer valid when
'lastUpdatedTimeStamp' + 'currencyTimeLimit' > Now.
- When 'value' is valid, 'value' is returned.
- When 'value' is no longer valid then the getter method is invoked for the attribute. The 'lastUpdatedTimeStamp' field and `value' fields are updated.
Note: because of inconsistencies in previous versions of this specification, it is recommended not to use negative or zero values for
currencyTimeLimit. To indicate that a cached value is never valid, omit thecurrencyTimeLimitfield. To indicate that it is always valid, use a very large number for this field.If the 'getMethod' field contains the name of a valid operation descriptor, then the method described by the operation descriptor is executed. The response from the method is returned as the value of the attribute. If the operation fails or the returned value is not compatible with the declared type of the attribute, an exception will be thrown.
If no 'getMethod' field is defined then the default value of the attribute is returned. If the returned value is not compatible with the declared type of the attribute, an exception will be thrown.
The declared type of the attribute is the String returned by javax.management.MBeanAttributeInfo.getType(). A value is compatible with this type if one of the following is true:
- the value is null;
- the declared name is a primitive type name (such as "int") and the value is an instance of the corresponding wrapper type (such as java.lang.Integer);
- the name of the value's class is identical to the declared name;
- the declared name can be loaded by the value's class loader and produces a class to which the value can be assigned.
In this implementation, in every case where the getMethod needs to be called, because the method is invoked through the standard "invoke" method and thus needs operationInfo, an operation must be specified for that getMethod so that the invocation works correctly.
- Specified by:
- getAttribute from DynamicMBean
-
getAttributestop
public AttributeList getAttributes(String[] attrNames)Returns the values of several attributes in the ModelMBean. Executes a getAttribute for each attribute name in the attrNames array passed in.- Specified by:
- getAttributes from DynamicMBean
-
getClassLoaderRepositorytop
protected ClassLoaderRepository getClassLoaderRepository()Return the Class Loader Repository used to perform class loading. Subclasses may wish to redefine this method in order to return the appropriate javax.management.loading.ClassLoaderRepository that should be used in this object. -
getMBeanInfotop
public MBeanInfo getMBeanInfo()Returns the attributes, operations, constructors and notifications that this RequiredModelMBean exposes for management.- Specified by:
- getMBeanInfo from DynamicMBean
-
getNotificationInfotop
public MBeanNotificationInfo[] getNotificationInfo()Returns the array of Notifications always generated by the RequiredModelMBean.RequiredModelMBean may always send also two additional notifications:
- One with descriptor
"name=GENERIC,descriptorType=notification,log=T,severity=6,displayName=jmx.modelmbean.generic" - Second is a standard attribute change notification
with descriptor
"name=ATTRIBUTE_CHANGE,descriptorType=notification,log=T,severity=6,displayName=jmx.attribute.change"
- Specified by:
- getNotificationInfo from NotificationBroadcaster
- One with descriptor
-
invoketop
public Object invoke(String opName, Object[] opArgs, String[] sig) throws MBeanException, ReflectionExceptionInvokes a method on or through a RequiredModelMBean and returns the result of the method execution.If the given method to be invoked, together with the provided signature, matches one of RequiredModelMbean accessible methods, this one will be call. Otherwise the call to the given method will be tried on the managed resource.
The last value returned by an operation may be cached in the operation's descriptor which is in the ModelMBeanOperationInfo's descriptor. The valid value will be in the 'value' field if there is one. If the 'currencyTimeLimit' field in the descriptor is:
- <0 Then the value is not cached and is never valid. The operation method is invoked. The 'value' and 'lastUpdatedTimeStamp' fields are cleared.
- =0 Then the value is always cached and always valid. The 'value' field is returned. If there is no 'value' field then the operation method is invoked for the attribute. The 'lastUpdatedTimeStamp' field and `value' fields are set to the operation's return value and the current time stamp.
- >0 Represents the number of seconds that the 'value'
field is valid.
The 'value' field is no longer valid when
'lastUpdatedTimeStamp' + 'currencyTimeLimit' > Now.
- When 'value' is valid, 'value' is returned.
- When 'value' is no longer valid then the operation method is invoked. The 'lastUpdatedTimeStamp' field and `value' fields are updated.
Note: because of inconsistencies in previous versions of this specification, it is recommended not to use negative or zero values for
currencyTimeLimit. To indicate that a cached value is never valid, omit thecurrencyTimeLimitfield. To indicate that it is always valid, use a very large number for this field.- Specified by:
- invoke from DynamicMBean
-
loadtop
public void load() throws MBeanException, RuntimeOperationsException, InstanceNotFoundExceptionInstantiates this MBean instance with the data found for the MBean in the persistent store. The data loaded could include attribute and operation values.
This method should be called during construction or initialization of this instance, and before the MBean is registered with the MBeanServer.
If the implementation of this class does not support persistence, an javax.management.MBeanException wrapping a javax.management.ServiceNotFoundException is thrown.
- Specified by:
- load from PersistentMBean
-
postDeregistertop
public void postDeregister()Allows the MBean to perform any operations needed after having been unregistered in the MBean server.In order to ensure proper run-time semantics of RequireModelMBean, Any subclass of RequiredModelMBean overloading or overriding this method should call
super.postDeregister()in its ownpostDeregisterimplementation.- Specified by:
- postDeregister from MBeanRegistration
-
postRegistertop
public void postRegister(Boolean registrationDone)Allows the MBean to perform any operations needed after having been registered in the MBean server or after the registration has failed.In order to ensure proper run-time semantics of RequireModelMBean, Any subclass of RequiredModelMBean overloading or overriding this method should call
super.postRegister(registrationDone)in its ownpostRegisterimplementation.- Specified by:
- postRegister from MBeanRegistration
-
preDeregistertop
public void preDeregister() throws ExceptionAllows the MBean to perform any operations it needs before being unregistered by the MBean server.In order to ensure proper run-time semantics of RequireModelMBean, Any subclass of RequiredModelMBean overloading or overriding this method should call
super.preDeregister()in its ownpreDeregisterimplementation.- Specified by:
- preDeregister from MBeanRegistration
-
preRegistertop
Allows the MBean to perform any operations it needs before being registered in the MBean server. If the name of the MBean is not specified, the MBean can provide a name for its registration. If any exception is raised, the MBean will not be registered in the MBean server.In order to ensure proper run-time semantics of RequireModelMBean, Any subclass of RequiredModelMBean overloading or overriding this method should call
super.preRegister(server, name)in its ownpreRegisterimplementation.- Specified by:
- preRegister from MBeanRegistration
-
removeAttributeChangeNotificationListenertop
public void removeAttributeChangeNotificationListener(NotificationListener inlistener, String inAttributeName) throws MBeanException, RuntimeOperationsException, ListenerNotFoundExceptionRemoves a listener for attributeChangeNotifications from the RequiredModelMBean.- Specified by:
- removeAttributeChangeNotificationListener from ModelMBeanNotificationBroadcaster
-
removeNotificationListenertop
public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundExceptionRemoves a listener for Notifications from the RequiredModelMBean.- Specified by:
- removeNotificationListener from NotificationBroadcaster
-
removeNotificationListenertop
public void removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws ListenerNotFoundExceptionRemoves a listener from this MBean. The MBean must have a listener that exactly matches the given
listener,filter, andhandbackparameters. If there is more than one such listener, only one is removed.The
filterandhandbackparameters may be null if and only if they are null in a listener to be removed.- Specified by:
- removeNotificationListener from NotificationEmitter
-
sendAttributeChangeNotificationtop
public void sendAttributeChangeNotification(Attribute inOldVal, Attribute inNewVal) throws MBeanException, RuntimeOperationsExceptionSends an attributeChangeNotification which contains the old value and new value for the attribute to the registered AttributeChangeNotification listeners on the ModelMBean.- Specified by:
- sendAttributeChangeNotification from ModelMBeanNotificationBroadcaster
-
sendAttributeChangeNotificationtop
public void sendAttributeChangeNotification(AttributeChangeNotification ntfyObj) throws MBeanException, RuntimeOperationsExceptionSends an attributeChangeNotification which is passed in to the registered attributeChangeNotification listeners on the ModelMBean.- Specified by:
- sendAttributeChangeNotification from ModelMBeanNotificationBroadcaster
-
sendNotificationtop
public void sendNotification(String ntfyText) throws MBeanException, RuntimeOperationsExceptionSends a Notification which contains the text string that is passed in to the registered Notification listeners on the ModelMBean.- Specified by:
- sendNotification from ModelMBeanNotificationBroadcaster
-
sendNotificationtop
public void sendNotification(Notification ntfyObj) throws MBeanException, RuntimeOperationsExceptionSends a Notification which is passed in to the registered Notification listeners on the ModelMBean as a jmx.modelmbean.generic notification.- Specified by:
- sendNotification from ModelMBeanNotificationBroadcaster
-
setAttributetop
public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionExceptionSets the value of a specific attribute of a named ModelMBean. If the 'setMethod' field of the attribute's descriptor contains the name of a valid operation descriptor, then the method described by the operation descriptor is executed. In this implementation, the operation descriptor must be specified correctly and assigned to the modelMBeanInfo so that the 'setMethod' works correctly. The response from the method is set as the value of the attribute in the descriptor.If currencyTimeLimit is > 0, then the new value for the attribute is cached in the attribute descriptor's 'value' field and the 'lastUpdatedTimeStamp' field is set to the current time stamp.
If the persist field of the attribute's descriptor is not null then Persistence policy from the attribute descriptor is used to guide storing the attribute in a persistent store.
Store the MBean if 'persistPolicy' field is:- != "never"
- = "always"
- = "onUpdate"
- = "onTimer" and now > 'lastPersistTime' + 'persistPeriod'
- = "NoMoreOftenThan" and now > 'lastPersistTime' + 'persistPeriod'
- = "never"
- = "onTimer" && now < 'lastPersistTime' + 'persistPeriod'
- = "onUnregister"
- = "NoMoreOftenThan" and now < 'lastPersistTime' + 'persistPeriod'
The ModelMBeanInfo of the Model MBean is stored in a file.
- Specified by:
- setAttribute from DynamicMBean
-
setAttributestop
public AttributeList setAttributes(AttributeList attributes)Sets the values of an array of attributes of this ModelMBean. Executes the setAttribute() method for each attribute in the list.- Specified by:
- setAttributes from DynamicMBean
-
setManagedResourcetop
public void setManagedResource(Object mr, String mr_type) throws MBeanException, RuntimeOperationsException, InstanceNotFoundException, InvalidTargetObjectTypeExceptionSets the instance handle of the object against which to execute all methods in this ModelMBean management interface (MBeanInfo and Descriptors).- Specified by:
- setManagedResource from ModelMBean
-
setModelMBeanInfotop
public void setModelMBeanInfo(ModelMBeanInfo mbi) throws MBeanException, RuntimeOperationsExceptionInitializes a ModelMBean object using ModelMBeanInfo passed in. This method makes it possible to set a customized ModelMBeanInfo on the ModelMBean as long as it is not registered with the MBeanServer.
Once the ModelMBean's ModelMBeanInfo (with Descriptors) are customized and set on the ModelMBean, the ModelMBean be registered with the MBeanServer.If the ModelMBean is currently registered, this method throws a javax.management.RuntimeOperationsException wrapping an IllegalStateException
If the given inModelMBeanInfo does not contain any javax.management.modelmbean.ModelMBeanNotificationInfo for the
GENERICorATTRIBUTE_CHANGEnotifications, then the RequiredModelMBean will supply its own default ModelMBeanNotificationInfos for those missing notifications.- Specified by:
- setModelMBeanInfo from ModelMBean
-
storetop
public void store() throws MBeanException, RuntimeOperationsException, InstanceNotFoundExceptionCaptures the current state of this MBean instance and writes it out to the persistent store. The state stored could include attribute and operation values.
If the implementation of this class does not support persistence, an javax.management.MBeanException wrapping a javax.management.ServiceNotFoundException is thrown.
Persistence policy from the MBean and attribute descriptor is used to guide execution of this method. The MBean should be stored if 'persistPolicy' field is:
!= "never" = "always" = "onTimer" and now > 'lastPersistTime' + 'persistPeriod' = "NoMoreOftenThan" and now > 'lastPersistTime' + 'persistPeriod' = "onUnregister"
Do not store the MBean if 'persistPolicy' field is:
= "never" = "onUpdate" = "onTimer" && now < 'lastPersistTime' + 'persistPeriod'- Specified by:
- store from PersistentMBean
