[
https://issues.apache.org/jira/browse/AXIS2-5809?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15580712#comment-15580712
]
Hudson commented on AXIS2-5809:
-------------------------------
SUCCESS: Integrated in Jenkins build Axis2 #3601 (See
[https://builds.apache.org/job/Axis2/3601/])
AXIS2-5809: Ensure that connections are properly released. (veithen: rev
1765193)
* (edit)
axis2/modules/adb-tests/src/test/java/org/apache/axis2/databinding/axis2_5809/EchoServiceImpl.java
* (edit)
axis2/modules/adb-tests/src/test/java/org/apache/axis2/databinding/axis2_5809/ServiceTest.java
* (edit)
axis2/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPClient4TransportSender.java
> Axis2 does not properly return http connection to connection pool when using
> http client 4
> ------------------------------------------------------------------------------------------
>
> Key: AXIS2-5809
> URL: https://issues.apache.org/jira/browse/AXIS2-5809
> Project: Axis2
> Issue Type: Bug
> Components: transports
> Affects Versions: 1.7.3
> Environment: Ubuntu 16.04, OpenJDK 7
> Reporter: Christian H.
> Priority: Critical
>
> When using HTTP Client 4 with a generated WSDL-Client the HTTP connections
> are not returned properly to underlying connection pool. The HTTP connections
> are still allocated, when new requests are made. This ends up in waiting for
> HTTP connections from pool, but no connections are available anymore.
> The connections should be returned to pool as stated in the Apache HTTP
> Client 4 documentation (2.3.1):
> https://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html
> Here is some example code to reproduce the problem. The BLZServiceStub is a
> generated WSDL client (wsdl2java) of the following service:
> http://www.thomas-bayer.com/axis2/services/BLZService?wsdl . But the problem
> is independent of the used service.
> {code:title=TestRunner.java}
> package com.thomas_bayer.blz;
> import java.rmi.RemoteException;
> import org.apache.axis2.transport.http.HTTPConstants;
> import org.apache.http.client.HttpClient;
> import org.apache.http.impl.client.DefaultHttpClient;
> import org.apache.http.impl.conn.PoolingClientConnectionManager;
> import org.apache.http.params.BasicHttpParams;
> import org.apache.http.params.CoreConnectionPNames;
> import org.apache.http.params.HttpParams;
> public class TestRunner {
> private static final int timeoutMillis = 5000;
> private static final int maxConnections = 2;
>
> private static final String[] BLZs = new String[] {
> "12030000", "12070000"
> };
>
> public static void main(String[] args) throws RemoteException {
> BLZServiceStub blzService = new BLZServiceStub();
>
> blzService._getServiceClient().getServiceContext().getConfigurationContext().setProperty(HTTPConstants.CACHED_HTTP_CLIENT,
> buildHttpClient());
> for(int i = 0; i <= maxConnections; i++) {
> BLZServiceStub.GetBankType getBankType = new
> BLZServiceStub.GetBankType();
> getBankType.setBlz(BLZs[i % BLZs.length]);
> BLZServiceStub.GetBank getBank = new BLZServiceStub.GetBank();
> getBank.setGetBank(getBankType);
>
> System.out.println("Querying for bank (iteration: " + i + ")");
> BLZServiceStub.GetBankResponse response = blzService.getBank(getBank);
> System.out.println("Bank queried");
>
> System.out.println("Result: " +
> response.getGetBankResponse().getDetails().getBezeichnung());
> }
> }
> protected static HttpClient buildHttpClient() {
> final PoolingClientConnectionManager conmgr = new
> PoolingClientConnectionManager();
> conmgr.setDefaultMaxPerRoute(maxConnections);
> conmgr.setMaxTotal(maxConnections);
>
> final HttpParams params = new BasicHttpParams();
> params.setLongParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,
> timeoutMillis);
> params.setLongParameter(CoreConnectionPNames.SO_TIMEOUT, timeoutMillis);
>
> return new DefaultHttpClient(conmgr, params);
> }
> }
> {code}
> Running this code will produce the following output:
> {noformat}
> Querying for bank (iteration: 0)
> Bank queried
> Result: Deutsche Kreditbank Berlin
> Querying for bank (iteration: 1)
> Bank queried
> Result: Deutsche Bank Ld Brandenburg
> Querying for bank (iteration: 2)
> Sep 27, 2016 8:32:43 AM
> org.apache.axis2.transport.http.impl.httpclient4.HTTPSenderImpl sendViaPost
> INFORMATION: Unable to sendViaPost to
> url[http://www.thomas-bayer.com/axis2/services/BLZService]
> org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for
> connection from pool
> at
> org.apache.http.impl.conn.PoolingClientConnectionManager.leaseConnection(PoolingClientConnectionManager.java:232)
> at
> org.apache.http.impl.conn.PoolingClientConnectionManager$1.getConnection(PoolingClientConnectionManager.java:199)
> at
> org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:456)
> at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
> at
> org.apache.axis2.transport.http.impl.httpclient4.HTTPSenderImpl.executeMethod(HTTPSenderImpl.java:873)
> at
> org.apache.axis2.transport.http.impl.httpclient4.HTTPSenderImpl.sendViaPost(HTTPSenderImpl.java:238)
> at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:121)
> at
> org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:403)
> at
> org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:234)
> at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:431)
> at
> org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:399)
> at
> org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:225)
> at
> org.apache.axis2.client.OperationClient.execute(OperationClient.java:150)
> at com.thomas_bayer.blz.BLZServiceStub.getBank(BLZServiceStub.java:162)
> at com.thomas_bayer.blz.TestRunner.main(TestRunner.java:34)
> Exception in thread "main" org.apache.axis2.AxisFault: Timeout waiting for
> connection from pool
> at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
> at
> org.apache.axis2.transport.http.impl.httpclient4.HTTPSenderImpl.sendViaPost(HTTPSenderImpl.java:242)
> at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:121)
> at
> org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:403)
> at
> org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:234)
> at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:431)
> at
> org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:399)
> at
> org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:225)
> at
> org.apache.axis2.client.OperationClient.execute(OperationClient.java:150)
> at com.thomas_bayer.blz.BLZServiceStub.getBank(BLZServiceStub.java:162)
> at com.thomas_bayer.blz.TestRunner.main(TestRunner.java:34)
> Caused by: org.apache.http.conn.ConnectionPoolTimeoutException: Timeout
> waiting for connection from pool
> at
> org.apache.http.impl.conn.PoolingClientConnectionManager.leaseConnection(PoolingClientConnectionManager.java:232)
> at
> org.apache.http.impl.conn.PoolingClientConnectionManager$1.getConnection(PoolingClientConnectionManager.java:199)
> at
> org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:456)
> at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
> at
> org.apache.axis2.transport.http.impl.httpclient4.HTTPSenderImpl.executeMethod(HTTPSenderImpl.java:873)
> at
> org.apache.axis2.transport.http.impl.httpclient4.HTTPSenderImpl.sendViaPost(HTTPSenderImpl.java:238)
> ... 9 more
> {noformat}
> The exception is thrown after some timeout waiting for the connection manager
> to return a connection. The problem even arised, when i do not set any cached
> http client. In that case the problem will arise after 200 requests (default
> number of pooled connections within axis2)
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]