Update of /var/cvs/applications/crontab/src/org/mmbase/applications/crontab/builders In directory james.mmbase.org:/tmp/cvs-serv25619/builders
Modified Files: CronJobs.java Log Message: using event-mechanism to be cluster-aware See also: http://cvs.mmbase.org/viewcvs/applications/crontab/src/org/mmbase/applications/crontab/builders Index: CronJobs.java =================================================================== RCS file: /var/cvs/applications/crontab/src/org/mmbase/applications/crontab/builders/CronJobs.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -b -r1.7 -r1.8 --- CronJobs.java 29 Jul 2008 10:01:21 -0000 1.7 +++ CronJobs.java 4 Aug 2008 15:32:28 -0000 1.8 @@ -10,6 +10,8 @@ import org.mmbase.applications.crontab.*; import org.mmbase.bridge.*; import org.mmbase.module.core.*; +import org.mmbase.core.event.NodeEvent; +import org.mmbase.core.event.Event; import org.mmbase.util.logging.*; import java.util.*; @@ -18,7 +20,7 @@ * The builder also starts the CronDeamon. on startup the list of cronjobs is loaded into memory. * <b>The builder uses the bridge to get a cloud using class security.</b> * @author Kees Jongenburger - * @version $Id: CronJobs.java,v 1.7 2008/07/29 10:01:21 michiel Exp $ + * @version $Id: CronJobs.java,v 1.8 2008/08/04 15:32:28 michiel Exp $ */ public class CronJobs extends MMObjectBuilder implements Runnable { @@ -27,9 +29,7 @@ CronDaemon cronDaemon = null; public CronJobs() { - Thread t = new Thread(this); - t.setDaemon(true); - t.start(); + org.mmbase.util.ThreadPools.jobsExecutor.execute(this); } /** @@ -54,7 +54,7 @@ entry = new NodeCronEntry(node); NodeList servers = node.getRelatedNodes("mmservers"); if (servers.size() > 0) { - String machineName = MMBase.getMMBase().getMachineName(); + String machineName = MMBaseContext.getMachineName(); boolean found = false; for (int i=0; i<servers.size(); i++) { Node server = servers.getNode(i); @@ -81,82 +81,68 @@ } } - /** - * Inserts a cronjob into the database, and create and adds a cronEntry to the CronDeamon - */ - public int insert(String owner, MMObjectNode objectNodenode) { - int number = super.insert(owner, objectNodenode); + public void notify(NodeEvent event) { + log.info("Received " + event); + switch(event.getType()) { + case Event.TYPE_NEW: { try { - if (cronDaemon != null) { - Node node = getCloud().getNode(number); + Node node = getCloud().getNode(event.getNodeNumber()); cronDaemon.add(new NodeCronEntry(node)); - } } catch (Exception e) { - throw new RuntimeException("error while creating cron entry with id " + number + " error " + e.getMessage(), e); + throw new RuntimeException("error while creating cron entry with id " + event.getNodeNumber() + " error " + e.getMessage()); } - return number; + break; } - - /** - * Commits a cronjob to the database. - * On commit of a cronjob, the job is first removed from the cronDeamon and a new cronEntry is created and added to the CronDaemon. - */ - public boolean commit(MMObjectNode node) { - Set<String> changed = node.getChanged(); - boolean retval = super.commit(node); - CronEntry entry = cronDaemon.getCronEntry("" + node.getNumber()); + case Event.TYPE_DELETE: { + String number = "" + event.getNodeNumber(); + CronEntry entry = cronDaemon.getCronEntry(number); + if (entry != null) { + cronDaemon.remove(entry); + } + break; + } + case Event.TYPE_CHANGE: { + CronEntry entry = cronDaemon.getCronEntry("" + event.getNodeNumber()); if (entry == null) { - log.warn("cron entry with ID " + node.getNumber() + " was not found. this usualy means it was invalid"); + log.warn("cron entry with ID " + event.getNodeNumber() + " was not found. this usualy means it was invalid"); } else { if (entry instanceof NodeCronEntry) { + Set<String> changed = event.getChangedFields(); if (changed.contains("classfile") || changed.contains("name") || + changed.contains("crontime") || changed.contains("type")) { log.debug("Changed fields " + changed); cronDaemon.remove(entry); + try { + Node n = getCloud().getNode(event.getNodeNumber()); + CronEntry newEntry = new NodeCronEntry(n); + log.debug("Replacing cronentry " + entry + " with " + newEntry); + cronDaemon.add(newEntry); + } catch (Exception e) { + throw new RuntimeException("error while creating cron entry with id " + event.getNodeNumber() + " error " + e.getMessage()); + } } else { - log.debug("Ignored " + node); - return retval; + log.debug("Ignored " + event); } } else { log.warn("How come, " + entry + " is not a node-entry"); - cronDaemon.remove(entry); } } - try { - log.debug("Replacing cronentry " + entry); - Node n = getCloud().getNode(node.getNumber()); - cronDaemon.add(new NodeCronEntry(n)); - } catch (Exception e) { - throw new RuntimeException("error while creating cron entry with id " + node.getNumber() + " error " + e.getMessage()); + break; } - return retval; + default: { + log.debug("Ignored " + event); } - /** - * removes the node from the database and also removes it from the CronDaemon - */ - public void removeNode(MMObjectNode objectNodenode) { - String number = "" + objectNodenode.getNumber(); - super.removeNode(objectNodenode); - CronEntry entry = cronDaemon.getCronEntry(number); - if (entry != null) { - cronDaemon.remove(entry); - } } + } private Cloud getCloud() { - return LocalContext.getCloudContext().getCloud("mmbase"); + return LocalContext.getCloudContext().getCloud("mmbase", "class", null); } - /** - * sets the default type and crontime (does not work) - */ - public void setDefaults(MMObjectNode node) { - super.setDefaults(node); - node.setValue("type", CronEntry.Type.DEFAULT.ordinal()); - node.setValue("crontime", "*/5 * * * *"); - } + } _______________________________________________ Cvs mailing list Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs