From abc4a7c6d66f7f4cf0c87589f5df7521abf59e27 Mon Sep 17 00:00:00 2001 From: srishti Date: Mon, 28 Jul 2025 11:25:47 +0200 Subject: [PATCH 1/3] EA-reindex fix - add constructor for connpool and request configs --- pom.xml | 2 +- .../entity/client/BaseEntityApiClient.java | 22 ++++++++- .../entity/client/EntityApiClient.java | 35 +++++++++++++- .../client/connection/BaseApiConnection.java | 46 +++++++++++++++---- .../connection/EntityClientApiConnection.java | 7 +++ 5 files changed, 99 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 6bbf3a5..792eb15 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ 1.7.5 - 0.1.2 + 0.1.3-SNAPSHOT 2.18.3 5.7.2 3.17.0 diff --git a/src/main/java/eu/europeana/entity/client/BaseEntityApiClient.java b/src/main/java/eu/europeana/entity/client/BaseEntityApiClient.java index 60bdd73..2b2d64e 100644 --- a/src/main/java/eu/europeana/entity/client/BaseEntityApiClient.java +++ b/src/main/java/eu/europeana/entity/client/BaseEntityApiClient.java @@ -5,6 +5,8 @@ import eu.europeana.entity.client.config.EntityClientConfiguration; import eu.europeana.entity.client.connection.EntityClientApiConnection; import eu.europeana.entity.client.exception.EntityClientException; +import org.apache.hc.client5.http.config.RequestConfig; +import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager; public class BaseEntityApiClient { @@ -20,12 +22,28 @@ protected BaseEntityApiClient(String entityApiUrl, String entityManagementUrl, A } if (entityManagementUrl == null) { throw new EntityClientException(" Entity Management Api endpoint not provided !!!"); - } - this.entityClientApiConnection = new EntityClientApiConnection(entityApiUrl, entityManagementUrl, auth); } + protected BaseEntityApiClient(EntityClientConfiguration config, + PoolingAsyncClientConnectionManager connPool, + RequestConfig requestConfig) throws EntityClientException { + this(config.getEntityApiUrl(), config.getEntityManagementUrl(), AuthenticationBuilder.newAuthentication(config) + , connPool, requestConfig); + } + + protected BaseEntityApiClient(String entityApiUrl, String entityManagementUrl, AuthenticationHandler auth, + PoolingAsyncClientConnectionManager connPool, + RequestConfig requestConfig) throws EntityClientException { + if (entityApiUrl == null) { + throw new EntityClientException(" Entity Api endpoint not provided !!!"); + } + if (entityManagementUrl == null) { + throw new EntityClientException(" Entity Management Api endpoint not provided !!!"); + } + this.entityClientApiConnection = new EntityClientApiConnection(entityApiUrl, entityManagementUrl, auth, connPool, requestConfig); + } public AuthenticationHandler getAuthenticationHandler() { return entityClientApiConnection.getAuthenticationHandler(); diff --git a/src/main/java/eu/europeana/entity/client/EntityApiClient.java b/src/main/java/eu/europeana/entity/client/EntityApiClient.java index 057c072..5e3794b 100644 --- a/src/main/java/eu/europeana/entity/client/EntityApiClient.java +++ b/src/main/java/eu/europeana/entity/client/EntityApiClient.java @@ -6,10 +6,11 @@ import eu.europeana.entity.client.web.EntityApi; import eu.europeana.entitymanagement.definitions.model.Entity; import org.apache.commons.lang3.StringUtils; +import org.apache.hc.client5.http.config.RequestConfig; +import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager; import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; /** * Entity Api Client @@ -28,6 +29,38 @@ public EntityApiClient(String entityApiUri, String entityManagementApiUri, Authe } + /** + * Client to create custom Request Config (timeout, keep alive etc values) and + * connection manager to handle the connection per routes + * @param configuration configuration for cleint + * @param connPool connection manager for the client + * @param requestConfig Request configuration + * @throws EntityClientException + */ + public EntityApiClient(EntityClientConfiguration configuration, + PoolingAsyncClientConnectionManager connPool, + RequestConfig requestConfig) throws EntityClientException { + super(configuration, connPool, requestConfig); + } + + + /** + * Client to create custom Request Config (timeout, keep alive etc values) and + * connection manager to handle the connection per routes + * @param entityApiUri entity api url + * @param entityManagementApiUri entity management url + * @param connPool connection manager for the client + * @param requestConfig Request configuration + * @throws EntityClientException + */ + public EntityApiClient(String entityApiUri, String entityManagementApiUri, AuthenticationHandler auth, + PoolingAsyncClientConnectionManager connPool, + RequestConfig requestConfig) + throws EntityClientException { + super(entityApiUri, entityManagementApiUri, auth, connPool, requestConfig); + } + + @Override public List suggestEntity(String text, String language, String scope, String type, String rows, String algorithm) throws EntityClientException { diff --git a/src/main/java/eu/europeana/entity/client/connection/BaseApiConnection.java b/src/main/java/eu/europeana/entity/client/connection/BaseApiConnection.java index b195e9d..7f049b3 100644 --- a/src/main/java/eu/europeana/entity/client/connection/BaseApiConnection.java +++ b/src/main/java/eu/europeana/entity/client/connection/BaseApiConnection.java @@ -6,6 +6,8 @@ import eu.europeana.api.commons_sb3.auth.AuthenticationHandler; import eu.europeana.api.commons_sb3.http.AsyncHttpConnection; import eu.europeana.entity.client.utils.EntityApiConstants; +import org.apache.hc.client5.http.config.RequestConfig; +import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -19,8 +21,8 @@ public class BaseApiConnection extends EntityApiConstants { protected static final String ERROR_MESSAGE = "Entity API Client call failed - "; - protected final AsyncHttpConnection entityApiConnection = new AsyncHttpConnection(); - protected final AsyncHttpConnection entityManagementConnection = new AsyncHttpConnection(true); + protected final AsyncHttpConnection entityApiConnection; + protected final AsyncHttpConnection entityManagementConnection; protected final ObjectMapper mapper = new ObjectMapper(); @@ -36,18 +38,37 @@ public class BaseApiConnection extends EntityApiConstants { * @param auth Authentication Handler for the client */ public BaseApiConnection(String entityApiUri, String entityManagementApiUri, AuthenticationHandler auth) { - this.entityApiUri = entityApiUri; - this.entityManagementApiUri = entityManagementApiUri; - this.auth = auth; + initialize(entityApiUri, entityManagementApiUri, auth); + + // create basic CloseableHttpAsyncClient with default Connection pool + this.entityApiConnection = new AsyncHttpConnection(); + this.entityManagementConnection = new AsyncHttpConnection(true); + // start the async client + entityApiConnection.start(); + entityManagementConnection.start(); + } + + public BaseApiConnection(String entityApiUri, String entityManagementApiUri, AuthenticationHandler auth, PoolingAsyncClientConnectionManager connPool, RequestConfig requestConfig) { + initialize(entityApiUri, entityManagementApiUri, auth); + + // create CloseableHttpAsyncClient with custom connection pool and request config + this.entityApiConnection = new AsyncHttpConnection(connPool, requestConfig, false); + this.entityManagementConnection = new AsyncHttpConnection(connPool, requestConfig, true); + // start the async client + entityApiConnection.start(); + entityManagementConnection.start(); + } + + private void initialize(String entityApiUri, String entityManagementApiUri, AuthenticationHandler auth) { + this.entityApiUri = entityApiUri; + this.entityManagementApiUri = entityManagementApiUri; + this.auth = auth; // set object mapper - SimpleModule module = new SimpleModule(); + SimpleModule module = new SimpleModule(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.registerModule(module); mapper.findAndRegisterModules(); - // start the async client - entityApiConnection.start(); - entityManagementConnection.start(); } @@ -60,4 +81,11 @@ public void setAuthenticationHandler(AuthenticationHandler auth) { } + public AsyncHttpConnection getEntityApiConnection() { + return entityApiConnection; + } + + public AsyncHttpConnection getEntityManagementConnection() { + return entityManagementConnection; + } } diff --git a/src/main/java/eu/europeana/entity/client/connection/EntityClientApiConnection.java b/src/main/java/eu/europeana/entity/client/connection/EntityClientApiConnection.java index 9a905ab..ecd5890 100644 --- a/src/main/java/eu/europeana/entity/client/connection/EntityClientApiConnection.java +++ b/src/main/java/eu/europeana/entity/client/connection/EntityClientApiConnection.java @@ -7,6 +7,8 @@ import eu.europeana.entitymanagement.definitions.model.Entity; import org.apache.commons.lang3.StringUtils; import org.apache.hc.client5.http.async.methods.SimpleHttpResponse; +import org.apache.hc.client5.http.config.RequestConfig; +import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager; import org.apache.hc.core5.http.ContentType; import org.apache.hc.core5.http.HttpHeaders; import org.apache.hc.core5.http.HttpStatus; @@ -29,6 +31,11 @@ public EntityClientApiConnection(String entityApiUri, String entityManagementApi super(entityApiUri, entityManagementApiUri, auth); } + public EntityClientApiConnection(String entityApiUri, String entityManagementApiUri, AuthenticationHandler auth, + PoolingAsyncClientConnectionManager connPool, RequestConfig requestConfig) { + super(entityApiUri, entityManagementApiUri, auth, connPool, requestConfig); + } + /** * Retrieve suggestion (list of entity ids) for the text provided * @param text text for entity suggest From 6fd3f6ce6fcf5940d3318faf62769c11a10d7f7d Mon Sep 17 00:00:00 2001 From: srishti Date: Mon, 28 Jul 2025 11:50:29 +0200 Subject: [PATCH 2/3] EA-reindex fix - add Reactor config --- .../entity/client/BaseEntityApiClient.java | 11 +++----- .../entity/client/EntityApiClient.java | 25 +++++-------------- .../client/connection/BaseApiConnection.java | 12 ++++++--- .../connection/EntityClientApiConnection.java | 7 ++++-- 4 files changed, 22 insertions(+), 33 deletions(-) diff --git a/src/main/java/eu/europeana/entity/client/BaseEntityApiClient.java b/src/main/java/eu/europeana/entity/client/BaseEntityApiClient.java index 2b2d64e..f196abf 100644 --- a/src/main/java/eu/europeana/entity/client/BaseEntityApiClient.java +++ b/src/main/java/eu/europeana/entity/client/BaseEntityApiClient.java @@ -7,6 +7,7 @@ import eu.europeana.entity.client.exception.EntityClientException; import org.apache.hc.client5.http.config.RequestConfig; import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager; +import org.apache.hc.core5.reactor.IOReactorConfig; public class BaseEntityApiClient { @@ -26,15 +27,9 @@ protected BaseEntityApiClient(String entityApiUrl, String entityManagementUrl, A this.entityClientApiConnection = new EntityClientApiConnection(entityApiUrl, entityManagementUrl, auth); } - protected BaseEntityApiClient(EntityClientConfiguration config, - PoolingAsyncClientConnectionManager connPool, - RequestConfig requestConfig) throws EntityClientException { - this(config.getEntityApiUrl(), config.getEntityManagementUrl(), AuthenticationBuilder.newAuthentication(config) - , connPool, requestConfig); - } - protected BaseEntityApiClient(String entityApiUrl, String entityManagementUrl, AuthenticationHandler auth, PoolingAsyncClientConnectionManager connPool, + IOReactorConfig reactorConfig, RequestConfig requestConfig) throws EntityClientException { if (entityApiUrl == null) { throw new EntityClientException(" Entity Api endpoint not provided !!!"); @@ -42,7 +37,7 @@ protected BaseEntityApiClient(String entityApiUrl, String entityManagementUrl, A if (entityManagementUrl == null) { throw new EntityClientException(" Entity Management Api endpoint not provided !!!"); } - this.entityClientApiConnection = new EntityClientApiConnection(entityApiUrl, entityManagementUrl, auth, connPool, requestConfig); + this.entityClientApiConnection = new EntityClientApiConnection(entityApiUrl, entityManagementUrl, auth, connPool, reactorConfig, requestConfig); } public AuthenticationHandler getAuthenticationHandler() { diff --git a/src/main/java/eu/europeana/entity/client/EntityApiClient.java b/src/main/java/eu/europeana/entity/client/EntityApiClient.java index 5e3794b..904d505 100644 --- a/src/main/java/eu/europeana/entity/client/EntityApiClient.java +++ b/src/main/java/eu/europeana/entity/client/EntityApiClient.java @@ -8,6 +8,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.hc.client5.http.config.RequestConfig; import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager; +import org.apache.hc.core5.reactor.IOReactorConfig; import java.util.ArrayList; import java.util.List; @@ -28,36 +29,22 @@ public EntityApiClient(String entityApiUri, String entityManagementApiUri, Authe super(entityApiUri, entityManagementApiUri, auth); } - - /** - * Client to create custom Request Config (timeout, keep alive etc values) and - * connection manager to handle the connection per routes - * @param configuration configuration for cleint - * @param connPool connection manager for the client - * @param requestConfig Request configuration - * @throws EntityClientException - */ - public EntityApiClient(EntityClientConfiguration configuration, - PoolingAsyncClientConnectionManager connPool, - RequestConfig requestConfig) throws EntityClientException { - super(configuration, connPool, requestConfig); - } - - /** - * Client to create custom Request Config (timeout, keep alive etc values) and - * connection manager to handle the connection per routes + * Client to create custom Request Config (timeout, keep alive etc values) and IOReactorConfig for socket timeouts etc + * connection manager to handle the connection * @param entityApiUri entity api url * @param entityManagementApiUri entity management url * @param connPool connection manager for the client + * @param reactorConfig Custom IO Reactor config for the client * @param requestConfig Request configuration * @throws EntityClientException */ public EntityApiClient(String entityApiUri, String entityManagementApiUri, AuthenticationHandler auth, PoolingAsyncClientConnectionManager connPool, + IOReactorConfig reactorConfig, RequestConfig requestConfig) throws EntityClientException { - super(entityApiUri, entityManagementApiUri, auth, connPool, requestConfig); + super(entityApiUri, entityManagementApiUri, auth, connPool, reactorConfig, requestConfig); } diff --git a/src/main/java/eu/europeana/entity/client/connection/BaseApiConnection.java b/src/main/java/eu/europeana/entity/client/connection/BaseApiConnection.java index 7f049b3..9326c49 100644 --- a/src/main/java/eu/europeana/entity/client/connection/BaseApiConnection.java +++ b/src/main/java/eu/europeana/entity/client/connection/BaseApiConnection.java @@ -8,6 +8,7 @@ import eu.europeana.entity.client.utils.EntityApiConstants; import org.apache.hc.client5.http.config.RequestConfig; import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager; +import org.apache.hc.core5.reactor.IOReactorConfig; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -48,12 +49,15 @@ public BaseApiConnection(String entityApiUri, String entityManagementApiUri, Aut entityManagementConnection.start(); } - public BaseApiConnection(String entityApiUri, String entityManagementApiUri, AuthenticationHandler auth, PoolingAsyncClientConnectionManager connPool, RequestConfig requestConfig) { + public BaseApiConnection(String entityApiUri, String entityManagementApiUri, AuthenticationHandler auth, + PoolingAsyncClientConnectionManager connPool, + IOReactorConfig reactorConfig, + RequestConfig requestConfig) { initialize(entityApiUri, entityManagementApiUri, auth); - // create CloseableHttpAsyncClient with custom connection pool and request config - this.entityApiConnection = new AsyncHttpConnection(connPool, requestConfig, false); - this.entityManagementConnection = new AsyncHttpConnection(connPool, requestConfig, true); + // create CloseableHttpAsyncClient with custom connection pool , reactor config, and request config + this.entityApiConnection = new AsyncHttpConnection(connPool, requestConfig, reactorConfig, false); + this.entityManagementConnection = new AsyncHttpConnection(connPool, requestConfig, reactorConfig, true); // start the async client entityApiConnection.start(); entityManagementConnection.start(); diff --git a/src/main/java/eu/europeana/entity/client/connection/EntityClientApiConnection.java b/src/main/java/eu/europeana/entity/client/connection/EntityClientApiConnection.java index ecd5890..5e5125c 100644 --- a/src/main/java/eu/europeana/entity/client/connection/EntityClientApiConnection.java +++ b/src/main/java/eu/europeana/entity/client/connection/EntityClientApiConnection.java @@ -13,6 +13,7 @@ import org.apache.hc.core5.http.HttpHeaders; import org.apache.hc.core5.http.HttpStatus; import org.apache.hc.core5.http.ProtocolException; +import org.apache.hc.core5.reactor.IOReactorConfig; import java.io.IOException; @@ -32,8 +33,10 @@ public EntityClientApiConnection(String entityApiUri, String entityManagementApi } public EntityClientApiConnection(String entityApiUri, String entityManagementApiUri, AuthenticationHandler auth, - PoolingAsyncClientConnectionManager connPool, RequestConfig requestConfig) { - super(entityApiUri, entityManagementApiUri, auth, connPool, requestConfig); + PoolingAsyncClientConnectionManager connPool, + IOReactorConfig reactorConfig, + RequestConfig requestConfig) { + super(entityApiUri, entityManagementApiUri, auth, connPool, reactorConfig, requestConfig); } /** From 814b2915916c90508713ad81c2c9d78a5a9dfbcf Mon Sep 17 00:00:00 2001 From: srishti Date: Mon, 28 Jul 2025 11:58:33 +0200 Subject: [PATCH 3/3] EA-reindex fix - sonar --- src/main/java/eu/europeana/entity/client/EntityApiClient.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/eu/europeana/entity/client/EntityApiClient.java b/src/main/java/eu/europeana/entity/client/EntityApiClient.java index 904d505..ecf6e7e 100644 --- a/src/main/java/eu/europeana/entity/client/EntityApiClient.java +++ b/src/main/java/eu/europeana/entity/client/EntityApiClient.java @@ -47,7 +47,6 @@ public EntityApiClient(String entityApiUri, String entityManagementApiUri, Authe super(entityApiUri, entityManagementApiUri, auth, connPool, reactorConfig, requestConfig); } - @Override public List suggestEntity(String text, String language, String scope, String type, String rows, String algorithm) throws EntityClientException {