package jpaoletti.jpm.struts; import java.util.List; import java.util.Timer; import java.util.TimerTask; import jpaoletti.jpm.core.monitor.Monitor; import jpaoletti.jpm.core.monitor.MonitorObserver; /** * This class is an observer of the monitor specific for Web implementations. As * a Web interface cannot be called, then we don't know when to stop observing. * So this observer implements a timer. If the getLines method is not called * since 3 times the delay monitor parameter, we asume that this observer is no * longer needed and delete from observers list. * * @author jpaoletti * * */ public class StrutsMonitorObserver extends MonitorObserver { private Timer timer; /** * Constructor * * @param monitor The monitor to observe */ public StrutsMonitorObserver(Monitor monitor) { super(monitor); schedule(); } private void schedule() { timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { getMonitor().deleteObserver(self()); } }; timer.schedule(task, getMonitor().getDelay() * 3); } private StrutsMonitorObserver self() { return this; } @Override public synchronized List<String> getLines() { timer.cancel(); timer.purge(); schedule(); List<String> lines = super.getLines(); return lines; } }