blob: 361cdc6d55bbaef7712215868cb8133210699e3c [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>ManagedScheduledExecutorService</title>
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="ManagedScheduledExecutorService";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../javax/enterprise/concurrent/ManagedExecutorService.html" title="interface in javax.enterprise.concurrent"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../javax/enterprise/concurrent/ManagedTask.html" title="interface in javax.enterprise.concurrent"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?javax/enterprise/concurrent/ManagedScheduledExecutorService.html" target="_top">Frames</a></li>
<li><a href="ManagedScheduledExecutorService.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">javax.enterprise.concurrent</div>
<h2 title="Interface ManagedScheduledExecutorService" class="title">Interface ManagedScheduledExecutorService</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Superinterfaces:</dt>
<dd>java.util.concurrent.Executor, java.util.concurrent.ExecutorService, <a href="../../../javax/enterprise/concurrent/ManagedExecutorService.html" title="interface in javax.enterprise.concurrent">ManagedExecutorService</a>, java.util.concurrent.ScheduledExecutorService</dd>
</dl>
<hr>
<br>
<pre>public interface <span class="typeNameLabel">ManagedScheduledExecutorService</span>
extends <a href="../../../javax/enterprise/concurrent/ManagedExecutorService.html" title="interface in javax.enterprise.concurrent">ManagedExecutorService</a>, java.util.concurrent.ScheduledExecutorService</pre>
<div class="block">A manageable version of a <code>ScheduledExecutorService</code>.<p>
A ManagedScheduledExecutorService extends the Java&trade; SE ScheduledExecutorService
to provide methods for submitting delayed or periodic tasks for execution in
a Java&trade; EE environment.
Implementations of the ManagedScheduledExecutorService are
provided by a Java&trade; EE Product Provider. Application Component Providers
use the Java Naming and Directory Interface&trade; (JNDI) to look-up instances of one
or more ManagedScheduledExecutorService objects using resource environment references.
ManagedScheduledExecutorService instances can also be injected into application
components through the use of the <code>Resource</code> annotation.<p>
The Concurrency Utilities for Java&trade; EE specification describes several
behaviors that a ManagedScheduledExecutorService can implement. The Application
Component Provider and Deployer identify these requirements and map the
resource environment reference appropriately.<p>
Tasks are run in managed threads provided by the Java&trade; EE Product Provider
and are run within the application component context that submitted the task.
All tasks run without an explicit transaction (they do not enlist in the application
component's transaction). If a transaction is required, use a
<code>javax.transaction.UserTransaction</code> instance. A UserTransaction instance is
available in JNDI using the name: &QUOT;java:comp/UserTransaction&QUOT or by
requesting an injection of a <code>javax.transaction.UserTransaction</code> object
using the <code>Resource</code> annotation.<p>
Example:
<pre>
public run() {
// Begin of task
InitialContext ctx = new InitialContext();
UserTransaction ut = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
ut.begin();
// Perform transactional business logic
ut.commit();
}
</PRE>
Tasks can optionally provide an <a href="../../../javax/enterprise/concurrent/ManagedTaskListener.html" title="interface in javax.enterprise.concurrent"><code>ManagedTaskListener</code></a> to receive
notifications of lifecycle events, through the use of <a href="../../../javax/enterprise/concurrent/ManagedTask.html" title="interface in javax.enterprise.concurrent"><code>ManagedTask</code></a>
interface.
<p>
Asynchronous tasks are typically submitted to the ManagedScheduledExecutorService using one
of the <code>submit</code> or <code>schedule</code>methods, each of which return a <CODE>Future</CODE>
instance. The Future represents the result of the task and can also be used to
check if the task is complete or wait for its completion.<p>
If the task is cancelled, the result for the task is a
<CODE>CancellationException</CODE> exception. If the task is unable
to run due to start due to a reason other than cancellation, the result is a
<a href="../../../javax/enterprise/concurrent/AbortedException.html" title="class in javax.enterprise.concurrent"><code>AbortedException</code></a> exception. If the task is scheduled
with a <a href="../../../javax/enterprise/concurrent/Trigger.html" title="interface in javax.enterprise.concurrent"><code>Trigger</code></a> and the Trigger forces the task to be skipped,
the result will be a <a href="../../../javax/enterprise/concurrent/SkippedException.html" title="class in javax.enterprise.concurrent"><code>SkippedException</code></a> exception.<p>
Tasks can be scheduled to run periodically using the <code>schedule</code> methods that
take a <code>Trigger</code> as an argument and the <code>scheduleAtFixedRate</code> and
<code>scheduleWithFixedDelay</code> methods. The result of the <code>Future</code> will
be represented by the currently scheduled or running instance of the task. Future and past executions
of the task are not represented by the Future. The state of the <code>Future</code> will therefore change
and multiple results are expected.<p>
For example, if a task is repeating, the lifecycle of the task would be:<br>
(Note: See <a href="../../../javax/enterprise/concurrent/ManagedTaskListener.html" title="interface in javax.enterprise.concurrent"><code>ManagedTaskListener</code></a> for task lifecycle management details.)<p>
<table>
<tr><td valign="top"><strong>Sequence</strong></td><td valign="top"><strong>State</strong></td><td valign="top"><strong>Action</strong></td><td valign="top"><strong>Listener</strong></td><td valign="top"><strong>Next state</strong></td></tr>
<tr><td valign="top">1A.</td><td valign="top">None</td><td valign="top">submit()</td><td valign="top">taskSubmitted</td><td valign="top">Submitted</td></tr>
<tr><td valign="top">2A.</td><td valign="top">Submitted</td><td valign="top">About to call run()</td><td valign="top">taskStarting</td><td valign="top">Started</td></tr>
<tr><td valign="top">3A.</td><td valign="top">Started</td><td valign="top">Exit run()</td><td valign="top">taskDone</td><td valign="top">Reschedule</td></tr>
<tr><td valign="top">1B.</td><td valign="top">Reschedule</td><td valign="top"></td><td valign="top">taskSubmitted</td><td valign="top">Submitted</td></tr>
<tr><td valign="top">2B.</td><td valign="top">Submitted</td><td valign="top">About to call run()</td><td valign="top">taskStarting</td><td valign="top">Started</td></tr>
<tr><td valign="top">3B.</td><td valign="top">Started</td><td valign="top">Exit run()</td><td valign="top">taskDone</td><td valign="top">Reschedule</td></tr>
</table>
<P></div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.0</dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>&lt;V&gt;&nbsp;java.util.concurrent.ScheduledFuture&lt;V&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/enterprise/concurrent/ManagedScheduledExecutorService.html#schedule-java.util.concurrent.Callable-javax.enterprise.concurrent.Trigger-">schedule</a></span>(java.util.concurrent.Callable&lt;V&gt;&nbsp;callable,
<a href="../../../javax/enterprise/concurrent/Trigger.html" title="interface in javax.enterprise.concurrent">Trigger</a>&nbsp;trigger)</code>
<div class="block">Creates and executes a task based on a Trigger.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>java.util.concurrent.ScheduledFuture&lt;?&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/enterprise/concurrent/ManagedScheduledExecutorService.html#schedule-java.lang.Runnable-javax.enterprise.concurrent.Trigger-">schedule</a></span>(java.lang.Runnable&nbsp;command,
<a href="../../../javax/enterprise/concurrent/Trigger.html" title="interface in javax.enterprise.concurrent">Trigger</a>&nbsp;trigger)</code>
<div class="block">Creates and executes a task based on a Trigger.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.util.concurrent.ScheduledExecutorService">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;java.util.concurrent.ScheduledExecutorService</h3>
<code>schedule, schedule, scheduleAtFixedRate, scheduleWithFixedDelay</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.util.concurrent.ExecutorService">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;java.util.concurrent.ExecutorService</h3>
<code>awaitTermination, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminated, shutdown, shutdownNow, submit, submit, submit</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.util.concurrent.Executor">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;java.util.concurrent.Executor</h3>
<code>execute</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="schedule-java.lang.Runnable-javax.enterprise.concurrent.Trigger-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>schedule</h4>
<pre>java.util.concurrent.ScheduledFuture&lt;?&gt;&nbsp;schedule(java.lang.Runnable&nbsp;command,
<a href="../../../javax/enterprise/concurrent/Trigger.html" title="interface in javax.enterprise.concurrent">Trigger</a>&nbsp;trigger)</pre>
<div class="block">Creates and executes a task based on a Trigger. The Trigger determines when the task
should run and how often.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>command</code> - the task to execute.</dd>
<dd><code>trigger</code> - the trigger that determines when the task should fire.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a Future representing pending completion of the task, and whose <code>get()</code>
method will return <code>null</code> upon completion.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.util.concurrent.RejectedExecutionException</code> - if task cannot be scheduled for execution.</dd>
<dd><code>java.lang.NullPointerException</code> - if command is null.</dd>
</dl>
</li>
</ul>
<a name="schedule-java.util.concurrent.Callable-javax.enterprise.concurrent.Trigger-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>schedule</h4>
<pre>&lt;V&gt;&nbsp;java.util.concurrent.ScheduledFuture&lt;V&gt;&nbsp;schedule(java.util.concurrent.Callable&lt;V&gt;&nbsp;callable,
<a href="../../../javax/enterprise/concurrent/Trigger.html" title="interface in javax.enterprise.concurrent">Trigger</a>&nbsp;trigger)</pre>
<div class="block">Creates and executes a task based on a Trigger. The Trigger determines when the task should
run and how often.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>callable</code> - the function to execute.</dd>
<dd><code>trigger</code> - the trigger that determines when the task should fire.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a ScheduledFuture that can be used to extract result or cancel.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.util.concurrent.RejectedExecutionException</code> - if task cannot be scheduled for execution.</dd>
<dd><code>java.lang.NullPointerException</code> - if callable is null.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../javax/enterprise/concurrent/ManagedExecutorService.html" title="interface in javax.enterprise.concurrent"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../javax/enterprise/concurrent/ManagedTask.html" title="interface in javax.enterprise.concurrent"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?javax/enterprise/concurrent/ManagedScheduledExecutorService.html" target="_top">Frames</a></li>
<li><a href="ManagedScheduledExecutorService.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>