package net.bull.javamelody; import java.util.EnumSet; import java.util.Map; import javax.servlet.DispatcherType; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.server.handler.HandlerCollection; import org.eclipse.jetty.server.handler.RequestLogHandler; import org.eclipse.jetty.servlet.FilterHolder; import org.eclipse.jetty.servlet.ServletContextHandler; /** * Embedded http server including javamelody reports. */ public class EmbeddedServer { /** * Start the server with a http port and optional javamelody parameters. * @param port Http port * @param parameters Optional javamelody parameters * @throws Exception e */ public static void start(int port, Map<Parameter, String> parameters) throws Exception { // Init jetty final Server server = new Server(port); final ContextHandlerCollection contexts = new ContextHandlerCollection(); final ServletContextHandler context = new ServletContextHandler(contexts, "/", ServletContextHandler.SESSIONS); final net.bull.javamelody.MonitoringFilter monitoringFilter = new net.bull.javamelody.MonitoringFilter(); monitoringFilter.setApplicationType("Standalone"); final FilterHolder filterHolder = new FilterHolder(monitoringFilter); if (parameters != null) { for (final Map.Entry<Parameter, String> entry : parameters.entrySet()) { final net.bull.javamelody.Parameter parameter = entry.getKey(); final String value = entry.getValue(); filterHolder.setInitParameter(parameter.getCode(), value); } } context.addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.INCLUDE, DispatcherType.REQUEST)); final RequestLogHandler requestLogHandler = new RequestLogHandler(); contexts.addHandler(requestLogHandler); final HandlerCollection handlers = new HandlerCollection(); handlers.setHandlers(new Handler[] { contexts }); server.setHandler(handlers); server.start(); } }