src/share/classes/sun/jvmstat/perfdata/monitor/protocol/local/LocalMonitoredVm.java

Print this page




 126             int oldInterval = interval;
 127             super.setInterval(newInterval);
 128 
 129             if (task != null) {
 130                 task.cancel();
 131                 NotifierTask oldTask = task;
 132                 task = new NotifierTask();
 133                 LocalEventTimer timer = LocalEventTimer.getInstance();
 134                 CountedTimerTaskUtils.reschedule(timer, oldTask, task,
 135                                                  oldInterval, newInterval);
 136             }
 137         }
 138     }
 139 
 140     /**
 141      * Fire MonitoredVmStructureChanged events.
 142      *
 143      * @param inserted List of Monitor objects inserted.
 144      * @param removed List of Monitor objects removed.
 145      */
 146     void fireMonitorStatusChangedEvents(List inserted, List removed) {

 147         MonitorStatusChangeEvent ev = null;
 148         ArrayList registered = null;
 149 
 150         synchronized (listeners) {
 151             registered = (ArrayList)listeners.clone();
 152         }
 153 
 154         for (Iterator i = registered.iterator(); i.hasNext(); /* empty */) {
 155             VmListener l = (VmListener)i.next();
 156             // lazily create the event object;
 157             if (ev == null) {
 158                 ev = new MonitorStatusChangeEvent(this, inserted, removed);
 159             }
 160             l.monitorStatusChanged(ev);
 161         }
 162     }
 163 
 164     /**
 165      * Fire MonitoredUpdated events.
 166      */
 167     void fireMonitorsUpdatedEvents() {
 168         VmEvent ev = null;
 169         ArrayList<VmListener> registered = null;
 170 
 171         synchronized (listeners) {
 172             registered = cast(listeners.clone());
 173         }
 174 
 175         for (VmListener l :  registered) {
 176             // lazily create the event object;
 177             if (ev == null) {
 178                 ev = new VmEvent(this);
 179             }
 180             l.monitorsUpdated(ev);
 181         }
 182     }
 183 
 184     /**
 185      * Class to notify listeners of Monitor related events for
 186      * the target JVM.
 187      */
 188     private class NotifierTask extends CountedTimerTask {
 189         public void run() {
 190             super.run();
 191             try {
 192                 MonitorStatus status = getMonitorStatus();
 193                 List inserted = status.getInserted();
 194                 List removed = status.getRemoved();
 195 
 196                 if (!inserted.isEmpty() || !removed.isEmpty()) {
 197                     fireMonitorStatusChangedEvents(inserted, removed);
 198                 }
 199                 fireMonitorsUpdatedEvents();
 200             } catch (MonitorException e) {
 201                 // XXX: use logging api
 202                 System.err.println("Exception updating monitors for "
 203                                    + getVmIdentifier());
 204                 e.printStackTrace();
 205             }
 206         }
 207     }
 208     // Suppress unchecked cast warning msg.
 209     @SuppressWarnings("unchecked")
 210     static <T> T cast(Object x) {
 211         return (T) x;
 212     }
 213 }


 126             int oldInterval = interval;
 127             super.setInterval(newInterval);
 128 
 129             if (task != null) {
 130                 task.cancel();
 131                 NotifierTask oldTask = task;
 132                 task = new NotifierTask();
 133                 LocalEventTimer timer = LocalEventTimer.getInstance();
 134                 CountedTimerTaskUtils.reschedule(timer, oldTask, task,
 135                                                  oldInterval, newInterval);
 136             }
 137         }
 138     }
 139 
 140     /**
 141      * Fire MonitoredVmStructureChanged events.
 142      *
 143      * @param inserted List of Monitor objects inserted.
 144      * @param removed List of Monitor objects removed.
 145      */
 146     @SuppressWarnings("unchecked") // Cast of result of clone
 147     void fireMonitorStatusChangedEvents(List<Monitor> inserted, List<Monitor> removed) {
 148         MonitorStatusChangeEvent ev = null;
 149         ArrayList<VmListener> registered = null;
 150 
 151         synchronized (listeners) {
 152             registered = (ArrayList)listeners.clone();
 153         }
 154 
 155         for (Iterator<VmListener> i = registered.iterator(); i.hasNext(); /* empty */) {
 156             VmListener l = i.next();
 157             // lazily create the event object;
 158             if (ev == null) {
 159                 ev = new MonitorStatusChangeEvent(this, inserted, removed);
 160             }
 161             l.monitorStatusChanged(ev);
 162         }
 163     }
 164 
 165     /**
 166      * Fire MonitoredUpdated events.
 167      */
 168     void fireMonitorsUpdatedEvents() {
 169         VmEvent ev = null;
 170         ArrayList<VmListener> registered = null;
 171 
 172         synchronized (listeners) {
 173             registered = cast(listeners.clone());
 174         }
 175 
 176         for (VmListener l :  registered) {
 177             // lazily create the event object;
 178             if (ev == null) {
 179                 ev = new VmEvent(this);
 180             }
 181             l.monitorsUpdated(ev);
 182         }
 183     }
 184 
 185     /**
 186      * Class to notify listeners of Monitor related events for
 187      * the target JVM.
 188      */
 189     private class NotifierTask extends CountedTimerTask {
 190         public void run() {
 191             super.run();
 192             try {
 193                 MonitorStatus status = getMonitorStatus();
 194                 List<Monitor> inserted = status.getInserted();
 195                 List<Monitor> removed = status.getRemoved();
 196 
 197                 if (!inserted.isEmpty() || !removed.isEmpty()) {
 198                     fireMonitorStatusChangedEvents(inserted, removed);
 199                 }
 200                 fireMonitorsUpdatedEvents();
 201             } catch (MonitorException e) {
 202                 // XXX: use logging api
 203                 System.err.println("Exception updating monitors for "
 204                                    + getVmIdentifier());
 205                 e.printStackTrace();
 206             }
 207         }
 208     }
 209     // Suppress unchecked cast warning msg.
 210     @SuppressWarnings("unchecked")
 211     static <T> T cast(Object x) {
 212         return (T) x;
 213     }
 214 }