public class MockAsyncContext extends ObjectSE implements AsyncContextEE
AsyncContextEE インターフェースのモック実装。ASYNC_CONTEXT_PATHEE, ASYNC_MAPPINGEE, ASYNC_PATH_INFOEE, ASYNC_QUERY_STRINGEE, ASYNC_REQUEST_URIEE, ASYNC_SERVLET_PATHEE| コンストラクターと説明 |
|---|
MockAsyncContext(ServletRequestEE request, ServletResponseEE response) |
| 修飾子と型 | メソッドと説明 |
|---|---|
void | addDispatchHandler(RunnableSE handler) |
void | addListener(AsyncListenerEE listener) 指定された AsyncListenerEE を、ServletRequest.startAsync()EE メソッドの 1 つへの呼び出しによって開始された最新の非同期サイクルに登録します。 |
void | addListener(AsyncListenerEE listener, ServletRequestEE request, ServletResponseEE response) 指定された AsyncListenerEE を、ServletRequest.startAsync()EE メソッドの 1 つへの呼び出しによって開始された最新の非同期サイクルに登録します。 |
void | complete() この AsyncContext の初期化に使用されたリクエストで開始された非同期操作を完了し、この AsyncContext の初期化に使用されたレスポンスを閉じます。 |
<T extends AsyncListenerEE> | createListener(ClassSE<T> clazz) 指定された AsyncListenerEE クラスをインスタンス化します。 |
void | dispatch() この AsyncContext のリクエストオブジェクトとレスポンスオブジェクトをサーブレットコンテナーにディスパッチします。 |
void | dispatch(ServletContextEE context, StringSE path) この AsyncContext のリクエストオブジェクトとレスポンスオブジェクトを、指定されたコンテキストを範囲とする指定されたパスにディスパッチします。 |
void | dispatch(StringSE path) この AsyncContext のリクエストオブジェクトとレスポンスオブジェクトを指定された path にディスパッチします。 |
StringSE | getDispatchedPath() |
ListSE<AsyncListenerEE> | getListeners() |
ServletRequestEE | getRequest()ServletRequest.startAsync()EE または ServletRequest.startAsync(ServletRequest, ServletResponse)EE を呼び出して、この AsyncContext を初期化するために使用されたリクエストを取得します。 |
ServletResponseEE | getResponse()ServletRequest.startAsync()EE または ServletRequest.startAsync(ServletRequest, ServletResponse)EE を呼び出して、この AsyncContext を初期化するために使用されたレスポンスを取得します。 |
long | getTimeout() この AsyncContext のタイムアウト(ミリ秒単位)を取得します。 |
boolean | hasOriginalRequestAndResponse() この AsyncContext が元のオブジェクトまたはアプリケーションでラップされたリクエストオブジェクトとレスポンスオブジェクトで初期化されたかどうかを確認します。 |
void | setTimeout(long timeout) デフォルトでは、これは 10000 (10 秒に設定されています)。サーブレット API は、デフォルトの非同期リクエストタイムアウトを 30 秒に指定しています。 |
void | start(RunnableSE runnable) コンテナーにスレッドをディスパッチし、管理されたスレッドプールからスレッドをディスパッチして、指定された Runnable を実行します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEpublic MockAsyncContext(ServletRequestEE request, @Nullable ServletResponseEE response)
public void addDispatchHandler(RunnableSE handler)
public ServletRequestEE getRequest()
javax.servlet.AsyncContextEEServletRequest.startAsync()EE または ServletRequest.startAsync(ServletRequest, ServletResponse)EE を呼び出して、この AsyncContext を初期化するために使用されたリクエストを取得します。AsyncContextEE の getRequestEE @Nullable public ServletResponseEE getResponse()
javax.servlet.AsyncContextEEServletRequest.startAsync()EE または ServletRequest.startAsync(ServletRequest, ServletResponse)EE を呼び出して、この AsyncContext を初期化するために使用されたレスポンスを取得します。AsyncContextEE の getResponseEE public boolean hasOriginalRequestAndResponse()
javax.servlet.AsyncContextEEこの情報は、リクエストが非同期モードになった後、 送信方向に呼び出されたフィルターが、 受信の呼び出し中に追加されたリクエストやレスポンスのラッパーを、非同期操作の間保存する必要があるのか、あるいは解放する必要があるのかを判断するために使用することができます。
AsyncContextEE の hasOriginalRequestAndResponseEE ServletRequest.startAsync()EE の呼び出しによって元のリクエストオブジェクトとレスポンスオブジェクトで初期化された場合、または ServletRequest.startAsync(ServletRequest, ServletResponse)EE の呼び出しによって初期化され、ServletRequest と ServletResponse のどちらの引数もアプリケーション提供のラッパーを持たない場合は true。そうでなければ偽 public void dispatch()
javax.servlet.AsyncContextEE 非同期サイクルが ServletRequest.startAsync(ServletRequest, ServletResponse)EE で開始され、渡されたリクエストが HttpServletRequest のインスタンスである場合、ディスパッチは HttpServletRequest.getRequestURI()EE によって返された URI に対して行われます。それ以外の場合、ディスパッチは、コンテナーによって最後にディスパッチされたときのリクエストの URI になります。
次のシーケンスは、これがどのように機能するかを示しています。
// REQUEST dispatch to /url/A
AsyncContext ac = request.startAsync();
...
ac.dispatch(); // ASYNC dispatch to /url/A
// REQUEST to /url/A
// FORWARD dispatch to /url/B
request.getRequestDispatcher("/url/B").forward(request,response);
// Start async operation from within the target of the FORWARD
// dispatch
ac = request.startAsync();
...
ac.dispatch(); // ASYNC dispatch to /url/A
// REQUEST to /url/A
// FORWARD dispatch to /url/B
request.getRequestDispatcher("/url/B").forward(request,response);
// Start async operation from within the target of the FORWARD
// dispatch
ac = request.startAsync(request,response);
...
ac.dispatch(); // ASYNC dispatch to /url/B
このメソッドは、リクエストオブジェクトとレスポンスオブジェクトをコンテナー管理スレッドに渡した直後に戻り、そのスレッドでディスパッチ操作が実行されます。startAsync を呼び出したコンテナー開始ディスパッチがコンテナーに戻る前にこのメソッドが呼び出された場合、ディスパッチ操作はコンテナー開始ディスパッチがコンテナーに戻るまで遅延されます。
リクエストのディスパッチャー型は DispatcherType.ASYNC に設定されています。forward dispatchesEE とは異なり、レスポンスバッファーとヘッダーはリセットされず、レスポンスがすでにコミットされている場合でもディスパッチすることは正当です。
リクエストとレスポンスの制御はディスパッチターゲットに委譲され、ディスパッチターゲットの実行が完了すると、ServletRequest.startAsync()EE または ServletRequest.startAsync(ServletRequest, ServletResponse)EE が呼び出されない限り、レスポンスは閉じられます。
このメソッドの実行中に発生する可能性のあるエラーまたは例外は、次のように、コンテナーによってキャッチおよび処理される必要があります。
onErrorEE メソッドで、この AsyncContext が作成された ServletRequest に登録されているすべての AsyncListenerEE インスタンスを呼び出し、キャッチされた Throwable を AsyncEvent.getThrowable()EE 経由で使用できるようにします。AsyncContext.complete()EE または AsyncContext.dispatch()EE メソッドのいずれも呼び出さなかった場合は、 HttpServletResponse.SC_INTERNAL_SERVER_ERROR に等しいステータスコードでエラーディスパッチを実行し、上記の Throwable を RequestDispatcher.ERROR_EXCEPTION リクエスト属性の値。AsyncContext.complete()EE または AsyncContext.dispatch()EE メソッドのいずれも呼び出さなかった場合は、AsyncContext.complete()EE を呼び出します。 非同期サイクルごとに最大 1 つの非同期ディスパッチ操作を実行できます。非同期サイクルは、ServletRequest.startAsync()EE メソッドの 1 つを呼び出すことによって開始されます。同じ非同期サイクル内で追加の非同期ディスパッチ操作を実行しようとすると、IllegalStateException が呼び出されます。ディスパッチされたリクエストでその後 startAsync が呼び出されると、ディスパッチメソッドまたは AsyncContext.complete()EE メソッドのいずれかが呼び出される可能性があります。
AsyncContextEE の dispatchEE ServletRequest.getDispatcherType()EEpublic void dispatch(StringSE path)
javax.servlet.AsyncContextEE path パラメーターは、この AsyncContext が初期化された ServletContextEE のスコープ内で、ServletRequest.getRequestDispatcher(String)EE と同じように解釈されます。
リクエストのすべてのパス関連クエリメソッドはディスパッチターゲットを反映する必要がありますが、元のリクエスト URI、コンテキストパス、パス情報、サーブレットパス、クエリ文字列は、AsyncContext.ASYNC_REQUEST_URIEE、AsyncContext.ASYNC_CONTEXT_PATHEE、AsyncContext.ASYNC_PATH_INFOEE、AsyncContext.ASYNC_SERVLET_PATHEE、AsyncContext.ASYNC_QUERY_STRINGEE の属性から回復できます。リクエスト。これらの属性は、繰り返しディスパッチされている場合でも、常に元のパス要素を反映します。
非同期サイクルごとに最大 1 つの非同期ディスパッチ操作を実行できます。非同期サイクルは、ServletRequest.startAsync()EE メソッドの 1 つを呼び出すことによって開始されます。同じ非同期サイクル内で追加の非同期ディスパッチ操作を実行しようとすると、IllegalStateException が呼び出されます。ディスパッチされたリクエストでその後 startAsync が呼び出されると、ディスパッチメソッドまたは AsyncContext.complete()EE メソッドのいずれかが呼び出される可能性があります。
エラー処理を含む詳細については、AsyncContext.dispatch()EE を参照してください。
AsyncContextEE の dispatchEE path - この AsyncContext が初期化された ServletContext をスコープとするディスパッチターゲットのパス ServletRequest.getDispatcherType()EEpublic void dispatch(@Nullable ServletContextEE context, StringSE path)
javax.servlet.AsyncContextEE path パラメーターは、指定された context をスコープとすることを除いて、ServletRequest.getRequestDispatcher(String)EE と同じように解釈されます。
リクエストのすべてのパス関連クエリメソッドはディスパッチターゲットを反映する必要がありますが、元のリクエスト URI、コンテキストパス、パス情報、サーブレットパス、クエリ文字列は、AsyncContext.ASYNC_REQUEST_URIEE、AsyncContext.ASYNC_CONTEXT_PATHEE、AsyncContext.ASYNC_PATH_INFOEE、AsyncContext.ASYNC_SERVLET_PATHEE、AsyncContext.ASYNC_QUERY_STRINGEE の属性から回復できます。リクエスト。これらの属性は、繰り返しディスパッチされている場合でも、常に元のパス要素を反映します。
非同期サイクルごとに最大 1 つの非同期ディスパッチ操作を実行できます。非同期サイクルは、ServletRequest.startAsync()EE メソッドの 1 つを呼び出すことによって開始されます。同じ非同期サイクル内で追加の非同期ディスパッチ操作を実行しようとすると、IllegalStateException が呼び出されます。ディスパッチされたリクエストでその後 startAsync が呼び出されると、ディスパッチメソッドまたは AsyncContext.complete()EE メソッドのいずれかが呼び出される可能性があります。
エラー処理を含む詳細については、AsyncContext.dispatch()EE を参照してください。
AsyncContextEE の dispatchEE context - ディスパッチターゲットの ServletContextpath - 指定された ServletContext をスコープとするディスパッチターゲットのパス ServletRequest.getDispatcherType()EEpublic void complete()
javax.servlet.AsyncContextEE この AsyncContext が作成された ServletRequest に登録された型 AsyncListenerEE のリスナーは、その onCompleteEE メソッドで呼び出されます。
ServletRequest.startAsync()EE または ServletRequest.startAsync(ServletRequest, ServletResponse)EE の呼び出し後、およびこのクラスの dispatch メソッドのいずれかの呼び出し前であれば、いつでもこのメソッドを呼び出すことができます。startAsync を呼び出したコンテナー開始ディスパッチがコンテナーに戻る前にこのメソッドが呼び出された場合、コンテナー開始ディスパッチがコンテナーに戻るまで呼び出しは有効になりません (AsyncListener.onComplete(AsyncEvent)EE の呼び出しは遅延されます)。
AsyncContextEE の completeEE public void start(RunnableSE runnable)
javax.servlet.AsyncContextEEAsyncContextEE の startEE runnable - 非同期ハンドラー public void addListener(AsyncListenerEE listener)
javax.servlet.AsyncContextEEAsyncListenerEE を、ServletRequest.startAsync()EE メソッドの 1 つへの呼び出しによって開始された最新の非同期サイクルに登録します。 指定された AsyncListener は、非同期サイクルが正常に完了するか、タイムアウトしてエラーが発生するか、ServletRequest.startAsync()EE メソッドの 1 つを介して新しい非同期サイクルが開始されると、AsyncEventEE を受け取ります。
AsyncListener インスタンスは、追加された順に通知されます。
ServletRequest.startAsync(ServletRequest, ServletResponse)EE または ServletRequest.startAsync()EE が呼び出された場合、AsyncListenerEE が通知されたときに、AsyncEventEE からまったく同じリクエストおよびレスポンスオブジェクトを使用できます。
AsyncContextEE の addListenerEE listener - 登録する AsyncListenerpublic void addListener(AsyncListenerEE listener, ServletRequestEE request, ServletResponseEE response)
javax.servlet.AsyncContextEEAsyncListenerEE を、ServletRequest.startAsync()EE メソッドの 1 つへの呼び出しによって開始された最新の非同期サイクルに登録します。 指定された AsyncListener は、非同期サイクルが正常に完了するか、タイムアウトしてエラーが発生するか、ServletRequest.startAsync()EE メソッドの 1 つを介して新しい非同期サイクルが開始されると、AsyncEventEE を受け取ります。
AsyncListener インスタンスは、追加された順に通知されます。
指定された ServletRequest オブジェクトと ServletResponse オブジェクトは、指定された AsyncEventEE の getSuppliedRequestEE メソッドと getSuppliedResponseEE メソッドを介して、指定された AsyncListener で使用できるようになります。これらのオブジェクトは、AsyncEvent の配信時にそれぞれ読み取りまたは書き込みを行うべきではありません。指定された AsyncListener が登録されてから追加の折り返しが発生した可能性があるためですが、それらに関連付けられているリソースを解放するために使用される場合があります。
AsyncContextEE の addListenerEE listener - 登録する AsyncListenerrequest - AsyncEvent に含まれる ServletRequestresponse - AsyncEvent に含まれる ServletResponsepublic ListSE<AsyncListenerEE> getListeners()
public <T extends AsyncListenerEE> T createListener(ClassSE<T> clazz) throws ServletExceptionEE
javax.servlet.AsyncContextEEAsyncListenerEE クラスをインスタンス化します。 返された AsyncListener インスタンスは、addListener メソッドの 1 つを呼び出して、この AsyncContext に登録する前にさらにカスタマイズできます。
指定された AsyncListener クラスは、インスタンス化に使用されるゼロ引数コンストラクターを定義する必要があります。
このメソッドは、指定された clazz が Managed Bean を表す場合、リソース注入をサポートします。マネージド Bean およびリソースインジェクションの詳細については、Java EE プラットフォームおよび JSR 299 仕様を参照してください。
このメソッドは、AsyncListener に適用可能なすべてのアノテーションをサポートします。
AsyncContextEE の createListenerEE T - インスタンス化するオブジェクトのクラス clazz - インスタンス化する AsyncListener クラス ServletExceptionEE - 指定された clazz のインスタンス化に失敗した場合 public void setTimeout(long timeout)
DeferredResult または SseEmitter のリクエストごとにオーバーライドされることに注意してください。AsyncContextEE の setTimeoutEE timeout - 使用するタイムアウト値。AsyncContext.setTimeout(long)EEpublic long getTimeout()
javax.servlet.AsyncContextEE このメソッドは、非同期操作のコンテナーのデフォルトのタイムアウト、または AsyncContext.setTimeout(long)EE の最新の呼び出しに渡されたタイムアウト値を返します。
ゼロ以下のタイムアウト値は、タイムアウトがないことを示します。
AsyncContextEE の getTimeoutEE