javax.management

Interface Descriptor

All Superinterfaces:
Cloneable, Serializable

public interface Descriptor
extends Serializable, Cloneable

Provides metadata for a management element as a series of fields, formed from name-value pairs. Descriptors are usually attached to one of the Info classes, such as MBeanAttributeInfo.

Field names are not case-sensitive, but are case-preserving (in that the same use of case will be returned by getFields() and getFieldNames()). The type of the value should match the type returned by the getType() method of the associated Info object. In the case of MXBeans, this should be the mapped type returned by the mapping rules.

The contents of a descriptor may be immutable, in which case, attempts to change the contents of the descriptor will cause an exception to be thrown. Immutable descriptors are usually instances or subclasses of ImmutableDescriptor, while mutable descriptors are usually instances or subclasses of javax.management.modelmbean.DescriptorSupport.

A series of field names are predefined, but additional ones can be added as needed. Predefined names never include a period ('.'), and so additional names may safely avoid conflicts by including this character. It is recommended that additional names make use of the same syntax as Java package names e.g. gnu.classpath.ImportantMetadata.

The predefined names are as follows:

MBeanNotificationInfoMBeanParameterInfo
NameTypeUsed InMeaning
defaultValueObjectMBeanAttributeInfo, MBeanParameterInfoDefault value for an attribute or parameter.
deprecatedStringAnyThe annotated element has been deprecated. Conventially, the field's value takes the form of the version in which the element was deprecated, followed by an explaination.
descriptionResourceBundleBaseNameStringAnyThe base name for the bundle in which the descriptionResourceKey can be found.
descriptionResourceKeyStringAnyThe name of the resource key which contains a localized description of this element.
enabledStringMBeanAttributeInfo, MBeanNotificationInfo, MBeanOperationInfoSpecifies whether the annotated element is currently enabled or not, via a value of either "true" or "false".
immutableInfoStringMBeanInfoIf the value of this field is "true", this means that the annotated element will not change and thus may be cached.
infoTimeoutString or LongMBeanInfoIf this field is present, and non-zero, it will contain a value in milliseconds for which the value of the annotated element will remain unchanged, allowing it to be safely cached for that period.
interfaceClassNameStringMBeanInfoThe Java interface name associated with the bean, as returned by Class.getName().
legalValuesSet<?>MBeanAttributeInfo, MBeanParameterInfoLegal values for an attribute or parameter.
maxValueObjectMBeanAttributeInfo, MBeanParameterInfoMaximum legal value for an attribute or parameter.
metricTypeStringMBeanAttributeInfo, MBeanOperationInfoSpecifies the type of metric represented by the annotated element. This will be either "counter" (an increasing value, which will only be reset and never decrease) or "gauge" (an increasing and decreasing value).
minValueObjectMBeanAttributeInfo, MBeanParameterInfoMinimum legal value for an attribute or parameter.
mxbeanStringMBeanInfoSpecifies whether the annotated element is an MXBean or not, via a value of either "true" or "false".
openTypeOpenTypeMBeanAttributeInfo, MBeanOperationInfoSpecifies the open type of the attribute or parameter, the return value of the operation or the user data of the notification respectively. This is present on Open*Info instances and for MXBeans.
originalTypeStringMBeanAttributeInfo, MBeanOperationInfo, MBeanParameterInfoThe original Java type of an element which has been converted to another type according to the MXBean typing rules. For example, MemoryType becomes a String after conversion. This field would contain "java.lang.management.MemoryType" to represent the earlier type of an element with the converted type.
severityInteger or StringMBeanNotificationInfoRepresents the severity of the notification, ranging from 1 (most severe) to 6 (least severe), with 0 representing unknown severity.
sinceStringAnyThe version in which this field was introduced.
unitsStringMBeanAttributeInfo, MBeanOperationInfo, MBeanParameterInfoThe units used by the value of an attribute or parameter, or the return value of an operation, such as "bytes", "milliseconds" or "kilogrammes".

Some names are also defined as part of the Model MBeans package. See javax.management.modelmbean.ModelMBeanInfo.

Since:
1.5

Method Summary

Object
clone()
Returns a clone of this descriptor, which can then be modified independently of this descriptor.
boolean
equals(Object obj)
Returns true if this descriptor is equivalent to the supplied object.
String[]
getFieldNames()
Returns the field names of the descriptor.
Object
getFieldValue(String name)
Returns the value of the specified field, or null if no value is present for the given field name.
Object[]
getFieldValues(java.lang.String... names)
Returns the values corresponding to the fields named in the specified array, in the same order.
String[]
getFields()
Returns all the field name and value pairs, in the form name=value.
int
hashCode()
Returns the hash code of the descriptor.
boolean
isValid()
Returns true if all the fields have legal values, given their names.
void
removeField(String name)
Removes a field from the descriptor.
void
setField(String name, Object value)
Attempts to set the specified field to the supplied value.
void
setFields(String[] names, Object[] values)
Sets the field named in the first array to the corresponding value specified in the second.

Method Details

clone

public Object clone()
            throws RuntimeOperationsException
Returns a clone of this descriptor, which can then be modified independently of this descriptor. If the descriptor is immutable, it is sufficient to return this instance.
Overrides:
clone in interface Object
Returns:
a clone of this descriptor.
Throws:
RuntimeOperationsException - if creation of the new descriptor fails for any reason.

equals

public boolean equals(Object obj)
Returns true if this descriptor is equivalent to the supplied object. This is true if the following holds:
  • The given object is also a Descriptor.
  • Has the same field names, independent of case.
  • Has the same values, based on the following:
    • If one value is null, the other must be.
    • If one value is a primitive array, the other must be a primitive array of the same type with the same elements.
    • If one value is an Object array, the other must be and Arrays.deepEquals(Object[],Object[]) must return true.
    • Otherwise, Object.equals(Object) must return true.
    Overrides:
    equals in interface Object
    Parameters:
    obj - the object to compare according to the above.
    Returns:
    true if the above holds.
    Since:
    1.6

    getFieldNames

    public String[] getFieldNames()
    Returns the field names of the descriptor. If the descriptor is empty, an empty array is returned.
    Returns:
    the field names as an array of Strings.

    getFieldValue

    public Object getFieldValue(String name)
    Returns the value of the specified field, or null if no value is present for the given field name.
    Parameters:
    name - the field name.
    Returns:
    the value of the field, or null if there is no value present.
    Throws:
    RuntimeOperationsException - if the field name is illegal.

    getFieldValues

    public Object[] getFieldValues(java.lang.String... names)
    Returns the values corresponding to the fields named in the specified array, in the same order. If an empty array is supplied, an empty array is returned. A value of null leads to behaviour equivalent to getFields(). Field values are obtained as specified in getFieldValue(String), with null being returned if the field is not present. This applies even if the given field name is null or the empty string.
    Parameters:
    names - an array of field names whose values should be returned.
    Returns:
    the values of the specified fields.

    getFields

    public String[] getFields()
    Returns all the field name and value pairs, in the form name=value. The value is converted to a String as follows:
    • If the value is a String, it is used as is.
    • If the value is null, the printed value will be empty.
    • Otherwise, the value will be converted to a String using its Object.toString() method, and included as "(" + string + ")".

    If the descriptor is empty, an empty array is returned.

    Returns:
    the field names and values as an array of Strings.

    hashCode

    public int hashCode()
    Returns the hash code of the descriptor. The hashcode is computed as the sum of the hashcodes for each field, which in turn is calculated as the sum of the hashcode of the name, n, computed using n.toLowerCase().hashCode(), and the hashcode of the value, v, computed using:
    • If v is null, then the hash code is 0.
    • If v is a primitive array, then the hash code is computed using the appropriate method from Arrays.
    • If v is an Object array, then the hash code is computed using the Arrays.deepHashCode(Object[]) method.
    • Otherwise, the hashcode is equal to v.hashCode().
    Overrides:
    hashCode in interface Object
    Returns:
    a hashcode for this descriptor.
    Since:
    1.6

    isValid

    public boolean isValid()
                throws RuntimeOperationsException
    Returns true if all the fields have legal values, given their names. Validity is determined by the implementation.
    Returns:
    true if the values are legal.
    Throws:
    RuntimeOperationsException - if the validity check fails for some reason.

    removeField

    public void removeField(String name)
    Removes a field from the descriptor. If the field name is illegal or not found, this method fails silently.
    Parameters:
    name - the name of the field to remove.
    Throws:
    RuntimeOperationsException - if the field exists and the descriptor is immutable. This wraps an UnsupportedOperationException.

    setField

    public void setField(String name,
                         Object value)
                throws RuntimeOperationsException
    Attempts to set the specified field to the supplied value. If the field does not exist, it will be created. If the field value given is invalid, then an exception will be thrown. Validity is determined by the implementation of the descriptor.
    Parameters:
    name - the field to set. Can not be null or empty.
    value - the value to use, the validity of which is determined by the implementation.
    Throws:
    RuntimeOperationsException - if the name or value is illegal (wrapping a IllegalArgumentException) or if the descriptor is immutable (wrapping a UnsupportedOperationException.

    setFields

    public void setFields(String[] names,
                          Object[] values)
    Sets the field named in the first array to the corresponding value specified in the second. The array sizes must match. Empty arrays have no effect. An invalid value will cause an exception to be thrown.
    Parameters:
    names - the names of the fields to change. Neither the array or its elements may be null.
    values - the values to use. The array must not be null. The value of the elements depends on the validity constraints of the implementation.
    Throws:
    RuntimeOperationsException - if the arrays differ in length, or a name or value is illegal (wrapping a IllegalArgumentException) or if the descriptor is immutable (wrapping a UnsupportedOperationException.

    Descriptor.java -- Metadata container. Copyright (C) 2007 Free Software Foundation, Inc. This file is part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.