io.quarkus.amazon.s3.deployment.S3Processor Maven / Gradle / Ivy
package io.quarkus.amazon.s3.deployment;
import java.util.List;
import org.jboss.jandex.DotName;
import io.quarkus.amazon.common.deployment.AbstractAmazonServiceProcessor;
import io.quarkus.amazon.common.deployment.AmazonClientAsyncTransportBuildItem;
import io.quarkus.amazon.common.deployment.AmazonClientBuildItem;
import io.quarkus.amazon.common.deployment.AmazonClientInterceptorsPathBuildItem;
import io.quarkus.amazon.common.deployment.AmazonClientSyncTransportBuildItem;
import io.quarkus.amazon.common.deployment.AmazonHttpClients;
import io.quarkus.amazon.common.runtime.AmazonClientApacheTransportRecorder;
import io.quarkus.amazon.common.runtime.AmazonClientNettyTransportRecorder;
import io.quarkus.amazon.common.runtime.AmazonClientRecorder;
import io.quarkus.amazon.common.runtime.AmazonClientUrlConnectionTransportRecorder;
import io.quarkus.amazon.s3.runtime.S3BuildTimeConfig;
import io.quarkus.amazon.s3.runtime.S3ClientProducer;
import io.quarkus.amazon.s3.runtime.S3Config;
import io.quarkus.amazon.s3.runtime.S3Recorder;
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
import io.quarkus.arc.deployment.BeanRegistrationPhaseBuildItem;
import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
import io.quarkus.deployment.Feature;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.annotations.ExecutionTime;
import io.quarkus.deployment.annotations.Record;
import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem;
import io.quarkus.deployment.builditem.FeatureBuildItem;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import software.amazon.awssdk.services.s3.S3AsyncClientBuilder;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.S3ClientBuilder;
public class S3Processor extends AbstractAmazonServiceProcessor {
S3BuildTimeConfig buildTimeConfig;
@Override
protected Feature amazonServiceClientName() {
return Feature.AMAZON_S3;
}
@Override
protected String configName() {
return "s3";
}
@Override
protected DotName syncClientName() {
return DotName.createSimple(S3Client.class.getName());
}
@Override
protected DotName asyncClientName() {
return DotName.createSimple(S3AsyncClient.class.getName());
}
@Override
protected String builtinInterceptorsPath() {
return "software/amazon/awssdk/services/s3/execution.interceptors";
}
@BuildStep
AdditionalBeanBuildItem producer() {
return AdditionalBeanBuildItem.unremovableOf(S3ClientProducer.class);
}
@BuildStep
void setup(BeanRegistrationPhaseBuildItem beanRegistrationPhase,
BuildProducer extensionSslNativeSupport,
BuildProducer feature,
BuildProducer interceptors,
BuildProducer clientProducer) {
setupExtension(beanRegistrationPhase, extensionSslNativeSupport, feature, interceptors, clientProducer,
buildTimeConfig.sdk,
buildTimeConfig.syncClient);
}
@BuildStep(onlyIf = AmazonHttpClients.IsAmazonApacheHttpServicePresent.class)
@Record(ExecutionTime.RUNTIME_INIT)
void setupApacheSyncTransport(List amazonClients, S3Recorder recorder,
AmazonClientApacheTransportRecorder transportRecorder,
S3Config runtimeConfig, BuildProducer syncTransports) {
createApacheSyncTransportBuilder(amazonClients,
transportRecorder,
buildTimeConfig.syncClient,
recorder.getSyncConfig(runtimeConfig),
syncTransports);
}
@BuildStep(onlyIf = AmazonHttpClients.IsAmazonUrlConnectionHttpServicePresent.class)
@Record(ExecutionTime.RUNTIME_INIT)
void setupUrlConnectionSyncTransport(List amazonClients, S3Recorder recorder,
AmazonClientUrlConnectionTransportRecorder transportRecorder,
S3Config runtimeConfig, BuildProducer syncTransports) {
createUrlConnectionSyncTransportBuilder(amazonClients,
transportRecorder,
buildTimeConfig.syncClient,
recorder.getSyncConfig(runtimeConfig),
syncTransports);
}
@BuildStep(onlyIf = AmazonHttpClients.IsAmazonNettyHttpServicePresent.class)
@Record(ExecutionTime.RUNTIME_INIT)
void setupNettyAsyncTransport(List amazonClients, S3Recorder recorder,
AmazonClientNettyTransportRecorder transportRecorder,
S3Config runtimeConfig, BuildProducer asyncTransports) {
createNettyAsyncTransportBuilder(amazonClients,
transportRecorder,
recorder.getAsyncConfig(runtimeConfig),
asyncTransports);
}
@BuildStep
@Record(ExecutionTime.RUNTIME_INIT)
void createClientBuilders(S3Recorder recorder,
AmazonClientRecorder commonRecorder,
S3Config runtimeConfig,
List syncTransports,
List asyncTransports,
BuildProducer syntheticBeans) {
createClientBuilders(commonRecorder,
recorder.getAwsConfig(runtimeConfig),
recorder.getSdkConfig(runtimeConfig),
buildTimeConfig.sdk,
syncTransports,
asyncTransports,
S3ClientBuilder.class,
(syncTransport) -> recorder.createSyncBuilder(runtimeConfig, syncTransport),
S3AsyncClientBuilder.class,
(asyncTransport) -> recorder.createAsyncBuilder(runtimeConfig, asyncTransport),
syntheticBeans);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy