All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.enterprise.concurrent.ManagedTaskListener Maven / Gradle / Ivy

The newest version!
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright (c) 2010-2018 Oracle and/or its affiliates. All rights reserved.
 *
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common Development
 * and Distribution License("CDDL") (collectively, the "License").  You
 * may not use this file except in compliance with the License.  You can
 * obtain a copy of the License at
 * https://oss.oracle.com/licenses/CDDL+GPL-1.1
 * or LICENSE.txt.  See the License for the specific
 * language governing permissions and limitations under the License.
 *
 * When distributing the software, include this License Header Notice in each
 * file and include the License file at LICENSE.txt.
 *
 * GPL Classpath Exception:
 * Oracle designates this particular file as subject to the "Classpath"
 * exception as provided by Oracle in the GPL Version 2 section of the License
 * file that accompanied this code.
 *
 * Modifications:
 * If applicable, add the following below the License Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * "Portions Copyright [year] [name of copyright owner]"
 *
 * Contributor(s):
 * If you wish your version of this file to be governed by only the CDDL or
 * only the GPL Version 2, indicate your decision by adding "[Contributor]
 * elects to include this software in this distribution under the [CDDL or GPL
 * Version 2] license."  If you don't indicate a single choice of license, a
 * recipient has the option to distribute your version of this file under
 * either the CDDL, the GPL Version 2 or to extend the choice of license to
 * its licensees as provided above.  However, if you add GPL Version 2 code
 * and therefore, elected the GPL Version 2 license, then the option applies
 * only if the new code is made subject to such option by the copyright
 * holder.
 */

package javax.enterprise.concurrent;

import java.util.concurrent.Future;

/**
 * A ManagedTaskListener is used to monitor the state of a task's Future.
 * It can be registered with a {@link ManagedExecutorService} using the
 * submit methods and will be invoked when the state of the 
 * {@link Future} changes.
 * Each listener method will run with unspecified context.
 * All listeners run without an explicit transaction 
 * (they do not enlist in the application component's transaction).  If a transaction is required, use a
 * {@link javax.transaction.UserTransaction} instance.
 * 

* * Each listener instance will be invoked within the same process in which the listener was registered. * If a single listener is submitted to multiple ManagedExecutorService instances, the * listener object may be invoked concurrently by multiple threads.

* * Each listener method supports a minimum quality of service of at-most-once. A listener is not * guaranteed to be invoked due to a process failure or termination. *

* State Transition Diagram *

* The following state transition figure and tables describe * the possible task lifecycle events that can occur when a * ManagedTaskListener is associated with a task. Each method is invoked * when the state of the {@link Future} moves from one state to another. *

*

* * A. The task runs normally: *

* * * * * * *
SequenceStateActionListenerNext state
1.Nonesubmit()taskSubmittedSubmitted
2.SubmittedAbout to call run()taskStartingStarted
3.StartedExit run()taskDoneDone

* * B. The task is cancelled during taskSubmitted(): *

* * * * * *
SequenceStateActionListenerNext state
1.Nonesubmit()taskSubmitted
Future is cancelled.
Cancelling
2.Cancelling taskAbortedCancelled
3.Cancelled taskDoneDone

* * C. The task is cancelled or aborted after submitted, but before started: * *

* * * * * *
SequenceStateActionListenerNext state
1.Nonesubmit()taskSubmittedSubmitted
2.Submittedcancel() or aborttaskAbortedCancelled
3.Cancelled taskDoneDone

* * D. The task is cancelled when it is starting: *

* * * * * * * *
SequenceStateActionListenerNext state
1.Nonesubmit()taskSubmittedSubmitted
2.SubmittedAbout to call run()taskStarting
Future is cancelled.
Cancelling
3.Cancelling taskAbortedCancelled
4.Cancelled taskDoneDone
*

* * @since 1.0 */ public interface ManagedTaskListener { /** * Called after the task has been submitted to the Executor. The task will not enter the * starting state until the taskSubmitted listener has completed. * This method may be called from the same thread that the task was submitted with. *

* This event does not indicate that the task has been scheduled for execution. * * @param future the Future instance that was created when the task was submitted. * @param executor the executor used to run the associated Future. * @param task the task that was submitted. */ public void taskSubmitted(java.util.concurrent.Future future, ManagedExecutorService executor, Object task); /** * Called when a task's Future has been cancelled anytime during the life of a task. * This method may be called after taskDone(). The {@link Future#isCancelled()} * method returns false if the task was aborted through another means other than * {@link Future#cancel(boolean) }. * The exception argument will represent the cause of the cancellation: *

    *
  • {@link java.util.concurrent.CancellationException} if the task was cancelled, *
  • {@link SkippedException} if the task was skipped or *
  • {@link AbortedException} if the task failed to start for another reason. *
* The AbortedException.getCause() method will return the exception that * caused the task to fail to start. * * @param future the {@link Future} instance that was created when the task was submitted. * @param executor the executor used to run the associated Future. * @param task the task that was submitted. * @param exception the cause of the task abort. */ public void taskAborted(java.util.concurrent.Future future, ManagedExecutorService executor, Object task, java.lang.Throwable exception); /** * Called when a submitted task has completed running, either successfully or * failed due to any exception thrown from the task, task being cancelled, * rejected, or aborted. * * @param future the {@link Future} instance that was created when the task was submitted. * @param executor the executor used to run the associated Future. * @param task the task that was submitted. * @param exception if not null, the exception that caused the task to fail. */ public void taskDone(java.util.concurrent.Future future, ManagedExecutorService executor, Object task, java.lang.Throwable exception); /** * This method is called before the task is about to start. The task will * not enter the starting state until the taskSubmitted listener has completed. This method * may be called from the same thread that the task was submitted with. * * @param future the {@link Future} instance that was created when the task was submitted. * @param executor the executor used to run the associated Future. * @param task the task that was submitted. */ public void taskStarting(java.util.concurrent.Future future, ManagedExecutorService executor, Object task); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy