[ 
https://issues.apache.org/jira/browse/AXIS2-4898?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12964939#action_12964939
 ] 

Andreas Veithen commented on AXIS2-4898:
----------------------------------------

You can keep the call to getPerson. Just make sure that the endpoint refers to 
an existing Web server. It will throw an exception because there is no Web 
service deployed, but it will nevertheless start the 
MultiThreadedHttpConnectionManager. That should be enough to reproduce the 
issue.

> 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]

Reply via email to