クラス 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 が非同期メソッドの呼び出し元に提供するのと同じCompletableFuture
SE インスタンスを使用できるようにするメカニズム。スレッドで非同期メソッドの実装を呼び出す前に、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 が非同期メソッドの呼び出し元に提供するCompletableFuture
SE インスタンスを完成させます。static <T> CompletableFutureSE<T>
getFuture()
Jakarta EE Product Provider が非同期メソッドの呼び出し元に提供するものと同じCompletableFuture
SE インスタンスを取得します。static <T> void
setFuture(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 が非同期メソッドの呼び出し元に提供するCompletableFuture
SE インスタンスを完成させます。このメソッドは、非同期メソッドの実装によってのみ呼び出す必要があります。
- 型パラメーター:
T
- 非同期メソッドのCompletableFuture
によって返される結果の型。- パラメーター:
result
- 非同期メソッドのCompletableFuture
を完了するための結果。- 戻り値:
- コンテナーが呼び出し元に返すのと同じ
CompletableFuture
。 - 例外:
IllegalStateExceptionSE
- 非同期メソッドのCompletableFuture
がスレッドに存在しない場合。
getFuture
public static <T> CompletableFutureSE<T> getFuture()
Jakarta EE Product Provider が非同期メソッドの呼び出し元に提供するものと同じCompletableFuture
SE インスタンスを取得します。このメソッドは、非同期メソッドの実装によってのみ呼び出す必要があります。
- 型パラメーター:
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
。