You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by ga...@apache.org on 2010/06/28 22:03:33 UTC
svn commit: r958696 -
/axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java
Author: gawor
Date: Mon Jun 28 20:03:33 2010
New Revision: 958696
URL: http://svn.apache.org/viewvc?rev=958696&view=rev
Log:
AXIS2-4751: Create a new instance of HttpClient since we are not using them in thread-safe manner
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=958696&r1=958695&r2=958696&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 Mon Jun 28 20:03:33 2010
@@ -25,6 +25,7 @@ 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;
@@ -485,44 +486,50 @@ 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();
+ 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;
}