You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Sameera Jayasoma (JIRA)" <ji...@apache.org> on 2011/01/06 06:47:45 UTC
[jira] Commented: (AXIS2-4898) Thread named
[MultiThreadedHttpConnectionManager cleanup] not cleaned up properly
[ https://issues.apache.org/jira/browse/AXIS2-4898?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12978152#action_12978152 ]
Sameera Jayasoma commented on AXIS2-4898:
-----------------------------------------
Hi Chris,
I developed a sample service called Version2 to reproduce this issue. This version2 service invoke the version service in Axis2. I've reused your client configuration. But I couldn't reproduce this issue. Please find the attached source code and the binary artifact.
Thanks
Sameera
> 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: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org