From 4e3ff6f4be87a75524affeca50e1a1f5f03d9c72 Mon Sep 17 00:00:00 2001 From: Gary Clayburg Date: Fri, 14 Feb 2020 12:46:40 -0700 Subject: [PATCH] performance improvement for consecutive client requests: create, replace, search This fix allows the client to reuse the underlying TCP stream and avoid creating a new TCP connection for each request. The effect of this is especially noticeable when the connection to the SCIM server is using TLS or has significant latency. --- .../scim2/client/requests/CreateRequestBuilder.java | 5 +++++ .../scim2/client/requests/ReplaceRequestBuilder.java | 5 +++++ .../scim2/client/requests/SearchRequestBuilder.java | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/scim2-sdk-client/src/main/java/com/unboundid/scim2/client/requests/CreateRequestBuilder.java b/scim2-sdk-client/src/main/java/com/unboundid/scim2/client/requests/CreateRequestBuilder.java index 9b57f72b..3ed43a20 100644 --- a/scim2-sdk-client/src/main/java/com/unboundid/scim2/client/requests/CreateRequestBuilder.java +++ b/scim2-sdk-client/src/main/java/com/unboundid/scim2/client/requests/CreateRequestBuilder.java @@ -75,6 +75,11 @@ public C invoke(final Class cls) throws ScimException if(response.getStatusInfo().getFamily() == Response.Status.Family.SUCCESSFUL) { + response.bufferEntity(); + /* fully read and close the input stream, allowing the buffered result + to be used while still keeping the TCP connection open for subsequent + requests + */ return response.readEntity(cls); } else diff --git a/scim2-sdk-client/src/main/java/com/unboundid/scim2/client/requests/ReplaceRequestBuilder.java b/scim2-sdk-client/src/main/java/com/unboundid/scim2/client/requests/ReplaceRequestBuilder.java index cfb4af36..9e5bef3d 100644 --- a/scim2-sdk-client/src/main/java/com/unboundid/scim2/client/requests/ReplaceRequestBuilder.java +++ b/scim2-sdk-client/src/main/java/com/unboundid/scim2/client/requests/ReplaceRequestBuilder.java @@ -104,6 +104,11 @@ public C invoke(final Class cls) throws ScimException if(response.getStatusInfo().getFamily() == Response.Status.Family.SUCCESSFUL) { + response.bufferEntity(); + /* fully read and close the input stream, allowing the buffered result + to be used while still keeping the TCP connection open for subsequent + requests + */ return response.readEntity(cls); } else diff --git a/scim2-sdk-client/src/main/java/com/unboundid/scim2/client/requests/SearchRequestBuilder.java b/scim2-sdk-client/src/main/java/com/unboundid/scim2/client/requests/SearchRequestBuilder.java index f19bdb74..1dc7b8ad 100644 --- a/scim2-sdk-client/src/main/java/com/unboundid/scim2/client/requests/SearchRequestBuilder.java +++ b/scim2-sdk-client/src/main/java/com/unboundid/scim2/client/requests/SearchRequestBuilder.java @@ -264,6 +264,11 @@ private void invoke( if (response.getStatusInfo().getFamily() == Response.Status.Family.SUCCESSFUL) { + response.bufferEntity(); + /* fully read and close the input stream, allowing the buffered result + to be used while still keeping the TCP connection open for subsequent + requests + */ InputStream inputStream = response.readEntity(InputStream.class); try {