Ein Dienst des JDMK, welcher auf das Event-Modell aufsetzt, ist das Monitoring. Es können
wie in Kapitel 3.7.11 beschrieben, Gauge und Counter-Monitore verwendet werden.
Innerhalb des TIS-Management ist dies ein wesentlicher Punkt, da mit diesem Dienst die zur
Verfügung stehende Bandbreite für eine Übertragung und auch die Gesamtzahl der
Kommunikationsverbindungen überwacht werden kann.
Die Handhabung erfolgt wie bei den benutzerdefinierten Events. Es ist ebenso eine Event-Klasse,
welche die Klasse MonitorEvent
(von JDMK angeboten) erweitert, zu
implementieren. Damit kann zusätzliche Information in ein Event-Objekt integriert werden.
Allerdings ist die Handhabung der auftretenden Events umfangreicher wie bei
den benutzerdefinierten Events. Dies betrifft insbesondere die jeweilige Client-Applikation und
die Monitor-Listener-Klasse. Die wesentlichen Punkte sind nachfolgend aufgeführt:
package ... imports ... ... public class Client implements Runnable { ... // Create a counter monitor m-bean. // String GkStatsCurrentNoOfCallsMonitorClass = "com.sun.jaw.impl.agent.services.monitor.CounterMonitor"; ObjectName GkStatsCurrentNoOfCallsMonitorName = new ObjectName(domain + ":com.sun.jaw.impl.agent.services.monitor.CounterMonitorMO.id =GkStatsCurrentNoOfCalls"); CounterMonitorMO GkStatsCurrentNoOfCallsMonitor = (CounterMonitorMO) adaptor.cb_newMO(GkStatsCurrentNoOfCallsMonitorClass, GkStatsCurrentNoOfCallsMonitorName, null); ... // Set the values of the counter monitor object. // The counter monitor will check every second the value of the // "GkStatsCurrentNoOfCalls" property for the GkStatistics m-bean. // A threshold reached monitor event will be emited if the // "GkStatsCurrentNoOfCalls" property value reached or exceeded the // comparison level. // If the comparison level is reached or exceeded the comparison level // will be incremented by the offset value. // GkStatsCurrentNoOfCallsMonitor .setObservedObject(GkStatisticsImplName); GkStatsCurrentNoOfCallsMonitor .setObservedProperty("GkStatsCurrentNoOfCalls"); GkStatsCurrentNoOfCallsMonitor .setNotifyOnOff(Boolean.TRUE); GkStatsCurrentNoOfCallsMonitor .setComparisonLevel(GkStatsCurrentNoOfCallsHigh); GkStatsCurrentNoOfCallsMonitor .setOffsetValue(offSet); GkStatsCurrentNoOfCallsMonitor .setGranularityPeriod(new Integer(1000)); GkStatsCurrentNoOfCallsMonitor .setModulusValue(new Integer(32)); GkStatsCurrentNoOfCallsMonitor .performStart(); ... // Register a monitor listener with the counter monitor, // enabling the client to receive monitor events emitted by the // counter monitor. // GkStatsCurrentNoOfCallsMonitor.addMonitorListenerMO(listen); ...Wie aus dem Beispiel ersichtlich, kann ebenso die Überwachung ausgesetzt (
setNotifyOn/Off
),
das Listener-Objekt aktiviert/deaktiviert (performStart/Stop
) und die Zeitspanne der
Überwachungszeitpunkte (setGranularityPeriod
) angegeben werden.
packages ... imports ... ... public class Client implements Runnable { ... // Create a gauge monitor m-bean. // String GkStatsCurrentBandwidthMonitorClass = "com.sun.jaw.impl.agent.services.monitor.GaugeMonitor"; ObjectName GkStatsCurrentBandwidthMonitorName = new ObjectName(domain + ":com.sun.jaw.impl.agent.services.monitor.GaugeMonitorMO.id =GkStatsCurrentBandwidth"); GaugeMonitorMO GkStatsCurrentBandwidthMonitor = (GaugeMonitorMO) adaptor.cb_newMO(GkStatsCurrentBandwidthMonitorClass, GkStatsCurrentBandwidthMonitorName, null); ... // Initialize the threshold values for the gauge monitor. Integer GkStatsCurrentBandwidthHigh = new Integer(GkStatisticsImpl.getGkStatsCurrentBandwidth() .intValue() + 15); Integer GkStatsCurrentBandwidthLow = new Integer(GkStatisticsImpl.getGkStatsCurrentBandwidth() .intValue() - 15); // Set the values of the gauge monitor object. // The gauge monitor will check every second the value of the // "GkStatsCurrentBandwidth" property for the AskMe m-bean. // A threshold high monitor event will be emited if the // "GkStatsCurrentBandwidth" // property value reached or exceeded the high threshold value. // A threshold low monitor event will be emited if the // "GkStatsCurrentBandwidth" // property value reached or fell below the low threshold value. GkStatsCurrentBandwidthMonitor .setObservedObject(GkStatisticsImplName); GkStatsCurrentBandwidthMonitor .setObservedProperty("GkStatsCurrentBandwidth"); GkStatsCurrentBandwidthMonitor .setNotifyLowOnOff(Boolean.TRUE); GkStatsCurrentBandwidthMonitor .setNotifyHighOnOff(Boolean.TRUE); GkStatsCurrentBandwidthMonitor .setThresholdLowValue(GkStatsCurrentBandwidthLow); GkStatsCurrentBandwidthMonitor .setThresholdHighValue(GkStatsCurrentBandwidthHigh); GkStatsCurrentBandwidthMonitor .setGranularityPeriod(new Integer(1000)); GkStatsCurrentBandwidthMonitor.performStart(); // Register a monitor listener with the gauge monitor, // enabling the client to receive monitor events emitted by the // gauge monitor. GkStatsCurrentBandwidthMonitor.addMonitorListenerMO(listen); ...
packages ... imports ... ... public class ClientListener implements MonitorListenerMO { ... public void handleMonitor(MonitorEventMO event) { // Get a handle on the monitor responsable for the event // emmited. MonitorMO Monitor = (MonitorMO) event.getSource(); // Process the different types of events fired by the monitors. // try { switch (event.getMonitorEventType().intValue()) { case MonitorEvent.COMPARISON_LEVEL_EVT: case MonitorEvent.GRANULARITY_PERIOD_EVT: case MonitorEvent.MODULUS_VALUE_EVT: case MonitorEvent.OBSERVED_OBJECT_EVT: case MonitorEvent.OBSERVED_PROPERTY_EVT: case MonitorEvent.OBSERVED_PROPERTY_TYPE_EVT: case MonitorEvent.OFFSET_VALUE_EVT: case MonitorEvent.THRESHIGH_LOWER_THAN_THRESLOW_EVT: case MonitorEvent.THRESHOLD_TYPE_EVT: case MonitorEvent.THRESHOLD_HIGH_VALUE_EXCEEDED_EVT: System.out.println("Clientlistener: Monitor event -- " + event.getMonitorEventObservedProperty() + " Has Exceeded The Threshold High -- Value = " + event.getMonitorEventDerivedGauge()); System.out.println("Clientlistener: GkStatsCurrentBandwidth HIGH"); break; case MonitorEvent.THRESHOLD_LOW_VALUE_EXCEEDED_EVT: System.out.println("Clientlistener: Monitor event - " + event.getMonitorEventObservedProperty() + " Has Exceeded The Threshold Low >> Value = " + event.getMonitorEventDerivedGauge()); System.out.println("Clientlistener: GkStatsCurrentBandwidth LOW"); break; case MonitorEvent.THRESHOLD_VALUE_REACHED_EVT: System.out.println("Clientlistener: Monitor event -- " + event.getMonitorEventObservedProperty() + " Has Reached The Threshold -- Value " + event.getMonitorEventDerivedGauge()); System.out.println("Clientlistener: GkStatsCurrentNoOfCalls increased by 5"); break; default: System.out.println("Clientlistener: Unknown event Type (?)"); } } catch (Exception e) { System.out.println("Got An Exception !"); System.out.println(e); } ... }