Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
<!-- EM version with aggregator changes for testing -->
<version.entityManagementApi>1.7.5</version.entityManagementApi>

<version-api-commons-sb3>0.1.2</version-api-commons-sb3>
<version-api-commons-sb3>0.1.3-SNAPSHOT</version-api-commons-sb3>
<jackson.version>2.18.3</jackson.version>
<junit.jupiter.version>5.7.2</junit.jupiter.version>
<commons.lang.version>3.17.0</commons.lang.version>
Expand Down
17 changes: 15 additions & 2 deletions src/main/java/eu/europeana/entity/client/BaseEntityApiClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
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;
import org.apache.hc.core5.reactor.IOReactorConfig;

public class BaseEntityApiClient {

Expand All @@ -20,12 +23,22 @@ 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(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 !!!");
}
if (entityManagementUrl == null) {
throw new EntityClientException(" Entity Management Api endpoint not provided !!!");
}
this.entityClientApiConnection = new EntityClientApiConnection(entityApiUrl, entityManagementUrl, auth, connPool, reactorConfig, requestConfig);
}

public AuthenticationHandler getAuthenticationHandler() {
return entityClientApiConnection.getAuthenticationHandler();
Expand Down
21 changes: 20 additions & 1 deletion src/main/java/eu/europeana/entity/client/EntityApiClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
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 org.apache.hc.core5.reactor.IOReactorConfig;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
* Entity Api Client
Expand All @@ -27,6 +29,23 @@ public EntityApiClient(String entityApiUri, String entityManagementApiUri, Authe
super(entityApiUri, entityManagementApiUri, auth);
}

/**
* 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, reactorConfig, requestConfig);
}

@Override
public List<Entity> suggestEntity(String text, String language, String scope, String type, String rows, String algorithm)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
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.hc.core5.reactor.IOReactorConfig;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

Expand All @@ -19,8 +22,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();

Expand All @@ -36,18 +39,40 @@ 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,
IOReactorConfig reactorConfig,
RequestConfig requestConfig) {
initialize(entityApiUri, entityManagementApiUri, auth);

// 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();
}

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();
}


Expand All @@ -60,4 +85,11 @@ public void setAuthenticationHandler(AuthenticationHandler auth) {
}


public AsyncHttpConnection getEntityApiConnection() {
return entityApiConnection;
}

public AsyncHttpConnection getEntityManagementConnection() {
return entityManagementConnection;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@
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;
import org.apache.hc.core5.http.ProtocolException;
import org.apache.hc.core5.reactor.IOReactorConfig;


import java.io.IOException;
Expand All @@ -29,6 +32,13 @@ public EntityClientApiConnection(String entityApiUri, String entityManagementApi
super(entityApiUri, entityManagementApiUri, auth);
}

public EntityClientApiConnection(String entityApiUri, String entityManagementApiUri, AuthenticationHandler auth,
PoolingAsyncClientConnectionManager connPool,
IOReactorConfig reactorConfig,
RequestConfig requestConfig) {
super(entityApiUri, entityManagementApiUri, auth, connPool, reactorConfig, requestConfig);
}

/**
* Retrieve suggestion (list of entity ids) for the text provided
* @param text text for entity suggest
Expand Down
Loading