インターフェース ContextService
java.lang.reflect.Proxy
SE で定義) を作成するためのメソッドを提供します。ContextService は、完了段階のアクションとして使用できる関数インターフェース ( Function
SE など) のプロキシオブジェクトも作成します。プロキシオブジェクトは、通常、Jakarta™ EE 環境で実行されるアプリケーションに関連付けられたコンテキストを追加して実行されます。このようなコンテキストの例は、クラスローディング、名前空間、セキュリティなどです。 プロキシオブジェクトは、java.lang.reflect.Proxy
SE クラスに対して定義されたものと同じ規則に従いますが、以下の追加があります。
- プロキシインスタンスは、作成者のスレッドのコンテキストを保持します。
- プロキシインスタンスは、
createContextualProxy
メソッドで指定されたすべてのインターフェースを実装します。 - プロキシインスタンスを作成するオブジェクトは、Web コンポーネントや Jakarta Enterprise Bean など、Jakarta EE Product Provider によって管理されるコンポーネントであってはなりません。
hashCode
、equals
、toString
とObject
SE で宣言された他のすべてのメソッドを除いて、プロキシインスタンスでのすべてのインターフェースメソッドの呼び出しは、作成者のコンテキストで実行されます。- プロキシされたオブジェクトインスタンスがシリアライズ可能である場合、プロキシインスタンスは
Serializable
SE を実装する必要があります。 - プロキシインスタンスが直列化されている場合、プロキシオブジェクトインスタンスは
Serializable
SE を実装する必要があります。 - 実行プロパティは、プロキシインスタンスとともに保存できます。カスタムプロパティキーは "jakarta.enterprise.concurrent." で始まってはなりません。
- 実行プロパティは、さまざまなコンテキスト情報を取得してスレッドに適用する方法を制御するために使用されます。アプリケーションコンポーネントは任意のプロパティキーと値を格納できますが、お勧めしません。Jakarta EE 製品プロバイダーは、キーと値のサイズに制限を課す場合があります。
例: アプリケーションコンポーネントの名前空間にアクセスできるように、単一の完了ステージアクションを文脈化します。
contextSvc = InitialContext.doLookup("java:comp/DefaultContextService"); stage2 = stage1.thenApply(contextSvc.contextualFunction(i -> { DataSource ds = InitialContext.doLookup("java:comp/env/dsRef"); try (Connection con = ds.getConnection()) { PreparedStatement stmt = con.prepareStatement(sql); stmt.setInt(1, i); ResultSet result = stmt.executeQuery(); return result.next() ? result.getInt(1) : 0; } }));
- 導入:
- 1.0
メソッドのサマリー
修飾子と型メソッド説明<R> CallableSE<R>
contextualCallable
(CallableSE<R> callable) contextualCallable
を呼び出すスレッドからキャプチャーされたコンテキストでCallable
SE をラップします。<T,
U> BiConsumerSE<T, U> contextualConsumer
(BiConsumerSE<T, U> consumer) contextualConsumer
を呼び出すスレッドからキャプチャーされたコンテキストでBiConsumer
SE をラップします。<T> ConsumerSE<T>
contextualConsumer
(ConsumerSE<T> consumer) contextualConsumer
を呼び出すスレッドからキャプチャーされたコンテキストでConsumer
SE をラップします。<T,
U, R> BiFunctionSE<T, U, R> contextualFunction
(BiFunctionSE<T, U, R> function) contextualFunction
を呼び出すスレッドからキャプチャーされたコンテキストでBiFunction
SE をラップします。<T,
R> FunctionSE<T, R> contextualFunction
(FunctionSE<T, R> function) contextualFunction
を呼び出すスレッドからキャプチャーされたコンテキストでBiFunction
SE をラップします。<T,
R> Flow.ProcessorSE<T, R> contextualProcessor
(Flow.ProcessorSE<T, R> processor) contextualProcessor
を呼び出すスレッドから取得したコンテキストでFlow.Processor
SE をラップします。contextualRunnable
(RunnableSE runnable) contextualRunnable
を呼び出すスレッドからキャプチャーされたコンテキストでRunnable
SE をラップします。<T> Flow.SubscriberSE<T>
contextualSubscriber
(Flow.SubscriberSE<T> subscriber) contextualSubscriber
を呼び出すスレッドから取得したコンテキストでFlow.Subscriber
SE をラップします。<R> SupplierSE<R>
contextualSupplier
(SupplierSE<R> supplier) contextualSupplier
を呼び出すスレッドから取得したコンテキストでSupplier
SE をラップします。createContextualProxy
(ObjectSE instance, ClassSE<?>... interfaces) 入力オブジェクトインスタンスの新しいコンテキストオブジェクトプロキシを作成します。createContextualProxy
(ObjectSE instance, MapSE<StringSE, StringSE> executionProperties, ClassSE<?>... interfaces) 入力オブジェクトインスタンスの新しいコンテキストオブジェクトプロキシを作成します。<T> T
createContextualProxy
(T instance, ClassSE<T> intf) 入力オブジェクトインスタンスの新しいコンテキストオブジェクトプロキシを作成します。<T> T
createContextualProxy
(T instance, MapSE<StringSE, StringSE> executionProperties, ClassSE<T> intf) 入力オブジェクトインスタンスの新しいコンテキストオブジェクトプロキシを作成します。execute
が呼び出された同じスレッドでタスクを実行するExecutor
SE としてスレッドコンテキストをキャプチャーしますが、currentContextExecutor
を呼び出すスレッドからキャプチャーされたコンテキストを使用します。getExecutionProperties
(ObjectSE contextualProxy) コンテキストプロキシインスタンスの現在の実行プロパティを取得します。<T> CompletableFutureSE<T>
withContextCapture
(CompletableFutureSE<T> stage) 指定されたステージの完了によって完了する新しいCompletableFuture
SE を返します。<T> CompletionStageSE<T>
withContextCapture
(CompletionStageSE<T> stage) 指定されたステージの完了によって完了する新しいCompletionStage
SE を返します。
メソッドの詳細
contextualCallable
contextualCallable
を呼び出すスレッドからキャプチャーされたコンテキストでCallable
SE をラップします。コンテキストは、contextualCallable
が呼び出された時点でキャプチャーされます。プロキシインスタンスで
call
が呼び出されると、最初にcall
メソッドを実行するスレッドでコンテキストが確立され、次に、提供されたCallable
のcall
メソッドが呼び出されます。最後に、前のコンテキストがスレッドに復元され、Callable
の結果が呼び出し元に返されます。- 型パラメーター:
R
- 呼び出し可能な結果の型。- パラメーター:
callable
- コンテキスト化するインスタンス。- 戻り値:
call
メソッドの実行をコンテキストでラップするコンテキスト化されたプロキシインスタンス。- 例外:
IllegalArgumentExceptionSE
- すでにコンテキスト化されたCallable
がこのメソッドに提供されている場合。- 導入:
- 3.0
contextualConsumer
contextualConsumer
を呼び出すスレッドからキャプチャーされたコンテキストでBiConsumer
SE をラップします。コンテキストは、contextualConsumer
が呼び出された時点でキャプチャーされます。プロキシインスタンスで
accept
が呼び出されると、最初にaccept
メソッドを実行するスレッドでコンテキストが確立され、次に、提供されたBiConsumer
のaccept
メソッドが呼び出されます。最後に、以前のコンテキストがスレッドに復元され、制御が呼び出し側に返されます。- 型パラメーター:
T
- コンシューマーへの最初のパラメーターの型。U
- コンシューマーへの 2 番目のパラメーターの型。- パラメーター:
consumer
- コンテキスト化するインスタンス。- 戻り値:
accept
メソッドの実行をコンテキストでラップするコンテキスト化されたプロキシインスタンス。- 例外:
IllegalArgumentExceptionSE
- すでにコンテキスト化されたBiConsumer
がこのメソッドに提供されている場合。- 導入:
- 3.0
contextualConsumer
contextualConsumer
を呼び出すスレッドからキャプチャーされたコンテキストでConsumer
SE をラップします。コンテキストは、contextualConsumer
が呼び出された時点でキャプチャーされます。プロキシインスタンスで
accept
が呼び出されると、最初にaccept
メソッドを実行するスレッドでコンテキストが確立され、次に、提供されたConsumer
のaccept
メソッドが呼び出されます。最後に、以前のコンテキストがスレッドに復元され、制御が呼び出し側に返されます。- 型パラメーター:
T
- コンシューマーへのパラメーターの型。- パラメーター:
consumer
- コンテキスト化するインスタンス。- 戻り値:
accept
メソッドの実行をコンテキストでラップするコンテキスト化されたプロキシインスタンス。- 例外:
IllegalArgumentExceptionSE
- すでにコンテキスト化されたConsumer
がこのメソッドに提供されている場合。- 導入:
- 3.0
contextualFunction
contextualFunction
を呼び出すスレッドからキャプチャーされたコンテキストでBiFunction
SE をラップします。コンテキストは、contextualFunction
が呼び出された時点でキャプチャーされます。プロキシインスタンスで
apply
が呼び出されると、最初にapply
メソッドを実行するスレッドでコンテキストが確立され、次に、提供されたBiFunction
のapply
メソッドが呼び出されます。最後に、前のコンテキストがスレッドに復元され、BiFunction
の結果が呼び出し元に返されます。- 型パラメーター:
T
- 機能する最初のパラメーターの型。U
- 機能する 2 番目のパラメーターの型。R
- 関数の結果の型。- パラメーター:
function
- コンテキスト化するインスタンス。- 戻り値:
apply
メソッドの実行をコンテキストでラップするコンテキスト化されたプロキシインスタンス。- 例外:
IllegalArgumentExceptionSE
- すでにコンテキスト化されたBiFunction
がこのメソッドに提供されている場合。- 導入:
- 3.0
contextualFunction
contextualFunction
を呼び出すスレッドからキャプチャーされたコンテキストでBiFunction
SE をラップします。コンテキストは、contextualFunction
が呼び出された時点でキャプチャーされます。プロキシインスタンスで
apply
が呼び出されると、最初にapply
メソッドを実行するスレッドでコンテキストが確立され、次に、提供されたFunction
のapply
メソッドが呼び出されます。最後に、前のコンテキストがスレッドに復元され、Function
の結果が呼び出し元に返されます。- 型パラメーター:
T
- 機能するパラメーターの型。R
- 関数の結果の型。- パラメーター:
function
- コンテキスト化するインスタンス。- 戻り値:
apply
メソッドの実行をコンテキストでラップするコンテキスト化されたプロキシインスタンス。- 例外:
IllegalArgumentExceptionSE
- すでにコンテキスト化されたFunction
がこのメソッドに提供されている場合。- 導入:
- 3.0
contextualRunnable
contextualRunnable
を呼び出すスレッドからキャプチャーされたコンテキストでRunnable
SE をラップします。コンテキストは、contextualRunnable
が呼び出された時点でキャプチャーされます。プロキシインスタンスで
run
が呼び出されると、最初にrun
メソッドを実行するスレッドでコンテキストが確立され、次に、提供されたRunnable
のrun
メソッドが呼び出されます。最後に、以前のコンテキストがスレッドに復元され、制御が呼び出し側に返されます。- パラメーター:
runnable
- コンテキスト化するインスタンス。- 戻り値:
run
メソッドの実行をコンテキストでラップするコンテキスト化されたプロキシインスタンス。- 例外:
IllegalArgumentExceptionSE
- すでにコンテキスト化されたRunnable
がこのメソッドに提供されている場合。- 導入:
- 3.0
contextualSupplier
contextualSupplier
を呼び出すスレッドから取得したコンテキストでSupplier
SE をラップします。コンテキストは、contextualSupplier
が呼び出された時点でキャプチャーされます。プロキシインスタンスで
supply
が呼び出されると、最初にsupply
メソッドを実行するスレッドでコンテキストが確立され、次に、提供されたSupplier
のsupply
メソッドが呼び出されます。最後に、前のコンテキストがスレッドに復元され、Supplier
の結果が呼び出し元に返されます。- 型パラメーター:
R
- サプライヤーの結果型。- パラメーター:
supplier
- コンテキスト化するインスタンス。- 戻り値:
supply
メソッドの実行をコンテキストでラップするコンテキスト化されたプロキシインスタンス。- 例外:
IllegalArgumentExceptionSE
- すでにコンテキスト化されたSupplier
がこのメソッドに提供されている場合。- 導入:
- 3.0
contextualSubscriber
contextualSubscriber
を呼び出すスレッドから取得したコンテキストでFlow.Subscriber
SE をラップします。コンテキストは、contextualSubscriber
が呼び出された時点でキャプチャーされます。Flow.Subscriber
SE インターフェースのメソッド (onSubscribe
、onNext
、onError
、onComplete
など) の 1 つがプロキシインスタンスで呼び出されるたびに、まずメソッドを実行するスレッド上でコンテキストが確立され、次に、提供されたFlow.Subscriber
のメソッドが呼び出されます。最後に、以前のコンテキストがスレッド上に復元され、Flow.Subscriber
メソッドの結果が呼び出し元に返されます。- 型パラメーター:
T
- 購読したアイテムの型- パラメーター:
subscriber
- 文脈化するインスタンス- 戻り値:
- すべての
Subscriber
メソッドの実行をラップするコンテキスト化されたプロキシインスタンス。 - 導入:
- 3.1
contextualProcessor
contextualProcessor
を呼び出すスレッドから取得したコンテキストでFlow.Processor
SE をラップします。コンテキストは、contextualProcessor
が呼び出された時点でキャプチャーされます。Flow.Processor
SE の拡張元であるFlow.Subscriber
SE インターフェースのメソッド (onSubscribe
、onNext
、onError
、onComplete
など) の 1 つがプロキシインスタンスで呼び出されるたびに、まずメソッドを実行するスレッド上でコンテキストが確立され、その後、提供されたFlow.Processor
のメソッドが呼び出されます。最後に、以前のコンテキストがスレッド上に復元され、Flow.Processor
メソッドの結果が呼び出し元に返されます。- 型パラメーター:
T
- 購読したアイテムの型R
- 公開されたアイテムの型- パラメーター:
processor
- 文脈化するインスタンス- 戻り値:
Subscriber
から継承されたすべてのメソッドの実行をラップするコンテキスト化されたプロキシインスタンス。- 導入:
- 3.1
createContextualProxy
入力オブジェクトインスタンスの新しいコンテキストオブジェクトプロキシを作成します。各メソッド呼び出しには、コンテキストオブジェクトプロキシを作成したアプリケーションコンポーネントインスタンスのコンテキストがあります。
コンテキストオブジェクトは、Java™ の開発または使用時に役立ちます。イベントを他のコンポーネントインスタンスに伝播する SE スレッドメカニズム。
プロキシを作成したアプリケーションコンポーネントが起動またはデプロイされていない場合、リフレクトされたインターフェースのすべてのメソッドが
IllegalStateException
SE をスローする場合があります。例: Java™ を使用して、作成者のコンテキストでコンテキスト化された Runnable を実行します。SE ExecutorService:
public class MyRunnable implements Runnable { public void run() { System.out.println("MyRunnable.run with Jakarta EE Context available."); } } InitialContext ctx = new InitialContext(); ThreadFactory threadFactory = (ThreadFactory) ctx .lookup("java:comp/env/concurrent/ThreadFactory"); ContextService ctxService = (ContextService) ctx .lookup("java:comp/env/concurrent/ContextService"); MyRunnable myRunnableInstance = ...; Runnable rProxy = ctxService.createContextualProxy(myRunnableInstance, Runnable.class); ExecutorService exSvc = Executors.newThreadPool(10, threadFactory); Future f = exSvc.submit(rProxy);
- 型パラメーター:
T
- プロキシするインスタンスの型- パラメーター:
instance
- プロキシするオブジェクトのインスタンス。intf
- プロキシが実装する必要のあるインターフェース。- 戻り値:
- 指定されたインターフェースを実装する入力オブジェクトのプロキシ。
- 例外:
IllegalArgumentExceptionSE
- -intf
引数が null であるか、インスタンスが指定されたインターフェースを実装していない場合。UnsupportedOperationExceptionSE
- -intf
インターフェースがserializable
SE であるが、スレッドコンテキスト型が直列化をサポートしていない場合。
createContextualProxy
入力オブジェクトインスタンスの新しいコンテキストオブジェクトプロキシを作成します。このメソッドは、
例:<T> T createContextualProxy(T instance, Class<T> intf)
に似ていますが、プロキシが複数のインターフェースをサポートする必要がある場合にこのメソッドを使用できる点が異なります。public class MyRunnableWork implements Runnable, SomeWorkInterface { public void run() { System.out.println("MyRunnableWork.run with Jakarta EE Context available."); } public void someWorkInterfaceMethod() { ... } } ThreadFactory threadFactory = ...; ContextService ctxService = ...; MyRunnableWork myRunnableWorkInstance = ...; Object proxy = ctxService.createContextualProxy(myRunnableWorkInstance, Runnable.class, SomeWorkInterface.class); // call SomeWorkInterface method on the proxy ((SomeWorkInterface) proxy).someWorkInterfaceMethod(); ExecutorService exSvc = Executors.newThreadPool(10, threadFactory); // submit the proxy as a Runnable to the ExecutorService Future f = exSvc.submit( (Runnable)proxy);
- パラメーター:
instance
- プロキシするオブジェクトのインスタンス。interfaces
- プロキシが実装する必要のあるインターフェース。- 戻り値:
- 指定されたすべてのインターフェースを実装する入力オブジェクトのプロキシ。
- 例外:
IllegalArgumentExceptionSE
- -interfaces
引数が null であるか、インスタンスが指定されたすべてのインターフェースを実装していない場合。UnsupportedOperationExceptionSE
- -interfaces
のいずれかがserializable
SE であるが、スレッドコンテキスト型が直列化をサポートしていない場合。
createContextualProxy
<T> T createContextualProxy(T instance, MapSE<StringSE, StringSE> executionProperties, ClassSE<T> intf) 入力オブジェクトインスタンスの新しいコンテキストオブジェクトプロキシを作成します。コンテキストオブジェクトは、Java™ の開発または使用時に役立ちます。イベントを他のコンポーネントインスタンスに伝播する SE スレッドメカニズム。
プロキシを作成したアプリケーションコンポーネントが起動またはデプロイされていない場合、リフレクトされたインターフェースのすべてのメソッドが
IllegalStateException
SE をスローする場合があります。このメソッドは、
Map
オブジェクトを受け入れます。これにより、コンテキストオブジェクトの作成者は、コンテキストオブジェクトの作成時にキャプチャーするコンテキストまたは動作を定義できます。指定されたプロパティは、コンテキストオブジェクトとともに残ります。例: MDB のトランザクション内で、送信者のコンテキストを使用してメッセージ駆動型 Bean(MDB)を呼び出すには:
public class MyServlet ... { public void doPost() throws NamingException, JMSException { InitialContext ctx = new InitialContext(); // Get the ContextService that only propagates // security context. ContextService ctxSvc = (ContextService) ctx.lookup("java:comp/env/SecurityContext"); // Set any custom context data through execution properties Map<String, String> execProps = new HashMap<>(); execProps.put("vendor_a.security.tokenexpiration", "15000"); // Specify that contextual object should run inside the current // transaction. If we have a failure, we don't want to consume // the message. execProps.put(ManagedTask.TRANSACTION, "USE_TRANSACTION_OF_EXECUTION_THREAD"); ProcessMessage msgProcessor = ctxSvc.createContextualProxy(new MessageProcessor(), execProps, ProcessMessage.class); ConnectionFactory cf = (ConnectionFactory) ctx.lookup("java:comp/env/MyTopicConnectionFactory"); Destination dest = (Destination) ctx.lookup("java:comp/env/MyTopic"); Connection con = cf.createConnection(); Session session = con.createSession(true, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(dest); Message msg = session.createObjectMessage((Serializable)msgProcessor); producer.send(dest, msg); ... } public class MyMDB ... { public void onMessage(Message msg) { // Get the ProcessMessage contextual object from the message. ObjectMessage omsg = (ObjectMessage)msg; ProcessMessage msgProcessor = (ProcessMessage)omsg.getObject(); // Process the message in the specified context. msgProcessor.processMessage(msg); } } public interface ProcessMessage { public void processMessage(Message msg); } public class MessageProcessor implements ProcessMessage, Serializable { public void processMessage(Message msg) { // Process the message with the application container // context that sent the message. } }
- 型パラメーター:
T
- インターフェースの型- パラメーター:
instance
- プロキシするオブジェクトのインスタンス。executionProperties
- コンテキストオブジェクトを作成して実行するときに使用するプロパティ。intf
- プロキシが実装する必要のあるインターフェース。- 戻り値:
- 指定されたインターフェースを実装する入力オブジェクトのプロキシ。
- 例外:
IllegalArgumentExceptionSE
- -intf
引数が null の場合、またはインスタンスが指定されたインターフェースを実装していない場合UnsupportedOperationExceptionSE
- -intf
インターフェースがserializable
SE であるが、スレッドコンテキスト型が直列化をサポートしていない場合。
createContextualProxy
ObjectSE createContextualProxy(ObjectSE instance, MapSE<StringSE, StringSE> executionProperties, ClassSE<?>... interfaces) 入力オブジェクトインスタンスの新しいコンテキストオブジェクトプロキシを作成します。このメソッドは、
<T> T createContextualProxy(T instance, Map<String, String> executionProperties, Class<T> intf)
に似ていますが、プロキシが複数のインターフェースをサポートする必要がある場合にこのメソッドを使用できる点が異なります。- パラメーター:
instance
- プロキシするオブジェクトのインスタンス。executionProperties
- コンテキストオブジェクトを作成して実行するときに使用するプロパティ。interfaces
- プロキシが実装する必要のあるインターフェース。- 戻り値:
- 指定されたすべてのインターフェースを実装する入力オブジェクトのプロキシ。
- 例外:
IllegalArgumentExceptionSE
- -interfaces
引数が null であるか、インスタンスが指定されたすべてのインターフェースを実装していない場合。UnsupportedOperationExceptionSE
- -interfaces
のいずれかがserializable
SE であるが、スレッドコンテキスト型が直列化をサポートしていない場合。
currentContextExecutor
ExecutorSE currentContextExecutor()execute
が呼び出された同じスレッドでタスクを実行するExecutor
SE としてスレッドコンテキストをキャプチャーしますが、currentContextExecutor
を呼び出すスレッドからキャプチャーされたコンテキストを使用します。使用例:
Executor contextSnapshot = contextSvc.currentContextExecutor(); ... // from another thread, or after thread context has changed, contextSnapshot.execute(() -> obj.doSomethingThatNeedsContext()); contextSnapshot.execute(() -> doSomethingElseThatNeedsContext(x, y));
すでにコンテキスト化された
Runnable
がそのexecute
メソッドに提供されている場合、返されたExecutor
はIllegalArgumentException
を発生させる必要があります。- 戻り値:
execute
メソッドをコンテキストでラップするエグゼキュータ。- 導入:
- 3.0
getExecutionProperties
コンテキストプロキシインスタンスの現在の実行プロパティを取得します。- パラメーター:
contextualProxy
- 実行プロパティを取得するためのコンテキストプロキシインスタンス。- 戻り値:
- 現在のコンテキストオブジェクト実行プロパティのコピー。実行プロパティを指定せずに contextualProxy が作成された場合は null になります。
- 例外:
IllegalArgumentExceptionSE
- 入力 contextualProxy がcreateContextualProxy
メソッドで作成された有効なコンテキストオブジェクトプロキシでない場合にスローされます。
withContextCapture
指定されたステージの完了によって完了する新しい
CompletableFuture
SE を返します。この
ContextService
がManagedExecutorService.getContextService()
によって取得された場合、同じManagedExecutorService
を使用して、新しい完了可能フューチャは、このContextService
からデフォルトの非同期実行機能を取得します。依存ステージが新しい完了可能な未来から作成され、それらのステージの依存ステージなどから作成されると、スレッドコンテキストが
ContextService
によってキャプチャーおよび / またはクリアされます。これにより、ユーザーが事前にコンテキスト化されたアクションを指定して明示的にオーバーライドしない限り、各ステージで実行されるアクションは常に、ステージを作成するコードのスレッドコンテキストで実行されることが保証されます。このメソッドの呼び出しは、最初に提供された完了可能なフューチャ、またはそれから直接作成された (このメソッドを使用しない) 他の依存ステージのスレッドコンテキストの伝播には影響しません。
- 型パラメーター:
T
- 完了可能な将来の結果型。- パラメーター:
stage
- その完了が、このメソッドによって作成された新しい完了可能なフューチャーの完了をトリガーする、完了可能なフューチャー。- 戻り値:
- 新しい完全な未来。
- 導入:
- 3.0
withContextCapture
指定されたステージの完了によって完了する新しい
CompletionStage
SE を返します。新しい完了ステージは、この
ContextService
からデフォルトの非同期実行機能を取得します。このContextService
がManagedExecutorService.getContextService()
によって取得された場合は同じManagedExecutorService
を使用し、それ以外の場合は DefaultManagedExecutorService を使用します。依存ステージが新しい完了ステージから作成され、それらのステージの依存ステージなどから作成されると、スレッドコンテキストが
ContextService
によってキャプチャーおよび / またはクリアされます。これにより、ユーザーが事前にコンテキスト化されたアクションを指定して明示的にオーバーライドしない限り、各ステージで実行されるアクションは常に、ステージを作成するコードのスレッドコンテキストで実行されることが保証されます。このメソッドの呼び出しは、最初に提供されたステージ、またはそこから直接作成された他の依存ステージ (このメソッドを使用しない) のスレッドコンテキストの伝播には影響しません。
- 型パラメーター:
T
- 完了段階の結果型。- パラメーター:
stage
- このメソッドによって作成された新しいステージの完了をトリガーする完了ステージ。- 戻り値:
- 新しい完成段階。
- 導入:
- 3.0