FileDocCategorySizeDatePackage
Monitor.javaAPI DocJava SE 5 API21875Fri Aug 26 14:57:36 BST 2005javax.management.monitor

Monitor

public abstract class Monitor extends NotificationBroadcasterSupport implements MBeanRegistration, MonitorMBean
Defines the common part to all monitor MBeans. A monitor MBean monitors values of an attribute common to a set of observed MBeans. The observed attribute is monitored at intervals specified by the granularity period. A gauge value (derived gauge) is derived from the values of the observed attribute.
version
4.42 05/18/04
author
Sun Microsystems, Inc
since
1.5

Fields Summary
private List
observedObjects
List of MBeans to which the attribute to observe belongs.
The default value is set to null.
private String
observedAttribute
Attribute to observe.
The default value is set to null.
private long
granularityPeriod
Monitor granularity period (in milliseconds).
The default value is set to 10 seconds.
protected static final int
capacityIncrement
The amount by which the capacity of the monitor arrays are automatically incremented when their size becomes greater than their capacity.
protected int
elementCount
The number of valid components in the vector of observed objects.
protected int
alreadyNotified
Monitor errors that have already been notified.
protected int[]
alreadyNotifieds

Selected monitor errors that have already been notified.

Each element in this array corresponds to an observed object in the vector. It contains a bit mask of the flags {@link #OBSERVED_OBJECT_ERROR_NOTIFIED} etc, indicating whether the corresponding notification has already been sent for the MBean being monitored.

protected MBeanServer
server
Reference on the MBean server. This reference is null when the monitor MBean is not registered in an MBean server. This reference is initialized before the monitor MBean is registered in the MBean server.
protected static final int
RESET_FLAGS_ALREADY_NOTIFIED
This flag is used to reset the {@link #alreadyNotifieds alreadyNotifieds} monitor attribute.
protected static final int
OBSERVED_OBJECT_ERROR_NOTIFIED
Flag denoting that a notification has occurred after changing the observed object. This flag is used to check that the new observed object is registered in the MBean server at the time of the first notification.
protected static final int
OBSERVED_ATTRIBUTE_ERROR_NOTIFIED
Flag denoting that a notification has occurred after changing the observed attribute. This flag is used to check that the new observed attribute belongs to the observed object at the time of the first notification.
protected static final int
OBSERVED_ATTRIBUTE_TYPE_ERROR_NOTIFIED
Flag denoting that a notification has occurred after changing the observed object or the observed attribute. This flag is used to check that the observed attribute type is correct (depending on the monitor in use) at the time of the first notification.
protected static final int
RUNTIME_ERROR_NOTIFIED
Flag denoting that a notification has occurred after changing the observed object or the observed attribute. This flag is used to notify any exception (except the cases described above) when trying to get the value of the observed attribute at the time of the first notification.
protected String
dbgTag
This field is retained for compatibility but should not be referenced.
boolean
isActive
Monitor state. The default value is set to false.
long
sequenceNumber
Monitor sequence number. The default value is set to 0.
Constructors Summary
Methods Summary
public synchronized voidaddObservedObject(javax.management.ObjectName object)
Adds the specified object in the set of observed MBeans, if this object is not already present.

param
object The object to observe.
exception
IllegalArgumentException The specified object is null.
since.unbundled
JMX 1.2


        if (object == null) {
            throw new IllegalArgumentException("Null observed object");
        }

	// Check that the specified object is not already contained
	//
	if (observedObjects.contains(object)) {
	    return;
	}

	// Add the specified object in the list.
	//
	observedObjects.add(object);

	// Update alreadyNotified array.
	//
	int value = RESET_FLAGS_ALREADY_NOTIFIED;
	value &= ~(OBSERVED_OBJECT_ERROR_NOTIFIED |
		   OBSERVED_ATTRIBUTE_ERROR_NOTIFIED |
		   OBSERVED_ATTRIBUTE_TYPE_ERROR_NOTIFIED);
	if (alreadyNotifieds.length >= elementCount)
	    alreadyNotifieds = expandArray(alreadyNotifieds);
	alreadyNotifieds[elementCount] = value;

	updateDeprecatedAlreadyNotified();

	// Update other specific arrays.
	//
	insertSpecificElementAt(elementCount);

	// Update elementCount.
	//
	elementCount++;
    
synchronized booleanalreadyNotified(int index, int mask)

	return ((alreadyNotifieds[index] & mask) != 0);
    
public booleancontainsObservedObject(javax.management.ObjectName object)
Tests whether the specified object is in the set of observed MBeans.

param
object The object to check.
return
true if the specified object is present, false otherwise.
since.unbundled
JMX 1.2

	synchronized(this) {
        return observedObjects.contains(object);
    }
    
static voiddebug(java.lang.String clz, java.lang.String func, java.lang.String info)

        Trace.send(Trace.LEVEL_DEBUG, Trace.INFO_MONITOR, clz, func, info);
    
voiddebug(java.lang.String func, java.lang.String info)

        debug(dbgTag, func, info);
    
int[]expandArray(int[] array)

	int[] newArray = new int[array.length + capacityIncrement];
	System.arraycopy(array, 0, newArray, 0, array.length);
	return newArray;
    
long[]expandArray(long[] array)

	long[] newArray = new long[array.length + capacityIncrement];
	System.arraycopy(array, 0, newArray, 0, array.length);
	return newArray;
    
java.lang.Number[]expandArray(java.lang.Number[] array)

	Number[] newArray = new Number[array.length + capacityIncrement];
	System.arraycopy(array, 0, newArray, 0, array.length);
	return newArray;
    
boolean[]expandArray(boolean[] array)

	boolean[] newArray = new boolean[array.length + capacityIncrement];
	System.arraycopy(array, 0, newArray, 0, array.length);
	return newArray;
    
java.lang.String[]expandArray(java.lang.String[] array)

	String[] newArray = new String[array.length + capacityIncrement];
	System.arraycopy(array, 0, newArray, 0, array.length);
	return newArray;
    
public synchronized longgetGranularityPeriod()
Gets the granularity period (in milliseconds).
The default value of the granularity period is 10 seconds.

return
The granularity period value.
see
#setGranularityPeriod

        return granularityPeriod;
    
public java.lang.StringgetObservedAttribute()
Gets the attribute being observed.
The observed attribute is not initialized by default (set to null).

return
The attribute being observed.
see
#setObservedAttribute

        return observedAttribute;
    
public javax.management.ObjectNamegetObservedObject()
Returns the object name of the first object in the set of observed MBeans, or null if there is no such object.

return
The object being observed.
see
#setObservedObject(ObjectName)
deprecated
As of JMX 1.2, replaced by {@link #getObservedObjects}

	synchronized(this) {
	    if (observedObjects.isEmpty()) {
		return null;
	    } else {
        return (ObjectName)observedObjects.get(0);
    }
	}
    
synchronized javax.management.ObjectNamegetObservedObject(int index)
Gets the {@link ObjectName} of the object at the specified index in the list of observed MBeans.

return
The observed object at the specified index.
exception
ArrayIndexOutOfBoundsException If the index is invalid.

        return (ObjectName)observedObjects.get(index);
    
public javax.management.ObjectName[]getObservedObjects()
Returns an array containing the objects being observed.

return
The objects being observed.
since.unbundled
JMX 1.2

	ObjectName[] objects;
	synchronized(this) {
	    objects = new ObjectName[elementCount];
	    for (int i=0; i<elementCount; i++) {
          objects[i] = (ObjectName)observedObjects.get(i);
        }
	}
        return objects;
    
synchronized intindexOf(javax.management.ObjectName object)
Searches for the first occurence of the given argument, testing for equality using the equals method.

        return observedObjects.indexOf(object);
    
voidinsertSpecificElementAt(int index)
This method is overridden by the specific monitor classes (Counter, Gauge and String). It updates all the specific arrays after adding a new observed object in the list. The method is not abstract so that this class can be subclassed by classes outside this package.

public synchronized booleanisActive()
Tests whether the monitor MBean is active. A monitor MBean is marked active when the {@link #start start} method is called. It becomes inactive when the {@link #stop stop} method is called.

return
true if the monitor MBean is active, false otherwise.

        return isActive;
    
static booleanisDebugOn()

        return Trace.isSelected(Trace.LEVEL_DEBUG, Trace.INFO_MONITOR);
    
static booleanisTraceOn()


    // TRACES & DEBUG
    //---------------

       
        return Trace.isSelected(Trace.LEVEL_TRACE, Trace.INFO_MONITOR);
    
public voidpostDeregister()
Allows the monitor MBean to perform any operations needed after having been unregistered by the MBean server.

Not used in this context.

    
public voidpostRegister(java.lang.Boolean registrationDone)
Allows the monitor MBean to perform any operations needed after having been registered in the MBean server or after the registration has failed.

Not used in this context.

    
public voidpreDeregister()
Allows the monitor MBean to perform any operations it needs before being unregistered by the MBean server.

Stops the monitor.

exception
java.lang.Exception


        if (isTraceOn()) {
            trace("preDeregister", "stop the monitor");
        }

        // Stop the Monitor.
        //
        stop();
    
public javax.management.ObjectNamepreRegister(javax.management.MBeanServer server, javax.management.ObjectName name)
Allows the monitor MBean to perform any operations it needs before being registered in the MBean server.

Initializes the reference to the MBean server.

param
server The MBean server in which the monitor MBean will be registered.
param
name The object name of the monitor MBean.
return
The name of the monitor MBean registered.
exception
java.lang.Exception


        if (isTraceOn()) {
            trace("preRegister",
		  "initialize the reference on the MBean server");
        }

        this.server = server;
        return name;
    
synchronized voidremoveElementAt(int[] array, int index)
Removes the component at the specified index from the specified int array.

        if (index < 0 || index >= elementCount)
            return;
        int j = elementCount - index - 1;
        if (j > 0) {
            System.arraycopy(array, index + 1, array, index, j);
        }
    
synchronized voidremoveElementAt(long[] array, int index)
Removes the component at the specified index from the specified long array.

        if (index < 0 || index >= elementCount)
            return;
        int j = elementCount - index - 1;
        if (j > 0) {
            System.arraycopy(array, index + 1, array, index, j);
        }
    
synchronized voidremoveElementAt(boolean[] array, int index)
Removes the component at the specified index from the specified boolean array.

        if (index < 0 || index >= elementCount)
            return;
        int j = elementCount - index - 1;
        if (j > 0) {
            System.arraycopy(array, index + 1, array, index, j);
        }
    
synchronized voidremoveElementAt(java.lang.Object[] array, int index)
Removes the component at the specified index from the specified Number array.

        if (index < 0 || index >= elementCount)
            return;
        int j = elementCount - index - 1;
        if (j > 0) {
            System.arraycopy(array, index + 1, array, index, j);
        }
	array[elementCount - 1] = null;
    
public voidremoveObservedObject(javax.management.ObjectName object)
Removes the specified object from the set of observed MBeans.

param
object The object to remove.
since.unbundled
JMX 1.2

	synchronized(this) {
            int index = observedObjects.indexOf(object);
	    if (index >= 0) {
		observedObjects.remove(index);

            // Update alreadyNotifieds array.
            //
            removeElementAt(alreadyNotifieds, index);
	    updateDeprecatedAlreadyNotified();

            // Update other specific arrays.
            //
            removeSpecificElementAt(index);

            // Update elementCount.
            //
            elementCount--;
        }
    }
    
voidremoveSpecificElementAt(int index)
This method is overridden by the specific monitor classes (Counter, Gauge and String). It updates all the specific arrays after removing an observed object from the vector. The method is not abstract so that this class can be subclassed by classes outside this package.

synchronized voidresetAllAlreadyNotified(int index)
Reset all bits in the given element of {@link #alreadyNotifieds}. Ensure the deprecated {@link #alreadyNotified} field is updated if appropriate.

	alreadyNotifieds[index] = 0;
	if (index == 0)
	    updateDeprecatedAlreadyNotified();
    
synchronized voidresetAlreadyNotified(int index, int mask)
Reset the given bits in the given element of {@link #alreadyNotifieds}. Ensure the deprecated {@link #alreadyNotified} field is updated if appropriate.

	alreadyNotifieds[index] &= ~mask;
	if (index == 0)
	    updateDeprecatedAlreadyNotified();
    
voidsendNotification(java.lang.String type, long timeStamp, java.lang.String msg, java.lang.Object derGauge, java.lang.Object trigger, int index)
This method is used by the monitor MBean create and send a monitor notification to all the listeners registered for this kind of notification.

param
type The notification type.
param
timeStamp The notification emission date.
param
msg The notification message.
param
derGauge The derived gauge.
param
trigger The threshold/string (depending on the monitor type) that triggered off the notification.
param
index The index of the observed object that triggered off the notification.


	if (isTraceOn()) {
	    trace("sendNotification", "send notification:" +
		  "\n\tNotification observed object = " +
		  getObservedObject(index) +
		  "\n\tNotification observed attribute = " +
		  observedAttribute +
		  "\n\tNotification derived gauge = " +
		  derGauge);
	}

	long seqno;
	synchronized (this) {
	    seqno = sequenceNumber++;
	}

	sendNotification(new MonitorNotification(type,
						 this,
						 seqno,
						 timeStamp,
						 msg,
						 getObservedObject(index),
						 observedAttribute,
						 derGauge,
						 trigger));
    
synchronized voidsetAlreadyNotified(int index, int mask)
Set the given bits in the given element of {@link #alreadyNotifieds}. Ensure the deprecated {@link #alreadyNotified} field is updated if appropriate.

	alreadyNotifieds[index] |= mask;
	if (index == 0)
	    updateDeprecatedAlreadyNotified();
    
public synchronized voidsetGranularityPeriod(long period)
Sets the granularity period (in milliseconds).
The default value of the granularity period is 10 seconds.

param
period The granularity period value.
exception
java.lang.IllegalArgumentException The granularity period is less than or equal to zero.
see
#getGranularityPeriod


        if (period <= 0) {
            throw new IllegalArgumentException("Nonpositive granularity " +
					       "period");
        }
        granularityPeriod = period;
    
public voidsetObservedAttribute(java.lang.String attribute)
Sets the attribute to observe.
The observed attribute is not initialized by default (set to null).

param
attribute The attribute to observe.
exception
java.lang.IllegalArgumentException The specified attribute is null.
see
#getObservedAttribute


        if (attribute == null) {
            throw new IllegalArgumentException("Null observed attribute");
        }

        // Update alreadyNotified array.
        //
	synchronized(this) {
	    observedAttribute = attribute;

        for (int i = 0; i < elementCount; i++) {
	    resetAlreadyNotified(i,
				 OBSERVED_ATTRIBUTE_ERROR_NOTIFIED |
				 OBSERVED_ATTRIBUTE_TYPE_ERROR_NOTIFIED);
        }
    }
    
public synchronized voidsetObservedObject(javax.management.ObjectName object)
Removes all objects from the set of observed objects, and then adds the specified object.

param
object The object to observe.
exception
java.lang.IllegalArgumentException The specified object is null.
see
#getObservedObject()
deprecated
As of JMX 1.2, replaced by {@link #addObservedObject}

	while (!observedObjects.isEmpty()) {
	    removeObservedObject((ObjectName)observedObjects.get(0));
	}

	addObservedObject(object);
    
public abstract voidstart()
Starts the monitor.

public abstract voidstop()
Stops the monitor.

static voidtrace(java.lang.String clz, java.lang.String func, java.lang.String info)

        Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MONITOR, clz, func, info);
    
voidtrace(java.lang.String func, java.lang.String info)

        trace(dbgTag, func, info);
    
synchronized voidupdateDeprecatedAlreadyNotified()
Update the deprecated {@link #alreadyNotified} field.

	if (elementCount > 0)
	    alreadyNotified = alreadyNotifieds[0];
	else
	    alreadyNotified = 0;