/* * JBoss, the OpenSource EJB server * * Distributable under LGPL license. * See terms of license at gnu.org. */ package javax.management.monitor; import javax.management.MBeanAttributeInfo; import javax.management.MBeanNotificationInfo; // REVIEW: Check synchronization /** * The string monitor service. * * @author Adrian Brock * @version $Revision: 1.1 $ * */ public class StringMonitor extends Monitor implements StringMonitorMBean { // Constants ----------------------------------------------------- /** * The string match has been notified. */ int STRING_MATCHES_NOTIFIED = 16; /** * The string differs has been notified. */ int STRING_DIFFERS_NOTIFIED = 32; // Attributes ---------------------------------------------------- /** * The derived gauge. */ private String derivedGauge = new String(); /** * The derived gauge timeStamp. */ private long derivedGaugeTimeStamp = 0; /** * The comparison string. */ String stringToCompare = new String(); /** * Notify Matches. */ boolean notifyMatch = false; /** * Notify Differs. */ boolean notifyDiffer = false; // Static -------------------------------------------------------- // Constructors -------------------------------------------------- /** * Default Constructor */ public StringMonitor() { dbgTag = "StringMonitor"; } // Public -------------------------------------------------------- public MBeanNotificationInfo[] getNotificationInfo() { MBeanNotificationInfo[] result = new MBeanNotificationInfo[1]; String[] types = new String[] { MonitorNotification.RUNTIME_ERROR, MonitorNotification.OBSERVED_OBJECT_ERROR, MonitorNotification.OBSERVED_ATTRIBUTE_ERROR, MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR, MonitorNotification.STRING_TO_COMPARE_VALUE_MATCHED, MonitorNotification.STRING_TO_COMPARE_VALUE_DIFFERED }; result[0] = new MBeanNotificationInfo(types, "javax.management.monitor.MonitorNotification", "Notifications sent by the String Monitor Service MBean"); return result; } // StringMonitorMBean implementation ----------------------------- public String getDerivedGauge() { return derivedGauge; } public long getDerivedGaugeTimeStamp() { return derivedGaugeTimeStamp; } public String getStringToCompare() { return stringToCompare; } public void setStringToCompare(String value) throws IllegalArgumentException { if (value == null) throw new IllegalArgumentException("Null string to compare."); this.stringToCompare = value; } public boolean getNotifyMatch() { return notifyMatch; } public void setNotifyMatch(boolean value) { notifyMatch = value; } public boolean getNotifyDiffer() { return notifyDiffer; } public void setNotifyDiffer(boolean value) { notifyDiffer = value; } // Override start to set initial gauge. public synchronized void start() { derivedGauge = new String(); derivedGaugeTimeStamp = System.currentTimeMillis(); super.start(); } // Package protected --------------------------------------------- void monitor(MBeanAttributeInfo attributeInfo, Object value) throws Exception { // Must be a string. if (!(value instanceof String)) { sendAttributeTypeErrorNotification("Not a string attribute"); return; } // Get the gauge and record when we got it. derivedGauge = (String) value; derivedGaugeTimeStamp = System.currentTimeMillis(); // Try to fire the relevant event. if (value.equals(stringToCompare)) sendStringMatchesNotification((String) value); else sendStringDiffersNotification((String) value); } /** * Send an string matches notification.
* * This is only performed when requested and it has not already been sent. * * @param value the attribute value. */ void sendStringMatchesNotification(String value) { if (notifyMatch && ((alreadyNotified & STRING_MATCHES_NOTIFIED) == 0)) { sendNotification(MonitorNotification.STRING_TO_COMPARE_VALUE_MATCHED, derivedGaugeTimeStamp, "matches", observedAttribute, value, stringToCompare); alreadyNotified |= STRING_MATCHES_NOTIFIED; } alreadyNotified &= ~STRING_DIFFERS_NOTIFIED; } /** * Send an string differs notification.
* * This is only performed when requested and it has not already been sent. * * @param value the attribute value. */ void sendStringDiffersNotification(String value) { if (notifyDiffer && ((alreadyNotified & STRING_DIFFERS_NOTIFIED) == 0)) { sendNotification(MonitorNotification.STRING_TO_COMPARE_VALUE_DIFFERED, derivedGaugeTimeStamp, "differs", observedAttribute, value, stringToCompare); alreadyNotified |= STRING_DIFFERS_NOTIFIED; } alreadyNotified &= ~STRING_MATCHES_NOTIFIED; } // Protected ----------------------------------------------------- // Private ------------------------------------------------------- // Inner classes ------------------------------------------------- }