私はジャージーに安らかなウェブサービスを提供させています。ここで説明されているようなajaxabortメソッドを使用して、クライアントがajaxを介して行われたリクエストを中止することがよくあります abort ajax request
サーバー側では、次の出力が得られます。これは見栄えが良くありません。ジャージーで中止されたリクエストを検出する方法はありますか?
SEVERE: An I/O error has occurred while writing a response message entity to the container output stream.
org.glassfish.jersey.server.internal.process.MappableException: ClientAbortException: Java.net.SocketException: Broken pipe
at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.Java:96)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.Java:162)
at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.Java:1154)
at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.Java:571)
at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.Java:378)
at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.Java:368)
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.Java:262)
at org.glassfish.jersey.internal.Errors$1.call(Errors.Java:271)
at org.glassfish.jersey.internal.Errors$1.call(Errors.Java:267)
at org.glassfish.jersey.internal.Errors.process(Errors.Java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.Java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.Java:267)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.Java:319)
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.Java:236)
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.Java:1028)
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.Java:373)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.Java:381)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.Java:344)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.Java:219)
at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:305)
at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:210)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.Java:393)
at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:243)
at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:210)
at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:222)
at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:123)
at org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:472)
at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:171)
at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:99)
at org.Apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.Java:953)
at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:118)
at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:408)
at org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1023)
at org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:589)
at org.Apache.Tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.Java:312)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1145)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:615)
at Java.lang.Thread.run(Thread.Java:744)
Caused by: ClientAbortException: Java.net.SocketException: Broken pipe
at org.Apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.Java:364)
at org.Apache.catalina.connector.OutputBuffer.flush(OutputBuffer.Java:326)
at org.Apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.Java:101)
at org.glassfish.jersey.message.internal.CommittingOutputStream.flush(CommittingOutputStream.Java:292)
at com.fasterxml.jackson.core.json.UTF8JsonGenerator.close(UTF8JsonGenerator.Java:1086)
at com.fasterxml.jackson.jaxrs.base.ProviderBase.writeTo(ProviderBase.Java:544)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.Java:263)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.Java:250)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.Java:162)
at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.Java:103)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.Java:162)
at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.Java:88)
... 37 more
Caused by: Java.net.SocketException: Broken pipe
at Java.net.SocketOutputStream.socketWrite0(Native Method)
at Java.net.SocketOutputStream.socketWrite(SocketOutputStream.Java:113)
at Java.net.SocketOutputStream.write(SocketOutputStream.Java:159)
at org.Apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.Java:215)
at org.Apache.Tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.Java:480)
at org.Apache.coyote.http11.InternalOutputBuffer.flush(InternalOutputBuffer.Java:119)
at org.Apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.Java:793)
at org.Apache.coyote.Response.action(Response.Java:173)
at org.Apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.Java:359)
... 48 more
中止された要求は、Tomcatアクセスログに記録する必要があります。その中にすべてのリクエストと関連するレスポンスコードがあります。
ただし、問題はシステムの制限に関連している可能性があります。ジャージーでは、サーバーへのリクエストごとに、I/Oコンテナがレスポンスライターの新しいインスタンスを送信するため、etc/security/limits.confにあるオペレーティングシステムの制限を確認する必要があります。言及されたファイルには、ドメイン、タイプ、および値フィールドが含まれています。
ドメインには、ユーザー名、グループ名、または任意のワイルドカードを使用できます。 type filedには、(softまたはhard)、softソフト制限を適用する場合、hardハード制限を適用する場合の2つの値を指定できます。値フィールドはドメインの制限を定義します:)Tomcatユーザーの制限を増やすと、問題は解決すると思います。
Tomcatのサンプル設定
Tomcatソフトnofile102400
Tomcatハードnofile102400
Tomcatソフトnproc102400
Tomcatハードnproc102400