インターフェース ManagedExecutorService
- すべてのスーパーインターフェース:
ExecutorSE
,ExecutorServiceSE
- すべての既知のサブインターフェース:
ManagedScheduledExecutorService
public interface ManagedExecutorService extends ExecutorServiceSE
ExecutorService
SE の管理可能なバージョン。ManagedExecutorService は Java™ を継承します。SE ExecutorService は、Jakarta™ EE 環境で実行するタスクを送信するメソッドを提供します。ManagedExecutorService の実装は、Jakarta EE Product Provider によって提供されます。アプリケーションコンポーネントプロバイダーは、Java ネーミングおよびディレクトリインターフェースを使用します。™ (JNDI)リソース環境参照を使用して、1 つ以上の ManagedExecutorService オブジェクトのインスタンスを検索します。ManagedExecutorService インスタンスは、
Resource
アノテーションを使用してアプリケーションコンポーネントに挿入することもできます。Jakarta Concurrency 仕様には、ManagedExecutorService が実装できるいくつかの動作が記述されています。アプリケーションコンポーネントプロバイダーとデプロイヤーは、これらの要件を特定し、リソース環境参照を適切にマッピングします。
ManagedExecutorService の最も一般的な用途は、Jakarta Enterprise Beans での非同期メソッドの処理や、非同期処理をサポートするサーブレットの非同期タスクの処理など、短時間の非同期タスクを実行することです。
タスクは、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
を提供できます。例:
public class MyRunnable implements Runnable, ManagedTask { ... public void run() { ... } public ManagedTaskListener getManagedTaskListener() { return myManagedTaskListener; } ... } MyRunnable task = ...; ManagedExecutorService executor = ...; executor.submit(task); // lifecycle events will be notified to myManagedTaskListener
非同期タスクは通常、submit
メソッドの 1 つを使用して ManagedExecutorService に送信され、それぞれのメソッドがFuture
SE インスタンスを返します。Future
はタスクの結果を表し、タスクが完了したかどうかを確認したり、タスクの完了を待機したりするためにも使用できます。タスクが取り消されると、タスクの結果は
CancellationException
SE 例外になります。キャンセル以外の理由でタスクを実行できない場合、結果はAbortedException
例外になります。例:
/** * Retrieve all accounts from several account databases in parallel. * Resource Mappings: * type: jakarta.enterprise.concurrent.ManagedExecutorService * jndi-name: concurrent/ThreadPool */ public List<Account> getAccounts(long accountId) { try { javax.naming.InitialContext ctx = new InitialContext(); ManagedExecutorService mes = (ManagedExecutorService) ctx.lookup("java:comp/env/concurrent/ThreadPool"); // Create a set of tasks to perform the account retrieval. ArrayList<Callable<Account>> retrieverTasks = new ArrayList<Callable<Account>>(); retrieverTasks.add(new EISAccountRetriever()); retrieverTasks.add(new RDBAccountRetriever()); // Submit the tasks to the thread pool and wait for them // to complete (successfully or otherwise). List<Future<Account>> taskResults= mes.invokeAll(retrieverTasks); // Retrieve the results from the resulting Future list. ArrayList<Account> results = new ArrayList<Account>(); for(Future<Account> taskResult : taskResults) { try { results.add(taskResult.get()); } catch (ExecutionException e) { Throwable cause = e.getCause(); // Handle the AccountRetrieverError. } } return results; } catch (NamingException e) { // Throw exception for fatal error. } catch (InterruptedException e) { // Throw exception for shutdown or other interrupt condition. } } public class EISAccountRetriever implements Callable<Account> { public Account call() { // Connect to our eis system and retrieve the info for the account. //... return null; } } public class RDBAccountRetriever implements Callable<Account> { public Account call() { // Connect to our database and retrieve the info for the account. //... } } public class Account { // Some account data... }
ManagedExecutorService は、
CompletableFuture
SE およびそのコンストラクター /newIncompleteFuture
メソッドの静的メソッドに対応するさまざまなメソッドを提供し、デフォルトの非同期実行機能としてManagedExecutorService
によってサポートされる完了ステージを作成できるようにします。それらから作成されます。これにより、各依存アクションが最終的にどのスレッドで実行されるかに関係なく、一貫した予測可能なスレッドコンテキストで実行される完了ステージアクションのパイプラインを作成できます。例:
ManagedExectorService executor = InitialContext.doLookup("java:comp/DefaultManagedExecutorService"); ... CompletableFuture<Integer> future = executor .supplyAsync(supplier) .thenApply(function1) .thenApplyAsync(function2) ...
ManagedExecutorService
によってサポートされる完了ステージへのコンテキスト伝搬は、次のように定義されている一貫性のある予測可能な方法で行う必要があります。- 指定されたアクションがすでにコンテキストに依存している場合 (たとえば、
contextService.createContextualProxy(action, Runnable.class)
)、アクションはすでにキャプチャーされたコンテキストで実行されます。 - それ以外の場合、新規ステージおよびその親ステージのデフォルトの非同期実行機能である
ManagedExecutorService
の構成に従って、各型のスレッドコンテキストが完了ステージを作成するスレッドから伝搬されるか、コンテキストがクリアされるようにマークされます。ManagedExecutorService
がexecutor
引数として*Async
メソッドに提供される場合、提供されたManagedExecutorService
はアクションを実行するために使用されますが、スレッドコンテキストの伝播とクリアを決定するためには使用されません。
各型のスレッドコンテキストは、アクションを実行するスレッドに適用されます (クリアされるか、以前にキャプチャーされたものとして)。適用されたスレッドコンテキストは、アクションが正常に完了したか例外的に完了したかを問わず、削除され、スレッドの以前のコンテキストが復元されます。
依存ステージが完了ステージから作成された場合、およびそれらから作成された依存ステージなどから同様に、スレッドコンテキストが同じ方法でキャプチャーまたはクリアされます。これにより、各ステージで実行されるアクションは、ユーザーが事前にコンテキスト化されたアクションを指定して明示的にオーバーライドしない限り、完了ステージを作成するコードのスレッドコンテキストで常に実行されることが保証されます。
ManagedTask
を実装するアクションが指定されている場合、ManagedExecutorService
によってサポートされる完了ステージはIllegalArgumentException
SE を発生させる必要があります。- 導入:
- 1.0
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド 修飾子と型 メソッド 説明 <U> CompletableFutureSE<U>
completedFuture(U value)
指定された値ですでに完了している新しいCompletableFuture
SE を返します。<U> CompletionStageSE<U>
completedStage(U value)
指定された値ですでに完了している新しいCompletionStage
SE を返します。<T> CompletableFutureSE<T>
copy(CompletableFutureSE<T> stage)
指定されたステージの完了によって完了する新しいCompletableFuture
SE を返します。<T> CompletionStageSE<T>
copy(CompletionStageSE<T> stage)
指定されたステージの完了によって完了する新しいCompletionStage
SE を返します。<U> CompletableFutureSE<U>
failedFuture(ThrowableSE ex)
指定されたThrowable
ですでに例外的に完了している新しいCompletableFuture
SE を返します。<U> CompletionStageSE<U>
failedStage(ThrowableSE ex)
指定されたThrowable
ですでに例外的に完了している新しいCompletionStage
SE を返します。ContextService
getContextService()
このManagedExecutorService
と同じ伝播設定を持つContextService
を返し、このManagedExecutorService
を、withContextCapture
メソッドを介して作成するCompletionStage
SE およびCompletableFuture
SE インスタンスのデフォルトの非同期実行機能として使用します。<U> CompletableFutureSE<U>
newIncompleteFuture()
新しい不完全なCompletableFuture
SE を返します。CompletableFutureSE<VoidSE>
runAsync(RunnableSE runnable)
指定されたアクションを実行した後、このエグゼキュータで実行されているタスクによって完了する新しいCompletableFuture
SE を返します。<U> CompletableFutureSE<U>
supplyAsync(SupplierSE<U> supplier)
指定されたアクションを実行した後、このエグゼキュータで実行されているタスクによって完了する新しいCompletableFuture
SE を返します。インターフェース java.util.concurrent.ExecutorSE から継承されたメソッド
executeSE
インターフェース java.util.concurrent.ExecutorServiceSE から継承されたメソッド
awaitTerminationSE, invokeAllSE, invokeAllSE, invokeAnySE, invokeAnySE, isShutdown, isTerminated, shutdown, shutdownNow, submitSE, submitSE, submitSE
メソッドの詳細
completedFuture
<U> CompletableFutureSE<U> completedFuture(U value)
指定された値ですでに完了している新しい
CompletableFuture
SE を返します。このエグゼキューターは、このメソッドによって返される新しい完了ステージ、それから作成されたすべての依存ステージ、それらから作成されたすべての依存ステージなどのデフォルトの非同期実行機能です。
- 型パラメーター:
U
- 完了可能な未来の結果型。- パラメーター:
value
- 完成可能な未来が完成する結果。- 戻り値:
- 新しい完全な未来。
- 導入:
- 3.0
completedStage
<U> CompletionStageSE<U> completedStage(U value)
指定された値ですでに完了している新しい
CompletionStage
SE を返します。このエグゼキューターは、このメソッドによって返される新しい完了ステージ、それから作成されたすべての依存ステージ、それらから作成されたすべての依存ステージなどのデフォルトの非同期実行機能です。
- 型パラメーター:
U
- 完了段階の結果型。- パラメーター:
value
- 完了段階が完了する結果。- 戻り値:
- 新しい完成段階。
- 導入:
- 3.0
copy
<T> CompletableFutureSE<T> copy(CompletableFutureSE<T> stage)
指定されたステージの完了によって完了する新しい
CompletableFuture
SE を返します。新しい完了可能な未来は、コピーが呼び出される
ManagedExecutorService
によってサポートされます。これは、新しいステージとそこから作成されるすべての依存ステージのデフォルトの非同期実行機能として機能します。依存ステージが新しい完了可能な未来から作成されると、スレッドコンテキストが
ManagedExecutorService
によってキャプチャーおよび / またはクリアされます。これにより、ユーザーが事前にコンテキスト化されたアクションを指定して明示的にオーバーライドしない限り、各ステージで実行されるアクションは常に、ステージを作成するコードのスレッドコンテキストで実行されることが保証されます。このメソッドの呼び出しは、提供された完了可能なフューチャまたはそこから直接作成された他の依存ステージのスレッドコンテキストの伝播には影響しません。
- 型パラメーター:
T
- 完了可能な将来の結果型。- パラメーター:
stage
- その完了が、このメソッドによって作成された新しい完了可能なフューチャーの完了をトリガーする、完了可能なフューチャー。- 戻り値:
- 新しい完全な未来。
- 導入:
- 3.0
copy
<T> CompletionStageSE<T> copy(CompletionStageSE<T> stage)
指定されたステージの完了によって完了する新しい
CompletionStage
SE を返します。新しい完了ステージは、コピーが呼び出される
ManagedExecutorService
によってサポートされます。ManagedExecutorService
は、新しいステージとそこから作成されるすべての依存ステージのデフォルトの非同期実行機能として機能します。依存ステージが新しい完了ステージから作成されると、スレッドコンテキストが
ManagedExecutorService
によってキャプチャーおよび / またはクリアされます。これにより、ユーザーが事前にコンテキスト化されたアクションを指定して明示的にオーバーライドしない限り、各ステージで実行されるアクションは常に、ステージを作成するコードのスレッドコンテキストで実行されることが保証されます。このメソッドの呼び出しは、提供されたステージまたはそこから直接作成された他の依存ステージのスレッドコンテキストの伝播には影響しません。
- 型パラメーター:
T
- 完了段階の結果型。- パラメーター:
stage
- このメソッドによって作成された新しいステージの完了をトリガーする完了ステージ。- 戻り値:
- 新しい完成段階。
- 導入:
- 3.0
failedFuture
<U> CompletableFutureSE<U> failedFuture(ThrowableSE ex)
指定された
Throwable
ですでに例外的に完了している新しいCompletableFuture
SE を返します。このエグゼキューターは、このメソッドによって返される新しい完了ステージ、それから作成されたすべての依存ステージ、それらから作成されたすべての依存ステージなどのデフォルトの非同期実行機能です。
- 型パラメーター:
U
- 完了可能な未来の結果型。- パラメーター:
ex
- 完了可能な未来が完了する例外またはエラー。- 戻り値:
- 新しい完全な未来。
- 導入:
- 3.0
failedStage
<U> CompletionStageSE<U> failedStage(ThrowableSE ex)
指定された
Throwable
ですでに例外的に完了している新しいCompletionStage
SE を返します。このエグゼキューターは、このメソッドによって返される新しい完了ステージ、それから作成されたすべての依存ステージ、それらから作成されたすべての依存ステージなどのデフォルトの非同期実行機能です。
- 型パラメーター:
U
- 完了段階の結果型。- パラメーター:
ex
- 完了段階が完了する例外またはエラー。- 戻り値:
- 新しい完成段階。
- 導入:
- 3.0
getContextService
ContextService getContextService()
このManagedExecutorService
と同じ伝播設定を持つContextService
を返し、このManagedExecutorService
を、withContextCapture
メソッドを介して作成するCompletionStage
SE およびCompletableFuture
SE インスタンスのデフォルトの非同期実行機能として使用します。- 戻り値:
- この
ManagedExecutorService
と同じ伝搬設定を持つContextService
。 - 導入:
- 3.0
newIncompleteFuture
<U> CompletableFutureSE<U> newIncompleteFuture()
新しい不完全な
CompletableFuture
SE を返します。このエグゼキューターは、このメソッドによって返される新しい完了ステージ、それから作成されたすべての依存ステージ、それらから作成されたすべての依存ステージなどのデフォルトの非同期実行機能です。
- 型パラメーター:
U
- 完了可能な未来の結果型。- 戻り値:
- 新しい完全な未来。
- 導入:
- 3.0
runAsync
CompletableFutureSE<VoidSE> runAsync(RunnableSE runnable)
指定されたアクションを実行した後、このエグゼキュータで実行されているタスクによって完了する新しい
CompletableFuture
SE を返します。このエグゼキューターは、このメソッドによって返される新しい完了ステージ、それから作成されたすべての依存ステージ、それらから作成されたすべての依存ステージなどのデフォルトの非同期実行機能です。
- パラメーター:
runnable
- 返された完了ステージを完了する前に実行するアクション。- 戻り値:
- 新しい完全な未来。
- 導入:
- 3.0
supplyAsync
<U> CompletableFutureSE<U> supplyAsync(SupplierSE<U> supplier)
指定されたアクションを実行した後、このエグゼキュータで実行されているタスクによって完了する新しい
CompletableFuture
SE を返します。このエグゼキューターは、このメソッドによって返される新しい完了ステージ、それから作成されたすべての依存ステージ、それらから作成されたすべての依存ステージなどのデフォルトの非同期実行機能です。
- 型パラメーター:
U
- サプライヤーの結果型と返された完了可能なステージ。- パラメーター:
supplier
- 返された完了ステージを完了するために使用される値を返すアクション。- 戻り値:
- 新しい完全な未来。
- 導入:
- 3.0