package org.goldenorb.server; import java.util.List; import java.util.Set; import org.goldenorb.zookeeper.OrbZKFailure; import org.goldenorb.zookeeper.ZookeeperUtils; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooKeeper; /** * An implementation of Watcher to watch either the JobQueue node or JobsInProgress node and update an * OrbTrackerMemberDataServiceImpl servlet when the number of child nodes changes. */ public class JobsMonitor implements Watcher { private String jobsPath; private OrbTrackerMemberDataServiceImpl statusServer; private List<String> jobs; private ZooKeeper zk; private String nodeName; public JobsMonitor(String jobQueuePath, OrbTrackerMemberDataServiceImpl statusServer, ZooKeeper zk) throws OrbZKFailure { this.jobsPath = jobQueuePath; this.statusServer = statusServer; this.zk = zk; String splitPath[] = jobQueuePath.split("/"); this.nodeName = splitPath[splitPath.length - 1]; jobs = ZookeeperUtils.getChildren(zk, jobQueuePath, this); statusServer.updateJobs(jobs.toArray(new String[0]), nodeName); } @Override public void process(WatchedEvent event) { if (event.getType() != Event.EventType.NodeDeleted) { try { jobs = ZookeeperUtils.getChildren(zk, jobsPath, this); if (event.getType() == Event.EventType.NodeChildrenChanged) { statusServer.updateJobs(jobs.toArray(new String[0]), nodeName); } } catch (Exception e) { e.printStackTrace(); } } else { // node was deleted return null String[] tmp = null; statusServer.updateJobs(tmp, nodeName); statusServer.watcherNodeDeleted(nodeName); } } }