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

com.bendb.dropwizard.jooq.JooqBundle Maven / Gradle / Ivy

The newest version!
package com.bendb.dropwizard.jooq;

import com.bendb.dropwizard.jooq.jersey.DSLContextFeature;
import com.bendb.dropwizard.jooq.jersey.JooqBinder;
import com.bendb.dropwizard.jooq.jersey.LoggingDataAccessExceptionMapper;
import io.dropwizard.core.ConfiguredBundle;
import io.dropwizard.db.DataSourceFactory;
import io.dropwizard.db.PooledDataSourceFactory;
import io.dropwizard.core.setup.Bootstrap;
import io.dropwizard.core.setup.Environment;
import org.jooq.Configuration;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

public abstract class JooqBundle
        implements ConfiguredBundle, JooqConfiguration {

    private static final String DEFAULT_NAME = "jooq";

    private final SortedMap jooqFactoryConfigurationMap = new TreeMap<>();

    public void initialize(Bootstrap bootstrap) {
        // No bootstrap-phase action required.
    }

    @Override
    public void run(C configuration, Environment environment) throws Exception {

        // configure primary data source factory
        configureDataSourceFactory(
                configuration,
                environment,
                primaryDataSourceName(),
                getDataSourceFactory(configuration));

        // configure secondary data source factories
        getSecondaryDataSourceFactories(configuration)
                .entrySet()
                .stream()
                .forEach(
                        e -> configureDataSourceFactory(
                                configuration,
                                environment,
                                e.getKey(),
                                e.getValue()
                        )
                );

        environment.jersey().register(new DSLContextFeature(jooqFactoryConfigurationMap));
        environment.jersey().register(new LoggingDataAccessExceptionMapper());
    }

    /**
     * Override this method to change the default data source name.
     */
    public String primaryDataSourceName() {
        return DEFAULT_NAME;
    }

    /**
     * Override this method to use a non-default jOOQ configuration.
     */
    @Override
    public JooqFactory getJooqFactory(C configuration) {
        return new JooqFactory();
    }

    public Configuration getConfiguration() {
        return jooqFactoryConfigurationMap.values().stream().findFirst().orElse(null);
    }

    public Map getConfigurationMap() {
        return jooqFactoryConfigurationMap;
    }

    private void configureDataSourceFactory(
            final C configuration,
            final Environment environment,
            final String name,
            final PooledDataSourceFactory dataSourceFactory
    ) throws RuntimeException {

        try {
            final JooqFactory jooqFactory = getJooqFactory(configuration);
            final Configuration cfg = jooqFactory.build(environment, dataSourceFactory, name);

            if (dataSourceFactory.getValidationQuery().isPresent()) {
                final JooqHealthCheck healthCheck = new JooqHealthCheck(
                        cfg, dataSourceFactory.getValidationQuery().get());

                environment.healthChecks().register(name, healthCheck);
            }

            jooqFactoryConfigurationMap.put(name, cfg);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy