org.springframework.jca.work
Class SimpleTaskWorkManager

java.lang.Object
  extended by org.springframework.jca.work.SimpleTaskWorkManager
All Implemented Interfaces:
WorkManager

public class SimpleTaskWorkManager
extends Object
implements WorkManager

Simple JCA 1.5 WorkManager implementation that delegates to a Spring TaskExecutor. Provides simple task execution including start timeouts, but without support for a JCA ExecutionContext (i.e. without support for imported transactions).

Uses a SyncTaskExecutor for doWork(javax.resource.spi.work.Work) calls and a SimpleAsyncTaskExecutor for startWork(javax.resource.spi.work.Work) and scheduleWork(javax.resource.spi.work.Work) calls, by default. These default task executors can be overridden through configuration.

NOTE: This WorkManager does not provide thread pooling by default! Specify a ThreadPoolTaskExecutor (or any other thread-pooling TaskExecutor) as "asyncTaskExecutor" in order to achieve actual thread pooling.

This WorkManager automatically detects a specified AsyncTaskExecutor implementation and uses its extended timeout functionality where appropriate. JCA WorkListeners are fully supported in any case.

Since:
2.0.3
Author:
Juergen Hoeller
See Also:
setSyncTaskExecutor(org.springframework.core.task.TaskExecutor), setAsyncTaskExecutor(org.springframework.core.task.AsyncTaskExecutor)

Field Summary
 
Fields inherited from interface javax.resource.spi.work.WorkManager
IMMEDIATE, INDEFINITE, UNKNOWN
 
Constructor Summary
SimpleTaskWorkManager()
           
 
Method Summary
 void doWork(Work work)
           
 void doWork(Work work, long startTimeout, ExecutionContext executionContext, WorkListener workListener)
           
protected  long executeWork(TaskExecutor taskExecutor, Work work, long startTimeout, boolean blockUntilStarted, ExecutionContext executionContext, WorkListener workListener)
          Execute the given Work on the specified TaskExecutor.
 void scheduleWork(Work work)
           
 void scheduleWork(Work work, long startTimeout, ExecutionContext executionContext, WorkListener workListener)
           
 void setAsyncTaskExecutor(AsyncTaskExecutor asyncTaskExecutor)
          Specify the TaskExecutor to use for asynchronous work execution (i.e.
 void setSyncTaskExecutor(TaskExecutor syncTaskExecutor)
          Specify the TaskExecutor to use for synchronous work execution (i.e.
 long startWork(Work work)
           
 long startWork(Work work, long startTimeout, ExecutionContext executionContext, WorkListener workListener)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SimpleTaskWorkManager

public SimpleTaskWorkManager()
Method Detail

setSyncTaskExecutor

public void setSyncTaskExecutor(TaskExecutor syncTaskExecutor)
Specify the TaskExecutor to use for synchronous work execution (i.e. doWork(javax.resource.spi.work.Work) calls).

Default is a SyncTaskExecutor.


setAsyncTaskExecutor

public void setAsyncTaskExecutor(AsyncTaskExecutor asyncTaskExecutor)
Specify the TaskExecutor to use for asynchronous work execution (i.e. startWork(javax.resource.spi.work.Work) and scheduleWork(javax.resource.spi.work.Work) calls).

This will typically (but not necessarily) be an AsyncTaskExecutor implementation. Default is a SimpleAsyncTaskExecutor.


doWork

public void doWork(Work work)
            throws WorkException
Specified by:
doWork in interface WorkManager
Throws:
WorkException

doWork

public void doWork(Work work,
                   long startTimeout,
                   ExecutionContext executionContext,
                   WorkListener workListener)
            throws WorkException
Specified by:
doWork in interface WorkManager
Throws:
WorkException

startWork

public long startWork(Work work)
               throws WorkException
Specified by:
startWork in interface WorkManager
Throws:
WorkException

startWork

public long startWork(Work work,
                      long startTimeout,
                      ExecutionContext executionContext,
                      WorkListener workListener)
               throws WorkException
Specified by:
startWork in interface WorkManager
Throws:
WorkException

scheduleWork

public void scheduleWork(Work work)
                  throws WorkException
Specified by:
scheduleWork in interface WorkManager
Throws:
WorkException

scheduleWork

public void scheduleWork(Work work,
                         long startTimeout,
                         ExecutionContext executionContext,
                         WorkListener workListener)
                  throws WorkException
Specified by:
scheduleWork in interface WorkManager
Throws:
WorkException

executeWork

protected long executeWork(TaskExecutor taskExecutor,
                           Work work,
                           long startTimeout,
                           boolean blockUntilStarted,
                           ExecutionContext executionContext,
                           WorkListener workListener)
                    throws WorkException
Execute the given Work on the specified TaskExecutor.

Parameters:
taskExecutor - the TaskExecutor to use
work - the Work to execute
startTimeout - the time duration within which the Work is supposed to start
blockUntilStarted - whether to block until the Work has started
executionContext - the JCA ExecutionContext for the given Work
workListener - the WorkListener to clal for the given Work
Returns:
the time elapsed from Work acceptance until start of execution (or -1 if not applicable or not known)
Throws:
WorkException - if the TaskExecutor did not accept the Work