クラス Asynchronous.Result
- java.lang.ObjectSE
-
- jakarta.enterprise.concurrent.Asynchronous.Result
- 含まれているクラス:
- Asynchronous
public static final class Asynchronous.Result extends ObjectSE
Jakarta EE Product Provider が、非同期メソッドの実装で、Jakarta EE Product Provider が非同期メソッドの呼び出し元に提供するのと同じCompletableFutureSE インスタンスを使用できるようにするメカニズム。スレッドで非同期メソッドの実装を呼び出す前に、Jakarta EE Product Provider は
setFuture(java.util.concurrent.CompletableFuture<T>)メソッドを呼び出します。これにより、Jakarta EE Product Provider が呼び出し元に返すのと同じCompletableFutureを非同期メソッドの実装で使用できるようになります。非同期メソッドの実装は、
getFuture()メソッドを呼び出して、Jakarta EE Product Provider が呼び出し元に返すのと同じCompletableFutureを取得します。非同期メソッドの実装は、この Future を (通常または例外的に) 完了するか、完了ステージのパイプラインの完了時などに、別の方法でその完了を手配するかを選択できます。これと同じCompletableFutureを使用すると、呼び出し元がCompletableFutureを強制的に (キャンセルまたはその他の手段によって) 完了したかどうかを非同期メソッドの実装で判断できます。この場合、非同期メソッドの実装は、処理を続行するのではなく、すぐに終了することを決定できます。以下に例を示します。
@Asynchronous public CompletableFuture<Double> hoursWorked(LocalDateTime from, LocalDateTime to) { CompletableFuture<Double> future = Asynchronous.Result.getFuture(); if (future.isDone()) return future; try (Connection con = ((DataSource) InitialContext.doLookup( "java:comp/env/jdbc/timesheetDB")).getConnection()) { ... for (ResultSet result = stmt.executeQuery(); result.next() && !future.isDone(); ) ... future.complete(total); } catch (NamingException | SQLException x) { future.completeExceptionally(x); } return future; }非同期メソッドが完了すると、Jakarta EE Product Provider はsetFuture(java.util.concurrent.CompletableFuture<T>)メソッドをnull値で呼び出してスレッドからクリアします。- 導入:
- 3.0
方法の概要
すべてのメソッド 静的メソッド 具象メソッド 修飾子と型 メソッド 説明 static <T> CompletableFutureSE<T>complete(T result)Jakarta EE Product Provider が非同期メソッドの呼び出し元に提供するCompletableFutureSE インスタンスを完成させます。static <T> CompletableFutureSE<T>getFuture()Jakarta EE Product Provider が非同期メソッドの呼び出し元に提供するものと同じCompletableFutureSE インスタンスを取得します。static <T> voidsetFuture(CompletableFutureSE<T> future)スレッドで非同期メソッドの実装を呼び出す前に、Jakarta EE Product Provider はこのメソッドを呼び出して、Jakarta EE Product Provider が呼び出し元に返すのと同じCompletableFutureを非同期メソッドの実装で使用できるようにします。
メソッドの詳細
complete
public static <T> CompletableFutureSE<T> complete(T result)
Jakarta EE Product Provider が非同期メソッドの呼び出し元に提供するCompletableFutureSE インスタンスを完成させます。このメソッドは、非同期メソッドの実装によってのみ呼び出す必要があります。
- 型パラメーター:
T- 非同期メソッドのCompletableFutureによって返される結果の型。- パラメーター:
result- 非同期メソッドのCompletableFutureを完了するための結果。- 戻り値:
- コンテナーが呼び出し元に返すのと同じ
CompletableFuture。 - 例外:
IllegalStateExceptionSE- 非同期メソッドのCompletableFutureがスレッドに存在しない場合。
getFuture
public static <T> CompletableFutureSE<T> getFuture()
Jakarta EE Product Provider が非同期メソッドの呼び出し元に提供するものと同じCompletableFutureSE インスタンスを取得します。このメソッドは、非同期メソッドの実装によってのみ呼び出す必要があります。
- 型パラメーター:
T- 非同期メソッドのCompletableFutureによって返される結果の型。- 戻り値:
- コンテナーが呼び出し元に返すのと同じ
CompletableFuture。 - 例外:
IllegalStateExceptionSE- 非同期メソッドのCompletableFutureがスレッドに存在しない場合。
setFuture
public static <T> void setFuture(CompletableFutureSE<T> future)
スレッドで非同期メソッドの実装を呼び出す前に、Jakarta EE Product Provider はこのメソッドを呼び出して、Jakarta EE Product Provider が呼び出し元に返すのと同じCompletableFutureを非同期メソッドの実装で使用できるようにします。非同期メソッドが完了すると、Jakarta EE Product Provider はこのメソッドを
null値で呼び出してスレッドからクリアします。このメソッドは、Jakarta EE Product Provider によってのみ呼び出される必要があります。
- 型パラメーター:
T- 非同期メソッドのCompletableFutureによって返される結果の型。- パラメーター:
future- コンテナーが呼び出し元に返すCompletableFuture、またはそれをクリアするnull。