From 1055dacc84fdd2319f08f1513d3241bc29cfdcd0 Mon Sep 17 00:00:00 2001 From: ndr_brt Date: Tue, 19 Mar 2024 14:45:29 +0100 Subject: [PATCH] fix: @Setting annotations placement (#4024) --- .../edc/boot/BootServicesExtension.java | 4 + .../DefaultServiceExtensionContext.java | 3 +- .../core/CoreDefaultServicesExtension.java | 62 ++++++++- .../core/base/OkHttpClientConfiguration.java | 88 +++++++++++++ .../core/base/OkHttpClientFactory.java | 45 ++----- .../core/base/RetryPolicyConfiguration.java | 118 ++++++++++++++++++ .../core/base/RetryPolicyFactory.java | 68 +++------- .../core/base/OkHttpClientFactoryTest.java | 35 ++---- .../core/base/RetryPolicyFactoryTest.java | 37 ++---- .../DataPlaneDefaultIamServicesExtension.java | 9 +- .../edc/web/jersey/JerseyConfiguration.java | 67 +++++----- .../edc/web/jersey/JerseyExtension.java | 17 ++- .../web/jersey/JerseyConfigurationTest.java | 64 ---------- .../edc/web/jersey/JerseyRestServiceTest.java | 2 +- .../edc/web/jetty/JettyConfiguration.java | 3 - .../edc/iam/did/web/ConfigurationKeys.java | 30 ----- .../edc/iam/did/web/WebDidExtension.java | 7 +- .../org/eclipse/edc/sql/SqlCoreExtension.java | 7 +- .../sql/SqlQueryExecutorConfiguration.java | 6 +- .../CommonsConnectionPoolConfigKeys.java | 80 ------------ ...CommonsConnectionPoolServiceExtension.java | 57 +++++++-- ...onsConnectionPoolServiceExtensionTest.java | 32 ++--- .../AtomikosTransactionExtension.java | 47 ++++++- .../atomikos/DataSourceConfigurationKeys.java | 67 ---------- .../DataSourceConfigurationParser.java | 30 ++--- .../TransactionManagerConfigurationKeys.java | 19 --- .../AtomikosTransactionExtensionTest.java | 2 +- .../DataSourceConfigurationParserTest.java | 28 ++--- .../atomikos/JdbcTestFixtures.java | 10 +- .../edc/vault/filesystem/FsConfiguration.java | 36 ------ .../vault/filesystem/FsVaultExtension.java | 10 +- .../JskPrivateKeyResolverExtension.java | 9 +- .../hashicorp/HashicorpVaultClientConfig.java | 20 +-- .../hashicorp/HashicorpVaultExtension.java | 14 ++- .../HashicorpVaultHealthExtension.java | 6 + .../edc/vault/hashicorp/model/Constants.java | 41 ------ .../HashicorpVaultExtensionTest.java | 4 +- .../HashicorpVaultIntegrationTest.java | 4 +- .../http/HttpProvisionerExtension.java | 17 +++ .../provision/http/config/ConfigParser.java | 24 +--- .../sql/assetindex/ConfigurationKeys.java | 31 ----- .../SqlAssetIndexServiceExtension.java | 9 +- .../SqlAssetIndexServiceExtensionTest.java | 2 +- .../TransferDataPlaneCoreExtension.java | 10 +- ...sferDataPlaneDefaultServicesExtension.java | 10 +- .../TransferDataPlaneCoreExtensionTest.java | 4 +- .../spi/system/ServiceExtensionContext.java | 4 - .../spi/TransferDataPlaneConfig.java | 32 ----- .../participant/BaseEndToEndParticipant.java | 2 +- 49 files changed, 626 insertions(+), 707 deletions(-) create mode 100644 core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/OkHttpClientConfiguration.java create mode 100644 core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/RetryPolicyConfiguration.java delete mode 100644 extensions/common/http/jersey-core/src/test/java/org/eclipse/edc/web/jersey/JerseyConfigurationTest.java delete mode 100644 extensions/common/iam/decentralized-identity/identity-did-web/src/main/java/org/eclipse/edc/iam/did/web/ConfigurationKeys.java delete mode 100644 extensions/common/sql/sql-pool/sql-pool-apache-commons/src/main/java/org/eclipse/edc/sql/pool/commons/CommonsConnectionPoolConfigKeys.java delete mode 100644 extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/DataSourceConfigurationKeys.java delete mode 100644 extensions/common/vault/vault-filesystem/src/main/java/org/eclipse/edc/vault/filesystem/FsConfiguration.java delete mode 100644 extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/model/Constants.java delete mode 100644 extensions/control-plane/store/sql/asset-index-sql/src/main/java/org/eclipse/edc/connector/store/sql/assetindex/ConfigurationKeys.java delete mode 100644 spi/data-plane/data-plane-spi/src/main/java/org/eclipse/edc/connector/dataplane/spi/TransferDataPlaneConfig.java diff --git a/core/common/boot/src/main/java/org/eclipse/edc/boot/BootServicesExtension.java b/core/common/boot/src/main/java/org/eclipse/edc/boot/BootServicesExtension.java index 11839e75ab7..6ac5415a0e3 100644 --- a/core/common/boot/src/main/java/org/eclipse/edc/boot/BootServicesExtension.java +++ b/core/common/boot/src/main/java/org/eclipse/edc/boot/BootServicesExtension.java @@ -18,6 +18,7 @@ import org.eclipse.edc.runtime.metamodel.annotation.BaseExtension; import org.eclipse.edc.runtime.metamodel.annotation.Extension; import org.eclipse.edc.runtime.metamodel.annotation.Provider; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.system.ServiceExtension; import org.eclipse.edc.spi.telemetry.Telemetry; import org.eclipse.edc.spi.types.TypeManager; @@ -31,6 +32,9 @@ public class BootServicesExtension implements ServiceExtension { public static final String NAME = "Boot Services"; + @Setting(value = "Configures the participant id this runtime is operating on behalf of") + public static final String PARTICIPANT_ID = "edc.participant.id"; + @Override public String name() { return NAME; diff --git a/core/common/boot/src/main/java/org/eclipse/edc/boot/system/DefaultServiceExtensionContext.java b/core/common/boot/src/main/java/org/eclipse/edc/boot/system/DefaultServiceExtensionContext.java index 2b6ad69702a..5fcfaac4ba7 100644 --- a/core/common/boot/src/main/java/org/eclipse/edc/boot/system/DefaultServiceExtensionContext.java +++ b/core/common/boot/src/main/java/org/eclipse/edc/boot/system/DefaultServiceExtensionContext.java @@ -15,6 +15,7 @@ package org.eclipse.edc.boot.system; +import org.eclipse.edc.boot.BootServicesExtension; import org.eclipse.edc.spi.EdcException; import org.eclipse.edc.spi.monitor.Monitor; import org.eclipse.edc.spi.system.ConfigurationExtension; @@ -107,7 +108,7 @@ public void initialize() { }); config = loadConfig(); connectorId = getSetting("edc.connector.name", "edc-" + UUID.randomUUID()); - participantId = getSetting(PARTICIPANT_ID, ANONYMOUS_PARTICIPANT); + participantId = getSetting(BootServicesExtension.PARTICIPANT_ID, ANONYMOUS_PARTICIPANT); if (ANONYMOUS_PARTICIPANT.equals(participantId)) { getMonitor().warning("The runtime is configured as an anonymous participant. DO NOT DO THIS IN PRODUCTION."); } diff --git a/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/CoreDefaultServicesExtension.java b/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/CoreDefaultServicesExtension.java index 5917d73ba45..5c2b1ef67fb 100644 --- a/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/CoreDefaultServicesExtension.java +++ b/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/CoreDefaultServicesExtension.java @@ -18,7 +18,9 @@ import okhttp3.EventListener; import okhttp3.OkHttpClient; import org.eclipse.edc.connector.core.base.EdcHttpClientImpl; +import org.eclipse.edc.connector.core.base.OkHttpClientConfiguration; import org.eclipse.edc.connector.core.base.OkHttpClientFactory; +import org.eclipse.edc.connector.core.base.RetryPolicyConfiguration; import org.eclipse.edc.connector.core.base.RetryPolicyFactory; import org.eclipse.edc.connector.core.base.agent.NoOpParticipantIdMapper; import org.eclipse.edc.connector.core.event.EventExecutorServiceContainer; @@ -26,6 +28,7 @@ import org.eclipse.edc.runtime.metamodel.annotation.Extension; import org.eclipse.edc.runtime.metamodel.annotation.Inject; import org.eclipse.edc.runtime.metamodel.annotation.Provider; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.agent.ParticipantIdMapper; import org.eclipse.edc.spi.http.EdcHttpClient; import org.eclipse.edc.spi.security.Vault; @@ -39,6 +42,8 @@ import java.util.concurrent.Executors; +import static java.lang.Integer.parseInt; + /** * Provides default service implementations for fallback * Omitted {@link Extension} since this module contains the extension {@link CoreServicesExtension} @@ -47,6 +52,40 @@ public class CoreDefaultServicesExtension implements ServiceExtension { public static final String NAME = "Core Default Services"; + private static final String RETRY_POLICY_DEFAULT_RETRIES = "5"; + private static final String RETRY_POLICY_DEFAULT_MIN_BACKOFF = "500"; + private static final String RETRY_POLICY_DEFAULT_MAX_BACKOFF = "10000"; + private static final String RETRY_POLICY_DEFAULT_LOG = "false"; + @Setting(value = "RetryPolicy: Maximum retries before a failure is propagated", defaultValue = RETRY_POLICY_DEFAULT_RETRIES) + private static final String RETRY_POLICY_MAX_RETRIES = "edc.core.retry.retries.max"; + @Setting(value = "RetryPolicy: Minimum number of milliseconds for exponential backoff", defaultValue = RETRY_POLICY_DEFAULT_MIN_BACKOFF) + private static final String RETRY_POLICY_BACKOFF_MIN_MILLIS = "edc.core.retry.backoff.min"; + @Setting(value = "RetryPolicy: Maximum number of milliseconds for exponential backoff.", defaultValue = RETRY_POLICY_DEFAULT_MAX_BACKOFF) + private static final String RETRY_POLICY_BACKOFF_MAX_MILLIS = "edc.core.retry.backoff.max"; + @Setting(value = "RetryPolicy: Log onRetry events", defaultValue = RETRY_POLICY_DEFAULT_LOG) + static final String RETRY_POLICY_LOG_ON_RETRY = "edc.core.retry.log.on.retry"; + @Setting(value = "RetryPolicy: Log onRetryScheduled events", defaultValue = RETRY_POLICY_DEFAULT_LOG) + static final String RETRY_POLICY_LOG_ON_RETRY_SCHEDULED = "edc.core.retry.log.on.retry.scheduled"; + @Setting(value = "RetryPolicy: Log onRetriesExceeded events", defaultValue = RETRY_POLICY_DEFAULT_LOG) + static final String RETRY_POLICY_LOG_ON_RETRIES_EXCEEDED = "edc.core.retry.log.on.retries.exceeded"; + @Setting(value = "RetryPolicy: Log onFailedAttempt events", defaultValue = RETRY_POLICY_DEFAULT_LOG) + static final String RETRY_POLICY_LOG_ON_FAILED_ATTEMPT = "edc.core.retry.log.on.failed.attempt"; + @Setting(value = "RetryPolicy: Log onAbort events", defaultValue = RETRY_POLICY_DEFAULT_LOG) + static final String RETRY_POLICY_LOG_ON_ABORT = "edc.core.retry.log.on.abort"; + + private static final String OK_HTTP_CLIENT_DEFAULT_TIMEOUT = "30"; + private static final String OK_HTTP_CLIENT_DEFAULT_HTTPS_ENFORCE = "false"; + @Setting(value = "OkHttpClient: If true, enable HTTPS call enforcement.", defaultValue = OK_HTTP_CLIENT_DEFAULT_HTTPS_ENFORCE, type = "boolean") + public static final String OK_HTTP_CLIENT_HTTPS_ENFORCE = "edc.http.client.https.enforce"; + @Setting(value = "OkHttpClient: connect timeout, in seconds", defaultValue = OK_HTTP_CLIENT_DEFAULT_TIMEOUT, type = "int") + public static final String OK_HTTP_CLIENT_TIMEOUT_CONNECT = "edc.http.client.timeout.connect"; + @Setting(value = "OkHttpClient: read timeout, in seconds", defaultValue = OK_HTTP_CLIENT_DEFAULT_TIMEOUT, type = "int") + public static final String OK_HTTP_CLIENT_TIMEOUT_READ = "edc.http.client.timeout.read"; + @Setting(value = "OkHttpClient: send buffer size, in bytes", type = "int", min = 1) + public static final String OK_HTTP_CLIENT_SEND_BUFFER_SIZE = "edc.http.client.send.buffer.size"; + @Setting(value = "OkHttpClient: receive buffer size, in bytes", type = "int", min = 1) + public static final String OK_HTTP_CLIENT_RECEIVE_BUFFER_SIZE = "edc.http.client.receive.buffer.size"; + /** * An optional OkHttp {@link EventListener} that can be used to instrument OkHttp client for collecting metrics. */ @@ -97,12 +136,31 @@ public EdcHttpClient edcHttpClient(ServiceExtensionContext context) { @Provider public OkHttpClient okHttpClient(ServiceExtensionContext context) { - return OkHttpClientFactory.create(context, okHttpEventListener); + var configuration = OkHttpClientConfiguration.Builder.newInstance() + .enforceHttps(context.getSetting(OK_HTTP_CLIENT_HTTPS_ENFORCE, Boolean.parseBoolean(OK_HTTP_CLIENT_DEFAULT_HTTPS_ENFORCE))) + .connectTimeout(context.getSetting(OK_HTTP_CLIENT_TIMEOUT_CONNECT, parseInt(OK_HTTP_CLIENT_DEFAULT_TIMEOUT))) + .readTimeout(context.getSetting(OK_HTTP_CLIENT_TIMEOUT_READ, parseInt(OK_HTTP_CLIENT_DEFAULT_TIMEOUT))) + .sendBufferSize(context.getSetting(OK_HTTP_CLIENT_SEND_BUFFER_SIZE, 0)) + .receiveBufferSize(context.getSetting(OK_HTTP_CLIENT_RECEIVE_BUFFER_SIZE, 0)) + .build(); + + return OkHttpClientFactory.create(configuration, okHttpEventListener, context.getMonitor()); } @Provider public RetryPolicy retryPolicy(ServiceExtensionContext context) { - return RetryPolicyFactory.create(context); + var configuration = RetryPolicyConfiguration.Builder.newInstance() + .maxRetries(context.getSetting(RETRY_POLICY_MAX_RETRIES, parseInt(RETRY_POLICY_DEFAULT_RETRIES))) + .minBackoff(context.getSetting(RETRY_POLICY_BACKOFF_MIN_MILLIS, parseInt(RETRY_POLICY_DEFAULT_MIN_BACKOFF))) + .maxBackoff(context.getSetting(RETRY_POLICY_BACKOFF_MAX_MILLIS, parseInt(RETRY_POLICY_DEFAULT_MAX_BACKOFF))) + .logOnRetry(context.getSetting(RETRY_POLICY_LOG_ON_RETRY, false)) + .logOnRetryScheduled(context.getSetting(RETRY_POLICY_LOG_ON_RETRY_SCHEDULED, false)) + .logOnRetriesExceeded(context.getSetting(RETRY_POLICY_LOG_ON_RETRIES_EXCEEDED, false)) + .logOnFailedAttempt(context.getSetting(RETRY_POLICY_LOG_ON_FAILED_ATTEMPT, false)) + .logOnAbort(context.getSetting(RETRY_POLICY_LOG_ON_ABORT, false)) + .build(); + + return RetryPolicyFactory.create(configuration, context.getMonitor()); } @Provider(isDefault = true) diff --git a/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/OkHttpClientConfiguration.java b/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/OkHttpClientConfiguration.java new file mode 100644 index 00000000000..97025b59c7c --- /dev/null +++ b/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/OkHttpClientConfiguration.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * + */ + +package org.eclipse.edc.connector.core.base; + +public class OkHttpClientConfiguration { + + private boolean enforceHttps; + private int connectTimeout; + private int readTimeout; + private int sendBufferSize; + private int receiveBufferSize; + + private OkHttpClientConfiguration() { + } + + public boolean isEnforceHttps() { + return enforceHttps; + } + + public int getConnectTimeout() { + return connectTimeout; + } + + public int getReadTimeout() { + return readTimeout; + } + + public int getSendBufferSize() { + return sendBufferSize; + } + + public int getReceiveBufferSize() { + return receiveBufferSize; + } + + public static class Builder { + + private final OkHttpClientConfiguration instance = new OkHttpClientConfiguration(); + + public static Builder newInstance() { + return new Builder(); + } + + private Builder() { + } + + public Builder enforceHttps(boolean enforceHttps) { + instance.enforceHttps = enforceHttps; + return this; + } + + public Builder connectTimeout(int connectTimeout) { + instance.connectTimeout = connectTimeout; + return this; + } + + public Builder readTimeout(int readTimeout) { + instance.readTimeout = readTimeout; + return this; + } + + public Builder sendBufferSize(int sendBufferSize) { + instance.sendBufferSize = sendBufferSize; + return this; + } + + public Builder receiveBufferSize(int receiveBufferSize) { + instance.receiveBufferSize = receiveBufferSize; + return this; + } + + public OkHttpClientConfiguration build() { + return instance; + } + } +} diff --git a/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/OkHttpClientFactory.java b/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/OkHttpClientFactory.java index 09b44bc0ad0..eb9d0588018 100644 --- a/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/OkHttpClientFactory.java +++ b/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/OkHttpClientFactory.java @@ -18,9 +18,8 @@ import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Response; -import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.EdcException; -import org.eclipse.edc.spi.system.ServiceExtensionContext; +import org.eclipse.edc.spi.monitor.Monitor; import org.jetbrains.annotations.NotNull; import java.io.IOException; @@ -28,60 +27,36 @@ import java.net.Socket; import javax.net.SocketFactory; -import static java.lang.Integer.parseInt; import static java.lang.String.format; import static java.util.Optional.ofNullable; import static java.util.concurrent.TimeUnit.SECONDS; public class OkHttpClientFactory { - private static final String DEFAULT_TIMEOUT = "30"; - private static final String DEFAULT_HTTPS_ENFORCE = "false"; - - @Setting(value = "If true, enable HTTPS call enforcement.", defaultValue = DEFAULT_HTTPS_ENFORCE, type = "boolean") - public static final String EDC_HTTP_CLIENT_HTTPS_ENFORCE = "edc.http.client.https.enforce"; - - @Setting(value = "HTTP Client connect timeout, in seconds", defaultValue = DEFAULT_TIMEOUT, type = "int") - public static final String EDC_HTTP_CLIENT_TIMEOUT_CONNECT = "edc.http.client.timeout.connect"; - - @Setting(value = "HTTP Client read timeout, in seconds", defaultValue = DEFAULT_TIMEOUT, type = "int") - public static final String EDC_HTTP_CLIENT_TIMEOUT_READ = "edc.http.client.timeout.read"; - - @Setting(value = "HTTP Client send buffer size, in bytes", type = "int", min = 1) - public static final String EDC_HTTP_CLIENT_SEND_BUFFER_SIZE = "edc.http.client.send.buffer.size"; - - @Setting(value = "HTTP Client receive buffer size, in bytes", type = "int", min = 1) - public static final String EDC_HTTP_CLIENT_RECEIVE_BUFFER_SIZE = "edc.http.client.receive.buffer.size"; - /** * Create an OkHttpClient instance * - * @param context the service extension context + * @param configuration the configuration * @param okHttpEventListener used to instrument OkHttp client for collecting metrics, can be null + * @param monitor the monitor * @return the OkHttpClient */ @NotNull - public static OkHttpClient create(ServiceExtensionContext context, EventListener okHttpEventListener) { - var connectTimeout = context.getSetting(EDC_HTTP_CLIENT_TIMEOUT_CONNECT, parseInt(DEFAULT_TIMEOUT)); - var readTimeout = context.getSetting(EDC_HTTP_CLIENT_TIMEOUT_READ, parseInt(DEFAULT_TIMEOUT)); - var sendBufferSize = context.getSetting(EDC_HTTP_CLIENT_SEND_BUFFER_SIZE, 0); - var receiveBufferSize = context.getSetting(EDC_HTTP_CLIENT_RECEIVE_BUFFER_SIZE, 0); - + public static OkHttpClient create(OkHttpClientConfiguration configuration, EventListener okHttpEventListener, Monitor monitor) { var builder = new OkHttpClient.Builder() - .connectTimeout(connectTimeout, SECONDS) - .readTimeout(readTimeout, SECONDS); + .connectTimeout(configuration.getConnectTimeout(), SECONDS) + .readTimeout(configuration.getReadTimeout(), SECONDS); - if (sendBufferSize > 0 || receiveBufferSize > 0) { - builder.socketFactory(new CustomSocketFactory(sendBufferSize, receiveBufferSize)); + if (configuration.getSendBufferSize() > 0 || configuration.getReceiveBufferSize() > 0) { + builder.socketFactory(new CustomSocketFactory(configuration.getSendBufferSize(), configuration.getReceiveBufferSize())); } ofNullable(okHttpEventListener).ifPresent(builder::eventListener); - var enforceHttps = context.getSetting(EDC_HTTP_CLIENT_HTTPS_ENFORCE, Boolean.parseBoolean(DEFAULT_HTTPS_ENFORCE)); - if (enforceHttps) { + if (configuration.isEnforceHttps()) { builder.addInterceptor(new EnforceHttps()); } else { - context.getMonitor().info("HTTPS enforcement it not enabled, please enable it in a production environment"); + monitor.info("HTTPS enforcement it not enabled, please enable it in a production environment"); } return builder.build(); diff --git a/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/RetryPolicyConfiguration.java b/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/RetryPolicyConfiguration.java new file mode 100644 index 00000000000..daa255dde46 --- /dev/null +++ b/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/RetryPolicyConfiguration.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * + */ + +package org.eclipse.edc.connector.core.base; + +public class RetryPolicyConfiguration { + + private int maxRetries; + private int minBackoff = 1; + private int maxBackoff = Integer.MAX_VALUE; + private boolean logOnRetry; + private boolean logOnRetryScheduled; + private boolean logOnRetriesExceeded; + private boolean logOnFailedAttempt; + private boolean logOnAbort; + + private RetryPolicyConfiguration() { + } + + public int getMaxRetries() { + return maxRetries; + } + + public int getMinBackoff() { + return minBackoff; + } + + public int getMaxBackoff() { + return maxBackoff; + } + + public boolean isLogOnRetry() { + return logOnRetry; + } + + public boolean isLogOnRetryScheduled() { + return logOnRetryScheduled; + } + + public boolean isLogOnRetriesExceeded() { + return logOnRetriesExceeded; + } + + public boolean isLogOnFailedAttempt() { + return logOnFailedAttempt; + } + + public boolean isLogOnAbort() { + return logOnAbort; + } + + public static class Builder { + + private final RetryPolicyConfiguration instance = new RetryPolicyConfiguration(); + + public static Builder newInstance() { + return new Builder(); + } + + private Builder() { + } + + public Builder maxRetries(int maxRetries) { + instance.maxRetries = maxRetries; + return this; + } + + public Builder minBackoff(int minBackoff) { + instance.minBackoff = minBackoff; + return this; + } + + public Builder maxBackoff(int maxBackoff) { + instance.maxBackoff = maxBackoff; + return this; + } + + public Builder logOnRetry(boolean logOnRetry) { + instance.logOnRetry = logOnRetry; + return this; + } + + public Builder logOnRetryScheduled(boolean logOnRetryScheduled) { + instance.logOnRetryScheduled = logOnRetryScheduled; + return this; + } + + public Builder logOnRetriesExceeded(boolean logOnRetriesExceeded) { + instance.logOnRetriesExceeded = logOnRetriesExceeded; + return this; + } + + public Builder logOnFailedAttempt(boolean logOnFailedAttempt) { + instance.logOnFailedAttempt = logOnFailedAttempt; + return this; + } + + public Builder logOnAbort(boolean logOnAbort) { + instance.logOnAbort = logOnAbort; + return this; + } + + public RetryPolicyConfiguration build() { + return instance; + } + } +} diff --git a/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/RetryPolicyFactory.java b/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/RetryPolicyFactory.java index ebf2fc89e92..cdf8c6ed979 100644 --- a/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/RetryPolicyFactory.java +++ b/core/common/connector-core/src/main/java/org/eclipse/edc/connector/core/base/RetryPolicyFactory.java @@ -15,80 +15,50 @@ package org.eclipse.edc.connector.core.base; import dev.failsafe.RetryPolicy; -import org.eclipse.edc.runtime.metamodel.annotation.Setting; -import org.eclipse.edc.spi.system.ServiceExtensionContext; +import org.eclipse.edc.spi.monitor.Monitor; -import java.time.temporal.ChronoUnit; - -import static java.lang.Integer.parseInt; import static java.lang.String.format; +import static java.time.temporal.ChronoUnit.MILLIS; /** * Factory for Failsafe's {@link RetryPolicy} */ public class RetryPolicyFactory { - private static final String DEFAULT_RETRIES = "5"; - private static final String DEFAULT_MIN_BACKOFF = "500"; - private static final String DEFAULT_MAX_BACKOFF = "10000"; - private static final String DEFAULT_LOG = "false"; - - @Setting(value = "Maximum retries for the retry policy before a failure is propagated", defaultValue = DEFAULT_RETRIES) - private static final String MAX_RETRIES = "edc.core.retry.retries.max"; - @Setting(value = "Minimum number of milliseconds for exponential backoff", defaultValue = DEFAULT_MIN_BACKOFF) - private static final String BACKOFF_MIN_MILLIS = "edc.core.retry.backoff.min"; - @Setting(value = "Maximum number of milliseconds for exponential backoff.", defaultValue = DEFAULT_MAX_BACKOFF) - private static final String BACKOFF_MAX_MILLIS = "edc.core.retry.backoff.max"; - - @Setting(value = "Log Failsafe onRetry events", defaultValue = DEFAULT_LOG) - static final String LOG_ON_RETRY = "edc.core.retry.log.on.retry"; - @Setting(value = "Log Failsafe onRetryScheduled events", defaultValue = DEFAULT_LOG) - static final String LOG_ON_RETRY_SCHEDULED = "edc.core.retry.log.on.retry.scheduled"; - @Setting(value = "Log Failsafe onRetriesExceeded events", defaultValue = DEFAULT_LOG) - static final String LOG_ON_RETRIES_EXCEEDED = "edc.core.retry.log.on.retries.exceeded"; - @Setting(value = "Log Failsafe onFailedAttempt events", defaultValue = DEFAULT_LOG) - static final String LOG_ON_FAILED_ATTEMPT = "edc.core.retry.log.on.failed.attempt"; - @Setting(value = "Log Failsafe onAbort events", defaultValue = DEFAULT_LOG) - static final String LOG_ON_ABORT = "edc.core.retry.log.on.abort"; - /** - * Create a {@link RetryPolicy} given the configuration. + * Create a RetryPolicy given the configuration. * - * @param retry policy type - * @param context the service extension context - * @return a RetryPolicy + * @param configuration the configuration. + * @param monitor the monitor. + * @return the RetryPolicy. */ - public static RetryPolicy create(ServiceExtensionContext context) { - var maxRetries = context.getSetting(MAX_RETRIES, parseInt(DEFAULT_RETRIES)); - var minBackoff = context.getSetting(BACKOFF_MIN_MILLIS, parseInt(DEFAULT_MIN_BACKOFF)); - var maxBackoff = context.getSetting(BACKOFF_MAX_MILLIS, parseInt(DEFAULT_MAX_BACKOFF)); - + public static RetryPolicy create(RetryPolicyConfiguration configuration, Monitor monitor) { var builder = RetryPolicy.builder() - .withMaxRetries(maxRetries) - .withBackoff(minBackoff, maxBackoff, ChronoUnit.MILLIS); + .withMaxRetries(configuration.getMaxRetries()) + .withBackoff(configuration.getMinBackoff(), configuration.getMaxBackoff(), MILLIS); - if (context.getSetting(LOG_ON_RETRY, false)) { - builder.onRetry(event -> context.getMonitor() + if (configuration.isLogOnRetry()) { + builder.onRetry(event -> monitor .debug("Failsafe: execution attempted, will retry.", event.getLastException())); } - if (context.getSetting(LOG_ON_RETRY_SCHEDULED, false)) { - builder.onRetryScheduled(event -> context.getMonitor() + if (configuration.isLogOnRetryScheduled()) { + builder.onRetryScheduled(event -> monitor .debug(format("Failsafe: execution scheduled, will retry in %s.", event.getDelay()), event.getLastException())); } - if (context.getSetting(LOG_ON_RETRIES_EXCEEDED, false)) { - builder.onRetriesExceeded(event -> context.getMonitor() + if (configuration.isLogOnRetriesExceeded()) { + builder.onRetriesExceeded(event -> monitor .debug("Failsafe: maximum retries exceeded", event.getException())); } - if (context.getSetting(LOG_ON_FAILED_ATTEMPT, false)) { - builder.onFailedAttempt(event -> context.getMonitor() + if (configuration.isLogOnFailedAttempt()) { + builder.onFailedAttempt(event -> monitor .debug("Failsafe: execution attempt failed", event.getLastException())); } - if (context.getSetting(LOG_ON_ABORT, false)) { - builder.onAbort(event -> context.getMonitor() + if (configuration.isLogOnAbort()) { + builder.onAbort(event -> monitor .debug("Failsafe: execution aborted", event.getException())); } diff --git a/core/common/connector-core/src/test/java/org/eclipse/edc/connector/core/base/OkHttpClientFactoryTest.java b/core/common/connector-core/src/test/java/org/eclipse/edc/connector/core/base/OkHttpClientFactoryTest.java index d9cffc18be2..c3330769fa7 100644 --- a/core/common/connector-core/src/test/java/org/eclipse/edc/connector/core/base/OkHttpClientFactoryTest.java +++ b/core/common/connector-core/src/test/java/org/eclipse/edc/connector/core/base/OkHttpClientFactoryTest.java @@ -22,25 +22,17 @@ import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; -import org.eclipse.edc.boot.system.DefaultServiceExtensionContext; import org.eclipse.edc.spi.EdcException; import org.eclipse.edc.spi.monitor.Monitor; -import org.eclipse.edc.spi.system.configuration.ConfigFactory; import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.Test; import org.mockito.ArgumentMatcher; import java.io.IOException; -import java.util.List; -import java.util.Map; -import static java.util.Collections.emptyMap; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.eclipse.edc.connector.core.base.OkHttpClientFactory.EDC_HTTP_CLIENT_HTTPS_ENFORCE; -import static org.eclipse.edc.connector.core.base.OkHttpClientFactory.EDC_HTTP_CLIENT_RECEIVE_BUFFER_SIZE; -import static org.eclipse.edc.connector.core.base.OkHttpClientFactory.EDC_HTTP_CLIENT_SEND_BUFFER_SIZE; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -55,9 +47,9 @@ class OkHttpClientFactoryTest { @Test void shouldPrintLogIfHttpsNotEnforced() { - var context = createContextWithConfig(emptyMap()); + var configuration = OkHttpClientConfiguration.Builder.newInstance().build(); - var okHttpClient = OkHttpClientFactory.create(context, eventListener) + var okHttpClient = OkHttpClientFactory.create(configuration, eventListener, monitor) .newBuilder().addInterceptor(dummySuccessfulResponse()) .build(); @@ -68,10 +60,9 @@ void shouldPrintLogIfHttpsNotEnforced() { @Test void shouldEnforceHttpsCalls() { - var config = Map.of(EDC_HTTP_CLIENT_HTTPS_ENFORCE, "true"); - var context = createContextWithConfig(config); + var configuration = OkHttpClientConfiguration.Builder.newInstance().enforceHttps(true).build(); - var okHttpClient = OkHttpClientFactory.create(context, eventListener) + var okHttpClient = OkHttpClientFactory.create(configuration, eventListener, monitor) .newBuilder().addInterceptor(dummySuccessfulResponse()) .build(); @@ -82,13 +73,12 @@ void shouldEnforceHttpsCalls() { @Test void shouldCreateCustomSocketFactory_whenSendSocketBufferIsSet() { - var config = Map.of( - EDC_HTTP_CLIENT_SEND_BUFFER_SIZE, "4096", - EDC_HTTP_CLIENT_RECEIVE_BUFFER_SIZE, "4096" - ); - var context = createContextWithConfig(config); + var configuration = OkHttpClientConfiguration.Builder.newInstance() + .sendBufferSize(4096) + .receiveBufferSize(4096) + .build(); - var okHttpClient = OkHttpClientFactory.create(context, eventListener) + var okHttpClient = OkHttpClientFactory.create(configuration, eventListener, monitor) .newBuilder() .build(); @@ -115,13 +105,6 @@ private void call(OkHttpClient okHttpClient, String url) throws IOException { okHttpClient.newCall(new Request.Builder().url(url).build()).execute().close(); } - @NotNull - private DefaultServiceExtensionContext createContextWithConfig(Map config) { - var context = new DefaultServiceExtensionContext(monitor, List.of(() -> ConfigFactory.fromMap(config))); - context.initialize(); - return context; - } - @NotNull private ArgumentMatcher messageContains(String string) { return message -> message.contains(string); diff --git a/core/common/connector-core/src/test/java/org/eclipse/edc/connector/core/base/RetryPolicyFactoryTest.java b/core/common/connector-core/src/test/java/org/eclipse/edc/connector/core/base/RetryPolicyFactoryTest.java index 47909f5d046..5e07065d72f 100644 --- a/core/common/connector-core/src/test/java/org/eclipse/edc/connector/core/base/RetryPolicyFactoryTest.java +++ b/core/common/connector-core/src/test/java/org/eclipse/edc/connector/core/base/RetryPolicyFactoryTest.java @@ -14,39 +14,24 @@ package org.eclipse.edc.connector.core.base; -import org.eclipse.edc.boot.system.DefaultServiceExtensionContext; -import org.eclipse.edc.spi.monitor.Monitor; -import org.eclipse.edc.spi.system.configuration.ConfigFactory; -import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.Test; -import java.util.List; -import java.util.Map; - import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.eclipse.edc.connector.core.base.RetryPolicyFactory.LOG_ON_ABORT; -import static org.eclipse.edc.connector.core.base.RetryPolicyFactory.LOG_ON_FAILED_ATTEMPT; -import static org.eclipse.edc.connector.core.base.RetryPolicyFactory.LOG_ON_RETRIES_EXCEEDED; -import static org.eclipse.edc.connector.core.base.RetryPolicyFactory.LOG_ON_RETRY; -import static org.eclipse.edc.connector.core.base.RetryPolicyFactory.LOG_ON_RETRY_SCHEDULED; import static org.mockito.Mockito.mock; class RetryPolicyFactoryTest { - private final Monitor monitor = mock(Monitor.class); - @Test void shouldDeclareLoggingListeners_whenConfigured() { - var settings = Map.of( - LOG_ON_RETRY, "true", - LOG_ON_RETRY_SCHEDULED, "true", - LOG_ON_RETRIES_EXCEEDED, "true", - LOG_ON_FAILED_ATTEMPT, "true", - LOG_ON_ABORT, "true" - ); - var context = createContextWithConfig(settings); + var configuration = RetryPolicyConfiguration.Builder.newInstance() + .logOnAbort(true) + .logOnRetryScheduled(true) + .logOnRetry(true) + .logOnRetriesExceeded(true) + .logOnFailedAttempt(true) + .build(); - var retryPolicy = RetryPolicyFactory.create(context); + var retryPolicy = RetryPolicyFactory.create(configuration, mock()); var config = retryPolicy.getConfig(); assertThat(config.getRetryListener()).isNotNull(); @@ -56,10 +41,4 @@ void shouldDeclareLoggingListeners_whenConfigured() { assertThat(config.getAbortListener()).isNotNull(); } - @NotNull - private DefaultServiceExtensionContext createContextWithConfig(Map config) { - var context = new DefaultServiceExtensionContext(monitor, List.of(() -> ConfigFactory.fromMap(config))); - context.initialize(); - return context; - } } diff --git a/core/data-plane/data-plane-core/src/main/java/org/eclipse/edc/connector/dataplane/framework/DataPlaneDefaultIamServicesExtension.java b/core/data-plane/data-plane-core/src/main/java/org/eclipse/edc/connector/dataplane/framework/DataPlaneDefaultIamServicesExtension.java index e4ba3b6d259..0ac029b38b6 100644 --- a/core/data-plane/data-plane-core/src/main/java/org/eclipse/edc/connector/dataplane/framework/DataPlaneDefaultIamServicesExtension.java +++ b/core/data-plane/data-plane-core/src/main/java/org/eclipse/edc/connector/dataplane/framework/DataPlaneDefaultIamServicesExtension.java @@ -21,6 +21,7 @@ import org.eclipse.edc.runtime.metamodel.annotation.Extension; import org.eclipse.edc.runtime.metamodel.annotation.Inject; import org.eclipse.edc.runtime.metamodel.annotation.Provider; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.iam.LocalPublicKeyService; import org.eclipse.edc.spi.result.Result; import org.eclipse.edc.spi.security.PrivateKeyResolver; @@ -33,13 +34,17 @@ import java.security.PrivateKey; import java.util.function.Supplier; -import static org.eclipse.edc.connector.dataplane.spi.TransferDataPlaneConfig.TOKEN_SIGNER_PRIVATE_KEY_ALIAS; -import static org.eclipse.edc.connector.dataplane.spi.TransferDataPlaneConfig.TOKEN_VERIFIER_PUBLIC_KEY_ALIAS; @Extension(value = DataPlaneDefaultIamServicesExtension.NAME) public class DataPlaneDefaultIamServicesExtension implements ServiceExtension { public static final String NAME = "Data Plane Framework Default IAM Services"; + + @Setting(value = "Alias of private key used for signing tokens, retrieved from private key resolver") + public static final String TOKEN_SIGNER_PRIVATE_KEY_ALIAS = "edc.transfer.proxy.token.signer.privatekey.alias"; + @Setting(value = "Alias of public key used for verifying the tokens, retrieved from the vault") + public static final String TOKEN_VERIFIER_PUBLIC_KEY_ALIAS = "edc.transfer.proxy.token.verifier.publickey.alias"; + @Inject private AccessTokenDataStore accessTokenDataStore; @Inject diff --git a/extensions/common/http/jersey-core/src/main/java/org/eclipse/edc/web/jersey/JerseyConfiguration.java b/extensions/common/http/jersey-core/src/main/java/org/eclipse/edc/web/jersey/JerseyConfiguration.java index 6674f2270b7..3a8e56efc5d 100644 --- a/extensions/common/http/jersey-core/src/main/java/org/eclipse/edc/web/jersey/JerseyConfiguration.java +++ b/extensions/common/http/jersey-core/src/main/java/org/eclipse/edc/web/jersey/JerseyConfiguration.java @@ -14,21 +14,11 @@ package org.eclipse.edc.web.jersey; -import org.eclipse.edc.runtime.metamodel.annotation.Setting; -import org.eclipse.edc.spi.system.ServiceExtensionContext; - /** * Jersey extension configuration class */ public class JerseyConfiguration { - @Setting - public static final String CORS_CONFIG_ORIGINS_SETTING = "edc.web.rest.cors.origins"; - @Setting - public static final String CORS_CONFIG_ENABLED_SETTING = "edc.web.rest.cors.enabled"; - @Setting - public static final String CORS_CONFIG_HEADERS_SETTING = "edc.web.rest.cors.headers"; - @Setting - public static final String CORS_CONFIG_METHODS_SETTING = "edc.web.rest.cors.methods"; + private String allowedOrigins; private String allowedHeaders; private String allowedMethods; @@ -37,24 +27,6 @@ public class JerseyConfiguration { private JerseyConfiguration() { } - public static JerseyConfiguration from(ServiceExtensionContext context) { - var origins = context.getSetting(CORS_CONFIG_ORIGINS_SETTING, "*"); - var headers = context.getSetting(CORS_CONFIG_HEADERS_SETTING, "origin, content-type, accept, authorization"); - var allowedMethods = context.getSetting(CORS_CONFIG_METHODS_SETTING, "GET, POST, DELETE, PUT, OPTIONS"); - var enabled = context.getSetting(CORS_CONFIG_ENABLED_SETTING, false); - var config = new JerseyConfiguration(); - config.allowedHeaders = headers; - config.allowedOrigins = origins; - config.allowedMethods = allowedMethods; - config.corsEnabled = enabled; - - return config; - } - - public static JerseyConfiguration none() { - return new JerseyConfiguration(); - } - public String getAllowedOrigins() { return allowedOrigins; } @@ -71,4 +43,41 @@ public boolean isCorsEnabled() { return corsEnabled; } + public static class Builder { + + private final JerseyConfiguration instance = new JerseyConfiguration(); + + public static Builder newInstance() { + return new Builder(); + } + + private Builder() { + } + + public Builder allowedOrigins(String allowedOrigins) { + instance.allowedOrigins = allowedOrigins; + return this; + } + + public Builder allowedHeaders(String allowedHeaders) { + instance.allowedHeaders = allowedHeaders; + return this; + } + + public Builder allowedMethods(String allowedMethods) { + instance.allowedMethods = allowedMethods; + return this; + } + + public Builder corsEnabled(boolean corsEnabled) { + instance.corsEnabled = corsEnabled; + return this; + } + + public JerseyConfiguration build() { + return instance; + } + + } + } diff --git a/extensions/common/http/jersey-core/src/main/java/org/eclipse/edc/web/jersey/JerseyExtension.java b/extensions/common/http/jersey-core/src/main/java/org/eclipse/edc/web/jersey/JerseyExtension.java index dfc7fa03f7d..c4f88a19ff4 100644 --- a/extensions/common/http/jersey-core/src/main/java/org/eclipse/edc/web/jersey/JerseyExtension.java +++ b/extensions/common/http/jersey-core/src/main/java/org/eclipse/edc/web/jersey/JerseyExtension.java @@ -17,6 +17,7 @@ import org.eclipse.edc.runtime.metamodel.annotation.Inject; import org.eclipse.edc.runtime.metamodel.annotation.Provider; import org.eclipse.edc.runtime.metamodel.annotation.Provides; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.system.ServiceExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; import org.eclipse.edc.spi.types.TypeManager; @@ -30,6 +31,15 @@ public class JerseyExtension implements ServiceExtension { private JerseyRestService jerseyRestService; + @Setting + public static final String CORS_CONFIG_ORIGINS_SETTING = "edc.web.rest.cors.origins"; + @Setting + public static final String CORS_CONFIG_ENABLED_SETTING = "edc.web.rest.cors.enabled"; + @Setting + public static final String CORS_CONFIG_HEADERS_SETTING = "edc.web.rest.cors.headers"; + @Setting + public static final String CORS_CONFIG_METHODS_SETTING = "edc.web.rest.cors.methods"; + @Inject private JettyService jettyService; @@ -47,7 +57,12 @@ public String name() { public void initialize(ServiceExtensionContext context) { var monitor = context.getMonitor(); - var configuration = JerseyConfiguration.from(context); + var configuration = JerseyConfiguration.Builder.newInstance() + .allowedHeaders(context.getSetting(CORS_CONFIG_HEADERS_SETTING, "origin, content-type, accept, authorization")) + .allowedOrigins(context.getSetting(CORS_CONFIG_ORIGINS_SETTING, "*")) + .allowedMethods(context.getSetting(CORS_CONFIG_METHODS_SETTING, "GET, POST, DELETE, PUT, OPTIONS")) + .corsEnabled(context.getSetting(CORS_CONFIG_ENABLED_SETTING, false)) + .build(); jerseyRestService = new JerseyRestService(jettyService, typeManager, configuration, monitor); diff --git a/extensions/common/http/jersey-core/src/test/java/org/eclipse/edc/web/jersey/JerseyConfigurationTest.java b/extensions/common/http/jersey-core/src/test/java/org/eclipse/edc/web/jersey/JerseyConfigurationTest.java deleted file mode 100644 index bb5951dde1f..00000000000 --- a/extensions/common/http/jersey-core/src/test/java/org/eclipse/edc/web/jersey/JerseyConfigurationTest.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2022 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0 - * - * SPDX-License-Identifier: Apache-2.0 - * - * Contributors: - * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - Initial implementation - * - */ - -package org.eclipse.edc.web.jersey; - -import org.eclipse.edc.spi.system.ServiceExtensionContext; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyBoolean; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.atLeastOnce; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -class JerseyConfigurationTest { - - @Test - void ensureCorrectDefaults() { - var ctx = mock(ServiceExtensionContext.class); - var defaultValueCapture = ArgumentCaptor.forClass(String.class); - //always return the default value - when(ctx.getSetting(anyString(), defaultValueCapture.capture())).thenAnswer(i -> defaultValueCapture.getValue()); - - var config = JerseyConfiguration.from(ctx); - - assertThat(config.getAllowedMethods()).isEqualTo("GET, POST, DELETE, PUT, OPTIONS"); - assertThat(config.getAllowedHeaders()).isEqualTo("origin, content-type, accept, authorization"); - assertThat(config.getAllowedOrigins()).isEqualTo("*"); - assertThat(config.isCorsEnabled()).isFalse(); - verify(ctx, atLeastOnce()).getSetting(anyString(), defaultValueCapture.capture()); - } - - @Test - void ensureCorrectSettings() { - var ctx = mock(ServiceExtensionContext.class); - when(ctx.getSetting(eq(JerseyConfiguration.CORS_CONFIG_ENABLED_SETTING), anyBoolean())).thenReturn(true); - when(ctx.getSetting(eq(JerseyConfiguration.CORS_CONFIG_HEADERS_SETTING), anyString())).thenReturn("origin, authorization"); - when(ctx.getSetting(eq(JerseyConfiguration.CORS_CONFIG_ORIGINS_SETTING), anyString())).thenReturn("localhost"); - when(ctx.getSetting(eq(JerseyConfiguration.CORS_CONFIG_METHODS_SETTING), anyString())).thenReturn("GET, POST"); - - var config = JerseyConfiguration.from(ctx); - - assertThat(config.getAllowedMethods()).isEqualTo("GET, POST"); - assertThat(config.getAllowedHeaders()).isEqualTo("origin, authorization"); - assertThat(config.getAllowedOrigins()).isEqualTo("localhost"); - assertThat(config.isCorsEnabled()).isTrue(); - verify(ctx, atLeastOnce()).getSetting(anyString(), anyString()); - } -} \ No newline at end of file diff --git a/extensions/common/http/jersey-core/src/test/java/org/eclipse/edc/web/jersey/JerseyRestServiceTest.java b/extensions/common/http/jersey-core/src/test/java/org/eclipse/edc/web/jersey/JerseyRestServiceTest.java index 4f62c3f700d..661a00d24cc 100644 --- a/extensions/common/http/jersey-core/src/test/java/org/eclipse/edc/web/jersey/JerseyRestServiceTest.java +++ b/extensions/common/http/jersey-core/src/test/java/org/eclipse/edc/web/jersey/JerseyRestServiceTest.java @@ -231,7 +231,7 @@ private void startJetty(PortMapping... mapping) { var config = new JettyConfiguration(null, null); Arrays.stream(mapping).forEach(config::portMapping); jettyService = new JettyService(config, monitor); - jerseyRestService = new JerseyRestService(jettyService, new TypeManager(), JerseyConfiguration.none(), monitor); + jerseyRestService = new JerseyRestService(jettyService, new TypeManager(), JerseyConfiguration.Builder.newInstance().build(), monitor); jettyService.start(); } diff --git a/extensions/common/http/jetty-core/src/main/java/org/eclipse/edc/web/jetty/JettyConfiguration.java b/extensions/common/http/jetty-core/src/main/java/org/eclipse/edc/web/jetty/JettyConfiguration.java index 1cd5407ed33..fcd853c5b58 100644 --- a/extensions/common/http/jetty-core/src/main/java/org/eclipse/edc/web/jetty/JettyConfiguration.java +++ b/extensions/common/http/jetty-core/src/main/java/org/eclipse/edc/web/jetty/JettyConfiguration.java @@ -14,7 +14,6 @@ package org.eclipse.edc.web.jetty; -import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.system.configuration.Config; import java.util.AbstractMap; @@ -30,8 +29,6 @@ public class JettyConfiguration { public static final String DEFAULT_PATH = "/api"; public static final String DEFAULT_CONTEXT_NAME = "default"; public static final int DEFAULT_PORT = 8181; - @Setting - private static final String HTTP_PORT = "web.http.port"; private final String keystorePassword; private final String keymanagerPassword; private final Set portMappings; diff --git a/extensions/common/iam/decentralized-identity/identity-did-web/src/main/java/org/eclipse/edc/iam/did/web/ConfigurationKeys.java b/extensions/common/iam/decentralized-identity/identity-did-web/src/main/java/org/eclipse/edc/iam/did/web/ConfigurationKeys.java deleted file mode 100644 index 408c364b40d..00000000000 --- a/extensions/common/iam/decentralized-identity/identity-did-web/src/main/java/org/eclipse/edc/iam/did/web/ConfigurationKeys.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2021 Microsoft Corporation - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0 - * - * SPDX-License-Identifier: Apache-2.0 - * - * Contributors: - * Microsoft Corporation - initial API and implementation - * - */ - -package org.eclipse.edc.iam.did.web; - -import org.eclipse.edc.runtime.metamodel.annotation.Setting; - -/** - * Defines configuration keys used by the Web DID extension. - */ -public interface ConfigurationKeys { - - /** - * If set, the resolver will use the endpoint to resolve DIDs using DNS over HTTPS. - */ - @Setting - String DNS_OVER_HTTPS = "edc.webdid.doh.url"; - -} diff --git a/extensions/common/iam/decentralized-identity/identity-did-web/src/main/java/org/eclipse/edc/iam/did/web/WebDidExtension.java b/extensions/common/iam/decentralized-identity/identity-did-web/src/main/java/org/eclipse/edc/iam/did/web/WebDidExtension.java index e9733302a6e..4ee5d826bd4 100644 --- a/extensions/common/iam/decentralized-identity/identity-did-web/src/main/java/org/eclipse/edc/iam/did/web/WebDidExtension.java +++ b/extensions/common/iam/decentralized-identity/identity-did-web/src/main/java/org/eclipse/edc/iam/did/web/WebDidExtension.java @@ -32,6 +32,11 @@ @Extension(value = WebDidExtension.NAME) public class WebDidExtension implements ServiceExtension { public static final String NAME = "Web DID"; + /** + * If set, the resolver will use the endpoint to resolve DIDs using DNS over HTTPS. + */ + @Setting + public static final String DNS_OVER_HTTPS = "edc.webdid.doh.url"; /** * Set to {@code false} to create DID URLs with {@code http} instead of {@code https} scheme. * Defaults to {@code true}. @@ -68,7 +73,7 @@ public void initialize(ServiceExtensionContext context) { } private EdcHttpClient getHttpClient(ServiceExtensionContext context) { - var dnsServer = context.getSetting(ConfigurationKeys.DNS_OVER_HTTPS, null); + var dnsServer = context.getSetting(DNS_OVER_HTTPS, null); if (StringUtils.isNullOrEmpty(dnsServer)) { return httpClient; diff --git a/extensions/common/sql/sql-core/src/main/java/org/eclipse/edc/sql/SqlCoreExtension.java b/extensions/common/sql/sql-core/src/main/java/org/eclipse/edc/sql/SqlCoreExtension.java index 473a05ec194..6e23067a7a1 100644 --- a/extensions/common/sql/sql-core/src/main/java/org/eclipse/edc/sql/SqlCoreExtension.java +++ b/extensions/common/sql/sql-core/src/main/java/org/eclipse/edc/sql/SqlCoreExtension.java @@ -16,18 +16,21 @@ import org.eclipse.edc.runtime.metamodel.annotation.Extension; import org.eclipse.edc.runtime.metamodel.annotation.Provider; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.system.ServiceExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; import static java.lang.Integer.parseInt; -import static org.eclipse.edc.sql.SqlQueryExecutorConfiguration.DEFAULT_EDC_SQL_FETCH_SIZE; -import static org.eclipse.edc.sql.SqlQueryExecutorConfiguration.EDC_SQL_FETCH_SIZE; @Extension(value = SqlCoreExtension.NAME) public class SqlCoreExtension implements ServiceExtension { public static final String NAME = "SQL Core"; + public static final String DEFAULT_EDC_SQL_FETCH_SIZE = "5000"; + @Setting(value = "Fetch size value used in SQL queries", defaultValue = DEFAULT_EDC_SQL_FETCH_SIZE) + public static final String EDC_SQL_FETCH_SIZE = "edc.sql.fetch.size"; + @Override public String name() { return NAME; diff --git a/extensions/common/sql/sql-core/src/main/java/org/eclipse/edc/sql/SqlQueryExecutorConfiguration.java b/extensions/common/sql/sql-core/src/main/java/org/eclipse/edc/sql/SqlQueryExecutorConfiguration.java index 373b0f28833..f26d5c88ba3 100644 --- a/extensions/common/sql/sql-core/src/main/java/org/eclipse/edc/sql/SqlQueryExecutorConfiguration.java +++ b/extensions/common/sql/sql-core/src/main/java/org/eclipse/edc/sql/SqlQueryExecutorConfiguration.java @@ -14,17 +14,13 @@ package org.eclipse.edc.sql; -import org.eclipse.edc.runtime.metamodel.annotation.Setting; +import static org.eclipse.edc.sql.SqlCoreExtension.DEFAULT_EDC_SQL_FETCH_SIZE; /** * Configuration class for {@link SqlQueryExecutor} */ public record SqlQueryExecutorConfiguration(int fetchSize) { - public static final String DEFAULT_EDC_SQL_FETCH_SIZE = "5000"; - @Setting(value = "Fetch size value used in SQL queries", defaultValue = DEFAULT_EDC_SQL_FETCH_SIZE) - public static final String EDC_SQL_FETCH_SIZE = "edc.sql.fetch.size"; - public static SqlQueryExecutorConfiguration ofDefaults() { return new SqlQueryExecutorConfiguration(Integer.parseInt(DEFAULT_EDC_SQL_FETCH_SIZE)); } diff --git a/extensions/common/sql/sql-pool/sql-pool-apache-commons/src/main/java/org/eclipse/edc/sql/pool/commons/CommonsConnectionPoolConfigKeys.java b/extensions/common/sql/sql-pool/sql-pool-apache-commons/src/main/java/org/eclipse/edc/sql/pool/commons/CommonsConnectionPoolConfigKeys.java deleted file mode 100644 index 2767362b593..00000000000 --- a/extensions/common/sql/sql-pool/sql-pool-apache-commons/src/main/java/org/eclipse/edc/sql/pool/commons/CommonsConnectionPoolConfigKeys.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2021 Daimler TSS GmbH - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0 - * - * SPDX-License-Identifier: Apache-2.0 - * - * Contributors: - * Daimler TSS GmbH - Initial API and Implementation - * - */ - -package org.eclipse.edc.sql.pool.commons; - -import org.eclipse.edc.runtime.metamodel.annotation.Setting; - -import java.util.Map; - -interface CommonsConnectionPoolConfigKeys { - - @Deprecated(since = "0.3.1") - @Setting(required = false) - String DEPRACATED_POOL_MAX_IDLE_CONNECTIONS = "pool.maxIdleConnections"; - String POOL_CONNECTIONS_MAX_IDLE = "pool.connections.max-idle"; - - @Deprecated(since = "0.3.1") - @Setting(required = false) - String DEPRACATED_POOL_MAX_TOTAL_CONNECTIONS = "pool.maxTotalConnections"; - - String POOL_CONNECTIONS_MAX_TOTAL = "pool.connections.max-total"; - - @Deprecated(since = "0.3.1") - @Setting(required = false) - String DEPRACATED_POOL_MIN_IDLE_CONNECTIONS = "pool.minIdleConnections"; - String POOL_CONNECTIONS_MIN_IDLE = "pool.connections.min-idle"; - - @Deprecated(since = "0.3.1") - @Setting(required = false) - String DEPRACATED_POOL_TEST_CONNECTION_ON_BORROW = "pool.testConnectionOnBorrow"; - String POOL_CONNECTION_TEST_ON_BORROW = "pool.connection.test.on-borrow"; - - @Deprecated(since = "0.3.1") - @Setting(required = false) - String DEPRACATED_POOL_TEST_CONNECTION_ON_CREATE = "pool.testConnectionOnCreate"; - - String POOL_CONNECTION_TEST_ON_CREATE = "pool.connection.test.on-create"; - - @Deprecated(since = "0.3.1") - @Setting(required = false) - String DEPRACATED_POOL_TEST_CONNECTION_ON_RETURN = "pool.testConnectionOnReturn"; - - String POOL_CONNECTION_TEST_ON_RETURN = "pool.connection.test.on-return"; - - @Deprecated(since = "0.3.1") - @Setting(required = false) - String DEPRACATED_POOL_TEST_CONNECTION_WHILE_IDLE = "pool.testConnectionWhileIdle"; - String POOL_CONNECTION_TEST_WHILE_IDLE = "pool.connection.test.while-idle"; - - @Deprecated(since = "0.3.1") - @Setting(required = false) - String DEPRACATED_POOL_TEST_QUERY = "pool.testQuery"; - - String POOL_CONNECTION_TEST_QUERY = "pool.connection.test.query"; - - @Setting(required = true) - String URL = "url"; - - Map CONFIGURATION_MAPPING = Map.of( - POOL_CONNECTIONS_MAX_IDLE, DEPRACATED_POOL_MAX_IDLE_CONNECTIONS, - POOL_CONNECTIONS_MIN_IDLE, DEPRACATED_POOL_MIN_IDLE_CONNECTIONS, - POOL_CONNECTIONS_MAX_TOTAL, DEPRACATED_POOL_MAX_TOTAL_CONNECTIONS, - POOL_CONNECTION_TEST_ON_BORROW, DEPRACATED_POOL_TEST_CONNECTION_ON_BORROW, - POOL_CONNECTION_TEST_ON_CREATE, DEPRACATED_POOL_TEST_CONNECTION_ON_CREATE, - POOL_CONNECTION_TEST_ON_RETURN, DEPRACATED_POOL_TEST_CONNECTION_ON_RETURN, - POOL_CONNECTION_TEST_WHILE_IDLE, DEPRACATED_POOL_TEST_CONNECTION_WHILE_IDLE, - POOL_CONNECTION_TEST_QUERY, DEPRACATED_POOL_TEST_QUERY); - -} diff --git a/extensions/common/sql/sql-pool/sql-pool-apache-commons/src/main/java/org/eclipse/edc/sql/pool/commons/CommonsConnectionPoolServiceExtension.java b/extensions/common/sql/sql-pool/sql-pool-apache-commons/src/main/java/org/eclipse/edc/sql/pool/commons/CommonsConnectionPoolServiceExtension.java index 3be7b54f98a..b399b2afd34 100644 --- a/extensions/common/sql/sql-pool/sql-pool-apache-commons/src/main/java/org/eclipse/edc/sql/pool/commons/CommonsConnectionPoolServiceExtension.java +++ b/extensions/common/sql/sql-pool/sql-pool-apache-commons/src/main/java/org/eclipse/edc/sql/pool/commons/CommonsConnectionPoolServiceExtension.java @@ -16,6 +16,7 @@ import org.eclipse.edc.runtime.metamodel.annotation.Extension; import org.eclipse.edc.runtime.metamodel.annotation.Inject; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.monitor.Monitor; import org.eclipse.edc.spi.system.ServiceExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; @@ -36,21 +37,57 @@ import javax.sql.DataSource; import static java.lang.String.format; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.CONFIGURATION_MAPPING; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTIONS_MAX_IDLE; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTIONS_MAX_TOTAL; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTIONS_MIN_IDLE; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTION_TEST_ON_BORROW; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTION_TEST_ON_CREATE; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTION_TEST_ON_RETURN; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTION_TEST_QUERY; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTION_TEST_WHILE_IDLE; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.URL; @Extension(value = CommonsConnectionPoolServiceExtension.NAME) public class CommonsConnectionPoolServiceExtension implements ServiceExtension { + public static final String NAME = "Commons Connection Pool"; + public static final String EDC_DATASOURCE_PREFIX = "edc.datasource"; + @Deprecated(since = "0.3.1") + @Setting(required = false) + public static final String DEPRACATED_POOL_MAX_IDLE_CONNECTIONS = "pool.maxIdleConnections"; + public static final String POOL_CONNECTIONS_MAX_IDLE = "pool.connections.max-idle"; + @Deprecated(since = "0.3.1") + @Setting(required = false) + public static final String DEPRACATED_POOL_MAX_TOTAL_CONNECTIONS = "pool.maxTotalConnections"; + public static final String POOL_CONNECTIONS_MAX_TOTAL = "pool.connections.max-total"; + @Deprecated(since = "0.3.1") + @Setting(required = false) + public static final String DEPRACATED_POOL_MIN_IDLE_CONNECTIONS = "pool.minIdleConnections"; + public static final String POOL_CONNECTIONS_MIN_IDLE = "pool.connections.min-idle"; + @Deprecated(since = "0.3.1") + @Setting(required = false) + public static final String DEPRACATED_POOL_TEST_CONNECTION_ON_BORROW = "pool.testConnectionOnBorrow"; + public static final String POOL_CONNECTION_TEST_ON_BORROW = "pool.connection.test.on-borrow"; + @Deprecated(since = "0.3.1") + @Setting(required = false) + public static final String DEPRACATED_POOL_TEST_CONNECTION_ON_CREATE = "pool.testConnectionOnCreate"; + public static final String POOL_CONNECTION_TEST_ON_CREATE = "pool.connection.test.on-create"; + @Deprecated(since = "0.3.1") + @Setting(required = false) + public static final String DEPRACATED_POOL_TEST_CONNECTION_ON_RETURN = "pool.testConnectionOnReturn"; + public static final String POOL_CONNECTION_TEST_ON_RETURN = "pool.connection.test.on-return"; + @Deprecated(since = "0.3.1") + @Setting(required = false) + public static final String DEPRACATED_POOL_TEST_CONNECTION_WHILE_IDLE = "pool.testConnectionWhileIdle"; + public static final String POOL_CONNECTION_TEST_WHILE_IDLE = "pool.connection.test.while-idle"; + @Deprecated(since = "0.3.1") + @Setting(required = false) + public static final String DEPRACATED_POOL_TEST_QUERY = "pool.testQuery"; + public static final String POOL_CONNECTION_TEST_QUERY = "pool.connection.test.query"; + public static final Map CONFIGURATION_MAPPING = Map.of( + POOL_CONNECTIONS_MAX_IDLE, DEPRACATED_POOL_MAX_IDLE_CONNECTIONS, + POOL_CONNECTIONS_MIN_IDLE, DEPRACATED_POOL_MIN_IDLE_CONNECTIONS, + POOL_CONNECTIONS_MAX_TOTAL, DEPRACATED_POOL_MAX_TOTAL_CONNECTIONS, + POOL_CONNECTION_TEST_ON_BORROW, DEPRACATED_POOL_TEST_CONNECTION_ON_BORROW, + POOL_CONNECTION_TEST_ON_CREATE, DEPRACATED_POOL_TEST_CONNECTION_ON_CREATE, + POOL_CONNECTION_TEST_ON_RETURN, DEPRACATED_POOL_TEST_CONNECTION_ON_RETURN, + POOL_CONNECTION_TEST_WHILE_IDLE, DEPRACATED_POOL_TEST_CONNECTION_WHILE_IDLE, + POOL_CONNECTION_TEST_QUERY, DEPRACATED_POOL_TEST_QUERY); + + @Setting(required = true) + public static final String URL = "url"; private final List commonsConnectionPools = new LinkedList<>(); @Inject private DataSourceRegistry dataSourceRegistry; diff --git a/extensions/common/sql/sql-pool/sql-pool-apache-commons/src/test/java/org/eclipse/edc/sql/pool/commons/CommonsConnectionPoolServiceExtensionTest.java b/extensions/common/sql/sql-pool/sql-pool-apache-commons/src/test/java/org/eclipse/edc/sql/pool/commons/CommonsConnectionPoolServiceExtensionTest.java index ee55649a6ed..680d0c1b86c 100644 --- a/extensions/common/sql/sql-pool/sql-pool-apache-commons/src/test/java/org/eclipse/edc/sql/pool/commons/CommonsConnectionPoolServiceExtensionTest.java +++ b/extensions/common/sql/sql-pool/sql-pool-apache-commons/src/test/java/org/eclipse/edc/sql/pool/commons/CommonsConnectionPoolServiceExtensionTest.java @@ -33,23 +33,23 @@ import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.DEPRACATED_POOL_MAX_IDLE_CONNECTIONS; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.DEPRACATED_POOL_MAX_TOTAL_CONNECTIONS; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.DEPRACATED_POOL_MIN_IDLE_CONNECTIONS; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.DEPRACATED_POOL_TEST_CONNECTION_ON_BORROW; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.DEPRACATED_POOL_TEST_CONNECTION_ON_CREATE; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.DEPRACATED_POOL_TEST_CONNECTION_ON_RETURN; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.DEPRACATED_POOL_TEST_CONNECTION_WHILE_IDLE; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.DEPRACATED_POOL_TEST_QUERY; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTIONS_MAX_IDLE; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTIONS_MAX_TOTAL; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTIONS_MIN_IDLE; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTION_TEST_ON_BORROW; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTION_TEST_ON_CREATE; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTION_TEST_ON_RETURN; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTION_TEST_QUERY; -import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolConfigKeys.POOL_CONNECTION_TEST_WHILE_IDLE; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.DEPRACATED_POOL_MAX_IDLE_CONNECTIONS; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.DEPRACATED_POOL_MAX_TOTAL_CONNECTIONS; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.DEPRACATED_POOL_MIN_IDLE_CONNECTIONS; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.DEPRACATED_POOL_TEST_CONNECTION_ON_BORROW; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.DEPRACATED_POOL_TEST_CONNECTION_ON_CREATE; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.DEPRACATED_POOL_TEST_CONNECTION_ON_RETURN; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.DEPRACATED_POOL_TEST_CONNECTION_WHILE_IDLE; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.DEPRACATED_POOL_TEST_QUERY; import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.EDC_DATASOURCE_PREFIX; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.POOL_CONNECTIONS_MAX_IDLE; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.POOL_CONNECTIONS_MAX_TOTAL; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.POOL_CONNECTIONS_MIN_IDLE; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.POOL_CONNECTION_TEST_ON_BORROW; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.POOL_CONNECTION_TEST_ON_CREATE; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.POOL_CONNECTION_TEST_ON_RETURN; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.POOL_CONNECTION_TEST_QUERY; +import static org.eclipse.edc.sql.pool.commons.CommonsConnectionPoolServiceExtension.POOL_CONNECTION_TEST_WHILE_IDLE; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; diff --git a/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/AtomikosTransactionExtension.java b/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/AtomikosTransactionExtension.java index e5463903fcf..3fd5c80b5ac 100644 --- a/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/AtomikosTransactionExtension.java +++ b/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/AtomikosTransactionExtension.java @@ -16,6 +16,7 @@ import org.eclipse.edc.runtime.metamodel.annotation.Extension; import org.eclipse.edc.runtime.metamodel.annotation.Provides; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.system.ServiceExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; import org.eclipse.edc.spi.system.configuration.Config; @@ -26,11 +27,6 @@ import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationParser.parseDataSourceConfigurations; import static org.eclipse.edc.transaction.atomikos.Setters.setIfProvided; import static org.eclipse.edc.transaction.atomikos.Setters.setIfProvidedInt; -import static org.eclipse.edc.transaction.atomikos.TransactionManagerConfigurationKeys.CHECKPOINT_INTERVAL; -import static org.eclipse.edc.transaction.atomikos.TransactionManagerConfigurationKeys.DATA_DIR; -import static org.eclipse.edc.transaction.atomikos.TransactionManagerConfigurationKeys.LOGGING; -import static org.eclipse.edc.transaction.atomikos.TransactionManagerConfigurationKeys.THREADED2PC; -import static org.eclipse.edc.transaction.atomikos.TransactionManagerConfigurationKeys.TIMEOUT; /** @@ -40,6 +36,47 @@ @Extension(value = AtomikosTransactionExtension.NAME) public class AtomikosTransactionExtension implements ServiceExtension { public static final String NAME = "Atomikos Transaction"; + + @Setting(required = true) + public static final String DRIVER_CLASS = "driver.class"; + @Setting(required = true) + public static final String URL = "url"; + @Setting + public static final String DS_TYPE = "type"; + @Setting + public static final String USERNAME = "username"; + @Setting + public static final String PASSWORD = "password"; + @Setting + public static final String POOL_SIZE = "pool.size"; + @Setting + public static final String MAX_POOL_SIZE = "max.pool.size"; + @Setting + public static final String MIN_POOL_SIZE = "min.pool.size"; + @Setting + public static final String CONNECTION_TIMEOUT = "connection.timeout"; + @Setting + public static final String LOGIN_TIMEOUT = "login.timeout"; + @Setting + public static final String MAINTENANCE_INTERVAL = "maintenance.interval"; + @Setting + public static final String MAX_IDLE = "max.idle"; + @Setting + public static final String QUERY = "query"; + @Setting + public static final String DRIVER_PROPERTIES = "properties"; + @Setting(required = false) + public static final String TIMEOUT = "edc.atomikos.timeout"; + @Setting(required = false) + public static final String DATA_DIR = "edc.atomikos.directory"; + @Setting(required = false) + public static final String THREADED2PC = "edc.atomikos.threaded2pc"; + @Setting(required = false) + public static final String LOGGING = "edc.atomikos.logging"; + @Setting(required = false) + public static final String CHECKPOINT_INTERVAL = "edc.atomikos.checkpoint.interval"; + public static final int DEFAULT_VALUE = -1; + static final String EDC_DATASOURCE_PREFIX = "edc.datasource"; private AtomikosTransactionPlatform transactionPlatform; private AtomikosTransactionContext transactionContext; diff --git a/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/DataSourceConfigurationKeys.java b/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/DataSourceConfigurationKeys.java deleted file mode 100644 index 41711992de9..00000000000 --- a/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/DataSourceConfigurationKeys.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2022 Microsoft Corporation - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0 - * - * SPDX-License-Identifier: Apache-2.0 - * - * Contributors: - * Microsoft Corporation - initial API and implementation - * - */ - -package org.eclipse.edc.transaction.atomikos; - -import org.eclipse.edc.runtime.metamodel.annotation.Setting; - -/** - * Defines EDC data source configuration keys. All keys are prefixed by: edc.datasource.[ds name].[key] - */ -public interface DataSourceConfigurationKeys { - - @Setting(required = true) - String DRIVER_CLASS = "driver.class"; - - @Setting(required = true) - String URL = "url"; - - @Setting - String DS_TYPE = "type"; - - @Setting - String USERNAME = "username"; - - @Setting - String PASSWORD = "password"; - - @Setting - String POOL_SIZE = "pool.size"; - - @Setting - String MAX_POOL_SIZE = "max.pool.size"; - - @Setting - String MIN_POOL_SIZE = "min.pool.size"; - - @Setting - String CONNECTION_TIMEOUT = "connection.timeout"; - - @Setting - String LOGIN_TIMEOUT = "login.timeout"; - - @Setting - String MAINTENANCE_INTERVAL = "maintenance.interval"; - - @Setting - String MAX_IDLE = "max.idle"; - - @Setting - String QUERY = "query"; - - @Setting - String DRIVER_PROPERTIES = "properties"; - - -} diff --git a/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/DataSourceConfigurationParser.java b/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/DataSourceConfigurationParser.java index 3088352b21d..69d2cafed98 100644 --- a/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/DataSourceConfigurationParser.java +++ b/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/DataSourceConfigurationParser.java @@ -37,22 +37,22 @@ public static List parseDataSourceConfigurations(Config var keyName = "data source " + dsName; var builder = DataSourceConfiguration.Builder.newInstance() .name(dsName) - .driverClass(config.getString(DataSourceConfigurationKeys.DRIVER_CLASS)) - .url(config.getString(DataSourceConfigurationKeys.URL)); + .driverClass(config.getString(AtomikosTransactionExtension.DRIVER_CLASS)) + .url(config.getString(AtomikosTransactionExtension.URL)); - setIfProvided(DataSourceConfigurationKeys.DS_TYPE, value -> setDataSourceType(keyName, builder, value), config); - setIfProvided(DataSourceConfigurationKeys.USERNAME, builder::username, config); - setIfProvided(DataSourceConfigurationKeys.PASSWORD, builder::password, config); - setIfProvidedInt(DataSourceConfigurationKeys.POOL_SIZE, builder::poolSize, config); - setIfProvidedInt(DataSourceConfigurationKeys.MAX_POOL_SIZE, builder::maxPoolSize, config); - setIfProvidedInt(DataSourceConfigurationKeys.MIN_POOL_SIZE, builder::minPoolSize, config); - setIfProvidedInt(DataSourceConfigurationKeys.CONNECTION_TIMEOUT, builder::connectionTimeout, config); - setIfProvidedInt(DataSourceConfigurationKeys.LOGIN_TIMEOUT, builder::loginTimeout, config); - setIfProvidedInt(DataSourceConfigurationKeys.MAINTENANCE_INTERVAL, builder::maintenanceInterval, config); - setIfProvidedInt(DataSourceConfigurationKeys.MAX_IDLE, builder::maxIdle, config); - setIfProvided(DataSourceConfigurationKeys.QUERY, builder::query, config); + setIfProvided(AtomikosTransactionExtension.DS_TYPE, value -> setDataSourceType(keyName, builder, value), config); + setIfProvided(AtomikosTransactionExtension.USERNAME, builder::username, config); + setIfProvided(AtomikosTransactionExtension.PASSWORD, builder::password, config); + setIfProvidedInt(AtomikosTransactionExtension.POOL_SIZE, builder::poolSize, config); + setIfProvidedInt(AtomikosTransactionExtension.MAX_POOL_SIZE, builder::maxPoolSize, config); + setIfProvidedInt(AtomikosTransactionExtension.MIN_POOL_SIZE, builder::minPoolSize, config); + setIfProvidedInt(AtomikosTransactionExtension.CONNECTION_TIMEOUT, builder::connectionTimeout, config); + setIfProvidedInt(AtomikosTransactionExtension.LOGIN_TIMEOUT, builder::loginTimeout, config); + setIfProvidedInt(AtomikosTransactionExtension.MAINTENANCE_INTERVAL, builder::maintenanceInterval, config); + setIfProvidedInt(AtomikosTransactionExtension.MAX_IDLE, builder::maxIdle, config); + setIfProvided(AtomikosTransactionExtension.QUERY, builder::query, config); - builder.properties(config.getRelativeEntries(DataSourceConfigurationKeys.DRIVER_PROPERTIES)); + builder.properties(config.getRelativeEntries(AtomikosTransactionExtension.DRIVER_PROPERTIES)); return builder.build(); }) @@ -64,7 +64,7 @@ private static void setDataSourceType(String dsName, DataSourceConfiguration.Bui var type = DataSourceConfiguration.DataSourceType.valueOf(value.toUpperCase(Locale.ROOT)); builder.dataSourceType(type); } catch (IllegalArgumentException e) { - throw new EdcException(String.format("Error configuring %s. Value must be XA or NON_XA for for %s: %s", dsName, DataSourceConfigurationKeys.DS_TYPE, value)); + throw new EdcException(String.format("Error configuring %s. Value must be XA or NON_XA for for %s: %s", dsName, AtomikosTransactionExtension.DS_TYPE, value)); } } diff --git a/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/TransactionManagerConfigurationKeys.java b/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/TransactionManagerConfigurationKeys.java index 92f60cf6468..12d559f32ee 100644 --- a/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/TransactionManagerConfigurationKeys.java +++ b/extensions/common/transaction/transaction-atomikos/src/main/java/org/eclipse/edc/transaction/atomikos/TransactionManagerConfigurationKeys.java @@ -14,30 +14,11 @@ package org.eclipse.edc.transaction.atomikos; -import org.eclipse.edc.runtime.metamodel.annotation.Setting; - /** * Atomikos configuration keys. For details, see https://www.atomikos.com/Documentation/JtaProperties. */ public interface TransactionManagerConfigurationKeys { - @Setting(required = false) - String TIMEOUT = "edc.atomikos.timeout"; - - @Setting(required = false) - String DATA_DIR = "edc.atomikos.directory"; - - @Setting(required = false) - String THREADED2PC = "edc.atomikos.threaded2pc"; - - @Setting(required = false) - String LOGGING = "edc.atomikos.logging"; - - @Setting(required = false) - String CHECKPOINT_INTERVAL = "edc.atomikos.checkpoint.interval"; - - int DEFAULT_VALUE = -1; - String ATOMIKOS_TM_NAME = "com.atomikos.icatch.tm_unique_name"; String ATOMIKOS_NO_FILE = "com.atomikos.icatch.no_file"; diff --git a/extensions/common/transaction/transaction-atomikos/src/test/java/org/eclipse/edc/transaction/atomikos/AtomikosTransactionExtensionTest.java b/extensions/common/transaction/transaction-atomikos/src/test/java/org/eclipse/edc/transaction/atomikos/AtomikosTransactionExtensionTest.java index ace9ea86b79..034cec337e8 100644 --- a/extensions/common/transaction/transaction-atomikos/src/test/java/org/eclipse/edc/transaction/atomikos/AtomikosTransactionExtensionTest.java +++ b/extensions/common/transaction/transaction-atomikos/src/test/java/org/eclipse/edc/transaction/atomikos/AtomikosTransactionExtensionTest.java @@ -46,7 +46,7 @@ class AtomikosTransactionExtensionTest { void verifyEndToEndTransactions() { var extensionContext = mock(ServiceExtensionContext.class); when(extensionContext.getConnectorId()).thenReturn(randomUUID().toString()); - when(extensionContext.getConfig()).thenReturn(ConfigFactory.fromMap(Map.of(TransactionManagerConfigurationKeys.LOGGING, "false"))); + when(extensionContext.getConfig()).thenReturn(ConfigFactory.fromMap(Map.of(AtomikosTransactionExtension.LOGGING, "false"))); when(extensionContext.getConfig(isA(String.class))).thenAnswer(a -> JdbcTestFixtures.createDataSourceConfig()); when(extensionContext.getConfig()).thenAnswer(a -> JdbcTestFixtures.createAtomikosConfig()); diff --git a/extensions/common/transaction/transaction-atomikos/src/test/java/org/eclipse/edc/transaction/atomikos/DataSourceConfigurationParserTest.java b/extensions/common/transaction/transaction-atomikos/src/test/java/org/eclipse/edc/transaction/atomikos/DataSourceConfigurationParserTest.java index e9b62ea7d48..0ab233e399a 100644 --- a/extensions/common/transaction/transaction-atomikos/src/test/java/org/eclipse/edc/transaction/atomikos/DataSourceConfigurationParserTest.java +++ b/extensions/common/transaction/transaction-atomikos/src/test/java/org/eclipse/edc/transaction/atomikos/DataSourceConfigurationParserTest.java @@ -21,21 +21,21 @@ import java.util.HashMap; import static org.assertj.core.api.Assertions.assertThat; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.CONNECTION_TIMEOUT; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.DRIVER_CLASS; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.DRIVER_PROPERTIES; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.DS_TYPE; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.LOGIN_TIMEOUT; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.MAINTENANCE_INTERVAL; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.MAX_IDLE; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.MAX_POOL_SIZE; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.MIN_POOL_SIZE; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.PASSWORD; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.POOL_SIZE; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.QUERY; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.URL; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.USERNAME; import static org.eclipse.edc.transaction.atomikos.DataSourceConfiguration.DataSourceType.XA; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.CONNECTION_TIMEOUT; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.DRIVER_CLASS; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.DRIVER_PROPERTIES; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.DS_TYPE; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.LOGIN_TIMEOUT; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.MAINTENANCE_INTERVAL; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.MAX_IDLE; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.MAX_POOL_SIZE; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.MIN_POOL_SIZE; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.PASSWORD; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.POOL_SIZE; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.QUERY; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.URL; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.USERNAME; class DataSourceConfigurationParserTest { diff --git a/extensions/common/transaction/transaction-atomikos/src/test/java/org/eclipse/edc/transaction/atomikos/JdbcTestFixtures.java b/extensions/common/transaction/transaction-atomikos/src/test/java/org/eclipse/edc/transaction/atomikos/JdbcTestFixtures.java index 05393ef2d70..6515fc6a3ab 100644 --- a/extensions/common/transaction/transaction-atomikos/src/test/java/org/eclipse/edc/transaction/atomikos/JdbcTestFixtures.java +++ b/extensions/common/transaction/transaction-atomikos/src/test/java/org/eclipse/edc/transaction/atomikos/JdbcTestFixtures.java @@ -19,11 +19,11 @@ import java.util.HashMap; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.DRIVER_CLASS; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.DS_TYPE; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.TIMEOUT; +import static org.eclipse.edc.transaction.atomikos.AtomikosTransactionExtension.URL; import static org.eclipse.edc.transaction.atomikos.DataSourceConfiguration.DataSourceType.NON_XA; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.DRIVER_CLASS; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.DS_TYPE; -import static org.eclipse.edc.transaction.atomikos.DataSourceConfigurationKeys.URL; -import static org.eclipse.edc.transaction.atomikos.TransactionManagerConfigurationKeys.TIMEOUT; /** * Test fixtures for working with JDBC resources. @@ -37,7 +37,7 @@ public static Config createDataSourceConfig() { properties.put("default." + URL, url); properties.put("default." + DRIVER_CLASS, driverClass); properties.put("default." + DS_TYPE, NON_XA.toString().toLowerCase()); - properties.put("default." + DataSourceConfigurationKeys.POOL_SIZE, "2"); + properties.put("default." + AtomikosTransactionExtension.POOL_SIZE, "2"); return ConfigFactory.fromMap(properties); } diff --git a/extensions/common/vault/vault-filesystem/src/main/java/org/eclipse/edc/vault/filesystem/FsConfiguration.java b/extensions/common/vault/vault-filesystem/src/main/java/org/eclipse/edc/vault/filesystem/FsConfiguration.java deleted file mode 100644 index 151ca7895ac..00000000000 --- a/extensions/common/vault/vault-filesystem/src/main/java/org/eclipse/edc/vault/filesystem/FsConfiguration.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2020, 2021 Microsoft Corporation - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0 - * - * SPDX-License-Identifier: Apache-2.0 - * - * Contributors: - * Microsoft Corporation - initial API and implementation - * - */ - -package org.eclipse.edc.vault.filesystem; - -import org.eclipse.edc.runtime.metamodel.annotation.Setting; - -public final class FsConfiguration { - - @Setting - static final String VAULT_LOCATION = "edc.vault"; - - @Setting - static final String KEYSTORE_LOCATION = "edc.keystore"; - - @Setting - static final String KEYSTORE_PASSWORD = "edc.keystore.password"; - - @Setting - static final String PERSISTENT_VAULT = "edc.vault.persistent"; - - - private FsConfiguration() { - } -} diff --git a/extensions/common/vault/vault-filesystem/src/main/java/org/eclipse/edc/vault/filesystem/FsVaultExtension.java b/extensions/common/vault/vault-filesystem/src/main/java/org/eclipse/edc/vault/filesystem/FsVaultExtension.java index 858f1ee5603..fae48f89d29 100644 --- a/extensions/common/vault/vault-filesystem/src/main/java/org/eclipse/edc/vault/filesystem/FsVaultExtension.java +++ b/extensions/common/vault/vault-filesystem/src/main/java/org/eclipse/edc/vault/filesystem/FsVaultExtension.java @@ -18,6 +18,7 @@ import org.eclipse.edc.runtime.metamodel.annotation.Extension; import org.eclipse.edc.runtime.metamodel.annotation.Provider; import org.eclipse.edc.runtime.metamodel.annotation.Provides; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.EdcException; import org.eclipse.edc.spi.security.CertificateResolver; import org.eclipse.edc.spi.security.PrivateKeyResolver; @@ -28,9 +29,6 @@ import java.nio.file.Files; import java.nio.file.Paths; -import static org.eclipse.edc.vault.filesystem.FsConfiguration.PERSISTENT_VAULT; -import static org.eclipse.edc.vault.filesystem.FsConfiguration.VAULT_LOCATION; - /** * Bootstraps the file system-based vault extension. */ @@ -39,6 +37,12 @@ @Extension(value = FsVaultExtension.NAME) public class FsVaultExtension implements ServiceExtension { + @Setting + static final String VAULT_LOCATION = "edc.vault"; + + @Setting + static final String PERSISTENT_VAULT = "edc.vault.persistent"; + public static final String NAME = "FS Vault"; diff --git a/extensions/common/vault/vault-filesystem/src/main/java/org/eclipse/edc/vault/filesystem/JskPrivateKeyResolverExtension.java b/extensions/common/vault/vault-filesystem/src/main/java/org/eclipse/edc/vault/filesystem/JskPrivateKeyResolverExtension.java index a2d484ea882..c2727e5d252 100644 --- a/extensions/common/vault/vault-filesystem/src/main/java/org/eclipse/edc/vault/filesystem/JskPrivateKeyResolverExtension.java +++ b/extensions/common/vault/vault-filesystem/src/main/java/org/eclipse/edc/vault/filesystem/JskPrivateKeyResolverExtension.java @@ -17,6 +17,7 @@ import org.eclipse.edc.runtime.metamodel.annotation.Extension; import org.eclipse.edc.runtime.metamodel.annotation.Inject; import org.eclipse.edc.runtime.metamodel.annotation.Provider; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.EdcException; import org.eclipse.edc.spi.security.CertificateResolver; import org.eclipse.edc.spi.security.KeyParserRegistry; @@ -30,14 +31,18 @@ import java.security.GeneralSecurityException; import java.security.KeyStore; -import static org.eclipse.edc.vault.filesystem.FsConfiguration.KEYSTORE_LOCATION; -import static org.eclipse.edc.vault.filesystem.FsConfiguration.KEYSTORE_PASSWORD; import static org.eclipse.edc.vault.filesystem.JskPrivateKeyResolverExtension.NAME; @Extension(NAME) public class JskPrivateKeyResolverExtension implements ServiceExtension { public static final String NAME = "JKS PrivateKeyResolver Extension"; + @Setting + static final String KEYSTORE_LOCATION = "edc.keystore"; + + @Setting + static final String KEYSTORE_PASSWORD = "edc.keystore.password"; + @Inject private KeyParserRegistry registry; private KeyStore keyStore; diff --git a/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultClientConfig.java b/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultClientConfig.java index c7b5f078324..efd7aa2ed8f 100644 --- a/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultClientConfig.java +++ b/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultClientConfig.java @@ -21,16 +21,16 @@ import java.util.Objects; import static java.lang.String.format; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_API_HEALTH_PATH; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_API_HEALTH_PATH_DEFAULT; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_API_SECRET_PATH; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_API_SECRET_PATH_DEFAULT; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_HEALTH_CHECK_STANDBY_OK; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_HEALTH_CHECK_STANDBY_OK_DEFAULT; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_TIMEOUT_SECONDS; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_TIMEOUT_SECONDS_DEFAULT; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_TOKEN; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_URL; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultExtension.VAULT_API_SECRET_PATH; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultExtension.VAULT_API_SECRET_PATH_DEFAULT; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultExtension.VAULT_TIMEOUT_SECONDS; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultExtension.VAULT_TIMEOUT_SECONDS_DEFAULT; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultExtension.VAULT_TOKEN; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultExtension.VAULT_URL; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultHealthExtension.VAULT_API_HEALTH_PATH; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultHealthExtension.VAULT_API_HEALTH_PATH_DEFAULT; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultHealthExtension.VAULT_HEALTH_CHECK_STANDBY_OK; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultHealthExtension.VAULT_HEALTH_CHECK_STANDBY_OK_DEFAULT; class HashicorpVaultClientConfig { diff --git a/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultExtension.java b/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultExtension.java index 40099fc10f8..1b1b447f80b 100644 --- a/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultExtension.java +++ b/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultExtension.java @@ -18,6 +18,7 @@ import org.eclipse.edc.runtime.metamodel.annotation.Inject; import org.eclipse.edc.runtime.metamodel.annotation.Provider; import org.eclipse.edc.runtime.metamodel.annotation.Provides; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.http.EdcHttpClient; import org.eclipse.edc.spi.security.CertificateResolver; import org.eclipse.edc.spi.security.Vault; @@ -29,8 +30,17 @@ @Extension(value = HashicorpVaultExtension.NAME) public class HashicorpVaultExtension implements ServiceExtension { - public static final String NAME = "Hashicorp Vault"; + public static final String VAULT_API_SECRET_PATH_DEFAULT = "/v1/secret"; + public static final int VAULT_TIMEOUT_SECONDS_DEFAULT = 30; + @Setting(value = "The URL path of the vault's /secret endpoint", defaultValue = VAULT_API_SECRET_PATH_DEFAULT) + public static final String VAULT_API_SECRET_PATH = "edc.vault.hashicorp.api.secret.path"; + @Setting(value = "Sets the timeout for HTTP requests to the vault, in seconds", defaultValue = "30", type = "integer") + public static final String VAULT_TIMEOUT_SECONDS = "edc.vault.hashicorp.timeout.seconds"; + @Setting(value = "The URL of the Hashicorp Vault", required = true) + public static final String VAULT_URL = "edc.vault.hashicorp.url"; + @Setting(value = "The token used to access the Hashicorp Vault", required = true) + public static final String VAULT_TOKEN = "edc.vault.hashicorp.token"; @Inject @@ -67,4 +77,4 @@ public CertificateResolver vaultResolver(ServiceExtensionContext context) { return new HashicorpCertificateResolver(hashicorpVault(context), context.getMonitor().withPrefix("HashicorpVaultCertificateResolver")); } -} \ No newline at end of file +} diff --git a/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultHealthExtension.java b/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultHealthExtension.java index be1dde713e6..09f09235c10 100644 --- a/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultHealthExtension.java +++ b/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultHealthExtension.java @@ -29,6 +29,12 @@ public class HashicorpVaultHealthExtension implements ServiceExtension { @Setting(value = "Whether or not the vault health check is enabled", defaultValue = "true", type = "boolean") public static final String VAULT_HEALTH_CHECK = "edc.vault.hashicorp.health.check.enabled"; + public static final String VAULT_API_HEALTH_PATH_DEFAULT = "/v1/sys/health"; + @Setting(value = "The URL path of the vault's /health endpoint", defaultValue = VAULT_API_HEALTH_PATH_DEFAULT) + public static final String VAULT_API_HEALTH_PATH = "edc.vault.hashicorp.api.health.check.path"; + @Setting(value = "Specifies if being a standby should still return the active status code instead of the standby status code", defaultValue = "false", type = "boolean") + public static final String VAULT_HEALTH_CHECK_STANDBY_OK = "edc.vault.hashicorp.health.check.standby.ok"; + public static final boolean VAULT_HEALTH_CHECK_STANDBY_OK_DEFAULT = false; @Inject private HealthCheckService healthCheckService; diff --git a/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/model/Constants.java b/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/model/Constants.java deleted file mode 100644 index 5a261b8cebb..00000000000 --- a/extensions/common/vault/vault-hashicorp/src/main/java/org/eclipse/edc/vault/hashicorp/model/Constants.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0 - * - * SPDX-License-Identifier: Apache-2.0 - * - * Contributors: - * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation - * - */ - -package org.eclipse.edc.vault.hashicorp.model; - -import org.eclipse.edc.runtime.metamodel.annotation.Setting; - -public interface Constants { - String VAULT_API_SECRET_PATH_DEFAULT = "/v1/secret"; - String VAULT_API_HEALTH_PATH_DEFAULT = "/v1/sys/health"; - boolean VAULT_HEALTH_CHECK_STANDBY_OK_DEFAULT = false; - int VAULT_TIMEOUT_SECONDS_DEFAULT = 30; - @Setting(value = "The URL path of the vault's /secret endpoint", defaultValue = VAULT_API_SECRET_PATH_DEFAULT) - String VAULT_API_SECRET_PATH = "edc.vault.hashicorp.api.secret.path"; - - @Setting(value = "The URL path of the vault's /health endpoint", defaultValue = VAULT_API_HEALTH_PATH_DEFAULT) - String VAULT_API_HEALTH_PATH = "edc.vault.hashicorp.api.health.check.path"; - - @Setting(value = "Specifies if being a standby should still return the active status code instead of the standby status code", defaultValue = "false", type = "boolean") - String VAULT_HEALTH_CHECK_STANDBY_OK = "edc.vault.hashicorp.health.check.standby.ok"; - - @Setting(value = "Sets the timeout for HTTP requests to the vault, in seconds", defaultValue = "30", type = "integer") - String VAULT_TIMEOUT_SECONDS = "edc.vault.hashicorp.timeout.seconds"; - - @Setting(value = "The URL of the Hashicorp Vault", required = true) - String VAULT_URL = "edc.vault.hashicorp.url"; - - @Setting(value = "The token used to access the Hashicorp Vault", required = true) - String VAULT_TOKEN = "edc.vault.hashicorp.token"; -} diff --git a/extensions/common/vault/vault-hashicorp/src/test/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultExtensionTest.java b/extensions/common/vault/vault-hashicorp/src/test/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultExtensionTest.java index ef91fc33ff9..739291295b8 100644 --- a/extensions/common/vault/vault-hashicorp/src/test/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultExtensionTest.java +++ b/extensions/common/vault/vault-hashicorp/src/test/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultExtensionTest.java @@ -25,8 +25,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_TOKEN; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_URL; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultExtension.VAULT_TOKEN; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultExtension.VAULT_URL; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/extensions/common/vault/vault-hashicorp/src/test/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultIntegrationTest.java b/extensions/common/vault/vault-hashicorp/src/test/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultIntegrationTest.java index f599c1d7cd9..286416a7183 100644 --- a/extensions/common/vault/vault-hashicorp/src/test/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultIntegrationTest.java +++ b/extensions/common/vault/vault-hashicorp/src/test/java/org/eclipse/edc/vault/hashicorp/HashicorpVaultIntegrationTest.java @@ -39,8 +39,8 @@ import static java.lang.String.format; import static org.assertj.core.api.Assertions.assertThat; import static org.eclipse.edc.vault.hashicorp.HashicorpVaultClient.VAULT_DATA_ENTRY_NAME; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_TOKEN; -import static org.eclipse.edc.vault.hashicorp.model.Constants.VAULT_URL; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultExtension.VAULT_TOKEN; +import static org.eclipse.edc.vault.hashicorp.HashicorpVaultExtension.VAULT_URL; import static org.eclipse.edc.vault.hashicorp.util.X509CertificateTestUtil.convertToPem; import static org.eclipse.edc.vault.hashicorp.util.X509CertificateTestUtil.generateCertificate; diff --git a/extensions/control-plane/provision/provision-http/src/main/java/org/eclipse/edc/connector/provision/http/HttpProvisionerExtension.java b/extensions/control-plane/provision/provision-http/src/main/java/org/eclipse/edc/connector/provision/http/HttpProvisionerExtension.java index 138a9a9cf6a..69b3cbedf74 100644 --- a/extensions/control-plane/provision/provision-http/src/main/java/org/eclipse/edc/connector/provision/http/HttpProvisionerExtension.java +++ b/extensions/control-plane/provision/provision-http/src/main/java/org/eclipse/edc/connector/provision/http/HttpProvisionerExtension.java @@ -26,6 +26,7 @@ import org.eclipse.edc.policy.engine.spi.PolicyEngine; import org.eclipse.edc.runtime.metamodel.annotation.Extension; import org.eclipse.edc.runtime.metamodel.annotation.Inject; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.http.EdcHttpClient; import org.eclipse.edc.spi.system.ServiceExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; @@ -42,6 +43,22 @@ public class HttpProvisionerExtension implements ServiceExtension { public static final String NAME = "HTTP Provisioning"; + + public static final String DEFAULT_POLICY_SCOPE = "http.provisioner"; + public static final String HTTP_PROVISIONER_ENTRIES = "provisioner.http.entries"; + + @Setting(required = true) + public static final String PROVISIONER_TYPE = "provisioner.type"; + + @Setting(required = true) + public static final String DATA_ADDRESS_TYPE = "data.address.type"; + + @Setting(required = true) + public static final String ENDPOINT_URL = "endpoint"; + + @Setting(defaultValue = DEFAULT_POLICY_SCOPE) + public static final String POLICY_SCOPE = "policy.scope"; + @Inject protected ProvisionManager provisionManager; @Inject diff --git a/extensions/control-plane/provision/provision-http/src/main/java/org/eclipse/edc/connector/provision/http/config/ConfigParser.java b/extensions/control-plane/provision/provision-http/src/main/java/org/eclipse/edc/connector/provision/http/config/ConfigParser.java index ac7a3f4f09e..be53e30ce3b 100644 --- a/extensions/control-plane/provision/provision-http/src/main/java/org/eclipse/edc/connector/provision/http/config/ConfigParser.java +++ b/extensions/control-plane/provision/provision-http/src/main/java/org/eclipse/edc/connector/provision/http/config/ConfigParser.java @@ -15,7 +15,6 @@ package org.eclipse.edc.connector.provision.http.config; import org.eclipse.edc.connector.provision.http.config.ProvisionerConfiguration.ProvisionerType; -import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.EdcException; import org.eclipse.edc.spi.system.configuration.Config; @@ -25,6 +24,12 @@ import static java.lang.String.format; import static java.util.stream.Collectors.toList; +import static org.eclipse.edc.connector.provision.http.HttpProvisionerExtension.DATA_ADDRESS_TYPE; +import static org.eclipse.edc.connector.provision.http.HttpProvisionerExtension.DEFAULT_POLICY_SCOPE; +import static org.eclipse.edc.connector.provision.http.HttpProvisionerExtension.ENDPOINT_URL; +import static org.eclipse.edc.connector.provision.http.HttpProvisionerExtension.HTTP_PROVISIONER_ENTRIES; +import static org.eclipse.edc.connector.provision.http.HttpProvisionerExtension.POLICY_SCOPE; +import static org.eclipse.edc.connector.provision.http.HttpProvisionerExtension.PROVISIONER_TYPE; /** * Parses provisioner configuration. @@ -32,23 +37,6 @@ * Multiple named provisioners can be configured per runtime. */ public class ConfigParser { - private static final String DEFAULT_POLICY_SCOPE = "http.provisioner"; - - private static final String CONFIG_PREFIX = "provisioner.http"; - - private static final String HTTP_PROVISIONER_ENTRIES = CONFIG_PREFIX + ".entries"; - - @Setting(required = true) - private static final String PROVISIONER_TYPE = "provisioner.type"; - - @Setting(required = true) - private static final String DATA_ADDRESS_TYPE = "data.address.type"; - - @Setting(required = true) - private static final String ENDPOINT_URL = "endpoint"; - - @Setting - private static final String POLICY_SCOPE = "policy.scope"; private ConfigParser() { } diff --git a/extensions/control-plane/store/sql/asset-index-sql/src/main/java/org/eclipse/edc/connector/store/sql/assetindex/ConfigurationKeys.java b/extensions/control-plane/store/sql/asset-index-sql/src/main/java/org/eclipse/edc/connector/store/sql/assetindex/ConfigurationKeys.java deleted file mode 100644 index 51f86e10b42..00000000000 --- a/extensions/control-plane/store/sql/asset-index-sql/src/main/java/org/eclipse/edc/connector/store/sql/assetindex/ConfigurationKeys.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2022 Daimler TSS GmbH - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0 - * - * SPDX-License-Identifier: Apache-2.0 - * - * Contributors: - * Daimler TSS GmbH - Initial API and Implementation - * Microsoft Inc. - Refactoring - * - */ - -package org.eclipse.edc.connector.store.sql.assetindex; - -import org.eclipse.edc.runtime.metamodel.annotation.Setting; - -/** - * Defines configuration keys used by the SqlAssetIndexServiceExtension. - */ -public interface ConfigurationKeys { - - /** - * Name of the datasource to use for accessing assets. - */ - @Setting(required = true) - String DATASOURCE_SETTING_NAME = "edc.datasource.asset.name"; - -} diff --git a/extensions/control-plane/store/sql/asset-index-sql/src/main/java/org/eclipse/edc/connector/store/sql/assetindex/SqlAssetIndexServiceExtension.java b/extensions/control-plane/store/sql/asset-index-sql/src/main/java/org/eclipse/edc/connector/store/sql/assetindex/SqlAssetIndexServiceExtension.java index 6d1cea1c0bb..eaa51b86878 100644 --- a/extensions/control-plane/store/sql/asset-index-sql/src/main/java/org/eclipse/edc/connector/store/sql/assetindex/SqlAssetIndexServiceExtension.java +++ b/extensions/control-plane/store/sql/asset-index-sql/src/main/java/org/eclipse/edc/connector/store/sql/assetindex/SqlAssetIndexServiceExtension.java @@ -20,6 +20,7 @@ import org.eclipse.edc.runtime.metamodel.annotation.Extension; import org.eclipse.edc.runtime.metamodel.annotation.Inject; import org.eclipse.edc.runtime.metamodel.annotation.Provides; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.asset.AssetIndex; import org.eclipse.edc.spi.asset.DataAddressResolver; import org.eclipse.edc.spi.system.ServiceExtension; @@ -33,6 +34,12 @@ @Extension(value = "SQL asset index") public class SqlAssetIndexServiceExtension implements ServiceExtension { + /** + * Name of the datasource to use for accessing assets. + */ + @Setting(required = true) + public static final String DATASOURCE_SETTING_NAME = "edc.datasource.asset.name"; + @Inject private DataSourceRegistry dataSourceRegistry; @@ -50,7 +57,7 @@ public class SqlAssetIndexServiceExtension implements ServiceExtension { @Override public void initialize(ServiceExtensionContext context) { - var dataSourceName = context.getConfig().getString(ConfigurationKeys.DATASOURCE_SETTING_NAME, DataSourceRegistry.DEFAULT_DATASOURCE); + var dataSourceName = context.getConfig().getString(DATASOURCE_SETTING_NAME, DataSourceRegistry.DEFAULT_DATASOURCE); var sqlAssetLoader = new SqlAssetIndex(dataSourceRegistry, dataSourceName, transactionContext, typeManager.getMapper(), getDialect(), queryExecutor); diff --git a/extensions/control-plane/store/sql/asset-index-sql/src/test/java/org/eclipse/edc/connector/store/sql/assetindex/SqlAssetIndexServiceExtensionTest.java b/extensions/control-plane/store/sql/asset-index-sql/src/test/java/org/eclipse/edc/connector/store/sql/assetindex/SqlAssetIndexServiceExtensionTest.java index e9f3f2eda88..b3280706c27 100644 --- a/extensions/control-plane/store/sql/asset-index-sql/src/test/java/org/eclipse/edc/connector/store/sql/assetindex/SqlAssetIndexServiceExtensionTest.java +++ b/extensions/control-plane/store/sql/asset-index-sql/src/test/java/org/eclipse/edc/connector/store/sql/assetindex/SqlAssetIndexServiceExtensionTest.java @@ -26,7 +26,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import static org.assertj.core.api.Assertions.assertThat; -import static org.eclipse.edc.connector.store.sql.assetindex.ConfigurationKeys.DATASOURCE_SETTING_NAME; +import static org.eclipse.edc.connector.store.sql.assetindex.SqlAssetIndexServiceExtension.DATASOURCE_SETTING_NAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; diff --git a/extensions/control-plane/transfer/transfer-data-plane/src/main/java/org/eclipse/edc/connector/transfer/dataplane/TransferDataPlaneCoreExtension.java b/extensions/control-plane/transfer/transfer-data-plane/src/main/java/org/eclipse/edc/connector/transfer/dataplane/TransferDataPlaneCoreExtension.java index af036be02bc..4217550c453 100644 --- a/extensions/control-plane/transfer/transfer-data-plane/src/main/java/org/eclipse/edc/connector/transfer/dataplane/TransferDataPlaneCoreExtension.java +++ b/extensions/control-plane/transfer/transfer-data-plane/src/main/java/org/eclipse/edc/connector/transfer/dataplane/TransferDataPlaneCoreExtension.java @@ -29,6 +29,7 @@ import org.eclipse.edc.connector.transfer.spi.flow.DataFlowManager; import org.eclipse.edc.runtime.metamodel.annotation.Extension; import org.eclipse.edc.runtime.metamodel.annotation.Inject; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.iam.LocalPublicKeyService; import org.eclipse.edc.spi.security.PrivateKeyResolver; import org.eclipse.edc.spi.system.ServiceExtension; @@ -46,12 +47,15 @@ import java.time.Clock; import java.util.function.Supplier; -import static org.eclipse.edc.connector.dataplane.spi.TransferDataPlaneConfig.TOKEN_SIGNER_PRIVATE_KEY_ALIAS; -import static org.eclipse.edc.connector.dataplane.spi.TransferDataPlaneConfig.TOKEN_VERIFIER_PUBLIC_KEY_ALIAS; - @Extension(value = TransferDataPlaneCoreExtension.NAME) public class TransferDataPlaneCoreExtension implements ServiceExtension { + @Setting(value = "Alias of private key used for signing tokens, retrieved from private key resolver") + public static final String TOKEN_SIGNER_PRIVATE_KEY_ALIAS = "edc.transfer.proxy.token.signer.privatekey.alias"; + + @Setting(value = "Alias of public key used for verifying the tokens, retrieved from the vault") + public static final String TOKEN_VERIFIER_PUBLIC_KEY_ALIAS = "edc.transfer.proxy.token.verifier.publickey.alias"; + public static final String NAME = "Transfer Data Plane Core"; public static final String TRANSFER_DATAPLANE_TOKEN_CONTEXT = "dataplane-transfer"; diff --git a/extensions/control-plane/transfer/transfer-data-plane/src/main/java/org/eclipse/edc/connector/transfer/dataplane/TransferDataPlaneDefaultServicesExtension.java b/extensions/control-plane/transfer/transfer-data-plane/src/main/java/org/eclipse/edc/connector/transfer/dataplane/TransferDataPlaneDefaultServicesExtension.java index af830901891..ed8b8937cf1 100644 --- a/extensions/control-plane/transfer/transfer-data-plane/src/main/java/org/eclipse/edc/connector/transfer/dataplane/TransferDataPlaneDefaultServicesExtension.java +++ b/extensions/control-plane/transfer/transfer-data-plane/src/main/java/org/eclipse/edc/connector/transfer/dataplane/TransferDataPlaneDefaultServicesExtension.java @@ -20,6 +20,7 @@ import org.eclipse.edc.runtime.metamodel.annotation.Extension; import org.eclipse.edc.runtime.metamodel.annotation.Inject; import org.eclipse.edc.runtime.metamodel.annotation.Provider; +import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.result.Result; import org.eclipse.edc.spi.system.ServiceExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; @@ -27,15 +28,16 @@ import java.time.Clock; import java.util.Date; -import static org.eclipse.edc.connector.dataplane.spi.TransferDataPlaneConfig.DEFAULT_TOKEN_VALIDITY_SECONDS; -import static org.eclipse.edc.connector.dataplane.spi.TransferDataPlaneConfig.TOKEN_VALIDITY_SECONDS; - /** * Provides default service implementations for fallback * Omitted {@link Extension since this module already contains {@link TransferDataPlaneCoreExtension }} */ public class TransferDataPlaneDefaultServicesExtension implements ServiceExtension { + private static final String DEFAULT_TOKEN_VALIDITY_SECONDS = "600"; // 10min + @Setting(value = "Validity (in seconds) of tokens issued by the Control Plane for targeting the Data Plane public API.", type = "long", defaultValue = DEFAULT_TOKEN_VALIDITY_SECONDS) + private static final String TOKEN_VALIDITY_SECONDS = "edc.transfer.proxy.token.validity.seconds"; + public static final String NAME = "Transfer Data Plane Default Services"; @Inject @@ -54,7 +56,7 @@ public DataEncrypter getDataEncrypter(ServiceExtensionContext context) { @Provider(isDefault = true) public ConsumerPullTokenExpirationDateFunction tokenExpirationDateFunction(ServiceExtensionContext context) { - var validity = context.getSetting(TOKEN_VALIDITY_SECONDS, DEFAULT_TOKEN_VALIDITY_SECONDS); + var validity = context.getSetting(TOKEN_VALIDITY_SECONDS, Integer.parseInt(DEFAULT_TOKEN_VALIDITY_SECONDS)); return (contentAddress, contractId) -> Result.success(Date.from(clock.instant().plusSeconds(validity))); } } diff --git a/extensions/control-plane/transfer/transfer-data-plane/src/test/java/org/eclipse/edc/connector/transfer/dataplane/TransferDataPlaneCoreExtensionTest.java b/extensions/control-plane/transfer/transfer-data-plane/src/test/java/org/eclipse/edc/connector/transfer/dataplane/TransferDataPlaneCoreExtensionTest.java index a35659e1e45..78daf4ab853 100644 --- a/extensions/control-plane/transfer/transfer-data-plane/src/test/java/org/eclipse/edc/connector/transfer/dataplane/TransferDataPlaneCoreExtensionTest.java +++ b/extensions/control-plane/transfer/transfer-data-plane/src/test/java/org/eclipse/edc/connector/transfer/dataplane/TransferDataPlaneCoreExtensionTest.java @@ -32,8 +32,8 @@ import java.io.IOException; import java.util.Objects; -import static org.eclipse.edc.connector.dataplane.spi.TransferDataPlaneConfig.TOKEN_SIGNER_PRIVATE_KEY_ALIAS; -import static org.eclipse.edc.connector.dataplane.spi.TransferDataPlaneConfig.TOKEN_VERIFIER_PUBLIC_KEY_ALIAS; +import static org.eclipse.edc.connector.transfer.dataplane.TransferDataPlaneCoreExtension.TOKEN_SIGNER_PRIVATE_KEY_ALIAS; +import static org.eclipse.edc.connector.transfer.dataplane.TransferDataPlaneCoreExtension.TOKEN_VERIFIER_PUBLIC_KEY_ALIAS; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; diff --git a/spi/common/core-spi/src/main/java/org/eclipse/edc/spi/system/ServiceExtensionContext.java b/spi/common/core-spi/src/main/java/org/eclipse/edc/spi/system/ServiceExtensionContext.java index f525534a02b..771ae503380 100644 --- a/spi/common/core-spi/src/main/java/org/eclipse/edc/spi/system/ServiceExtensionContext.java +++ b/spi/common/core-spi/src/main/java/org/eclipse/edc/spi/system/ServiceExtensionContext.java @@ -15,7 +15,6 @@ package org.eclipse.edc.spi.system; -import org.eclipse.edc.runtime.metamodel.annotation.Setting; import org.eclipse.edc.spi.monitor.Monitor; /** @@ -23,9 +22,6 @@ */ public interface ServiceExtensionContext extends SettingResolver { - @Setting(value = "Configures the participant id this runtime is operating on behalf of") - String PARTICIPANT_ID = "edc.participant.id"; - String ANONYMOUS_PARTICIPANT = "anonymous"; /** diff --git a/spi/data-plane/data-plane-spi/src/main/java/org/eclipse/edc/connector/dataplane/spi/TransferDataPlaneConfig.java b/spi/data-plane/data-plane-spi/src/main/java/org/eclipse/edc/connector/dataplane/spi/TransferDataPlaneConfig.java deleted file mode 100644 index 04b1416eff4..00000000000 --- a/spi/data-plane/data-plane-spi/src/main/java/org/eclipse/edc/connector/dataplane/spi/TransferDataPlaneConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2022 Amadeus - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0 - * - * SPDX-License-Identifier: Apache-2.0 - * - * Contributors: - * Amadeus - initial API and implementation - * - */ - -package org.eclipse.edc.connector.dataplane.spi; - -import org.eclipse.edc.runtime.metamodel.annotation.Setting; - - -public interface TransferDataPlaneConfig { - - long DEFAULT_TOKEN_VALIDITY_SECONDS = 600; // 10min - @Setting(value = "Validity (in seconds) of tokens issued by the Control Plane for targeting the Data Plane public API. Default value: " + DEFAULT_TOKEN_VALIDITY_SECONDS, type = "long") - String TOKEN_VALIDITY_SECONDS = "edc.transfer.proxy.token.validity.seconds"; - - @Setting(value = "Alias of private key used for signing tokens, retrieved from private key resolver") - String TOKEN_SIGNER_PRIVATE_KEY_ALIAS = "edc.transfer.proxy.token.signer.privatekey.alias"; - - @Setting(value = "Alias of public key used for verifying the tokens, retrieved from the vault") - String TOKEN_VERIFIER_PUBLIC_KEY_ALIAS = "edc.transfer.proxy.token.verifier.publickey.alias"; - -} diff --git a/system-tests/e2e-transfer-test/runner/src/test/java/org/eclipse/edc/test/e2e/participant/BaseEndToEndParticipant.java b/system-tests/e2e-transfer-test/runner/src/test/java/org/eclipse/edc/test/e2e/participant/BaseEndToEndParticipant.java index f8ddacb1ef4..c91bfc36699 100644 --- a/system-tests/e2e-transfer-test/runner/src/test/java/org/eclipse/edc/test/e2e/participant/BaseEndToEndParticipant.java +++ b/system-tests/e2e-transfer-test/runner/src/test/java/org/eclipse/edc/test/e2e/participant/BaseEndToEndParticipant.java @@ -37,12 +37,12 @@ import static jakarta.json.Json.createObjectBuilder; import static java.io.File.separator; import static org.awaitility.Awaitility.await; +import static org.eclipse.edc.boot.BootServicesExtension.PARTICIPANT_ID; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.CONTEXT; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID; import static org.eclipse.edc.junit.testfixtures.TestUtils.getFreePort; import static org.eclipse.edc.spi.CoreConstants.EDC_NAMESPACE; import static org.eclipse.edc.spi.CoreConstants.EDC_PREFIX; -import static org.eclipse.edc.spi.system.ServiceExtensionContext.PARTICIPANT_ID; import static org.eclipse.edc.sql.testfixtures.PostgresqlEndToEndInstance.defaultDatasourceConfiguration; public class BaseEndToEndParticipant extends Participant {