インターフェース AsyncResponse
public interface AsyncResponse
非同期サーバー側レスポンス処理の手段を提供する注入可能な JAX-RS 非同期レスポンス。
各非同期レスポンスインスタンスは、実行中のリクエストにバインドされ、リクエスト処理結果を非同期で提供したり、中断されたクライアント接続を操作したりするために使用できます。使用可能な操作は次のとおりです。@Suspended
アノテーションを使用して、AsyncResponse
の新しいインスタンスをresource or sub-resource method
パラメーターに挿入できます。- 一時停止状態データの更新 (タイムアウト値、レスポンス ..。)
- 中断されたリクエスト処理を再開する
- 中断されたリクエスト処理をキャンセルする
次の例は、非同期 HTTP リクエスト処理のための
AsyncResponse
の使用を示しています。@Path("/messages/next") public class MessagingResource { private static final BlockingQueue<AsyncResponse> suspended = new ArrayBlockingQueue<AsyncResponse>(5); @GET public void readMessage(@Suspended AsyncResponse ar) throws InterruptedException { suspended.put(ar); } @POST public String postMessage(final String message) throws InterruptedException { final AsyncResponse ar = suspended.take(); ar.resume(message); // resumes the processing of one GET request return "Message sent"; } }
非同期レスポンスが正のタイムアウト値で中断され、タイムアウトになる前に明示的に再開されなかった場合、レスポンスに正のタイムアウト値が設定されていれば、指定されたタイムアウトしきい値に達すると処理が再開されます。
デフォルトでは、タイムアウトした非同期レスポンスは、
HTTP 503 (Service unavailable)
エラーレスポンスステータスコードが設定されているWebApplicationException
で再開されます。このデフォルトの動作は、カスタムtime-out handler
のsetting
によってオーバーライドされる場合があります。- 導入:
- 2.0
- 作成者:
- Marek Potociar
フィールドサマリー
フィールド 修飾子と型 フィールド 説明 static long
NO_TIMEOUT
サスペンドタイムアウト値を指定しない定数。
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド 修飾子と型 メソッド 説明 boolean
cancel()
中断されたリクエスト処理をキャンセルします。boolean
cancel(int retryAfter)
中断されたリクエスト処理をキャンセルします。boolean
cancel(DateSE retryAfter)
中断されたリクエスト処理をキャンセルします。boolean
isCancelled()
非同期レスポンスインスタンスがキャンセルされているかどうかを確認します。boolean
isDone()
この非同期レスポンスインスタンスが属するリクエストの処理が終了したかどうかを確認します。boolean
isSuspended()
非同期レスポンスインスタンスが一時停止状態かどうかを確認します。CollectionSE<ClassSE<?>>
register(ClassSE<?> callback)
実装されたコールバックインターフェースに基づいて非同期レスポンスのライフサイクルイベントを受信するために、非同期処理ライフサイクルコールバッククラスを登録します。MapSE<ClassSE<?>,CollectionSE<ClassSE<?>>>
register(ClassSE<?> callback, ClassSE<?>... callbacks)
非同期処理ライフサイクルコールバッククラスを登録して、実装されたコールバックインターフェースに基づいて非同期レスポンスのライフサイクルイベントを受信します。CollectionSE<ClassSE<?>>
register(ObjectSE callback)
実装されたコールバックインターフェースに基づいて非同期レスポンスのライフサイクルイベントを受信するために、非同期処理ライフサイクルコールバックインスタンスを登録します。MapSE<ClassSE<?>,CollectionSE<ClassSE<?>>>
register(ObjectSE callback, ObjectSE... callbacks)
実装されたコールバックインターフェースに基づいて非同期レスポンスのライフサイクルイベントを受信するために、非同期処理ライフサイクルコールバックインスタンスを登録します。boolean
resume(ObjectSE response)
提供されたレスポンスデータを使用して、中断されたリクエスト処理を再開します。boolean
resume(ThrowableSE response)
提供されたスロー可能オブジェクトを使用して、中断されたリクエスト処理を再開します。boolean
setTimeout(long time, TimeUnitSE unit)
サスペンドタイムアウトを設定 / 更新します。void
setTimeoutHandler(TimeoutHandler handler)
中断された非同期レスポンスのタイムアウトハンドラーを設定 / 置換します。
フィールドの詳細
NO_TIMEOUT
static final long NO_TIMEOUT
サスペンドタイムアウト値を指定しない定数。- 関連事項:
- 定数フィールド値
メソッドの詳細
resume
boolean resume(ObjectSE response)
提供されたレスポンスデータを使用して、中断されたリクエスト処理を再開します。提供されるレスポンスデータは、JAX-RS resource method
から返すことができる任意の Java 型にすることができます。このメソッドが成功するには、非同期レスポンスがまだ
suspended
状態である必要があります。このメソッドを実行することにより、リクエストは正常に完了するか、エラーで完了することが保証されます。JAX-RS ランタイムによるデータ処理は、JAX-RS リソースによって同期的に返されるレスポンスデータの場合と同じパスに従いますが、マッピングされていない例外が JAX-RS ランタイムによって再スローされず、ホスティング I によって処理される点が異なります。/O コンテナー。代わりに、マップされていない例外は、コンテナー固有のコールバックメカニズムを介してホスティング I/O コンテナーに伝播されます。コンテナーの実装によっては、伝播されたマップされていない例外により、通常、エラーステータスがクライアントに送信されたり、接続が閉じられたりします。
- パラメーター:
response
- 中断されたリクエストにレスポンスして返送されるデータ。- 戻り値:
true
リクエスト処理が再開された場合、リクエスト処理がsuspended
ではなく再開できなかった場合にfalse
を返します。- 関連事項:
resume(Throwable)
resume
boolean resume(ThrowableSE response)
提供されたスロー可能オブジェクトを使用して、中断されたリクエスト処理を再開します。提供されたスロー可能オブジェクトには、JAX-RS resource method
によってスローされた例外と同じルールが適用されます。このメソッドを実行することにより、リクエストは正常に完了するか、エラーで完了することが保証されます。JAX-RS ランタイムによるスロー可能な処理は、JAX-RS リソースによって同期的に返されるレスポンスデータの場合と同じパスに従いますが、マッピングされていない例外が JAX-RS ランタイムによって再スローされてホスティング I によって処理されない点が異なります。/O コンテナー。代わりに、マップされていない例外は、コンテナー固有のコールバックメカニズムを介してホスティング I/O コンテナーに伝播されます。コンテナーの実装によっては、伝播されたマップされていない例外により、通常、エラーステータスがクライアントに送信されたり、接続が閉じられたりします。
- パラメーター:
response
- 一時停止されたリクエストに応じて発生する例外。- 戻り値:
- レスポンスが再開された場合は
true
、レスポンスがsuspended
でなく、再開できなかった場合はfalse
を返します。 - 関連事項:
resume(Object)
cancel
boolean cancel()
中断されたリクエスト処理をキャンセルします。このメソッドを使用してリクエスト処理がキャンセルされた場合、JAX-RS 実装は、
HTTP 503 (Service unavailable)
エラーレスポンスを返送することにより、リクエスト処理がキャンセルされたことをクライアントに示さなければなりません。cancel(...)
メソッドを複数回呼び出してリクエスト処理をキャンセルすると、リクエスト処理を 1 回だけキャンセルするのと同じ効果があります。すでにキャンセルまたは再開された非同期レスポンスインスタンスでcancel(...)
メソッドを呼び出しても効果はなく、リクエストが以前にキャンセルされている場合は、true
を返すときにメソッド呼び出しは無視されます。それ以外の場合、リクエストが定期的に再開された場合(resume(...) method
を使用)、またはタイムアウトのために再開された場合、メソッドはfalse
を返します。- 戻り値:
- リクエスト処理がキャンセルされた場合は
true
、リクエスト処理がsuspended
でなく、キャンセルできず、まだcancelled
でない場合は、false
を返します。 - 関連事項:
cancel(int)
,cancel(java.util.Date)
cancel
boolean cancel(int retryAfter)
中断されたリクエスト処理をキャンセルします。このメソッドを使用してリクエスト処理がキャンセルされた場合、JAX-RS 実装は、メソッドパラメーターで指定された値に設定された
Retry-After
ヘッダーを含むHTTP 503 (Service unavailable)
エラーレスポンスを返送することにより、リクエスト処理がキャンセルされたことをクライアントに示さなければなりません。cancel(...)
メソッドを複数回呼び出してリクエスト処理をキャンセルすると、リクエスト処理を 1 回だけキャンセルするのと同じ効果があります。すでにキャンセルまたは再開された非同期レスポンスインスタンスでcancel(...)
メソッドを呼び出しても効果はなく、リクエストが以前にキャンセルされている場合は、true
を返すときにメソッド呼び出しは無視されます。それ以外の場合、リクエストが定期的に再開された場合(resume(...) method
を使用)、またはタイムアウトのために再開された場合、メソッドはfalse
を返します。- パラメーター:
retryAfter
- レスポンスがクライアントに送信されてから秒数の 10 進数で、リクエスト元のクライアントがサービスを利用できないと予想される期間を示します。- 戻り値:
- リクエスト処理がキャンセルされた場合は
true
、リクエスト処理がsuspended
でなく、キャンセルできず、まだcancelled
でない場合は、false
を返します。 - 関連事項:
cancel()
,cancel(java.util.Date)
cancel
boolean cancel(DateSE retryAfter)
中断されたリクエスト処理をキャンセルします。このメソッドを使用してリクエスト処理がキャンセルされた場合、JAX-RS 実装は、メソッドパラメーターで指定された値に設定された
Retry-After
ヘッダーを含むHTTP 503 (Service unavailable)
エラーレスポンスを返送することにより、リクエスト処理がキャンセルされたことをクライアントに示さなければなりません。cancel(...)
メソッドを複数回呼び出してリクエスト処理をキャンセルすると、リクエスト処理を 1 回だけキャンセルするのと同じ効果があります。すでにキャンセルまたは再開された非同期レスポンスインスタンスでcancel(...)
メソッドを呼び出しても効果はなく、リクエストが以前にキャンセルされている場合は、true
を返すときにメソッド呼び出しは無視されます。それ以外の場合、リクエストが定期的に再開された場合(resume(...) method
を使用)、またはタイムアウトのために再開された場合、メソッドはfalse
を返します。- パラメーター:
retryAfter
- リクエスト元のクライアントがサービスを利用できないと予想される期間を示す日付。- 戻り値:
- リクエスト処理がキャンセルされた場合は
true
、リクエスト処理がsuspended
でなく、キャンセルできず、まだcancelled
でない場合は、false
を返します。 - 関連事項:
cancel()
,cancel(int)
isSuspended
boolean isSuspended()
非同期レスポンスインスタンスが一時停止状態にあるかどうかを確認します。この非同期レスポンスがまだ中断されていて、まだ処理が完了していない場合(レスポンスを再開またはキャンセルすることにより)、メソッドはtrue
を返します。- 戻り値:
- この非同期レスポンスがサスペンド状態の場合は
true
、それ以外の場合はfalse
。 - 関連事項:
isCancelled()
,isDone()
isCancelled
boolean isCancelled()
非同期レスポンスインスタンスがキャンセルされているかどうかを確認します。この非同期レスポンスが完了する前にキャンセルされた場合、メソッドはtrue
を返します。- 戻り値:
- このタスクが完了する前にキャンセルされた場合は
true
。 - 関連事項:
isSuspended()
,isDone()
isDone
boolean isDone()
この非同期レスポンスインスタンスが属するリクエストの処理が終了したかどうかを確認します。この非同期レスポンスがバインドされているリクエストの処理が終了すると、メソッドはtrue
を返します。リクエスト処理は、通常の終了、一時停止のタイムアウト、キャンセルが原因で終了する場合があります。これらすべての場合、このメソッドは
true
を返します。- 戻り値:
- この実行コンテキストが処理を終了した場合は
true
。 - 関連事項:
isSuspended()
,isCancelled()
setTimeout
boolean setTimeout(long time, TimeUnitSE unit)
サスペンドタイムアウトを設定 / 更新します。新しいサスペンドタイムアウト値は、以前に指定されたタイムアウト値を上書きします。このメソッドが成功するには、非同期レスポンスが
suspended
状態のままである必要があります。- パラメーター:
time
- 与えられた時間unit
のタイムアウト値を一時停止します。値が 0 以下の場合、コンテキストは無期限に中断されます。unit
- タイムアウト値の時間単位を一時停止します。- 戻り値:
- 中断タイムアウトが設定されている場合は
true
、リクエスト処理がsuspended
状態でない場合はfalse
を返します。
setTimeoutHandler
void setTimeoutHandler(TimeoutHandler handler)
中断された非同期レスポンスのタイムアウトハンドラーを設定 / 置換します。タイムアウトハンドラーは、この非同期レスポンスの一時停止期間がタイムアウトしたときに呼び出されます。タイムアウトハンドラーのロールは、いずれかの方法でタイムアウト状況を解決することです。
- 中断されたレスポンスを再開する
- 一時停止されたレスポンスをキャンセルする
- 新しいサスペンドタイムアウトを設定してサスペンド期間を延長する
レスポンスが
indefinitely
で中断された場合、タイムアウトハンドラーが呼び出されない可能性があることに注意してください。- パラメーター:
handler
- レスポンスタイムアウトハンドラー。
register
CollectionSE<ClassSE<?>> register(ClassSE<?> callback)
実装されたコールバックインターフェースに基づいて非同期レスポンスのライフサイクルイベントを受信するために、非同期処理ライフサイクルコールバッククラスを登録します。- パラメーター:
callback
- コールバッククラス。- 戻り値:
- 登録されたコールバックインターフェースのコレクション。コールバッククラスが認識されたコールバックインターフェースを実装していない場合、返されるコレクションは空になります。
- 例外:
NullPointerExceptionSE
- コールバッククラスがnull
の場合。
register
MapSE<ClassSE<?>,CollectionSE<ClassSE<?>>> register(ClassSE<?> callback, ClassSE<?>... callbacks)
非同期処理ライフサイクルコールバッククラスを登録して、実装されたコールバックインターフェースに基づいて非同期レスポンスのライフサイクルイベントを受信します。- パラメーター:
callback
- コールバッククラス。callbacks
- 追加のコールバッククラス。- 戻り値:
- 登録されたクラスのマップと、各クラスに登録されたコールバックインターフェース。コールバッククラスが認識されたコールバックインターフェースを実装していない場合、クラスに登録されているインターフェースの関連コレクションは空になります。
- 例外:
NullPointerExceptionSE
- コールバッククラスのいずれかがnull
の場合。
register
CollectionSE<ClassSE<?>> register(ObjectSE callback)
実装されたコールバックインターフェースに基づいて非同期レスポンスのライフサイクルイベントを受信するために、非同期処理ライフサイクルコールバックインスタンスを登録します。- パラメーター:
callback
- 認識されたコールバックインターフェースの 1 つ以上を実装するコールバックインスタンス。- 戻り値:
- 登録されたコールバックインターフェースのコレクション。コールバッククラスが認識されたコールバックインターフェースを実装していない場合、返されるコレクションは空になります。
- 例外:
NullPointerExceptionSE
- コールバックインスタンスがnull
の場合。
register
MapSE<ClassSE<?>,CollectionSE<ClassSE<?>>> register(ObjectSE callback, ObjectSE... callbacks)
実装されたコールバックインターフェースに基づいて非同期レスポンスのライフサイクルイベントを受信するために、非同期処理ライフサイクルコールバックインスタンスを登録します。- パラメーター:
callback
- コールバックインスタンス。callbacks
- 追加のコールバックインスタンス。- 戻り値:
- 登録されたクラスのマップと、各クラスに登録されたコールバックインターフェース。コールバッククラスが認識されたコールバックインターフェースを実装していない場合、クラスに登録されているインターフェースの関連コレクションは空になります。
- 例外:
NullPointerExceptionSE
- コールバックインスタンスのいずれかがnull
の場合。