1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.client5.http.impl.io;
29
30 import org.apache.hc.client5.http.DnsResolver;
31 import org.apache.hc.client5.http.HttpRoute;
32 import org.apache.hc.client5.http.SchemePortResolver;
33 import org.apache.hc.client5.http.config.ConnectionConfig;
34 import org.apache.hc.client5.http.config.TlsConfig;
35 import org.apache.hc.client5.http.io.ManagedHttpClientConnection;
36 import org.apache.hc.client5.http.socket.ConnectionSocketFactory;
37 import org.apache.hc.client5.http.socket.LayeredConnectionSocketFactory;
38 import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory;
39 import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
40 import org.apache.hc.core5.function.Resolver;
41 import org.apache.hc.core5.http.HttpHost;
42 import org.apache.hc.core5.http.URIScheme;
43 import org.apache.hc.core5.http.config.RegistryBuilder;
44 import org.apache.hc.core5.http.io.HttpConnectionFactory;
45 import org.apache.hc.core5.http.io.SocketConfig;
46 import org.apache.hc.core5.pool.PoolConcurrencyPolicy;
47 import org.apache.hc.core5.pool.PoolReusePolicy;
48 import org.apache.hc.core5.util.TimeValue;
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 public class PoolingHttpClientConnectionManagerBuilder {
77
78 private HttpConnectionFactory<ManagedHttpClientConnection> connectionFactory;
79 private LayeredConnectionSocketFactory sslSocketFactory;
80 private SchemePortResolver schemePortResolver;
81 private DnsResolver dnsResolver;
82 private PoolConcurrencyPolicy poolConcurrencyPolicy;
83 private PoolReusePolicy poolReusePolicy;
84 private Resolver<HttpRoute, SocketConfig> socketConfigResolver;
85 private Resolver<HttpRoute, ConnectionConfig> connectionConfigResolver;
86 private Resolver<HttpHost, TlsConfig> tlsConfigResolver;
87
88 private boolean systemProperties;
89
90 private int maxConnTotal;
91 private int maxConnPerRoute;
92
93 public static PoolingHttpClientConnectionManagerBuilder create() {
94 return new PoolingHttpClientConnectionManagerBuilder();
95 }
96
97 PoolingHttpClientConnectionManagerBuilder() {
98 super();
99 }
100
101
102
103
104 public final PoolingHttpClientConnectionManagerBuilder setConnectionFactory(
105 final HttpConnectionFactory<ManagedHttpClientConnection> connectionFactory) {
106 this.connectionFactory = connectionFactory;
107 return this;
108 }
109
110
111
112
113 public final PoolingHttpClientConnectionManagerBuilder setSSLSocketFactory(
114 final LayeredConnectionSocketFactory sslSocketFactory) {
115 this.sslSocketFactory = sslSocketFactory;
116 return this;
117 }
118
119
120
121
122 public final PoolingHttpClientConnectionManagerBuilder setDnsResolver(final DnsResolver dnsResolver) {
123 this.dnsResolver = dnsResolver;
124 return this;
125 }
126
127
128
129
130 public final PoolingHttpClientConnectionManagerBuilder setSchemePortResolver(final SchemePortResolver schemePortResolver) {
131 this.schemePortResolver = schemePortResolver;
132 return this;
133 }
134
135
136
137
138 public final PoolingHttpClientConnectionManagerBuilder setPoolConcurrencyPolicy(final PoolConcurrencyPolicy poolConcurrencyPolicy) {
139 this.poolConcurrencyPolicy = poolConcurrencyPolicy;
140 return this;
141 }
142
143
144
145
146 public final PoolingHttpClientConnectionManagerBuilder setConnPoolPolicy(final PoolReusePolicy poolReusePolicy) {
147 this.poolReusePolicy = poolReusePolicy;
148 return this;
149 }
150
151
152
153
154 public final PoolingHttpClientConnectionManagerBuilder setMaxConnTotal(final int maxConnTotal) {
155 this.maxConnTotal = maxConnTotal;
156 return this;
157 }
158
159
160
161
162 public final PoolingHttpClientConnectionManagerBuilder setMaxConnPerRoute(final int maxConnPerRoute) {
163 this.maxConnPerRoute = maxConnPerRoute;
164 return this;
165 }
166
167
168
169
170 public final PoolingHttpClientConnectionManagerBuilder setDefaultSocketConfig(final SocketConfig config) {
171 this.socketConfigResolver = (route) -> config;
172 return this;
173 }
174
175
176
177
178
179
180 public final PoolingHttpClientConnectionManagerBuilder setSocketConfigResolver(
181 final Resolver<HttpRoute, SocketConfig> socketConfigResolver) {
182 this.socketConfigResolver = socketConfigResolver;
183 return this;
184 }
185
186
187
188
189
190
191 public final PoolingHttpClientConnectionManagerBuilder setDefaultConnectionConfig(final ConnectionConfig config) {
192 this.connectionConfigResolver = (route) -> config;
193 return this;
194 }
195
196
197
198
199
200
201 public final PoolingHttpClientConnectionManagerBuilder setConnectionConfigResolver(
202 final Resolver<HttpRoute, ConnectionConfig> connectionConfigResolver) {
203 this.connectionConfigResolver = connectionConfigResolver;
204 return this;
205 }
206
207
208
209
210
211
212 public final PoolingHttpClientConnectionManagerBuilder setDefaultTlsConfig(final TlsConfig config) {
213 this.tlsConfigResolver = (host) -> config;
214 return this;
215 }
216
217
218
219
220
221
222 public final PoolingHttpClientConnectionManagerBuilder setTlsConfigResolver(
223 final Resolver<HttpHost, TlsConfig> tlsConfigResolver) {
224 this.tlsConfigResolver = tlsConfigResolver;
225 return this;
226 }
227
228
229
230
231
232
233 @Deprecated
234 public final PoolingHttpClientConnectionManagerBuilder setConnectionTimeToLive(final TimeValue timeToLive) {
235 setDefaultConnectionConfig(ConnectionConfig.custom()
236 .setTimeToLive(timeToLive)
237 .build());
238 return this;
239 }
240
241
242
243
244
245
246
247 @Deprecated
248 public final PoolingHttpClientConnectionManagerBuilder setValidateAfterInactivity(final TimeValue validateAfterInactivity) {
249 setDefaultConnectionConfig(ConnectionConfig.custom()
250 .setValidateAfterInactivity(validateAfterInactivity)
251 .build());
252 return this;
253 }
254
255
256
257
258
259 public final PoolingHttpClientConnectionManagerBuilder useSystemProperties() {
260 this.systemProperties = true;
261 return this;
262 }
263
264 public PoolingHttpClientConnectionManager build() {
265 @SuppressWarnings("resource") final PoolingHttpClientConnectionManager poolingmgr = new PoolingHttpClientConnectionManager(
266 RegistryBuilder.<ConnectionSocketFactory>create()
267 .register(URIScheme.HTTP.id, PlainConnectionSocketFactory.getSocketFactory())
268 .register(URIScheme.HTTPS.id, sslSocketFactory != null ? sslSocketFactory :
269 (systemProperties ?
270 SSLConnectionSocketFactory.getSystemSocketFactory() :
271 SSLConnectionSocketFactory.getSocketFactory()))
272 .build(),
273 poolConcurrencyPolicy,
274 poolReusePolicy,
275 null,
276 schemePortResolver,
277 dnsResolver,
278 connectionFactory);
279 poolingmgr.setSocketConfigResolver(socketConfigResolver);
280 poolingmgr.setConnectionConfigResolver(connectionConfigResolver);
281 poolingmgr.setTlsConfigResolver(tlsConfigResolver);
282 if (maxConnTotal > 0) {
283 poolingmgr.setMaxTotal(maxConnTotal);
284 }
285 if (maxConnPerRoute > 0) {
286 poolingmgr.setDefaultMaxPerRoute(maxConnPerRoute);
287 }
288 return poolingmgr;
289 }
290
291 }