org.springframework.scheduling.concurrent
Class ConcurrentTaskScheduler

java.lang.Object
  extended by org.springframework.scheduling.concurrent.ConcurrentTaskExecutor
      extended by org.springframework.scheduling.concurrent.ConcurrentTaskScheduler
All Implemented Interfaces:
java.util.concurrent.Executor, AsyncTaskExecutor, TaskExecutor, SchedulingTaskExecutor, TaskScheduler

public class ConcurrentTaskScheduler
extends ConcurrentTaskExecutor
implements TaskScheduler

Adapter that takes a JDK 1.5 java.util.concurrent.ScheduledExecutorService and exposes a Spring TaskScheduler for it. Extends ConcurrentTaskExecutor in order to implement the SchedulingTaskExecutor interface as well.

Note that there is a pre-built ThreadPoolTaskScheduler that allows for defining a JDK 1.5 ScheduledThreadPoolExecutor in bean style, exposing it as a Spring TaskScheduler directly. This is a convenient alternative to a raw ScheduledThreadPoolExecutor definition with a separate definition of the present adapter class.

Since:
3.0
Author:
Juergen Hoeller, Mark Fisher
See Also:
ScheduledExecutorService, ScheduledThreadPoolExecutor, Executors, ThreadPoolTaskScheduler

Field Summary
private  ErrorHandler errorHandler
           
private  java.util.concurrent.ScheduledExecutorService scheduledExecutor
           
 
Fields inherited from interface org.springframework.core.task.AsyncTaskExecutor
TIMEOUT_IMMEDIATE, TIMEOUT_INDEFINITE
 
Constructor Summary
ConcurrentTaskScheduler()
          Create a new ConcurrentTaskScheduler, using a single thread executor as default.
ConcurrentTaskScheduler(java.util.concurrent.Executor concurrentExecutor, java.util.concurrent.ScheduledExecutorService scheduledExecutor)
          Create a new ConcurrentTaskScheduler, using the given JDK 1.5 executors as delegates.
ConcurrentTaskScheduler(java.util.concurrent.ScheduledExecutorService scheduledExecutor)
          Create a new ConcurrentTaskScheduler, using the given JDK 1.5 executor as shared delegate.
 
Method Summary
private  java.lang.Runnable errorHandlingTask(java.lang.Runnable task, boolean isRepeatingTask)
           
 java.util.concurrent.ScheduledFuture schedule(java.lang.Runnable task, java.util.Date startTime)
          Schedule the given Runnable, invoking it at the specified execution time.
 java.util.concurrent.ScheduledFuture schedule(java.lang.Runnable task, Trigger trigger)
          Schedule the given Runnable, invoking it whenever the trigger indicates a next execution time.
 java.util.concurrent.ScheduledFuture scheduleAtFixedRate(java.lang.Runnable task, java.util.Date startTime, long period)
          Schedule the given Runnable, invoking it at the specified execution time and subsequently with the given period.
 java.util.concurrent.ScheduledFuture scheduleAtFixedRate(java.lang.Runnable task, long period)
          Schedule the given Runnable, starting as soon as possible and invoking it with the given period.
 java.util.concurrent.ScheduledFuture scheduleWithFixedDelay(java.lang.Runnable task, java.util.Date startTime, long delay)
          Schedule the given Runnable, invoking it at the specified execution time and subsequently with the given delay between the completion of one execution and the start of the next.
 java.util.concurrent.ScheduledFuture scheduleWithFixedDelay(java.lang.Runnable task, long delay)
          Schedule the given Runnable, starting as soon as possible and invoking it with the given delay between the completion of one execution and the start of the next.
 void setErrorHandler(ErrorHandler errorHandler)
          Provide an ErrorHandler strategy.
 void setScheduledExecutor(java.util.concurrent.ScheduledExecutorService scheduledExecutor)
          Specify the JDK 1.5 scheduled executor to delegate to.
 
Methods inherited from class org.springframework.scheduling.concurrent.ConcurrentTaskExecutor
execute, execute, getConcurrentExecutor, prefersShortLivedTasks, setConcurrentExecutor, submit, submit
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

scheduledExecutor

private volatile java.util.concurrent.ScheduledExecutorService scheduledExecutor

errorHandler

private volatile ErrorHandler errorHandler
Constructor Detail

ConcurrentTaskScheduler

public ConcurrentTaskScheduler()
Create a new ConcurrentTaskScheduler, using a single thread executor as default.

See Also:
Executors.newSingleThreadScheduledExecutor()

ConcurrentTaskScheduler

public ConcurrentTaskScheduler(java.util.concurrent.ScheduledExecutorService scheduledExecutor)
Create a new ConcurrentTaskScheduler, using the given JDK 1.5 executor as shared delegate.

Parameters:
scheduledExecutor - the JDK 1.5 scheduled executor to delegate to for SchedulingTaskExecutor as well as TaskScheduler invocations

ConcurrentTaskScheduler

public ConcurrentTaskScheduler(java.util.concurrent.Executor concurrentExecutor,
                               java.util.concurrent.ScheduledExecutorService scheduledExecutor)
Create a new ConcurrentTaskScheduler, using the given JDK 1.5 executors as delegates.

Parameters:
concurrentExecutor - the JDK 1.5 concurrent executor to delegate to for SchedulingTaskExecutor invocations
scheduledExecutor - the JDK 1.5 scheduled executor to delegate to for TaskScheduler invocations
Method Detail

setScheduledExecutor

public final void setScheduledExecutor(java.util.concurrent.ScheduledExecutorService scheduledExecutor)
Specify the JDK 1.5 scheduled executor to delegate to.

Note: This will only apply to TaskScheduler invocations. If you want the given executor to apply to SchedulingTaskExecutor invocations as well, pass the same executor reference to ConcurrentTaskExecutor.setConcurrentExecutor(java.util.concurrent.Executor).

See Also:
ConcurrentTaskExecutor.setConcurrentExecutor(java.util.concurrent.Executor)

setErrorHandler

public void setErrorHandler(ErrorHandler errorHandler)
Provide an ErrorHandler strategy.


schedule

public java.util.concurrent.ScheduledFuture schedule(java.lang.Runnable task,
                                                     Trigger trigger)
Description copied from interface: TaskScheduler
Schedule the given Runnable, invoking it whenever the trigger indicates a next execution time.

Execution will end once the scheduler shuts down or the returned ScheduledFuture gets cancelled.

Specified by:
schedule in interface TaskScheduler
Parameters:
task - the Runnable to execute whenever the trigger fires
trigger - an implementation of the Trigger interface, e.g. a CronTrigger object wrapping a cron expression
Returns:
a ScheduledFuture representing pending completion of the task, or null if the given Trigger object never fires (i.e. returns null from Trigger.nextExecutionTime(org.springframework.scheduling.TriggerContext))
See Also:
CronTrigger

schedule

public java.util.concurrent.ScheduledFuture schedule(java.lang.Runnable task,
                                                     java.util.Date startTime)
Description copied from interface: TaskScheduler
Schedule the given Runnable, invoking it at the specified execution time.

Execution will end once the scheduler shuts down or the returned ScheduledFuture gets cancelled.

Specified by:
schedule in interface TaskScheduler
Parameters:
task - the Runnable to execute whenever the trigger fires
startTime - the desired execution time for the task (if this is in the past, the task will be executed immediately, i.e. as soon as possible)
Returns:
a ScheduledFuture representing pending completion of the task

scheduleAtFixedRate

public java.util.concurrent.ScheduledFuture scheduleAtFixedRate(java.lang.Runnable task,
                                                                java.util.Date startTime,
                                                                long period)
Description copied from interface: TaskScheduler
Schedule the given Runnable, invoking it at the specified execution time and subsequently with the given period.

Execution will end once the scheduler shuts down or the returned ScheduledFuture gets cancelled.

Specified by:
scheduleAtFixedRate in interface TaskScheduler
Parameters:
task - the Runnable to execute whenever the trigger fires
startTime - the desired first execution time for the task (if this is in the past, the task will be executed immediately, i.e. as soon as possible)
period - the interval between successive executions of the task (in milliseconds)
Returns:
a ScheduledFuture representing pending completion of the task

scheduleAtFixedRate

public java.util.concurrent.ScheduledFuture scheduleAtFixedRate(java.lang.Runnable task,
                                                                long period)
Description copied from interface: TaskScheduler
Schedule the given Runnable, starting as soon as possible and invoking it with the given period.

Execution will end once the scheduler shuts down or the returned ScheduledFuture gets cancelled.

Specified by:
scheduleAtFixedRate in interface TaskScheduler
Parameters:
task - the Runnable to execute whenever the trigger fires
period - the interval between successive executions of the task (in milliseconds)
Returns:
a ScheduledFuture representing pending completion of the task

scheduleWithFixedDelay

public java.util.concurrent.ScheduledFuture scheduleWithFixedDelay(java.lang.Runnable task,
                                                                   java.util.Date startTime,
                                                                   long delay)
Description copied from interface: TaskScheduler
Schedule the given Runnable, invoking it at the specified execution time and subsequently with the given delay between the completion of one execution and the start of the next.

Execution will end once the scheduler shuts down or the returned ScheduledFuture gets cancelled.

Specified by:
scheduleWithFixedDelay in interface TaskScheduler
Parameters:
task - the Runnable to execute whenever the trigger fires
startTime - the desired first execution time for the task (if this is in the past, the task will be executed immediately, i.e. as soon as possible)
delay - the delay between the completion of one execution and the start of the next (in milliseconds)
Returns:
a ScheduledFuture representing pending completion of the task

scheduleWithFixedDelay

public java.util.concurrent.ScheduledFuture scheduleWithFixedDelay(java.lang.Runnable task,
                                                                   long delay)
Description copied from interface: TaskScheduler
Schedule the given Runnable, starting as soon as possible and invoking it with the given delay between the completion of one execution and the start of the next.

Execution will end once the scheduler shuts down or the returned ScheduledFuture gets cancelled.

Specified by:
scheduleWithFixedDelay in interface TaskScheduler
Parameters:
task - the Runnable to execute whenever the trigger fires
delay - the interval between successive executions of the task (in milliseconds)
Returns:
a ScheduledFuture representing pending completion of the task

errorHandlingTask

private java.lang.Runnable errorHandlingTask(java.lang.Runnable task,
                                             boolean isRepeatingTask)