Package jakarta.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. TheWork
instance could either be accepted or rejected with aWorkRejectedException
set to an appropriate error code. - work accepted: The submitted
Work
instance has been accepted. The acceptedWork
instance could either start execution or could be rejected again with aWorkRejectedException
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, theWork
execution must be started within the specified duration (not a real-time guarantee), failing which aWorkRejectedException
set to an error code (WorkRejected.TIMED_OUT
) is thrown. - work rejected: The
Work
instance has been rejected. TheWork
instance could be rejected duringWork
submittal or after theWork
instance has been accepted (but before Work instance starts execution). The rejection could be due to internal factors or start timeout expiration. AWorkRejectedException
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. TheWorkManager
catches any exception thrown duringWork
processing (which includes execution context setup), and wraps it with aWorkCompletedException
.
-
Field Summary
Modifier and TypeFieldDescriptionstatic final long
A constant to indicate timeout duration.static final long
A constant to indicate timeout duration.static final long
A constant to indicate an unknown start delay duration or other unknown values. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Accepts aWork
instance for processing.void
doWork
(Work work, long startTimeout, ExecutionContext execContext, WorkListener workListener) Accepts aWork
instance for processing.void
scheduleWork
(Work work) Accepts aWork
instance for processing.void
scheduleWork
(Work work, long startTimeout, ExecutionContext execContext, WorkListener workListener) Accepts aWork
instance for processing.long
Accepts aWork
instance for processing.long
startWork
(Work work, long startTimeout, ExecutionContext execContext, WorkListener workListener) Accepts aWork
instance for processing.
-
Field Details
-
IMMEDIATE
static final long IMMEDIATEA 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:
-
INDEFINITE
static final long INDEFINITEA constant to indicate timeout duration. A maximum timeout value indicates that an action be performed arbitrarily without any time constraint.- See Also:
-
UNKNOWN
static final long UNKNOWNA constant to indicate an unknown start delay duration or other unknown values.- See Also:
-
-
Method Details
-
doWork
Accepts aWork
instance for processing. This call blocks until theWork
instance completes execution. There is no guarantee on when the acceptedWork
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:
WorkRejectedException
- indicates that aWork
instance has been rejected from further processing. This can occur due to internal factors.WorkCompletedException
- indicates that aWork
instance has completed execution with an exception.WorkException
-
doWork
void doWork(Work work, long startTimeout, ExecutionContext execContext, WorkListener workListener) throws WorkException Accepts aWork
instance for processing. This call blocks until theWork
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 theWork
instance must start. Otherwise, theWork
instance is rejected with aWorkRejectedException
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 submittedWork
instance must be executed.workListener
- an object which would be notified when the variousWork
processing events (work accepted, work rejected, work started, work completed) occur.- Throws:
WorkRejectedException
- indicates that aWork
instance has been rejected from further processing. This can occur due to internal factors or start timeout expiration.WorkCompletedException
- indicates that aWork
instance has completed execution with an exception.WorkException
-
startWork
Accepts aWork
instance for processing. This call blocks until theWork
instance starts execution but not until its completion. There is no guarantee on when the acceptedWork
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:
WorkRejectedException
- indicates that aWork
instance has been rejected from further processing. This can occur due to internal factors.WorkException
-
startWork
long startWork(Work work, long startTimeout, ExecutionContext execContext, WorkListener workListener) throws WorkException Accepts aWork
instance for processing. This call blocks until theWork
instance starts execution but not until its completion. There is no guarantee on when the acceptedWork
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 theWork
instance must start. Otherwise, theWork
instance is rejected with aWorkRejectedException
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 submittedWork
instance must be executed.workListener
- an object which would be notified when the variousWork
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:
WorkRejectedException
- indicates that aWork
instance has been rejected from further processing. This can occur due to internal factors or start timeout expiration.WorkException
-
scheduleWork
Accepts aWork
instance for processing. This call does not block and returns immediately once aWork
instance has been accepted for processing. There is no guarantee on when the submittedWork
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:
WorkRejectedException
- indicates that aWork
instance has been rejected from further processing. This can occur due to internal factors.WorkException
-
scheduleWork
void scheduleWork(Work work, long startTimeout, ExecutionContext execContext, WorkListener workListener) throws WorkException Accepts aWork
instance for processing. This call does not block and returns immediately once aWork
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 theWork
instance must start. Otherwise, theWork
instance is rejected with aWorkRejectedException
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 submittedWork
instance must be executed.workListener
- an object which would be notified when the variousWork
processing events (work accepted, work rejected, work started, work completed) occur.- Throws:
WorkRejectedException
- indicates that aWork
instance has been rejected from further processing. This can occur due to internal factors.WorkException
-