Author: gawor Date: Tue Jul 13 13:32:24 2010 New Revision: 963710 URL: http://svn.apache.org/viewvc?rev=963710&view=rev Log: AXIS2-4751: Create a new instance of HttpClient since it is not used in thread-safe way. The connection manager is not automatically reused right now because other bugs in Axis2 or related libraries cause test failures when connection reuse is enabled.
Modified: axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java Modified: axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java?rev=963710&r1=963709&r2=963710&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java (original) +++ axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java Tue Jul 13 13:32:24 2010 @@ -25,12 +25,12 @@ import org.apache.axiom.om.OMOutputForma import org.apache.axis2.AxisFault; import org.apache.axis2.Constants; import org.apache.axis2.context.MessageContext; +import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.context.OperationContext; import org.apache.axis2.description.TransportOutDescription; import org.apache.axis2.i18n.Messages; import org.apache.axis2.transport.MessageFormatter; import org.apache.axis2.transport.TransportUtils; -import org.apache.axis2.util.JavaUtils; import org.apache.axis2.wsdl.WSDLConstants; import org.apache.commons.httpclient.Credentials; import org.apache.commons.httpclient.Header; @@ -485,44 +485,55 @@ public abstract class AbstractHTTPSender } protected HttpClient getHttpClient(MessageContext msgContext) { - HttpClient httpClient; - Object reuse = msgContext.getOptions().getProperty(HTTPConstants.REUSE_HTTP_CLIENT); - if (reuse == null) { - reuse = msgContext.getConfigurationContext().getProperty(HTTPConstants.REUSE_HTTP_CLIENT); - } - if (reuse != null && JavaUtils.isTrueExplicitly(reuse)) { - httpClient = (HttpClient) msgContext.getOptions().getProperty(HTTPConstants.CACHED_HTTP_CLIENT); - if (httpClient == null) { - httpClient = (HttpClient) msgContext.getConfigurationContext() - .getProperty(HTTPConstants.CACHED_HTTP_CLIENT); - } - if (httpClient != null) - return httpClient; - MultiThreadedHttpConnectionManager connectionManager = - new MultiThreadedHttpConnectionManager(); - httpClient = new HttpClient(connectionManager); - msgContext.getConfigurationContext() - .setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient); - } else { - HttpConnectionManager connManager = - (HttpConnectionManager) msgContext.getProperty( - HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER); - if (connManager == null) { - connManager = - (HttpConnectionManager) msgContext.getProperty( - HTTPConstants.MUTTITHREAD_HTTP_CONNECTION_MANAGER); - } - if(connManager != null){ - httpClient = new HttpClient(connManager); - } else { - //Multi threaded http connection manager has set as the default - connManager = new MultiThreadedHttpConnectionManager(); - httpClient = new HttpClient(connManager); + ConfigurationContext configContext = msgContext.getConfigurationContext(); + + HttpClient httpClient = (HttpClient) msgContext.getProperty(HTTPConstants.CACHED_HTTP_CLIENT); + if (httpClient == null) { + httpClient = (HttpClient) configContext.getProperty(HTTPConstants.CACHED_HTTP_CLIENT); + } + if (httpClient != null) { + return httpClient; + } + + HttpConnectionManager connManager = + (HttpConnectionManager) msgContext.getProperty( + HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER); + if (connManager == null) { + connManager = + (HttpConnectionManager) msgContext.getProperty( + HTTPConstants.MUTTITHREAD_HTTP_CONNECTION_MANAGER); + } + if (connManager == null) { + // reuse HttpConnectionManager + synchronized (configContext) { + connManager = (HttpConnectionManager) configContext.getProperty( + HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER); + if (connManager == null) { + log.trace("Making new ConnectionManager"); + connManager = new MultiThreadedHttpConnectionManager(); + /* + * Commented out for now as bugs in other parts of Axis2 cause test failures when + * proper connection reuse is enabled. + */ + // configContext.setProperty(HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER, + // connManager); + + } } } + /* + * Create a new instance of HttpClient since it is not + * used in thread-safe way here. + */ + httpClient = new HttpClient(connManager); + + // Set the default timeout in case we have a connection pool starvation to 30sec + httpClient.getParams().setConnectionManagerTimeout(30000); + // Get the timeout values set in the runtime initializeTimeouts(msgContext, httpClient); + return httpClient; }