Jersey update from 3.1.3 to 3.1.4 slows down our external service res… #5746
Signed-off-by: Jorge Bescos Gascon <jorge.bescos.gascon@oracle.com>
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/HttpUrlConnectorProvider.java b/core-client/src/main/java/org/glassfish/jersey/client/HttpUrlConnectorProvider.java
index 10dbe3d..66925cf 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/HttpUrlConnectorProvider.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/HttpUrlConnectorProvider.java
@@ -21,6 +21,9 @@
import java.net.Proxy;
import java.net.URL;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
import javax.ws.rs.client.Client;
@@ -295,9 +298,26 @@
private static class DefaultConnectionFactory implements ConnectionFactory {
+ private final ConcurrentHashMap<URL, Lock> locks = new ConcurrentHashMap<>();
+
@Override
public HttpURLConnection getConnection(final URL url) throws IOException {
- return (HttpURLConnection) url.openConnection();
+ return connect(url, null);
+ }
+
+ @Override
+ public HttpURLConnection getConnection(URL url, Proxy proxy) throws IOException {
+ return connect(url, proxy);
+ }
+
+ private HttpURLConnection connect(URL url, Proxy proxy) throws IOException {
+ Lock lock = locks.computeIfAbsent(url, u -> new ReentrantLock());
+ lock.lock();
+ try {
+ return (proxy == null) ? (HttpURLConnection) url.openConnection() : (HttpURLConnection) url.openConnection(proxy);
+ } finally {
+ lock.unlock();
+ }
}
}