2.20. CompletionStage タイプのサポート
JAX-RS 2.1 仕様は、@Suspended
アノテーションを使用する代わりに CompletionStage
を返すことで非同期リソースメソッドの宣言をサポートします。
リソースのメソッドがサブスクライブしている CompletionStage
を返すと常に、リクエストは一時停止されます。このリクエストは、 CompletionStage
が以下の場合にのみ再開されます。
- 値に解決され、メソッドの戻り値として処理される。
- エラーケースとして処理され、例外はリソースメソッドによって発生したかのように処理される。
以下は、CompletionStage
を使用した非同期処理の例です。
public class SimpleResource { @GET @Path("basic") @Produces("text/plain") public CompletionStage<Response> getBasic() throws Exception { final CompletableFuture<Response> response = new CompletableFuture<>(); Thread t = new Thread() { @Override public void run() { try { Response jaxrs = Response.ok("basic").type(MediaType.TEXT_PLAIN).build(); response.complete(jaxrs); } catch (Exception e) { response.completeExceptionally(e); } } }; t.start(); return response; } }