クラス 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
    • メソッドの詳細

      • 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