简体   繁体   English

GlassFish Java Web服务超时

[英]GlassFish Java web service timeout

I'm setting up a new GlassFish Server 4.1.1 with one Java web service deployed on it. 我正在设置一个新的GlassFish Server 4.1.1,上面部署了一个Java Web服务。 The web service has one web method, which receives JSON as an input parameter and as result it also returns a JSON. 该Web服务具有一个Web方法,该方法接收JSON作为输入参数,因此它还返回JSON。 To serialize/deserialize Java objects to/from JSON I'm using the Gson library. 要将Java对象与JSON序列化/反序列化,我使用Gson库。 The web method is calling an other web service and one run is executing approximately 2-3 minutes. Web方法正在调用其他Web服务,一次运行大约需要2-3分钟。 I'm calling this web service for example 6-10 times in a loop, so the web method is waiting approximately 16-30 minutes to return a value. 我在一个循环中多次调用此Web服务例如6-10次,因此Web方法正在等待大约16-30分钟以返回值。 The problem is timeout, but I don't know where and how to set it for my problem. 问题是超时,但是我不知道在哪里以及如何为我的问题设置时间。

I try to call this Java web service from a Visual Studio C# project, where I added a web reference where I defined the web reference URL of the web service. 我尝试从Visual Studio C#项目中调用此Java Web服务,在其中添加了Web引用,并在其中定义了Web服务的Web引用URL。 I also set the time for how long should the XML Web service client wait for the reply to a synchronous XML Web service request to arrive. 我还设置了XML Web服务客户端等待对同步XML Web服务请求的答复应该等待多长时间的时间。 I set it to 10 hours as is shown below. 我将其设置为10小时,如下所示。

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

    return EARSWS.EARSjDE(json);
}

I also set a timeout for a web service request I make in the Java web method. 我还为在Java Web方法中发出的Web服务请求设置了超时。 I set it to 1 hour. 我将其设置为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);

Besides these two timeouts I also set a timeout in GlassFish admin console. 除了这两个超时,我还在GlassFish管理控制台中设置了超时。 I did it in Configurations → server-config → Web Container section where I set the session timeout to 36.000 seconds (10 hours). 我是在“配置”→“服务器配置”→“ Web容器”部分中完成的,在该部分中,将会话超时设置为36.000秒(10小时)。

For example, when I call a web service inside a web method 6 times I get the desired response. 例如,当我在Web方法内调用Web服务6次时,将获得所需的响应。 But when I call the web service more than 6 times, it throws me an exception shown below. 但是,当我多次调用Web服务超过6次时,将引发以下异常。 I think the reason for this exception is in the timeout, but I don't know which one causes it and where can I change it. 我认为发生此异常的原因是超时,但我不知道是哪个原因导致的,以及在哪里可以更改它。

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

Finally, I found the right timeout to set. 最后,我找到了正确的超时设置。 I had to go to the admin panel and inside Configurations → server-config → Network Config I had to set the HTTP Request Timeout of http-listener-1. 我必须转到管理面板,然后在“ Configurations → server-config → Network Config ,必须设置http-listener-1的HTTP请求超时

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM