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.SchemePortResolver;
32 import org.apache.hc.client5.http.io.ManagedHttpClientConnection;
33 import org.apache.hc.client5.http.socket.ConnectionSocketFactory;
34 import org.apache.hc.client5.http.socket.LayeredConnectionSocketFactory;
35 import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory;
36 import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
37 import org.apache.hc.core5.http.URIScheme;
38 import org.apache.hc.core5.http.config.RegistryBuilder;
39 import org.apache.hc.core5.http.io.HttpConnectionFactory;
40 import org.apache.hc.core5.http.io.SocketConfig;
41 import org.apache.hc.core5.pool.PoolConcurrencyPolicy;
42 import org.apache.hc.core5.pool.PoolReusePolicy;
43 import org.apache.hc.core5.util.TimeValue;
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 public class PoolingHttpClientConnectionManagerBuilder {
72
73 private HttpConnectionFactory<ManagedHttpClientConnection> connectionFactory;
74 private LayeredConnectionSocketFactory sslSocketFactory;
75 private SchemePortResolver schemePortResolver;
76 private DnsResolver dnsResolver;
77 private PoolConcurrencyPolicy poolConcurrencyPolicy;
78 private PoolReusePolicy poolReusePolicy;
79 private SocketConfig defaultSocketConfig;
80
81 private boolean systemProperties;
82
83 private int maxConnTotal = 0;
84 private int maxConnPerRoute = 0;
85
86 private TimeValue timeToLive;
87 private TimeValue validateAfterInactivity;
88
89 public static PoolingHttpClientConnectionManagerBuilder create() {
90 return new PoolingHttpClientConnectionManagerBuilder();
91 }
92
93 PoolingHttpClientConnectionManagerBuilder() {
94 super();
95 }
96
97
98
99
100 public final PoolingHttpClientConnectionManagerBuilder setConnectionFactory(
101 final HttpConnectionFactory<ManagedHttpClientConnection> connectionFactory) {
102 this.connectionFactory = connectionFactory;
103 return this;
104 }
105
106
107
108
109 public final PoolingHttpClientConnectionManagerBuilder setSSLSocketFactory(
110 final LayeredConnectionSocketFactory sslSocketFactory) {
111 this.sslSocketFactory = sslSocketFactory;
112 return this;
113 }
114
115
116
117
118 public final PoolingHttpClientConnectionManagerBuilder setDnsResolver(final DnsResolver dnsResolver) {
119 this.dnsResolver = dnsResolver;
120 return this;
121 }
122
123
124
125
126 public final PoolingHttpClientConnectionManagerBuilder setSchemePortResolver(final SchemePortResolver schemePortResolver) {
127 this.schemePortResolver = schemePortResolver;
128 return this;
129 }
130
131
132
133
134 public final PoolingHttpClientConnectionManagerBuilder setPoolConcurrencyPolicy(final PoolConcurrencyPolicy poolConcurrencyPolicy) {
135 this.poolConcurrencyPolicy = poolConcurrencyPolicy;
136 return this;
137 }
138
139
140
141
142 public final PoolingHttpClientConnectionManagerBuilder setConnPoolPolicy(final PoolReusePolicy poolReusePolicy) {
143 this.poolReusePolicy = poolReusePolicy;
144 return this;
145 }
146
147
148
149
150 public final PoolingHttpClientConnectionManagerBuilder setMaxConnTotal(final int maxConnTotal) {
151 this.maxConnTotal = maxConnTotal;
152 return this;
153 }
154
155
156
157
158 public final PoolingHttpClientConnectionManagerBuilder setMaxConnPerRoute(final int maxConnPerRoute) {
159 this.maxConnPerRoute = maxConnPerRoute;
160 return this;
161 }
162
163
164
165
166 public final PoolingHttpClientConnectionManagerBuilder setDefaultSocketConfig(final SocketConfig config) {
167 this.defaultSocketConfig = config;
168 return this;
169 }
170
171
172
173
174 public final PoolingHttpClientConnectionManagerBuilder setConnectionTimeToLive(final TimeValue timeToLive) {
175 this.timeToLive = timeToLive;
176 return this;
177 }
178
179
180
181
182
183
184
185 public final PoolingHttpClientConnectionManagerBuilder setValidateAfterInactivity(final TimeValue validateAfterInactivity) {
186 this.validateAfterInactivity = validateAfterInactivity;
187 return this;
188 }
189
190
191
192
193
194 public final PoolingHttpClientConnectionManagerBuilder useSystemProperties() {
195 this.systemProperties = true;
196 return this;
197 }
198
199 public PoolingHttpClientConnectionManager build() {
200 @SuppressWarnings("resource")
201 final PoolingHttpClientConnectionManagertConnectionManager.html#PoolingHttpClientConnectionManager">PoolingHttpClientConnectionManager poolingmgr = new PoolingHttpClientConnectionManager(
202 RegistryBuilder.<ConnectionSocketFactory>create()
203 .register(URIScheme.HTTP.id, PlainConnectionSocketFactory.getSocketFactory())
204 .register(URIScheme.HTTPS.id, sslSocketFactory != null ? sslSocketFactory :
205 (systemProperties ?
206 SSLConnectionSocketFactory.getSystemSocketFactory() :
207 SSLConnectionSocketFactory.getSocketFactory()))
208 .build(),
209 poolConcurrencyPolicy,
210 poolReusePolicy,
211 timeToLive != null ? timeToLive : TimeValue.NEG_ONE_MILLISECOND,
212 schemePortResolver,
213 dnsResolver,
214 connectionFactory);
215 poolingmgr.setValidateAfterInactivity(this.validateAfterInactivity);
216 if (defaultSocketConfig != null) {
217 poolingmgr.setDefaultSocketConfig(defaultSocketConfig);
218 }
219 if (maxConnTotal > 0) {
220 poolingmgr.setMaxTotal(maxConnTotal);
221 }
222 if (maxConnPerRoute > 0) {
223 poolingmgr.setDefaultMaxPerRoute(maxConnPerRoute);
224 }
225 return poolingmgr;
226 }
227
228 }