簡體   English   中英

GlassFish Java Web服務超時

[英]GlassFish Java web service timeout

我正在設置一個新的GlassFish Server 4.1.1,上面部署了一個Java Web服務。 該Web服務具有一個Web方法,該方法接收JSON作為輸入參數,因此它還返回JSON。 要將Java對象與JSON序列化/反序列化,我使用Gson庫。 Web方法正在調用其他Web服務,一次運行大約需要2-3分鍾。 我在一個循環中多次調用此Web服務例如6-10次,因此Web方法正在等待大約16-30分鍾以返回值。 問題是超時,但是我不知道在哪里以及如何為我的問題設置時間。

我嘗試從Visual Studio C#項目中調用此Java Web服務,在其中添加了Web引用,並在其中定義了Web服務的Web引用URL。 我還設置了XML Web服務客戶端等待對同步XML Web服務請求的答復應該等待多長時間的時間。 我將其設置為10小時,如下所示。

static string CallEARSjDE(string json)
{
    EARSWebReference.EARSWebService EARSWS = new EARSWebReference.EARSWebService();
    EARSWS.Timeout = 36000000;    // 10 hours

    return EARSWS.EARSjDE(json);
}

我還為在Java Web方法中發出的Web服務請求設置了超時。 我將其設置為1小時。

Gson gson = new Gson();
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(1 * 3600000).build();   // timeout set to 1 hour
HttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();
HttpPost post = new HttpPost(this.ServiceURL);
StringEntity postingString = new StringEntity(gson.toJson(problemLCSRequest));
post.setEntity(postingString);
post.setHeader("Content-type", "application/json");
HttpResponse response = httpClient.execute(post);
HttpEntity entity = response.getEntity();
String responseString = EntityUtils.toString(entity, "UTF-8");

ProblemLCSResponse responseJson = gson.fromJson(responseString, ProblemLCSResponse.class);

除了這兩個超時,我還在GlassFish管理控制台中設置了超時。 我是在“配置”→“服務器配置”→“ Web容器”部分中完成的,在該部分中,將會話超時設置為36.000秒(10小時)。

例如,當我在Web方法內調用Web服務6次時,將獲得所需的響應。 但是,當我多次調用Web服務超過6次時,將引發以下異常。 我認為發生此異常的原因是超時,但我不知道是哪個原因導致的,以及在哪里可以更改它。

警告:StandardWrapperValve [EARSWebService]:Servlet EARSWebService的Servlet.service()在sun.nio.ch處的java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:202)處拋出異常java.nio.channels.ClosedByInterruptException。 org.glassfish.grizzly.nio.transport.TCPNIOUtils.flushByteBuffer(TCPNIOUtils.java:149)的SocketChannelImpl.write(SocketChannelImpl.java:478)org.glassfish.grizzly.nio.transport.TCPNIOUtils.writeCompositeBuffer(TCPNIOUtils.java: 87)在org.glassfish.grizzly上的org.glassfish.grizzly.nio.transport.TCPNIOAsyncQueueWriter.write0(TCPNIOAsyncQueueWriter.java:129)在org.glassfish.grizzly.nio.transport.TCPNIOAsyncQueueWriter.write0(TCPNIOAsyncQueueWriter.java:106) .nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:260)在org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:169)在org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueue 71)位於org.glassfish.grizzly.nio.transport.TCPNIOTransportFilter.handleWrite(TCPNIOTransportFilter.java:126)位於org.glassfish.grizzly.filterchain.TransportFilter.handleWrite(TransportFilter.java:191)位於org.glassfish.grizzly.filterchain .org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)的.ExecutorResolver $ 8.execute(ExecutorResolver.java:111)在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)在org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)在org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)在org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor) .java:77),位於org.glassfish.grizzly.filterchain.FilterChainContext.write(FilterChainContext.java:890),位於org.glassfish.grizzly.filterchain.FilterChainContext.write(FilterChainContext.java:858),網址為org.glassfish.grizzly。 http.io.OutputBuffer.flushBuffer(OUTP utorg.java:1029)位於org.glassfish.grizzly.http.io.OutputBuffer.flushBinaryBuffers(OutputBuffer.java:1016)位於org.glassfish.grizzly.http.io.OutputBuffer.flushAllBuffers(OutputBuffer.java:987)位於org .glassfish.grizzly.http.io.OutputBuffer.flush(OutputBuffer.java:738)在org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:291)在org.apache.catalina.connector.OutputBuffer.flush (OutputBuffer.java:275)位於org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:175)位於com.ctc.wstx.io的java.io.FilterOutputStream.flush(FilterOutputStream.java:140)處。 com.ctc.wstx.sw.BufferingXmlWriter.flush(BufferingXmlWriter.java:225)處的com.ctc.wstx.sw.BaseStreamWriter.flush(BaseStreamWriter.java:259)處的UTF8Writer.flush(UTF8Writer.java:103) com.sun.xml.ws.streaming.XMLStreamWriterUtil.getOutputStream(XMLStreamWriterUtil.java:103)處的.sun.xml.ws.util.xml.XMLStreamWriterFilter.flush(XMLStreamWriterFilter.java:71) .message.jaxb.JAXBMe​​ssage.write com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:192)處的有效載荷To(JAXBMe​​ssage.java:403)com.sun.xml.ws.api.message.MessageWrapper.writeTo(MessageWrapper.java: 226)com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:242)com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPSOAPCodec.java:242)com.sun.xml com.sun.xml.ws.transport.http.HttpAdapter.access $ 100(HttpAdapter.java:108)上的.ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:636)com.sun.xml.ws上的。 com.sun.xml.ws.transport上的transport.http.HttpAdapter $ HttpToolkit.handle(HttpAdapter.java:878).com.sun.xml.ws.transport上的http.HttpAdapter.handle(HttpAdapter.java:422)。 org.glassfish.webservices.JAXWSServlet.doPost(JAXWSServlet.java:169)上的http.servlet.ServletAdapter.handle(ServletAdapter.java:169)在javax上的javax.servlet.http.HttpServlet.service(HttpServlet.java:707) org.apache.catalina.core.StandardWrapper.se上的.servlet.http.HttpServlet.service(HttpServlet.java:790) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)的rvice(StandardWrapper.java:1682)在org.apache的org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)處org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)上的.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java) :99)在org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)在org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)。位於com.sun.enterprise.v3.services.impl.ContainerMapper $ HttpHandlerCallable.call(ContainerMapper.java:459)的CoyoteAdapter.service(CoyoteAdapter.java:283),位於com.sun.enterprise.v3.services.impl.ContainerMapper。 org.glassfish.grizzly.http.server.HttpHandler.runService(ContainerMapper.java:167)org.glassfish.grizzly.http.server.HttpHandler的service(HttpHandler.java:206)。 位於org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)的doHandle(HttpHandler.java:180)位於org.glassfish.grizzly.filterchain.ExecutorResolver的$ 9.execute(ExecutorResolver.java:119) org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)在org.glassfish.grizzly.filterchain.DefaultFilterChain.execute( org.glassfish.grizzly.filterchain.DefaultFilterChain.java:132)org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)org.glassfish.grizzly.nio的DefaultFilterChain.process(DefaultFilterChain.java:111)位於org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)的.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117 ),網址為org.glassfish.grizzly.strategies 在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)的org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.Thread $ Strategy.access $ 100(WorkerThreadIOStrategy.java:56)在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork(AbstractThread java:591)在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:571)在java.lang.Thread.run(Thread.java:748)

最后,我找到了正確的超時設置。 我必須轉到管理面板,然后在“ Configurations → server-config → Network Config ,必須設置http-listener-1的HTTP請求超時

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM