Skip to content

Commit

Permalink
#1278 global http client
Browse files Browse the repository at this point in the history
  • Loading branch information
amihaiemil committed Nov 6, 2021
1 parent 753a9bc commit d9f810f
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 64 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.selfxdsd.core;

import java.net.http.HttpClient;
import java.time.Duration;

/**
* Global singleton {@link java.net.http.HttpClient} to be used for making
* HTTP Requests throughout the application, especially to the providers'
* APIs (Github, Gitlab, BitBucket etc).
*/
public final class GlobalHttpClient {

/**
* The HttpClient.
*/
private static HttpClient client;

/**
* Hidden ctor.
*/
private GlobalHttpClient() {}

/**
* Get the instance of the HttpClient.
* @param version HTTP Version 1.1 or 2.
* @return HttpClient.
*/
public static HttpClient instance(final HttpClient.Version version) {
if(client == null || !client.version().equals(version)) {
client = HttpClient
.newBuilder()
.version(version)
.followRedirects(HttpClient.Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(10))
.build();
}
return client;
}
}
109 changes: 45 additions & 64 deletions self-core-impl/src/main/java/com/selfxdsd/core/JsonResources.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,7 @@
import java.net.http.HttpHeaders;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.function.Supplier;

/**
Expand Down Expand Up @@ -269,10 +266,16 @@ public Resource get(
final URI uri,
final Supplier<Map<String, List<String>>> headers
) {
final ExecutorService exec = Executors.newSingleThreadExecutor();
HttpClient client = this.newHttpClient(exec);
try {
final HttpResponse<String> response = client.send(
final HttpClient.Version version;
if(this.useOldHttpProtocol) {
version = HttpClient.Version.HTTP_1_1;
} else {
version = HttpClient.Version.HTTP_2;
}
final HttpResponse<String> response = GlobalHttpClient.instance(
version
).send(
this.request(
uri,
"GET",
Expand All @@ -291,10 +294,6 @@ public Resource get(
"Couldn't GET [" + uri.toString() +"]",
ex
);
} finally {
exec.shutdownNow();
client = null;
System.gc();
}
}

Expand All @@ -304,10 +303,16 @@ public Resource post(
final Supplier<Map<String, List<String>>> headers,
final JsonValue body
) {
final ExecutorService exec = Executors.newSingleThreadExecutor();
HttpClient client = this.newHttpClient(exec);
try {
final HttpResponse<String> response = client.send(
final HttpClient.Version version;
if(this.useOldHttpProtocol) {
version = HttpClient.Version.HTTP_1_1;
} else {
version = HttpClient.Version.HTTP_2;
}
final HttpResponse<String> response = GlobalHttpClient.instance(
version
).send(
this.request(
uri,
"POST",
Expand All @@ -329,10 +334,6 @@ public Resource post(
+ " to [" + uri.toString() +"]",
ex
);
} finally {
exec.shutdownNow();
client = null;
System.gc();
}
}

Expand All @@ -342,10 +343,16 @@ public Resource patch(
final Supplier<Map<String, List<String>>> headers,
final JsonValue body
) {
final ExecutorService exec = Executors.newSingleThreadExecutor();
HttpClient client = this.newHttpClient(exec);
try {
final HttpResponse<String> response = client.send(
final HttpClient.Version version;
if(this.useOldHttpProtocol) {
version = HttpClient.Version.HTTP_1_1;
} else {
version = HttpClient.Version.HTTP_2;
}
final HttpResponse<String> response = GlobalHttpClient.instance(
version
).send(
this.request(
uri,
"PATCH",
Expand All @@ -367,10 +374,6 @@ public Resource patch(
+ " at [" + uri.toString() +"]",
ex
);
} finally {
exec.shutdownNow();
client = null;
System.gc();
}
}

Expand All @@ -380,10 +383,16 @@ public Resource put(
final Supplier<Map<String, List<String>>> headers,
final JsonValue body
) {
final ExecutorService exec = Executors.newSingleThreadExecutor();
HttpClient client = this.newHttpClient(exec);
try {
final HttpResponse<String> response = client.send(
final HttpClient.Version version;
if(this.useOldHttpProtocol) {
version = HttpClient.Version.HTTP_1_1;
} else {
version = HttpClient.Version.HTTP_2;
}
final HttpResponse<String> response = GlobalHttpClient.instance(
version
).send(
this.request(
uri,
"PUT",
Expand All @@ -405,10 +414,6 @@ public Resource put(
+ " at [" + uri.toString() +"]",
ex
);
} finally {
exec.shutdownNow();
client = null;
System.gc();
}
}

Expand All @@ -418,10 +423,16 @@ public Resource delete(
final Supplier<Map<String, List<String>>> headers,
final JsonValue body
) {
final ExecutorService exec = Executors.newSingleThreadExecutor();
HttpClient client = this.newHttpClient(exec);
try {
final HttpResponse<String> response = client.send(
final HttpClient.Version version;
if(this.useOldHttpProtocol) {
version = HttpClient.Version.HTTP_1_1;
} else {
version = HttpClient.Version.HTTP_2;
}
final HttpResponse<String> response = GlobalHttpClient.instance(
version
).send(
this.request(
uri,
"DELETE",
Expand All @@ -443,10 +454,6 @@ public Resource delete(
+ " at [" + uri.toString() +"]",
ex
);
} finally {
exec.shutdownNow();
client = null;
System.gc();
}
}

Expand Down Expand Up @@ -495,32 +502,6 @@ private HttpRequest request(
return requestBuilder.build();
}

/**
* Creates a new http client.
* @param executor ExecutorService to use internally and close on end.
* @return HttpClient.
*/
private HttpClient newHttpClient(final ExecutorService executor) {
final HttpClient client;
if (this.useOldHttpProtocol) {
client = HttpClient
.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.followRedirects(HttpClient.Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(10))
.executor(executor)
.build();
} else {
client = HttpClient
.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(10))
.executor(executor)
.build();
}
return client;
}

/**
* Calling HttpHeaders.map() will return a Map<String, List<String>>,
* BUT it will not split the header's value by comma. We have to do
Expand Down

0 comments on commit d9f810f

Please sign in to comment.