jakarta.resource.spi.work.WorkManager Maven / Gradle / Ivy
/*
* 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;
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy