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

be.fluid_it.tools.dropwizard.box.bridge.JEEBridge Maven / Gradle / Ivy

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

import be.fluid_it.tools.dropwizard.box.WebApplication;
import org.eclipse.jetty.server.*;
import org.eclipse.jetty.util.component.LifeCycle;
import org.eclipse.jetty.util.thread.ThreadPool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;

public class JEEBridge extends Server {
    private Logger logger = LoggerFactory.getLogger(JEEBridge.class);

    private final List connectors = new LinkedList();
    private final Map attributesByName = new HashMap();
    private final List handlers = new LinkedList();

    public JEEBridge(ThreadPool threadPool) {
        super(threadPool);
    }

    private enum ServerState {
        FAILED, STARTING, STARTED, STOPPING, STOPPED;
    }

    private ServerState serverState = ServerState.STARTED;

    @Override
    public Connector[] getConnectors() {
        synchronized (connectors) {
            return connectors.toArray(new Connector[connectors.size()]);
        }
    }

    @Override
    public void addConnector(Connector connector) {
        synchronized (connectors) {
            connectors.add(connector);
        }
    }

    @Override
    public void removeConnector(Connector connector) {
        connectors.remove(connector);
    }


    @Override
    public void clearAttributes() {
        synchronized (attributesByName) {
            attributesByName.clear();
        }
    }

    @Override
    public Object getAttribute(String name) {
        synchronized (attributesByName) {
            return attributesByName.get(name);
        }
    }

    @Override
    public Enumeration getAttributeNames() {
        synchronized (attributesByName) {
            return new Vector(attributesByName.keySet()).elements();
        }
    }

    @Override
    public void removeAttribute(String name) {
        synchronized (attributesByName) {
            attributesByName.remove(name);
        }
        WebApplication.servletContext().removeAttribute(name);
    }

    @Override
    public void setAttribute(String name, Object attribute) {
        synchronized (attributesByName) {
            attributesByName.put(name, attribute);
        }
        WebApplication.servletContext().setAttribute(name, attribute);
    }

    // Handle methods are not supposed to be called

    @Override
    public void handle(HttpChannel connection) throws IOException, ServletException {
        throw new UnsupportedOperationException();
    }

    @Override
    public void handleAsync(HttpChannel connection) throws IOException, ServletException {
        throw new UnsupportedOperationException();
    }

    @Override
    public Handler getHandler() {
        // TODO
        return null;
    }

    @Override
    public Handler[] getHandlers() {
        synchronized (handlers) {
            return handlers.toArray(new Handler[handlers.size()]);
        }
    }

    @Override
    public void setHandler(Handler handler) {
        logger.info("Set handler ", handler.getClass().getName());
        synchronized (handlers) {
            handlers.add(handler);
        }
    }

    @Override
    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        throw new UnsupportedOperationException();
    }

    // Server Lifecycle

    @Override
    public boolean isRunning() {
        return STARTED.equals(serverState);
    }

    @Override
    public boolean isStarted() {
        return STARTED.equals(serverState);
    }

    @Override
    public boolean isStarting() {
        return STARTING.equals(serverState);
    }

    @Override
    public boolean isStopping() {
        return STOPPING.equals(serverState);
    }

    @Override
    public boolean isStopped() {
        return STOPPED.equals(serverState);
    }

    @Override
    public boolean isFailed() {
        return FAILED.equals(serverState);
    }

    private final List lifeCycleListeners = new LinkedList();

    @Override
    public void addLifeCycleListener(LifeCycle.Listener listener) {
        synchronized (lifeCycleListeners) {
            lifeCycleListeners.add(listener);
        }
    }

    @Override
    public void removeLifeCycleListener(LifeCycle.Listener listener) {
        synchronized (lifeCycleListeners) {
            lifeCycleListeners.remove(listener);
        }
    }

    @Override
    public String getState() {
        return serverState != null ? serverState.name() : null;
    }

    @Override
    public long getStopTimeout() {
        return 0;
    }


    // Start

    @Override
    public boolean isDumpAfterStart() {
        return false;
    }

    @Override
    public boolean isDumpBeforeStop() {
        return false;
    }

    @Override
    protected void doStart() throws Exception {
        logger.info("Start Bridged Jetty server ...");
        super.doStart();
    }

    @Override
    protected void doStop() throws Exception {
        logger.info("Stop Bridged Jetty server ...");
        super.doStop();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy