[ https://issues.apache.org/jira/browse/AXIS2-2593?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12510068 ]
Gerry Holly commented on AXIS2-2593: ------------------------------------ Hello, It seems this AUTO_RELEASE_CONNECTION solution only covers non-blocking operations. What about blocking operations? In a blocking scenario, when "handleResponse" is invoked in HTTPSender, it stores a reference to the InputStream in the message context so it can be later processed by the application. Your fix renders this InputStream unreadable before the OutInAxisOperationClient gets a chance to process the SOAP message (through TransportUtils). This is the exception I get after implementing your HTTPConstants.java and HTTPSender.java (not using the nightly build): Caused by: org.apache.axis2.AxisFault: Attempted read on closed stream. at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:51) at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:130) at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:77) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:356) at org.apache.axis2.description.OutInAxisOperationClient.execute(OutInAxisOperation.java:294) ... 7 more Caused by: java.io.IOException: Attempted read on closed stream. at org.apache.commons.httpclient.AutoCloseInputStream.isReadAllowed(AutoCloseInputStream.java:165) at org.apache.commons.httpclient.AutoCloseInputStream.read(AutoCloseInputStream.java:106) at java.io.FilterInputStream.read(Unknown Source) at java.io.PushbackInputStream.read(Unknown Source) at org.apache.axis2.builder.BuilderUtil.getReader(BuilderUtil.java:191) at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:41) ... 11 more Gerry > Web Service request loop causes many TIME_WAIT Connections & "BindException: > Address already in use: connect" > ------------------------------------------------------------------------------------------------------------- > > Key: AXIS2-2593 > URL: https://issues.apache.org/jira/browse/AXIS2-2593 > Project: Axis 2.0 (Axis2) > Issue Type: Bug > Affects Versions: 1.1.1, nightly > Environment: Windows XP, Tomcat, Axis2 nightly build (also > encountered in 1.1.1), JiBX 1.1.3, Microsoft Windows XP [Version 5.1.2600], > 126 GB free disk space, 1GB RAM. > Reporter: David Bueche > Assignee: Davanum Srinivas > Priority: Critical > Attachments: diff.txt, JIRA-935_2593.zip, JIRA_test.tar.gz > > > I am performing the following: > - Executing a tight loop calling a singel web service > - Using the same Stub over and over > - Creating the Stub with a custom ConfigurationContext (see below) > - Sending cleanup() to Stub after each message sent (although problem existed > even before cleanup() was added) > After approximately 4000 messages have been sent, an AxisFault is generated > caused by the following exception (see below for full stack trace): > java.net.BindException: Address already in use: connect > It appears that connections from the client to Axis on Tomcat sometimes (but > not always) remain in the TIME_WAIT state for several minutes. There are > 1200-1500 TIME_WAIT connections open when the AxisFault is generated. > If I step through the web service messages in a debugger, the problem does > not appear to occur, as the system eventually releases the connections after > a minute or two. > Also, if I insert a System.gc() in the client code each time it sends a > message to the web service (the commented out line of code below), the > AxisFault does not occur. I have executed the loop over 60,000 times with > the garbage collection included without generating an AxisFault. There were > only 400-700 connections in the TIME_WAIT state at a given time, but > performance slowed down to a crawl. > Here is the code I am using to create the Stub: > HttpConnectionManagerParams connectionManagerParams = new > HttpConnectionManagerParams(); > connectionManagerParams.setTcpNoDelay(true); > connectionManagerParams.setStaleCheckingEnabled(true); > > MultiThreadedHttpConnectionManager connectionManager = new > MultiThreadedHttpConnectionManager(); > connectionManager.setParams(connectionManagerParams); > HttpClient httpClient = new HttpClient(connectionManager); > > ConfigurationContext configurationContext = > ConfigurationContextFactory.createConfigurationContextFromFileSystem(null, > null); > configurationContext.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, > Boolean.TRUE); > configurationContext.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, > httpClient); > > stub = new MyServiceStub(configurationContext, target); > > boolean success = true; > while(success) { > success = stub.performService(records); > stub.cleanup(); > // System.gc(); > } > Here is the complete stack trace: > Exception in thread "main" org.apache.axis2.AxisFault: Address already > in use: connect > at org.apache.axis2.AxisFault.makeFault(AxisFault.java:377) > at > org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:179) > at > org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:73) > at > org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:310) > at > org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:202) > at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:446) > at > org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:330) > at > org.apache.axis2.description.OutInAxisOperationClient.execute(OutInAxisOperation.java:294) > at > com.ws.service.MyServiceStub.performService(MyServiceStub.java:300) > at com.ws.client.MyClient.main(MyClient.java:88) > Caused by: java.net.BindException: Address already in use: connect > at java.net.PlainSocketImpl.socketConnect(Native Method) > at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) > at > java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) > at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) > at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) > at java.net.Socket.connect(Socket.java:519) > at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:585) > at > org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:139) > at > org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:124) > at > org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:706) > at > org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:386) > at > org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170) > at > org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396) > at > org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346) > at > org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:558) > at > org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:176) > ... 8 more -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]