public class SimpleTaskWorkManager extends java.lang.Object implements WorkManager
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.
setSyncTaskExecutor(org.springframework.core.task.TaskExecutor)
,
setAsyncTaskExecutor(org.springframework.core.task.AsyncTaskExecutor)
IMMEDIATE, INDEFINITE, UNKNOWN
Constructor and Description |
---|
SimpleTaskWorkManager() |
Modifier and Type | Method and Description |
---|---|
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) |
public void setSyncTaskExecutor(TaskExecutor syncTaskExecutor)
doWork(javax.resource.spi.work.Work)
calls).
Default is a SyncTaskExecutor
.
public void setAsyncTaskExecutor(AsyncTaskExecutor asyncTaskExecutor)
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
.
public void doWork(Work work) throws WorkException
doWork
in interface WorkManager
WorkException
public void doWork(Work work, long startTimeout, @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener) throws WorkException
doWork
in interface WorkManager
WorkException
public long startWork(Work work) throws WorkException
startWork
in interface WorkManager
WorkException
public long startWork(Work work, long startTimeout, @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener) throws WorkException
startWork
in interface WorkManager
WorkException
public void scheduleWork(Work work) throws WorkException
scheduleWork
in interface WorkManager
WorkException
public void scheduleWork(Work work, long startTimeout, @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener) throws WorkException
scheduleWork
in interface WorkManager
WorkException
protected long executeWork(TaskExecutor taskExecutor, Work work, long startTimeout, boolean blockUntilStarted, @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener) throws WorkException
taskExecutor
- the TaskExecutor to usework
- the Work to executestartTimeout
- the time duration within which the Work is supposed to startblockUntilStarted
- whether to block until the Work has startedexecutionContext
- the JCA ExecutionContext for the given WorkworkListener
- the WorkListener to clal for the given WorkWorkException
- if the TaskExecutor did not accept the Work