パッケージ jakarta.ws.rs.container

アノテーションインターフェース Suspended


中断された AsyncResponse を、呼び出された JAX-RS resource or sub-resource method のパラメーターに挿入します。挿入された AsyncResponse インスタンスは、アクティブなリクエストの処理にバインドされ、レスポンスが利用可能になったときにリクエストの処理を再開するために使用できます。

デフォルトでは no suspend timeout set があり、非同期レスポンスは無期限に中断されます。一時停止タイムアウトとカスタム timeout handler は、AsyncResponse.setTimeout(long, TimeUnit) および AsyncResponse.setTimeoutHandler(TimeoutHandler) メソッドを使用してプログラムで指定できます。例:

  @Stateless
  @Path("/")
  public class MyEjbResource {
    …
    @GET
    @Asynchronous
    public void longRunningOperation(@Suspended AsyncResponse ar) {
      ar.setTimeoutHandler(customHandler);
      ar.setTimeout(10, TimeUnit.SECONDS);
      final String result = executeLongRunningOperation();
      ar.resume(result);
    }

    private String executeLongRunningOperation() { … }
  }
 

@Suspended アノテーションを使用して AsyncResponse の中断されたインスタンスを注入するリソースまたはサブリソースメソッドは、void 型を返すように宣言されることが期待されます。@Suspended アノテーションを使用して非同期レスポンスインスタンスを注入し、void 以外の戻り値の型を宣言するメソッドは、JAX-RS ランタイムによって検出されなければならず、警告メッセージがログに記録されなければなりません。そのようなリソースまたはサブリソースメソッドから返されるレスポンス値は、フレームワークによって無視されなければなりません。

 @Path("/messages/next")
 public class MessagingResource {
     …
     @GET
     public String readMessage(@Suspended AsyncResponse ar) {
         suspended.put(ar);
         return "This response will be ignored.";
     }
     …
 }
 
導入:
2.0
作成者:
Marek Potociar