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

be.fluid_it.tools.dropwizard.box.WebApplication Maven / Gradle / Ivy

package be.fluid_it.tools.dropwizard.box;

import be.fluid_it.tools.dropwizard.box.config.BridgedConfigurationFactoryFactory;
import be.fluid_it.tools.dropwizard.box.config.ClasspathConfigurationSourceProvider;
import be.fluid_it.tools.dropwizard.box.config.ConfigurationBridge;
import be.fluid_it.tools.dropwizard.box.config.JndiConfigurationBridge;
import io.dropwizard.Application;
import io.dropwizard.Configuration;
import io.dropwizard.lifecycle.setup.LifecycleEnvironment;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.util.component.LifeCycle;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.LinkedList;
import java.util.List;

/**
 * A WebApplication decorates a (DropWizard) Application (GoF)
 * @param  Dropwizard Configuration class
 */
public abstract class WebApplication extends Application implements ServletContextListener {
    private static ServletContext theServletContext;
    private final Application dropwizardApplication;
    private final String[] args;
    private Environment dropwizardEnvironment;
    private ConfigurationBridge configurationBridge;

    public static ServletContext servletContext() {
        return theServletContext;
    }

    public WebApplication(Application dropwizardApplication, String configurationFileLocation) {
        this(dropwizardApplication, new String[]{"server", configurationFileLocation});
    }

    public WebApplication(Application dropwizardApplication, String[] args) {
        this.dropwizardApplication = dropwizardApplication;
        this.args = args;
    }

    public void setConfigurationBridge(ConfigurationBridge configurationBridge) {
        this.configurationBridge = configurationBridge;
    }

    public ConfigurationBridge getConfigurationBridge() {
        return configurationBridge;
    }

    @Override
    public void initialize(Bootstrap bootstrap) {
        if (configurationBridge != null) {
            bootstrap.setConfigurationFactoryFactory(new BridgedConfigurationFactoryFactory(configurationBridge));
        }
        // Swaps the default FileConfigurationSourceProvider
        bootstrap.setConfigurationSourceProvider(new ClasspathConfigurationSourceProvider());
        dropwizardApplication.initialize(bootstrap);

    }

    @Override
    public String getName() {
        return dropwizardApplication.getName() + "-war";
    }

    @Override
    public void run(C configuration,
                    Environment environment) throws Exception {
        dropwizardEnvironment = environment;
        dropwizardApplication.run(configuration, environment);
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        if (theServletContext != null) {
            throw new IllegalStateException("Multple WebListeners extending WebApplication detected. Only one is allowed!");
        }
        theServletContext = sce.getServletContext();
        try {
            run(args);
        } catch (Exception e) {
            throw new RuntimeException("Initialization of Dropwizard failed ...", e);
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        Server server = (Server)theServletContext.getAttribute("fakeJettyServer");
        if (server != null) {
            try {
                server.stop();
            } catch (Exception e) {
                throw new RuntimeException("Shutdown of Dropwizard failed ...", e);
            }
        }
        theServletContext = null;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy