[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-1739?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15256801#comment-15256801
 ] 

Oleg Kalnichevski commented on HTTPCLIENT-1739:
-----------------------------------------------

Please submit a self-contained, compilable app or JUnit reproducing the issue.

Oleg  

> repeated calls to HttpClients.custom.build take longer over time
> ----------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1739
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1739
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 4.5.2
>         Environment: windows xp 32 bit, windows 7 64 bit and RedHat 
> enterprise 7. Tested on Web Server 
> apache-tomee-plus-1.7.1/apache-tomee-plus-1.7.4 deployed as @Webservice's 
> calling external webservices using httpclient
>            Reporter: Ralph Carlson
>            Priority: Minor
>
> (Tested on latest version and version 4.3 and both have same issue.)
> repeated calls to HttpClients.custom.build take longer over time. Tested 
> using http library in webservice that calls and outside webservice. Initially 
> HttpClients.custom.build run quickly for first several hundred, then takes 
> increasingly longer to create client despite all objects clean up as per api 
> spec each request. Some cache or code in the api takes longer and longer to 
> create the client and no api methods exposed that can change this, only 
> solution now was to create a Map to cache HttpClients so not creating new 
> ones and look up HttpClient you need based on input parameters. 
> sample code that when called over and over again creates the issue:
> {code:java}
>     protected static CloseableHttpClient 
> _getCloseableHttpClient(HttpClientToolsInput input) throws Exception
>     { //method
>                //--------------- you can cache these object as static final 
> since never change and still get the same result , included here as example 
> code for bug
>                       SSLContextBuilder sslContextBuilder = 
> SSLContexts.custom();    
>                       sslContextBuilder.loadTrustMaterial(null, new 
> TrustStrategy() 
>                               {
>                                       public boolean 
> isTrusted(X509Certificate[] chain, String authType) throws 
> CertificateException { return true; } 
>                                       @Override       public boolean 
> isTrusted(java.security.cert.X509Certificate[] chain,String authType) throws 
> CertificateException { return true; }
>                               });
>                       SSLContext sslContext = sslContextBuilder.build();      
>                       
>                       SSLConnectionSocketFactory sslConnectionSocketFactory = 
> new SSLConnectionSocketFactory( sslContext, new String[] {"TLSv1", "TLSv1.1", 
> "TLSv1.2"},null,new HostnameVerifier()
>                       {
>                                   public void verify(String host, 
> X509Certificate cert) throws SSLException { }
>                                   @Override public boolean verify(String s, 
> SSLSession sslSession) { 
> return true; 
> }
>                       });                     
>                       
>                       Registry<ConnectionSocketFactory> socketFactoryRegistry 
> = 
>                                                  
> RegistryBuilder.<ConnectionSocketFactory> create().register("http", 
> PlainConnectionSocketFactory.INSTANCE).register("https", 
> sslConnectionSocketFactory).build();
>                       SSLConnectionSocketFactory sslsf = new 
> SSLConnectionSocketFactory(sslContextBuilder.build());                   
>               //--------------- you can cache these object as static final : 
> end
>                       //---------------  these objects below are created and 
> clean up each request
>                       BasicHttpClientConnectionManager cm = new 
> BasicHttpClientConnectionManager(socketFactoryRegistry);
>             RequestConfig defaultRequestConfig = 
> RequestConfig.custom().setSocketTimeout(
>                                                    
> input.getSocketTimeout()).setConnectTimeout(
>                                                    
> input.getConnectionTimeout()).setConnectionRequestTimeout(
>                                                    
> input.getConnectionRequestTimeout()).build();            
>                       // ---------------- get same bug if modify code to use 
> different client other than CloseableHttpClient
>                       // ---------------- the .build() method takes longer 
> and longer to build each cycle
>               CloseableHttpClient httpclient = 
> HttpClients.custom().setConnectionManager(cm)
>                                                        
> .setDefaultRequestConfig(defaultRequestConfig)
>                                                        
> .setSSLSocketFactory(sslsf)
>                                                        
> .setDefaultCredentialsProvider(credsProvider).setSSLHostnameVerifier ( new 
> NoopHostnameVerifier() ).build();
>                                                                               
>                  
>                               <rest of code to make call - non relevant to 
> bug>
>                               <cleanup code - non relevant to bug>
>       } //method
> {code:java}
> this HttpClient.customer().build() method should take roughly same amount of 
> time to return object despite how many objects it created previously, now 
> with enough runs it can take minutes to return object(s)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to