javax.resource.spi.work

## Interface WorkManager

- All Known Subinterfaces:
    DistributableWorkManager

      public interface WorkManager

  This interface models a `WorkManager` which provides a facility to submit `Work` instances for execution. This frees the user from having to create Java threads directly to do work. Further, this allows efficient pooling of thread resources and more control over thread usage. The various stages in `Work` processing are:
  - work submit: A `Work` instance is being submitted for execution. The `Work` instance could either be accepted or rejected with a `WorkRejectedException` set to an appropriate error code.
  - work accepted: The submitted `Work` instance has been accepted. The accepted `Work` instance could either start execution or could be rejected again with a `WorkRejectedException` set to an appropriate error code. There is no guarantee on when the execution would start unless a start timeout duration is specified. When a start timeout is specified, the `Work` execution must be started within the specified duration (not a real-time guarantee), failing which a `WorkRejectedException` set to an error code (`WorkRejected.TIMED_OUT`) is thrown.
  - work rejected: The `Work` instance has been rejected. The `Work` instance could be rejected during `Work` submittal or after the `Work` instance has been accepted (but before Work instance starts execution). The rejection could be due to internal factors or start timeout expiration. A `WorkRejectedException` with an appropriate error code (indicates the reason) is thrown in both cases.
  - work started: The execution of the `Work` instance has started. This means that a thread has been allocated for its execution. But this does not guarantee that the allocated thread has been scheduled to run on a CPU resource. Once execution is started, the allocated thread sets up an appropriate execution context (transaction , security, etc) and calls Work.run(). Note, any exception thrown during execution context setup or Work.run() leads to completion of processing.
  - work completed: The execution of the `Work` has been completed. The execution could complete with or without an exception. The `WorkManager` catches any exception thrown during `Work` processing (which includes execution context setup), and wraps it with a `WorkCompletedException`.
  Version:
    1.0
  Author:
    Ram Jeyaraman

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static long` | `IMMEDIATE` A constant to indicate timeout duration.
    `static long` | `INDEFINITE` A constant to indicate timeout duration.
    `static long` | `UNKNOWN` A constant to indicate an unknown start delay duration or other unknown values.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `doWork(Work work)` Accepts a `Work` instance for processing.
    `void` | `doWork(Work work, long startTimeout, ExecutionContext execContext, WorkListener workListener)` Accepts a `Work` instance for processing.
    `void` | `scheduleWork(Work work)` Accepts a `Work` instance for processing.
    `void` | `scheduleWork(Work work, long startTimeout, ExecutionContext execContext, WorkListener workListener)` Accepts a `Work` instance for processing.
    `long` | `startWork(Work work)` Accepts a `Work` instance for processing.
    `long` | `startWork(Work work, long startTimeout, ExecutionContext execContext, WorkListener workListener)` Accepts a `Work` instance for processing.

- - ### Field Detail

    - #### IMMEDIATE

          static final long IMMEDIATE

      A constant to indicate timeout duration. A zero timeout value indicates an action be performed immediately. The WorkManager implementation must timeout the action as soon as possible.
      See Also:
        Constant Field Values

    - #### INDEFINITE

          static final long INDEFINITE

      A constant to indicate timeout duration. A maximum timeout value indicates that an action be performed arbitrarily without any time constraint.
      See Also:
        Constant Field Values

    - #### UNKNOWN

          static final long UNKNOWN

      A constant to indicate an unknown start delay duration or other unknown values.
      See Also:
        Constant Field Values

  - ### Method Detail

    - #### doWork

          void doWork(Work work)
               throws WorkException

      Accepts a `Work` instance for processing. This call blocks until the `Work` instance completes execution. There is no guarantee on when the accepted `Work` instance would start execution ie., there is no time constraint to start execution. (that is, startTimeout=INDEFINITE)
      Parameters:
        `work` - The unit of work to be done. Could be long or short-lived.
      Throws:
        `WorkException` - Thrown if an error occurs
        `WorkRejectedException` - indicates that a `Work` instance has been rejected from further processing. This can occur due to internal factors.
        `WorkCompletedException` - indicates that a `Work` instance has completed execution with an exception.

    - #### doWork

          void doWork(Work work,
                      long startTimeout,
                      ExecutionContext execContext,
                      WorkListener workListener)
               throws WorkException

      Accepts a `Work` instance for processing. This call blocks until the `Work` instance completes execution.
      Parameters:
        `work` - The unit of work to be done. Could be long or short-lived.
        `startTimeout` - a time duration (in milliseconds) within which the execution of the `Work` instance must start. Otherwise, the `Work` instance is rejected with a `WorkRejectedException` set to an appropriate error code (`WorkRejectedException.TIMED_OUT`). Note, this does not offer real-time guarantees.
        `execContext` - an object containing the execution context with which the submitted `Work` instance must be executed.
        `workListener` - an object which would be notified when the various `Work` processing events (work accepted, work rejected, work started, work completed) occur.
      Throws:
        `WorkException` - Thrown if an error occurs
        `WorkRejectedException` - indicates that a `Work` instance has been rejected from further processing. This can occur due to internal factors or start timeout expiration.
        `WorkCompletedException` - indicates that a `Work` instance has completed execution with an exception.

    - #### startWork

          long startWork(Work work)
                  throws WorkException

      Accepts a `Work` instance for processing. This call blocks until the `Work` instance starts execution but not until its completion. There is no guarantee on when the accepted `Work` instance would start execution ie., there is no time constraint to start execution (that is, startTimeout=INDEFINITE)
      Parameters:
        `work` - The unit of work to be done. Could be long or short-lived.
      Returns:
        the time elapsed (in milliseconds) from `Work` acceptance until start of execution. Note, this does not offer real-time guarantees. It is valid to return -1, if the actual start delay duration is unknown.
      Throws:
        `WorkException` - Thrown if an error occurs
        `WorkRejectedException` - indicates that a `Work` instance has been rejected from further processing. This can occur due to internal factors.

    - #### startWork

          long startWork(Work work,
                         long startTimeout,
                         ExecutionContext execContext,
                         WorkListener workListener)
                  throws WorkException

      Accepts a `Work` instance for processing. This call blocks until the `Work` instance starts execution but not until its completion. There is no guarantee on when the accepted `Work` instance would start execution ie., there is no time constraint to start execution.
      Parameters:
        `work` - The unit of work to be done. Could be long or short-lived.
        `startTimeout` - a time duration (in milliseconds) within which the execution of the `Work` instance must start. Otherwise, the `Work` instance is rejected with a `WorkRejectedException` set to an appropriate error code (`WorkRejectedException.TIMED_OUT`). Note, this does not offer real-time guarantees.
        `execContext` - an object containing the execution context with which the submitted `Work` instance must be executed.
        `workListener` - an object which would be notified when the various `Work` processing events (work accepted, work rejected, work started, work completed) occur.
      Returns:
        the time elapsed (in milliseconds) from `Work` acceptance until start of execution. Note, this does not offer real-time guarantees. It is valid to return -1, if the actual start delay duration is unknown.
      Throws:
        `WorkException` - Thrown if an error occurs
        `WorkRejectedException` - indicates that a `Work` instance has been rejected from further processing. This can occur due to internal factors or start timeout expiration.

    - #### scheduleWork

          void scheduleWork(Work work)
                     throws WorkException

      Accepts a `Work` instance for processing. This call does not block and returns immediately once a `Work` instance has been accepted for processing. There is no guarantee on when the submitted `Work` instance would start execution ie., there is no time constraint to start execution (that is, startTimeout=INDEFINITE).
      Parameters:
        `work` - The unit of work to be done. Could be long or short-lived.
      Throws:
        `WorkException` - Thrown if an error occurs
        `WorkRejectedException` - indicates that a `Work` instance has been rejected from further processing. This can occur due to internal factors.

    - #### scheduleWork

          void scheduleWork(Work work,
                            long startTimeout,
                            ExecutionContext execContext,
                            WorkListener workListener)
                     throws WorkException

      Accepts a `Work` instance for processing. This call does not block and returns immediately once a `Work` instance has been accepted for processing.
      Parameters:
        `work` - The unit of work to be done. Could be long or short-lived.
        `startTimeout` - a time duration (in milliseconds) within which the execution of the `Work` instance must start. Otherwise, the `Work` instance is rejected with a `WorkRejectedException` set to an appropriate error code (`WorkRejectedException.TIMED_OUT`). Note, this does not offer real-time guarantees.
        `execContext` - an object containing the execution context with which the submitted `Work` instance must be executed.
        `workListener` - an object which would be notified when the various `Work` processing events (work accepted, work rejected, work started, work completed) occur.
      Throws:
        `WorkException` - Thrown if an error occurs
        `WorkRejectedException` - indicates that a `Work` instance has been rejected from further processing. This can occur due to internal factors.

Copyright © 2014 IronJacamar (http://www.ironjacamar.org)