Skip to content

Commit 018ed82

Browse files
Do not override resolve method
(cherry picked from commit 062e333)
1 parent cc3b2d9 commit 018ed82

File tree

1 file changed

+34
-4
lines changed

1 file changed

+34
-4
lines changed

java/src/main/java/com/genexus/internet/HttpClientJavaLib.java

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818
import org.apache.http.*;
1919
import org.apache.http.HttpResponse;
2020
import org.apache.http.client.config.CookieSpecs;
21+
import org.apache.http.conn.DnsResolver;
2122
import org.apache.http.conn.routing.HttpRoute;
2223
import org.apache.http.conn.ssl.NoopHostnameVerifier;
2324
import org.apache.http.entity.ContentType;
2425
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
2526
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
27+
import org.apache.http.impl.conn.SystemDefaultDnsResolver;
2628
import org.apache.http.protocol.HttpContext;
2729
import org.apache.http.auth.AuthSchemeProvider;
2830
import org.apache.http.auth.AuthScope;
@@ -64,11 +66,35 @@
6466

6567
public class HttpClientJavaLib extends GXHttpClient {
6668

69+
private static final DnsResolver FIRST_IP_DNS_RESOLVER = host -> {
70+
InetAddress[] allIps = SystemDefaultDnsResolver.INSTANCE.resolve(host);
71+
if (allIps != null && allIps.length > 1) {
72+
return new InetAddress[]{allIps[0]};
73+
}
74+
return allIps;
75+
};
76+
77+
private static boolean isFirstIpDnsEnabled() {
78+
String name = "GX_USE_FIRST_IP_DNS";
79+
String gxDns = System.getProperty(name);
80+
if (gxDns == null || gxDns.trim().isEmpty()) {
81+
gxDns = System.getenv(name);
82+
}
83+
return gxDns != null && gxDns.trim().equalsIgnoreCase("true");
84+
}
85+
6786
public HttpClientJavaLib() {
6887
getPoolInstance();
6988
ConnectionKeepAliveStrategy myStrategy = generateKeepAliveStrategy();
70-
httpClientBuilder = HttpClients.custom().setConnectionManager(connManager).setConnectionManagerShared(true).setKeepAliveStrategy(myStrategy);
71-
cookies = new BasicCookieStore();
89+
HttpClientBuilder builder = HttpClients.custom()
90+
.setConnectionManager(connManager)
91+
.setConnectionManagerShared(true)
92+
.setKeepAliveStrategy(myStrategy);
93+
if (isFirstIpDnsEnabled()) {
94+
builder.setDnsResolver(FIRST_IP_DNS_RESOLVER);
95+
}
96+
httpClientBuilder = builder;
97+
cookies = new BasicCookieStore();
7298
streamsToClose = new Vector<>();
7399
}
74100

@@ -78,7 +104,11 @@ private static void getPoolInstance() {
78104
RegistryBuilder.<ConnectionSocketFactory>create()
79105
.register("http", PlainConnectionSocketFactory.INSTANCE).register("https",getSSLSecureInstance())
80106
.build();
81-
connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
107+
if (isFirstIpDnsEnabled()) {
108+
connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry, FIRST_IP_DNS_RESOLVER);
109+
} else {
110+
connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
111+
}
82112
connManager.setMaxTotal((int) CommonUtil.val(clientCfg.getProperty("Client", "HTTPCLIENT_MAX_SIZE", "1000")));
83113
connManager.setDefaultMaxPerRoute((int) CommonUtil.val(clientCfg.getProperty("Client", "HTTPCLIENT_MAX_PER_ROUTE", "1000")));
84114

@@ -620,7 +650,7 @@ public void execute(String method, String url) {
620650
resetStateAdapted();
621651
}
622652
}
623-
653+
624654
private synchronized void displayHTTPConnections(){
625655
Iterator<HttpRoute> iterator = storedRoutes.iterator();
626656
while (iterator.hasNext()) {

0 commit comments

Comments
 (0)