## org.springframework.jca.work
Class SimpleTaskWorkManager

    java.lang.Object
      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.TaskExecutor)`

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(TaskExecutor 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(TaskExecutor 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

Copyright © 2002-2008 The Spring Framework.