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

インターフェース TimeoutHandler


  • public interface TimeoutHandler
    非同期レスポンスサスペンドタイムアウトハンドラー。JAX-RS ユーザーは、このコールバックインターフェースを利用して、タイムアウトイベントのカスタム解決を提供できます。

    デフォルトでは、JAX-RS ランタイムは HTTP 503 (Service unavailable) エラーレスポンスステータスコードを使用して WebApplicationException を生成します。カスタムタイムアウトハンドラーは、非同期レスポンスインスタンスの set であり、カスタムタイムアウトイベントの解決を提供します。

    一時停止タイムアウトイベントの場合、カスタムタイムアウトハンドラーは通常、次のいずれかのアクションを実行します。

    登録されたタイムアウトハンドラーが上記のアクションを実行しない場合、デフォルトのタイムアウトイベント処理が続行され、HTTP503 ステータスコードを含む生成された WebApplicationException でレスポンスが再開されます。

    次の例は、カスタム TimeoutHandler の使用箇所を示しています。

     public class MyTimeoutHandler implements TimeoutHandler {
         …
         public void handleTimeout(AsyncResponse ar) {
             if (keepSuspended) {
                 ar.setTimeout(10, SECONDS);
             } else if (cancel) {
                 ar.cancel(retryPeriod);
             } else {
                 ar.resume(defaultResponse);
             }
         }
         …
     }
    
     @Path("/messages/next")
     public class MessagingResource {
         …
         @GET
         public void readMessage(@Suspended AsyncResponse ar) {
             ar.setTimeoutHandler(new MyTimeoutHandler());
             suspended.put(ar);
         }
         …
     }
     
    導入:
    2.0
    作成者:
    Marek Potociar
    • メソッドの詳細

      • handleTimeout

        void handleTimeout​(AsyncResponse asyncResponse)
        中断された非同期レスポンスがタイムアウトに近づいたときに呼び出されます。タイムアウトハンドラーを実装するには、コールバックメソッドを使用して、JAX-RS 仕様で定義されているデフォルトのタイムアウト戦略を変更できます(AsyncResponse API ドキュメントを参照)。

        カスタムタイムアウトハンドラーは、次のいずれかを決定できます

        • resume(...) メソッドの 1 つを使用して、中断されたレスポンスを再開します。
        • cancel(...) メソッドのいずれかを使用して中断されたレスポンスをキャンセルするか
        • setting a new suspend time-out によって一時停止期間を延長します
        タイムアウトハンドラーが上記のアクションのいずれも実行しない場合、デフォルトのタイムアウト戦略が JAX-RS ランタイムによって実行されます。
        パラメーター:
        asyncResponse - タイムアウトしている一時停止された非同期レスポンス。