ReplServlet.java 1.77 KB
package fi.codecrew.moya.management;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import net.matlux.NreplServer;

@WebServlet(loadOnStartup = 5, name = "repl-servlet")
public class ReplServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -344649442062099092L;
	private static final int NREPL_DEFAULT_PORT = 1112;
	private NreplServer nreplServer;
	private ServletConfig servletConfig;
	private static final Logger logger = LoggerFactory.getLogger(ReplServlet.class);

	@Override
	public void init(ServletConfig config) throws ServletException {
		logger.info("initializing Repl servlet for port {}", NREPL_DEFAULT_PORT);
		servletConfig = config;
		int port = NREPL_DEFAULT_PORT;
		String portStr = config.getInitParameter("port");
		if (portStr != null) {
			port = Integer.parseInt(portStr);
		}
		nreplServer = new NreplServer(port);
	}

	@Override
	public ServletConfig getServletConfig() {
		return servletConfig;
	}

	@Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		throw new UnavailableException("This servlet doesn't really serve.");
	}

	@Override
	public String getServletInfo() {
		return "REPL Servlet for introspecting the JVM";
	}

	public NreplServer getNreplServer() {
		return nreplServer;
	}

	@Override
	public void destroy() {
		if (nreplServer != null) {
			nreplServer.stop();
			nreplServer.unregisterMBean();
			nreplServer.clear();
			nreplServer = null;
		}
	}
}