Thread named [MultiThreadedHttpConnectionManager cleanup] not cleaned up
properly
---------------------------------------------------------------------------------
Key: AXIS2-4898
URL: https://issues.apache.org/jira/browse/AXIS2-4898
Project: Axis2
Issue Type: Bug
Components: client-api
Affects Versions: 1.5.1
Environment: Operating system Windows and Linux
Application Server: Tomcat 6.0.29
Axis2 version 1.5.1
Client created with ADB
Reporter: Chris Emerson
Priority: Critical
Shutting down Tomcat 6.0.29 gives the following error:
Nov 23, 2010 4:42:18 PM org.apache.catalina.loader.WebappClassLoader
clearReferencesThreads
SEVERE: A web application appears to have started a thread named
[MultiThreadedHttpConnectionManager cleanup] but has failed to stop it. This is
very likely to create a memory leak.
This error only happens when one of our Axis2 web services is called through a
generated ADB client stub. It appears to never close this thread.
Our current configuration on the web application:
/**
* The configureServiceStub method sets the web service client settings and
* for the web service call.
*
* @param params WebServiceParameters
*
* @throws Exception
*/
private void configureServiceStub(WebServiceParameters params) throws
Exception
{
// check if connection manager already established
if(connectionManager == null)
{
connectionManager = new MultiThreadedHttpConnectionManager();
connectionManagerParams = new HttpConnectionManagerParams();
connectionManagerParams.setDefaultMaxConnectionsPerHost(2);
connectionManagerParams.setTcpNoDelay(true);
connectionManagerParams.setStaleCheckingEnabled(true);
connectionManagerParams.setLinger(0);
connectionManager.setParams(connectionManagerParams);
httpClient = new HttpClient(connectionManager);
configcontext =
ConfigurationContextFactory.createDefaultConfigurationContext();
configcontext.setThreadPool(new ThreadPool(1, 3));
configcontext.setProperty(HTTPConstants.REUSE_HTTP_CLIENT,
Boolean.TRUE);
configcontext.setProperty(HTTPConstants.CACHED_HTTP_CLIENT,
httpClient);
configcontext.setProperty(HTTPConstants.AUTO_RELEASE_CONNECTION,
httpClient);
}
if(employeeStub == null)
{
employeeStub = new EmployeeServiceSMARTStub(configcontext,
params.getLocalServiceUrl()
+
"EmployeeServiceSMART.EmployeeServiceSMARTHttpSoap12Endpoint/");
employeeStub._getServiceClient().getOptions().setTimeOutInMilliSeconds(2 * 60 *
1000);
employeeStub._getServiceClient().getOptions().setProperty(HTTPConstants.SO_TIMEOUT,
30000);
employeeStub._getServiceClient().getOptions().setProperty(HTTPConstants.CONNECTION_TIMEOUT,
30000);
employeeStub._getServiceClient().getOptions().setProperty(HTTPConstants.REUSE_HTTP_CLIENT,
Boolean.TRUE);
employeeStub._getServiceClient().getOptions().setProperty(HTTPConstants.AUTO_RELEASE_CONNECTION,
Boolean.TRUE);
employeeStub._getServiceClient().getOptions().setProperty(HTTPConstants.CHUNKED,
Boolean.TRUE);
employeeStub._getServiceClient().getOptions().setCallTransportCleanup(true);
employeeStub._getServiceClient().getOptions().setProperty(HTTPConstants.HTTP_PROTOCOL_VERSION,
HTTPConstants.HEADER_PROTOCOL_10);
}
}
After each call we call the following code:
finally
{
// clean up all hanging threads and stop connection manager
if(employeeStub._getServiceClient() != null)
{
try
{
employeeStub._getServiceClient().cleanupTransport();
}
catch(Exception e)
{
e.printStackTrace();
}
try
{
employeeStub._getServiceClient().cleanup();
employeeStub.cleanup();
}
catch(Exception e)
{
e.printStackTrace();
}
}
connectionManager.closeIdleConnections(0);
connectionManager.shutdown();
connectionManager = null;
employeeStub = null;
}
--
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]