From d4575c1582e2fbf2ca3bb733042a86a41065e124 Mon Sep 17 00:00:00 2001 From: kbajaj01 Date: Wed, 6 Feb 2008 20:09:53 +0000 Subject: [PATCH] Removed schedule at fixed delay from symmetric-jobs.xml, job now re-schedules based on completion of current task. Expectation is variability in completion of individual tasks will force random sequencing of push/pull requests. NGPHASE-3172 --- .../jumpmind/symmetric/job/AbstractJob.java | 86 ++++++++++++++++--- .../src/main/resources/symmetric-jobs.xml | 31 +++---- 2 files changed, 91 insertions(+), 26 deletions(-) diff --git a/symmetric/src/main/java/org/jumpmind/symmetric/job/AbstractJob.java b/symmetric/src/main/java/org/jumpmind/symmetric/job/AbstractJob.java index 4d30b87969..dd58e2dc4d 100644 --- a/symmetric/src/main/java/org/jumpmind/symmetric/job/AbstractJob.java +++ b/symmetric/src/main/java/org/jumpmind/symmetric/job/AbstractJob.java @@ -20,22 +20,42 @@ package org.jumpmind.symmetric.job; +import java.util.Timer; import java.util.TimerTask; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.logging.Log; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.beans.factory.BeanNameAware; -abstract public class AbstractJob extends TimerTask { - +abstract public class AbstractJob extends TimerTask implements BeanFactoryAware, BeanNameAware +{ DataSource dataSource; - + + private boolean needsRescheduled; + + private long rescheduleDelay; + + private BeanFactory beanFactory; + + private String beanName; + @Override - public void run() { - try { + public void run() + { + try + { doJob(); - } catch (Throwable ex) { + if (isNeedsRescheduled()) + { + reschedule(); + } + } + catch (final Throwable ex) + { getLogger().error(ex, ex); } } @@ -43,15 +63,59 @@ public void run() { abstract void doJob() throws Exception; abstract Log getLogger(); - - protected void printDatabaseStats() { - if (getLogger().isDebugEnabled() && dataSource instanceof BasicDataSource) { - BasicDataSource ds = (BasicDataSource)dataSource; + + protected void reschedule() + { + final Timer timer = new Timer(); + timer.schedule((TimerTask) beanFactory.getBean(beanName), getRescheduleDelay()); + if (getLogger().isDebugEnabled()) + { + getLogger().debug("Rescheduling " + beanName + " with " + getRescheduleDelay() + " ms delay."); + } + } + + protected void printDatabaseStats() + { + if (getLogger().isDebugEnabled() && dataSource instanceof BasicDataSource) + { + final BasicDataSource ds = (BasicDataSource) dataSource; getLogger().debug("There are currently " + ds.getNumActive() + " active database connections."); } } - public void setDataSource(DataSource dataSource) { + public void setBeanFactory(final BeanFactory beanFactory) + { + this.beanFactory = beanFactory; + } + + public void setBeanName(final String beanName) + { + this.beanName = beanName; + } + + public void setDataSource(final DataSource dataSource) + { this.dataSource = dataSource; } + + public boolean isNeedsRescheduled() + { + return needsRescheduled; + } + + public void setNeedsRescheduled(final boolean needsRescheduled) + { + this.needsRescheduled = needsRescheduled; + } + + public void setRescheduleDelay(final long rescheduleDelay) + { + this.rescheduleDelay = rescheduleDelay; + } + + public long getRescheduleDelay() + { + return rescheduleDelay; + } + } diff --git a/symmetric/src/main/resources/symmetric-jobs.xml b/symmetric/src/main/resources/symmetric-jobs.xml index 82828feaa6..21bd73331a 100644 --- a/symmetric/src/main/resources/symmetric-jobs.xml +++ b/symmetric/src/main/resources/symmetric-jobs.xml @@ -28,24 +28,24 @@ http://www.springframework.org/schema/util http://www.springframework.org/schema - - - - - - - - + + + + + + + + @@ -53,18 +53,19 @@ http://www.springframework.org/schema/util http://www.springframework.org/schema - - - - - - - + + + + + + + +