FileDocCategorySizeDatePackage
MutableBoundedRangeStatisticImpl.javaAPI DocGlassfish v2 API8753Fri May 04 22:25:48 BST 2007com.sun.enterprise.admin.monitor.stats

MutableBoundedRangeStatisticImpl

public class MutableBoundedRangeStatisticImpl extends Object implements MutableCountStatistic, javax.management.j2ee.statistics.BoundedRangeStatistic
An implementation of MutableCountStatistic that provides ways to change the state externally through mutators. Convenience class that is useful for components that gather the statistical data. By merely changing the count (which is a mandatory measurement), rest of the statistical information could be deduced.
author
Kedar Mhaswade
see
BoundedRangeStatisticImpl for an immutable implementation
since
S1AS8.0
version
1.0

Fields Summary
private final javax.management.j2ee.statistics.BoundedRangeStatistic
initial
private long
current
private long
lastSampleTime
private long
startTime
private long
lowWaterMark
private long
highWaterMark
Constructors Summary
public MutableBoundedRangeStatisticImpl(javax.management.j2ee.statistics.BoundedRangeStatistic initial)
Constructs an instance of MutableCountStatistic that encapsulates the given Statistic. The only parameter denotes the initial state of this statistic. It is guaranteed that the initial state is preserved internally, so that one can reset to the initial state.

param
initial an instance of BoundedRangeStatistic that represents initial state

        this.initial        = initial;
        this.current        = initial.getCurrent();
        this.lastSampleTime = initial.getLastSampleTime();
        this.startTime      = initial.getStartTime();
        this.lowWaterMark   = initial.getLowWaterMark();
        this.highWaterMark  = initial.getHighWaterMark();
    
Methods Summary
public longgetCurrent()

	return ( this.current );
    
public java.lang.StringgetDescription()

	return ( initial.getDescription());
    
public longgetHighWaterMark()

	return ( this.highWaterMark );
    
public longgetLastSampleTime()

	return ( this.lastSampleTime );
    
public longgetLowWaterMark()

	return ( this.lowWaterMark );
    
public longgetLowerBound()

	return ( initial.getLowerBound() );
    
public java.lang.StringgetName()

	return ( initial.getName() );
    
public longgetStartTime()

	return ( initial.getStartTime() );
    
public java.lang.StringgetUnit()

	return ( initial.getUnit() );
    
public longgetUpperBound()

	return ( initial.getUpperBound() );
    
public javax.management.j2ee.statistics.StatisticmodifiableView()

	return ( this );
    
public voidreset()
Resets to the initial state. It is guaranteed that following changes occur to the statistic if this method is called:
  • The current value is reset to initial value.
  • The lastSampleTime is reset to current time in milliseconds.
  • The startTime is reset to lastSampleTime.
  • The highWaterMark is reset to the initial value.
  • The lowWaterMark is reset to the initial value.
The remaining meta data in the encapsulated statistic is unchanged. The upper and lower bounds are untouched.

        this.current                = initial.getCurrent();
        this.lastSampleTime         = System.currentTimeMillis();
        this.startTime              = this.lastSampleTime;
        this.highWaterMark          = initial.getHighWaterMark();
        this.lowWaterMark           = initial.getLowWaterMark();
    
public voidsetCount(long current)
Changes the current value of the encapsulated BoundedRangeStatistic to the given value. Since this is the only mutator exposed here, here are the other side effects of calling this method:
  • lastSampleTime is set to current time in milliseconds.
  • highWaterMark is accordingly adjusted.
  • lowWaterMark is accordingly adjusted.
In a real-time system with actual probes for measurement, the lastSampleTime could be different from the instant when this method is called, but that is deemed insignificant.

param
count long that represents the current value of the Statistic.

        this.current            = current;
        this.lastSampleTime     = System.currentTimeMillis();
        
        this.lowWaterMark   = (current < this.lowWaterMark) ? (current) : (this.lowWaterMark);
        this.highWaterMark  = (current > this.highWaterMark) ? (current) : (this.highWaterMark);
	this.lastSampleTime = System.currentTimeMillis();
    
public voidsetDescription(java.lang.String s)

        try {
            ((StatisticImpl)this.initial).setDescription(s);
        }
        catch(final Exception e) {
        }
    
public javax.management.j2ee.statistics.StatisticunmodifiableView()
This method is the essence of this class. It provides the read-only view of encapsulated Statistic. If the clients have to know the Statistic, this is what should be called by actual data collecting component to return the value to them. The principle advantage is from the data collecting component's standpoint, in that it does not have to create instances of BoundedRangeStatistic when its current value is queried/measured.

see
#reset
see
#setCount
return
instance of BoundedRangeStatistic

        return ( new BoundedRangeStatisticImpl(
            this.current,               // this is the actual changing statistic
            this.highWaterMark,         // highWaterMark may change per current
            this.lowWaterMark,          // lowWaterMark may change per current
            initial.getUpperBound(),    // upperBound is not designed to change
            initial.getLowerBound(),    // lowerBound is not designed to change
            initial.getName(),          // name does not change
            initial.getUnit(),          // unit does not change
            initial.getDescription(),   // description does not change
            this.startTime,              // changes if reset is called earlier
            this.lastSampleTime        // changes all the time!
        ));