public class MockAsyncContext extends ObjectSE implements AsyncContextEE
AsyncContext
EE インターフェースのモック実装。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) 指定された AsyncListener EE を、ServletRequest.startAsync() EE メソッドの 1 つへの呼び出しによって開始された最新の非同期サイクルに登録します。 |
void | addListener(AsyncListenerEE listener, ServletRequestEE request, ServletResponseEE response) 指定された AsyncListener EE を、ServletRequest.startAsync() EE メソッドの 1 つへの呼び出しによって開始された最新の非同期サイクルに登録します。 |
void | complete() この AsyncContext の初期化に使用されたリクエストで開始された非同期操作を完了し、この AsyncContext の初期化に使用されたレスポンスを閉じます。 |
<T extends AsyncListenerEE> | createListener(ClassSE<T> clazz) 指定された AsyncListener EE クラスをインスタンス化します。 |
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, waitSE
public MockAsyncContext(ServletRequestEE request, @Nullable ServletResponseEE response)
public void addDispatchHandler(RunnableSE handler)
public ServletRequestEE getRequest()
javax.servlet.AsyncContextEE
ServletRequest.startAsync()
EE または ServletRequest.startAsync(ServletRequest, ServletResponse)
EE を呼び出して、この AsyncContext を初期化するために使用されたリクエストを取得します。AsyncContextEE
の getRequestEE
@Nullable public ServletResponseEE getResponse()
javax.servlet.AsyncContextEE
ServletRequest.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 dispatches
EE とは異なり、レスポンスバッファーとヘッダーはリセットされず、レスポンスがすでにコミットされている場合でもディスパッチすることは正当です。
リクエストとレスポンスの制御はディスパッチターゲットに委譲され、ディスパッチターゲットの実行が完了すると、ServletRequest.startAsync()
EE または ServletRequest.startAsync(ServletRequest, ServletResponse)
EE が呼び出されない限り、レスポンスは閉じられます。
このメソッドの実行中に発生する可能性のあるエラーまたは例外は、次のように、コンテナーによってキャッチおよび処理される必要があります。
onError
EE メソッドで、この AsyncContext が作成された ServletRequest に登録されているすべての AsyncListener
EE インスタンスを呼び出し、キャッチされた 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 が初期化された ServletContext
EE のスコープ内で、ServletRequest.getRequestDispatcher(String)
EE と同じように解釈されます。
リクエストのすべてのパス関連クエリメソッドはディスパッチターゲットを反映する必要がありますが、元のリクエスト URI、コンテキストパス、パス情報、サーブレットパス、クエリ文字列は、AsyncContext.ASYNC_REQUEST_URI
EE、AsyncContext.ASYNC_CONTEXT_PATH
EE、AsyncContext.ASYNC_PATH_INFO
EE、AsyncContext.ASYNC_SERVLET_PATH
EE、AsyncContext.ASYNC_QUERY_STRING
EE の属性から回復できます。リクエスト。これらの属性は、繰り返しディスパッチされている場合でも、常に元のパス要素を反映します。
非同期サイクルごとに最大 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_URI
EE、AsyncContext.ASYNC_CONTEXT_PATH
EE、AsyncContext.ASYNC_PATH_INFO
EE、AsyncContext.ASYNC_SERVLET_PATH
EE、AsyncContext.ASYNC_QUERY_STRING
EE の属性から回復できます。リクエスト。これらの属性は、繰り返しディスパッチされている場合でも、常に元のパス要素を反映します。
非同期サイクルごとに最大 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 に登録された型 AsyncListener
EE のリスナーは、その onComplete
EE メソッドで呼び出されます。
ServletRequest.startAsync()
EE または ServletRequest.startAsync(ServletRequest, ServletResponse)
EE の呼び出し後、およびこのクラスの dispatch メソッドのいずれかの呼び出し前であれば、いつでもこのメソッドを呼び出すことができます。startAsync を呼び出したコンテナー開始ディスパッチがコンテナーに戻る前にこのメソッドが呼び出された場合、コンテナー開始ディスパッチがコンテナーに戻るまで呼び出しは有効になりません (AsyncListener.onComplete(AsyncEvent)
EE の呼び出しは遅延されます)。
AsyncContextEE
の completeEE
public void start(RunnableSE runnable)
javax.servlet.AsyncContextEE
AsyncContextEE
の startEE
runnable
- 非同期ハンドラー public void addListener(AsyncListenerEE listener)
javax.servlet.AsyncContextEE
AsyncListener
EE を、ServletRequest.startAsync()
EE メソッドの 1 つへの呼び出しによって開始された最新の非同期サイクルに登録します。 指定された AsyncListener は、非同期サイクルが正常に完了するか、タイムアウトしてエラーが発生するか、ServletRequest.startAsync()
EE メソッドの 1 つを介して新しい非同期サイクルが開始されると、AsyncEvent
EE を受け取ります。
AsyncListener インスタンスは、追加された順に通知されます。
ServletRequest.startAsync(ServletRequest, ServletResponse)
EE または ServletRequest.startAsync()
EE が呼び出された場合、AsyncListener
EE が通知されたときに、AsyncEvent
EE からまったく同じリクエストおよびレスポンスオブジェクトを使用できます。
AsyncContextEE
の addListenerEE
listener
- 登録する AsyncListenerpublic void addListener(AsyncListenerEE listener, ServletRequestEE request, ServletResponseEE response)
javax.servlet.AsyncContextEE
AsyncListener
EE を、ServletRequest.startAsync()
EE メソッドの 1 つへの呼び出しによって開始された最新の非同期サイクルに登録します。 指定された AsyncListener は、非同期サイクルが正常に完了するか、タイムアウトしてエラーが発生するか、ServletRequest.startAsync()
EE メソッドの 1 つを介して新しい非同期サイクルが開始されると、AsyncEvent
EE を受け取ります。
AsyncListener インスタンスは、追加された順に通知されます。
指定された ServletRequest オブジェクトと ServletResponse オブジェクトは、指定された AsyncEvent
EE の getSuppliedRequest
EE メソッドと getSuppliedResponse
EE メソッドを介して、指定された 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.AsyncContextEE
AsyncListener
EE クラスをインスタンス化します。 返された 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