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.nio;
29
30 import org.apache.hc.client5.http.DnsResolver;
31 import org.apache.hc.client5.http.SchemePortResolver;
32 import org.apache.hc.client5.http.ssl.ConscryptClientTlsStrategy;
33 import org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy;
34 import org.apache.hc.core5.http.config.RegistryBuilder;
35 import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
36 import org.apache.hc.core5.pool.PoolConcurrencyPolicy;
37 import org.apache.hc.core5.pool.PoolReusePolicy;
38 import org.apache.hc.core5.util.ReflectionUtils;
39 import org.apache.hc.core5.util.TimeValue;
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 public class PoolingAsyncClientConnectionManagerBuilder {
68
69 private TlsStrategy tlsStrategy;
70 private SchemePortResolver schemePortResolver;
71 private DnsResolver dnsResolver;
72 private PoolConcurrencyPolicy poolConcurrencyPolicy;
73 private PoolReusePolicy poolReusePolicy;
74
75 private boolean systemProperties;
76
77 private int maxConnTotal = 0;
78 private int maxConnPerRoute = 0;
79
80 private TimeValue timeToLive;
81 private TimeValue validateAfterInactivity;
82
83 public static PoolingAsyncClientConnectionManagerBuilder create() {
84 return new PoolingAsyncClientConnectionManagerBuilder();
85 }
86
87 PoolingAsyncClientConnectionManagerBuilder() {
88 super();
89 }
90
91
92
93
94 public final PoolingAsyncClientConnectionManagerBuilder setTlsStrategy(
95 final TlsStrategy tlsStrategy) {
96 this.tlsStrategy = tlsStrategy;
97 return this;
98 }
99
100
101
102
103 public final PoolingAsyncClientConnectionManagerBuilder setDnsResolver(final DnsResolver dnsResolver) {
104 this.dnsResolver = dnsResolver;
105 return this;
106 }
107
108
109
110
111 public final PoolingAsyncClientConnectionManagerBuilder setSchemePortResolver(final SchemePortResolver schemePortResolver) {
112 this.schemePortResolver = schemePortResolver;
113 return this;
114 }
115
116
117
118
119 public final PoolingAsyncClientConnectionManagerBuilder setPoolConcurrencyPolicy(final PoolConcurrencyPolicy poolConcurrencyPolicy) {
120 this.poolConcurrencyPolicy = poolConcurrencyPolicy;
121 return this;
122 }
123
124
125
126
127 public final PoolingAsyncClientConnectionManagerBuilder setConnPoolPolicy(final PoolReusePolicy poolReusePolicy) {
128 this.poolReusePolicy = poolReusePolicy;
129 return this;
130 }
131
132
133
134
135 public final PoolingAsyncClientConnectionManagerBuilder setMaxConnTotal(final int maxConnTotal) {
136 this.maxConnTotal = maxConnTotal;
137 return this;
138 }
139
140
141
142
143 public final PoolingAsyncClientConnectionManagerBuilder setMaxConnPerRoute(final int maxConnPerRoute) {
144 this.maxConnPerRoute = maxConnPerRoute;
145 return this;
146 }
147
148
149
150
151 public final PoolingAsyncClientConnectionManagerBuilder setConnectionTimeToLive(final TimeValue timeToLive) {
152 this.timeToLive = timeToLive;
153 return this;
154 }
155
156
157
158
159
160
161
162 public final PoolingAsyncClientConnectionManagerBuilder setValidateAfterInactivity(final TimeValue validateAfterInactivity) {
163 this.validateAfterInactivity = validateAfterInactivity;
164 return this;
165 }
166
167
168
169
170
171 public final PoolingAsyncClientConnectionManagerBuilder useSystemProperties() {
172 this.systemProperties = true;
173 return this;
174 }
175
176 public PoolingAsyncClientConnectionManager build() {
177 final TlsStrategy tlsStrategyCopy;
178 if (tlsStrategy != null) {
179 tlsStrategyCopy = tlsStrategy;
180 } else {
181 if (ReflectionUtils.determineJRELevel() <= 8 && ConscryptClientTlsStrategy.isSupported()) {
182 if (systemProperties) {
183 tlsStrategyCopy = ConscryptClientTlsStrategy.getSystemDefault();
184 } else {
185 tlsStrategyCopy = ConscryptClientTlsStrategy.getDefault();
186 }
187 } else {
188 if (systemProperties) {
189 tlsStrategyCopy = DefaultClientTlsStrategy.getSystemDefault();
190 } else {
191 tlsStrategyCopy = DefaultClientTlsStrategy.getDefault();
192 }
193 }
194 }
195 final PoolingAsyncClientConnectionManagerntConnectionManager.html#PoolingAsyncClientConnectionManager">PoolingAsyncClientConnectionManager poolingmgr = new PoolingAsyncClientConnectionManager(
196 RegistryBuilder.<TlsStrategy>create()
197 .register("https", tlsStrategyCopy)
198 .build(),
199 poolConcurrencyPolicy,
200 poolReusePolicy,
201 timeToLive,
202 schemePortResolver,
203 dnsResolver);
204 poolingmgr.setValidateAfterInactivity(this.validateAfterInactivity);
205 if (maxConnTotal > 0) {
206 poolingmgr.setMaxTotal(maxConnTotal);
207 }
208 if (maxConnPerRoute > 0) {
209 poolingmgr.setDefaultMaxPerRoute(maxConnPerRoute);
210 }
211 return poolingmgr;
212 }
213
214 }