jakarta.resource.spi.work.WorkManager Maven / Gradle / Ivy
Go to download
This artifact provides a single jar that contains all classes required to use remote EJB and JMS, including
all dependencies. It is intended for use by those not using maven, maven users should just import the EJB and
JMS BOM's instead (shaded JAR's cause lots of problems with maven, as it is very easy to inadvertently end up
with different versions on classes on the class path).
The newest version!
/*
* Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package jakarta.resource.spi.work;
/**
* 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
*/
public interface WorkManager {
/**
* 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.
*/
long IMMEDIATE = 0L;
/**
* A constant to indicate timeout duration. A maximum timeout value
* indicates that an action be performed arbitrarily without any time
* constraint.
*/
long INDEFINITE = Long.MAX_VALUE;
/**
* A constant to indicate an unknown start delay duration or other unknown
* values.
*/
long UNKNOWN = -1;
/**
* 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)
*
* @param work The unit of work to be done.
* Could be long or short-lived.
*
* @throws WorkRejectedException indicates that a
* Work
instance has been rejected from further processing.
* This can occur due to internal factors.
*
* @throws WorkCompletedException indicates that a
* Work
instance has completed execution with an exception.
*/
void doWork(Work work) // startTimeout = INDEFINITE
throws WorkException;
/**
* Accepts a Work
instance for processing. This call
* blocks until the Work
instance completes execution.
*
* @param work The unit of work to be done.
* Could be long or short-lived.
*
* @param 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.
*
* @param execContext an object containing the execution
* context with which the submitted Work
instance must
* be executed.
*
* @param workListener an object which would be notified
* when the various Work
processing events (work accepted,
* work rejected, work started, work completed) occur.
*
* @throws WorkRejectedException indicates that a
* Work
instance has been rejected from further processing.
* This can occur due to internal factors or start timeout expiration.
*
* @throws WorkCompletedException indicates that a
* Work
instance has completed execution with an exception.
*/
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 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)
*
* @param work The unit of work to be done.
* Could be long or short-lived.
*
* @return 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 a
* Work
instance has been rejected from further processing.
* This can occur due to internal factors.
*/
long startWork(Work work) // startTimeout = INDEFINITE
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.
*
* @param work The unit of work to be done.
* Could be long or short-lived.
*
* @param 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.
*
* @param execContext an object containing the execution
* context with which the submitted Work
instance must
* be executed.
*
* @param workListener an object which would be notified
* when the various Work
processing events (work accepted,
* work rejected, work started, work completed) occur.
*
* @return 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 a
* Work
instance has been rejected from further processing.
* This can occur due to internal factors or start timeout expiration.
*/
long startWork(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. 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).
*
* @param work The unit of work to be done.
* Could be long or short-lived.
*
* @throws WorkRejectedException indicates that a
* Work
instance has been rejected from further processing.
* This can occur due to internal factors.
*/
void scheduleWork(Work work) // startTimeout = INDEFINITE
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.
*
* @param work The unit of work to be done.
* Could be long or short-lived.
*
* @param 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.
*
* @param execContext an object containing the execution
* context with which the submitted Work
instance must
* be executed.
*
* @param workListener an object which would be notified
* when the various Work
processing events (work accepted,
* work rejected, work started, work completed) occur.
*
* @throws WorkRejectedException indicates that a
* Work
instance has been rejected from further processing.
* This can occur due to internal factors.
*/
void scheduleWork(Work work, long startTimeout,
ExecutionContext execContext, WorkListener workListener)
throws WorkException;
}