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

Reply via email to