public interface AsyncResponse
@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
によってオーバーライドされる場合があります。
修飾子と型 | フィールドと説明 |
---|---|
static long | NO_TIMEOUT サスペンドタイムアウト値を指定しない定数。 |
修飾子と型 | メソッドと説明 |
---|---|
boolean | cancel() 中断されたリクエスト処理をキャンセルします。 |
boolean | cancel(DateSE retryAfter) 中断されたリクエスト処理をキャンセルします。 |
boolean | cancel(int 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) 中断された非同期レスポンスのタイムアウトハンドラーを設定 / 置換します。 |
static final long NO_TIMEOUT
boolean resume(ObjectSE response)
Resource method
から返すことができる任意の Java 型にすることができます。 このメソッドが成功するには、非同期レスポンスがまだ suspended
状態である必要があります。
このメソッドを実行することにより、リクエストは正常に完了するか、エラーで完了することが保証されます。ランタイムによるデータ処理は、リソースによって同期的に返されたレスポンスデータの場合と同じパスをたどりますが、マップされていない例外はランタイムによって再スローされず、ホスティング I/O コンテナーによって処理されません。代わりに、マップされていない例外は、コンテナー固有のコールバックメカニズムを介してホストしている I/O コンテナーに伝達されます。コンテナーの実装によっては、通常、マップされていない例外が伝播すると、エラーステータスがクライアントに送信されたり、接続が閉じられたりします。
response
- 中断されたリクエストにレスポンスして返送されるデータ。true
リクエスト処理が再開された場合、リクエスト処理が suspended
ではなく再開できなかった場合に false
を返します。resume(Throwable)
boolean resume(ThrowableSE response)
Resource method
によってスローされた例外と同じルールが適用されます。このメソッドを実行することにより、リクエストは正常に完了するか、エラーで完了することが保証されます。ランタイムによるスロー可能な処理は、リソースによって同期的に返されるレスポンスデータの場合と同じパスに従いますが、マップされていない例外がランタイムによって再スローされてホスティング I/O コンテナーによって処理されない点が異なります。代わりに、マップされていない例外は、コンテナー固有のコールバックメカニズムを介してホスティング I/O コンテナーに伝播されます。コンテナーの実装によっては、伝播されたマップされていない例外により、通常、エラーステータスがクライアントに送信されたり、接続が閉じられたりします。
response
- 一時停止されたリクエストに応じて発生する例外。true
、レスポンスが suspended
でなく、再開できなかった場合は false
を返します。resume(Object)
boolean cancel()
このメソッドを使用してリクエスト処理がキャンセルされた場合、API 実装は、HTTP 503 (Service unavailable)
エラーレスポンスを返送することにより、リクエスト処理がキャンセルされたことをクライアントに示さなければなりません。
cancel(...)
メソッドを複数回呼び出してリクエスト処理をキャンセルすると、リクエスト処理を 1 回だけキャンセルするのと同じ効果があります。すでにキャンセルまたは再開された非同期レスポンスインスタンスで cancel(...)
メソッドを呼び出しても効果はなく、リクエストが以前にキャンセルされている場合は、true
を返すときにメソッド呼び出しは無視されます。それ以外の場合、リクエストが定期的に再開された場合(resume(...) method
を使用)、またはタイムアウトのために再開された場合、メソッドは false
を返します。
true
、リクエスト処理が suspended
でなく、キャンセルできず、まだ cancelled
でない場合は、false
を返します。cancel(int)
, cancel(java.util.Date)
boolean cancel(int retryAfter)
このメソッドを使用してリクエスト処理がキャンセルされた場合、API 実装は、メソッドパラメーターで指定された値に設定された Retry-After
ヘッダーを含む HTTP 503 (Service unavailable)
エラーレスポンスを返送することにより、リクエスト処理がキャンセルされたことをクライアントに示さなければなりません。
cancel(...)
メソッドを複数回呼び出してリクエスト処理をキャンセルすると、リクエスト処理を 1 回だけキャンセルするのと同じ効果があります。すでにキャンセルまたは再開された非同期レスポンスインスタンスで cancel(...)
メソッドを呼び出しても効果はなく、リクエストが以前にキャンセルされている場合は、true
を返すときにメソッド呼び出しは無視されます。それ以外の場合、リクエストが定期的に再開された場合(resume(...) method
を使用)、またはタイムアウトのために再開された場合、メソッドは false
を返します。
retryAfter
- レスポンスがクライアントに送信されてから秒数の 10 進数で、リクエスト元のクライアントがサービスを利用できないと予想される期間を示します。true
、リクエスト処理が suspended
でなく、キャンセルできず、まだ cancelled
でない場合は、false
を返します。cancel()
, cancel(java.util.Date)
boolean cancel(DateSE retryAfter)
このメソッドを使用してリクエスト処理がキャンセルされた場合、API 実装は、メソッドパラメーターで指定された値に設定された Retry-After
ヘッダーを含む HTTP 503 (Service unavailable)
エラーレスポンスを返送することにより、リクエスト処理がキャンセルされたことをクライアントに示さなければなりません。
cancel(...)
メソッドを複数回呼び出してリクエスト処理をキャンセルすると、リクエスト処理を 1 回だけキャンセルするのと同じ効果があります。すでにキャンセルまたは再開された非同期レスポンスインスタンスで cancel(...)
メソッドを呼び出しても効果はなく、リクエストが以前にキャンセルされている場合は、true
を返すときにメソッド呼び出しは無視されます。それ以外の場合、リクエストが定期的に再開された場合(resume(...) method
を使用)、またはタイムアウトのために再開された場合、メソッドは false
を返します。
retryAfter
- リクエスト元のクライアントがサービスを利用できないと予想される期間を示す日付。true
、リクエスト処理が suspended
でなく、キャンセルできず、まだ cancelled
でない場合は、false
を返します。cancel()
, cancel(int)
boolean isSuspended()
true
を返します。true
、それ以外の場合は false
。isCancelled()
, isDone()
boolean isCancelled()
true
を返します。true
。isSuspended()
, isDone()
boolean isDone()
true
を返します。 リクエスト処理は、通常の終了、一時停止のタイムアウト、キャンセルが原因で終了する場合があります。これらすべての場合、このメソッドは true
を返します。
true
。isSuspended()
, isCancelled()
boolean setTimeout(long time, TimeUnitSE unit)
新しいサスペンドタイムアウト値は、以前に指定されたタイムアウト値を上書きします。このメソッドが成功するには、非同期レスポンスが suspended
状態のままである必要があります。
time
- 与えられた時間 unit
のタイムアウト値を一時停止します。値が 0 以下の場合、コンテキストは無期限に中断されます。unit
- タイムアウト値の時間単位を一時停止します。true
、リクエスト処理が suspended
状態でない場合は false
を返します。void setTimeoutHandler(TimeoutHandler handler)
タイムアウトハンドラーは、この非同期レスポンスの一時停止期間がタイムアウトしたときに呼び出されます。タイムアウトハンドラーのロールは、いずれかの方法でタイムアウト状況を解決することです。
レスポンスが indefinitely
で中断された場合、タイムアウトハンドラーが呼び出されない可能性があることに注意してください。
handler
- レスポンスタイムアウトハンドラー。CollectionSE<ClassSE<?>> register(ClassSE<?> callback)
callback
- コールバッククラス。NullPointerExceptionSE
- コールバッククラスが null
の場合。MapSE<ClassSE<?>,CollectionSE<ClassSE<?>>> register(ClassSE<?> callback, ClassSE<?>... callbacks)
callback
- コールバッククラス。callbacks
- 追加のコールバッククラス。NullPointerExceptionSE
- コールバッククラスのいずれかが null
の場合。CollectionSE<ClassSE<?>> register(ObjectSE callback)
callback
- 認識されたコールバックインターフェースの 1 つ以上を実装するコールバックインスタンス。NullPointerExceptionSE
- コールバックインスタンスが null
の場合。MapSE<ClassSE<?>,CollectionSE<ClassSE<?>>> register(ObjectSE callback, ObjectSE... callbacks)
callback
- コールバックインスタンス。callbacks
- 追加のコールバックインスタンス。NullPointerExceptionSE
- コールバックインスタンスのいずれかが null
の場合。Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.