インターフェース ManagedScheduledExecutorService
- すべてのスーパーインターフェース:
ExecutorSE、ExecutorServiceSE、ManagedExecutorService、ScheduledExecutorServiceSE
ScheduledExecutorServiceSE の管理可能なバージョン。ManagedScheduledExecutorService は Java™ を継承します。SE ScheduledExecutorService は、Jakarta™ EE 環境で実行するために遅延タスクまたは定期タスクを送信するためのメソッドを提供します。ManagedScheduledExecutorService の実装は、Jakarta EE Product Provider によって提供されます。アプリケーションコンポーネントプロバイダーは、Java Naming and Directory Interface™ を使用します。(JNDI)リソース環境参照を使用して 1 つ以上の ManagedScheduledExecutorService オブジェクトのインスタンスを検索します。ManagedScheduledExecutorService インスタンスは、Resource アノテーションを使用してアプリケーションコンポーネントに挿入することもできます。
Jakarta Concurrency 仕様には、ManagedScheduledExecutorService が実装できるいくつかの動作が記述されています。アプリケーションコンポーネントプロバイダーとデプロイヤーは、これらの要件を特定し、リソース環境参照を適切にマッピングします。
タスクは、Jakarta™ EE Product Provider によって提供される管理対象スレッドで実行され、タスクを送信したアプリケーションコンポーネントコンテキスト内で実行されます。すべてのタスクは、明示的なトランザクションなしで実行されます(アプリケーションコンポーネントのトランザクションには参加しません)。トランザクションが必要な場合は、jakarta.transaction.UserTransaction インスタンスを使用してください。UserTransaction インスタンスは、" java:comp/UserTransaction" という名前を使用して JNDI で使用できます。または、Resource アノテーションを使用して jakarta.transaction.UserTransaction オブジェクトのインジェクションをリクエストします。
例:
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();
}
タスクはオプションで、ManagedTask インターフェースを使用して、ライフサイクルイベントの通知を受け取る ManagedTaskListener を提供できます。 非同期タスクは通常、submit または schedule メソッドのいずれかを使用して ManagedScheduledExecutorService に送信され、それぞれが Future インスタンスを返します。Future はタスクの結果を表し、タスクが完了したかどうかを確認したり、タスクの完了を待つためにも使用できます。
タスクがキャンセルされた場合、タスクの結果は CancellationException 例外になります。キャンセル以外の理由で開始のためにタスクを実行できない場合、結果は AbortedException 例外になります。タスクが Trigger でスケジュールされていて、トリガーがタスクを強制的にスキップした場合、結果は SkippedException 例外になります。
タスクは、Trigger を引数として取る schedule メソッドと、scheduleAtFixedRate および scheduleWithFixedDelay メソッドを使用して定期的に実行するようにスケジュールできます。Future の結果は、現在スケジュールされている、または実行中のタスクのインスタンスによって表されます。タスクの将来および過去の実行は、Future によって表されません。Future の状態は変化し、複数の結果が予想されます。
例: タスクが繰り返されている場合、タスクのライフサイクルは次のようになります。
(メモ: タスクのライフサイクル管理の詳細については、ManagedTaskListener を参照してください。)
| シーケンス | 状態 | アクション | リスナー | 次の状態 |
| 1A. | なし | submit() | taskSubmitted | サブミット済み |
| 2A. | サブミット済み | run() を呼び出そう | taskStarting | 起動済み |
| 3A. | 起動済み | run() を終了します | taskDone | スケジュールを変更する |
| 1B. | スケジュールを変更する | taskSubmitted | サブミット済み | |
| 2B. | サブミット済み | run() を呼び出そう | taskStarting | 起動済み |
| 3B. | 起動済み | run() を終了します | taskDone | スケジュールを変更する |
- 導入:
- 1.0
方法の概要
修飾子と型メソッド説明schedule(RunnableSE command, Trigger trigger) トリガーに基づいてタスクを作成して実行します。<V> ScheduledFutureSE<V>schedule(CallableSE<V> callable, Trigger trigger) トリガーに基づいてタスクを作成して実行します。インターフェース java.util.concurrent.ExecutorSE から継承されたメソッド
executeSEインターフェース java.util.concurrent.ExecutorServiceSE から継承されたメソッド
awaitTerminationSE, invokeAllSE, invokeAllSE, invokeAnySE, invokeAnySE, isShutdown, isTerminated, shutdown, shutdownNow, submitSE, submitSE, submitSEインターフェース jakarta.enterprise.concurrent.ManagedExecutorService から継承されたメソッド
completedFuture, completedStage, copy, copy, failedFuture, failedStage, getContextService, newIncompleteFuture, runAsync, supplyAsyncインターフェース java.util.concurrent.ScheduledExecutorServiceSE から継承されたメソッド
scheduleSE, scheduleSE, scheduleAtFixedRateSE, scheduleWithFixedDelaySE
メソッドの詳細
schedule
トリガーに基づいてタスクを作成して実行します。トリガーは、タスクを実行するタイミングと頻度を決定します。- パラメーター:
command- 実行するタスク。trigger- タスクをいつ起動するかを決定するトリガー。- 戻り値:
- タスクの保留中の完了を表す Future。その
get()メソッドは完了時にnullを返します。 - 例外:
RejectedExecutionExceptionSE- タスクの実行をスケジュールできない場合。NullPointerExceptionSE- コマンドが null の場合。
schedule
トリガーに基づいてタスクを作成して実行します。トリガーは、タスクを実行するタイミングと頻度を決定します。- 型パラメーター:
V-Callableの戻り値の型- パラメーター:
callable- 実行する関数。trigger- タスクをいつ起動するかを決定するトリガー。- 戻り値:
- 結果の抽出またはキャンセルに使用できる ScheduledFuture
- 例外:
RejectedExecutionExceptionSE- タスクの実行をスケジュールできない場合。NullPointerExceptionSE- callable が null の場合。