All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.quarkus.jdbc.oracle.deployment.OracleProcessor Maven / Gradle / Ivy

package io.quarkus.jdbc.oracle.deployment;

import static io.quarkus.deployment.Feature.JDBC_ORACLE;

import io.quarkus.agroal.spi.JdbcDriverBuildItem;
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
import io.quarkus.arc.processor.BuiltinScope;
import io.quarkus.datasource.common.runtime.DatabaseKind;
import io.quarkus.datasource.deployment.spi.DefaultDataSourceDbKindBuildItem;
import io.quarkus.datasource.deployment.spi.DevServicesDatasourceConfigurationHandlerBuildItem;
import io.quarkus.deployment.Capabilities;
import io.quarkus.deployment.Capability;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
import io.quarkus.jdbc.oracle.runtime.OracleAgroalConnectionConfigurer;
import io.quarkus.jdbc.oracle.runtime.OracleServiceBindingConverter;

/**
 * N.B. this processor is relatively simple as we rely on the /META-INF/native-image/
 * resources provided by the driver.
 * This should probably change, as we could probably generate better optimised
 * code by bypassing the static definitions coming with the driver.
 */
public class OracleProcessor {

    @BuildStep
    FeatureBuildItem feature() {
        return new FeatureBuildItem(JDBC_ORACLE);
    }

    @BuildStep
    void registerDriver(BuildProducer jdbcDriver) {
        jdbcDriver.produce(new JdbcDriverBuildItem(DatabaseKind.ORACLE, "oracle.jdbc.driver.OracleDriver",
                "oracle.jdbc.xa.client.OracleXADataSource"));
    }

    @BuildStep
    DevServicesDatasourceConfigurationHandlerBuildItem devDbHandler() {
        return DevServicesDatasourceConfigurationHandlerBuildItem.jdbc(DatabaseKind.ORACLE);
    }

    @BuildStep
    void configureAgroalConnection(BuildProducer additionalBeans,
            Capabilities capabilities) {
        if (capabilities.isPresent(Capability.AGROAL)) {
            additionalBeans.produce(new AdditionalBeanBuildItem.Builder().addBeanClass(OracleAgroalConnectionConfigurer.class)
                    .setDefaultScope(BuiltinScope.APPLICATION.getName())
                    .setUnremovable()
                    .build());
        }
    }

    @BuildStep
    void registerServiceBinding(Capabilities capabilities,
            BuildProducer serviceProvider,
            BuildProducer dbKind) {
        if (capabilities.isPresent(Capability.KUBERNETES_SERVICE_BINDING)) {
            serviceProvider.produce(
                    new ServiceProviderBuildItem("io.quarkus.kubernetes.service.binding.runtime.ServiceBindingConverter",
                            OracleServiceBindingConverter.class.getName()));
        }
        dbKind.produce(new DefaultDataSourceDbKindBuildItem(DatabaseKind.ORACLE));
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy