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

be.fluid_it.tools.dropwizard.box.config.JndiConfigurationBridge Maven / Gradle / Ivy

package be.fluid_it.tools.dropwizard.box.config;

import io.dropwizard.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.naming.*;
import java.util.ArrayList;
import java.util.List;

public class JndiConfigurationBridge implements ConfigurationBridge {
    private Logger log = LoggerFactory.getLogger(JndiConfigurationBridge.class);

    private final ConfigurationWriterFactory writerFactory;
    private final String configurationContext;

    private static final String DEFAULT_CONTEXT = "java:comp/env/dropwizard/configuration";

    public JndiConfigurationBridge() {
        this(DEFAULT_CONTEXT);
    }

    public JndiConfigurationBridge(String configurationContext) {
        this(new ReflectionConfigurationWriterFactory(), configurationContext);
    }

    public JndiConfigurationBridge(ConfigurationWriterFactory writerFactory) {
        this(writerFactory, DEFAULT_CONTEXT);
    }

    public JndiConfigurationBridge(ConfigurationWriterFactory writerFactory, String configurationContext) {
        this.configurationContext = configurationContext;
        this.writerFactory = writerFactory;
    }

    public void load(C configuration) {
        ConfigurationWriter configurationWriter = writerFactory.build(configuration);

        try {
            Context initCtx = new InitialContext();
            Context envCtx = (Context) initCtx.lookup(configurationContext);
            writeEnumeration(envCtx, configurationWriter, null);

        } catch (NamingException e) {
            log.error("Can't configure property from J2EE Context", e);
        }

    }

    private void writeEnumeration(Context parentContext, ConfigurationWriter configurationWriter, List path) {
        try {
            NamingEnumeration list = parentContext.list("");
            while (list.hasMore()) {
                NameClassPair next = list.next();
                String name = next.getName();
                if (path == null) {
                    path = new ArrayList<>();
                }
                path.add(name);
                try {
                    Object value = parentContext.lookup(name);
                    if (value instanceof Context) {
                        writeEnumeration((Context) value, configurationWriter, path);
                    } else {
                        configurationWriter.write(path.toArray(new String[path.size()]), value);
                    }
                } catch (NamingException e) {
                    log.error("Can't read property " + name + " from JNDI Naming Context " + configurationContext, e);
                } catch (ConfigurationWriterException e) {
                    log.error("Can't write property " + name + " to Dropwizard Configuration", e);
                }
                path.remove(path.size() - 1);

            }
        } catch (NamingException e) {
            log.error("Can't configure property from J2EE Context", e);
        }


    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy