T
- 結果の型 public class DeferredResult<T> extends ObjectSE
DeferredResult
は、非同期リクエスト処理に Callable
SE を使用する代替手段を提供します。Callable
はアプリケーションに代わって同時に実行されますが、DeferredResult
を使用すると、アプリケーションは選択したスレッドから結果を生成できます。 サブクラスはこのクラスを継承して、追加のデータまたは動作を DeferredResult
に簡単に関連付けることができます。例: DeferredResult
の作成に使用されるユーザーを、クラスを継承し、ユーザーの追加のプロパティを追加することで関連付けることができます。このようにして、マッピングを行うためにデータ構造を使用する必要なく、ユーザーは後で簡単にアクセスできます。
追加の動作をこのクラスに関連付ける例は、クラスを継承して追加のインターフェースを実装することで実現できます。例: DeferredResult
が PriorityQueue
SE に追加されたときに正しい順序で処理されるように、Comparable
SE を実装したい場合があります。
修飾子と型 | クラスと説明 |
---|---|
static interface | DeferredResult.DeferredResultHandler 設定されている場合、DeferredResult 値を処理します。 |
コンストラクターと説明 |
---|
DeferredResult() DeferredResult を作成します。 |
DeferredResult(LongSE timeoutValue) カスタムタイムアウト値を使用して DeferredResult を作成します。 |
DeferredResult(LongSE timeoutValue, ObjectSE timeoutResult) タイムアウト値とタイムアウトの場合に使用するデフォルトの結果で DeferredResult を作成します。 |
DeferredResult(LongSE timeoutValue, SupplierSE<?> timeoutResult) Supplier SE に基づく動的フォールバック値を受け入れる DeferredResult(Long, Object) のバリアント。 |
修飾子と型 | メソッドと説明 |
---|---|
ObjectSE | getResult() 結果を返します。結果が設定されていない場合は null を返します。 |
boolean | hasResult() DeferredResult が設定されている場合は true を返します。 |
boolean | isSetOrExpired() この DeferredResult が以前に設定されたか、基になるリクエストが期限切れになったために使用できなくなった場合は、 true を返します。 |
void | onCompletion(RunnableSE callback) 非同期リクエストが完了したときに呼び出すコードを登録します。 |
void | onError(ConsumerSE<ThrowableSE> callback) 非同期リクエスト中にエラーが発生したときに呼び出すコードを登録します。 |
void | onTimeout(RunnableSE callback) 非同期リクエストがタイムアウトしたときに呼び出すコードを登録します。 |
boolean | setErrorResult(ObjectSE result) DeferredResult のエラー値を設定して処理します。 |
boolean | setResult(T result) DeferredResult の値を設定して処理します。 |
void | setResultHandler(DeferredResult.DeferredResultHandler resultHandler) 結果値を処理するために使用するハンドラーを提供します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public DeferredResult()
public DeferredResult(LongSE timeoutValue)
デフォルトでは設定されていません。この場合、MVC Java Config または MVC 名前空間で設定されたデフォルトが使用されます。または、設定されていない場合、タイムアウトは基盤となるサーバーのデフォルトによって異なります。
timeoutValue
- ミリ秒単位のタイムアウト値 public DeferredResult(@Nullable LongSE timeoutValue, ObjectSE timeoutResult)
timeoutValue
- ミリ秒単位のタイムアウト値 (null
の場合は無視されます)timeoutResult
- 使用する結果 public DeferredResult(@Nullable LongSE timeoutValue, SupplierSE<?> timeoutResult)
Supplier
SE に基づく動的フォールバック値を受け入れる DeferredResult(Long, Object)
のバリアント。timeoutValue
- ミリ秒単位のタイムアウト値 (null
の場合は無視されます)timeoutResult
- 使用する結果サプライヤー public final boolean isSetOrExpired()
true
を返します。 結果は、setResult(Object)
または setErrorResult(Object)
の呼び出しで設定されたか、タイムアウト結果がコンストラクターに提供された場合はタイムアウトの結果として設定された可能性があります。リクエストは、タイムアウトまたはネットワークエラーが原因で期限切れになる場合もあります。
public boolean hasResult()
true
を返します。@Nullable public ObjectSE getResult()
null
を返します。結果も null
になる可能性があるため、このメソッドを呼び出す前に、まず hasResult()
を使用して結果があるかどうかを確認することをお勧めします。public void onTimeout(RunnableSE callback)
このメソッドは、DeferredResult
が入力される前に非同期リクエストがタイムアウトしたときに、コンテナースレッドから呼び出されます。setResult
または setErrorResult
を呼び出して処理を再開する場合があります。
public void onError(ConsumerSE<ThrowableSE> callback)
このメソッドは、DeferredResult
が入力される前の非同期リクエストの処理中にエラーが発生したときに、コンテナースレッドから呼び出されます。setResult
または setErrorResult
を呼び出して処理を再開する場合があります。
public void onCompletion(RunnableSE callback)
このメソッドは、タイムアウトやネットワークエラーなどの何らかの理由で非同期リクエストが完了したときに、コンテナースレッドから呼び出されます。これは、DeferredResult
インスタンスが使用できなくなったことを検出できます。
public final void setResultHandler(DeferredResult.DeferredResultHandler resultHandler)
resultHandler
- ハンドラー DeferredResultProcessingInterceptor
public boolean setResult(T result)
result
- 設定する値 true
。false
(結果がすでに設定されている場合、または非同期リクエストが期限切れの場合)isSetOrExpired()
public boolean setErrorResult(ObjectSE result)
DeferredResult
のエラー値を設定して処理します。値は Exception
SE または Throwable
SE の場合があり、その場合、ハンドラーが例外を発生させたかのように処理されます。result
- エラー結果値 true
結果がエラー値に設定され、処理のために渡された場合。false
(結果がすでに設定されている場合、または非同期リクエストが期限切れの場合)isSetOrExpired()