Title: [1056] trunk/servicemix-core/src/main/java/org/servicemix/components/util/PollingComponentSupport.java: Updated PollingComponentSupport to improved Scheduling Engine
- Revision
- 1056
- Author
- gastaldi
- Date
- 2005-12-09 12:46:21 -0500 (Fri, 09 Dec 2005)
Log Message
Updated PollingComponentSupport to improved Scheduling Engine
Modified Paths
Diff
Modified: trunk/servicemix-core/src/main/java/org/servicemix/components/util/PollingComponentSupport.java (1055 => 1056)
--- trunk/servicemix-core/src/main/java/org/servicemix/components/util/PollingComponentSupport.java 2005-12-09 15:45:58 UTC (rev 1055)
+++ trunk/servicemix-core/src/main/java/org/servicemix/components/util/PollingComponentSupport.java 2005-12-09 17:46:21 UTC (rev 1056)
@@ -17,17 +17,18 @@
**/
package org.servicemix.components.util;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.servicemix.jbi.framework.ComponentContextImpl;
+import java.util.Date;
import javax.jbi.JBIException;
import javax.resource.spi.work.Work;
import javax.resource.spi.work.WorkManager;
-import java.util.Date;
-import java.util.Timer;
-import java.util.TimerTask;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.servicemix.components.varscheduler.ScheduleIterator;
+import org.servicemix.components.varscheduler.Scheduler;
+import org.servicemix.components.varscheduler.SchedulerTask;
+import org.servicemix.jbi.framework.ComponentContextImpl;
/**
* An implementation inheritence class for a component which polls some resource at periodic intervals to decide if
@@ -38,12 +39,14 @@
public abstract class PollingComponentSupport extends ComponentSupport implements Work {
private static final Log log = LogFactory.getLog(PollingComponentSupport.class);
private WorkManager workManager;
- private Timer timer;
+ private Scheduler scheduler;
private Date firstTime;
private long period = 5000;
private long delay;
- private TimerTask timerTask;
- private boolean started = false;
+ private SchedulerTask schedulerTask;
+ private ScheduleIterator scheduleIterator;
+ private boolean started;
+ private boolean scheduleExecutedFlag;
/**
* Polls the underlying resource to see if some event is required
@@ -51,7 +54,7 @@
* @throws JBIException
*/
public abstract void poll() throws Exception;
-
+
public void release() {
}
@@ -98,52 +101,51 @@
this.period = period;
}
- public Timer getTimer() {
- return timer;
+ public Scheduler getScheduler() {
+ return scheduler;
}
- public void setTimer(Timer timer) {
- this.timer = timer;
+ public void setScheduler(Scheduler scheduler) {
+ this.scheduler = scheduler;
}
-
+
public synchronized void start() throws JBIException {
if (!started) {
started = true;
- if (timerTask != null) {
- timerTask.cancel();
+ if (schedulerTask != null) {
+ schedulerTask.cancel();
}
- timerTask = new PollTimerTask();
- if (firstTime != null) {
- timer.scheduleAtFixedRate(timerTask, firstTime, period);
- }
- else {
- timer.scheduleAtFixedRate(timerTask, delay, period);
- }
+ schedulerTask = new PollTimerTask();
+ this.scheduler.schedule(schedulerTask,scheduleIterator);
}
super.start();
}
public synchronized void stop() throws JBIException {
- if (timerTask != null) {
- timerTask.cancel();
- timerTask = null;
+ if (schedulerTask != null) {
+ schedulerTask.cancel();
+ schedulerTask = null;
}
+ scheduleExecutedFlag = false;
started = false;
super.stop();
}
public synchronized void shutDown() throws JBIException {
stop();
- timer.cancel();
+ scheduler.cancel();
super.shutDown();
}
// Implementation methods
// -------------------------------------------------------------------------
protected void init() throws JBIException {
- if (timer == null) {
- timer = new Timer(true);
+ if (scheduler == null) {
+ scheduler = new Scheduler(true);
}
+ if (scheduleIterator != null) {
+ scheduleIterator = new PollIterator();
+ }
if (workManager == null) {
ComponentContextImpl context = (ComponentContextImpl) getContext();
workManager = context.getWorkManager();
@@ -152,7 +154,7 @@
}
- private class PollTimerTask extends TimerTask {
+ private class PollTimerTask extends SchedulerTask {
public void run() {
try {
// lets run the work inside the JCA worker pools to ensure
@@ -165,4 +167,19 @@
}
}
-}
+ private class PollIterator implements ScheduleIterator {
+ public Date nextExecution() {
+ long nextTime = System.currentTimeMillis();
+ if (scheduleExecutedFlag) {
+ nextTime += period;
+ } else {
+ if (firstTime != null) {
+ nextTime = firstTime.getTime();
+ }
+ nextTime += delay;
+ scheduleExecutedFlag = true;
+ }
+ return (started) ? new Date(nextTime) : null;
+ }
+ }
+}
\ No newline at end of file