package com.sequenceiq.samples.flume.websocket; import org.apache.flume.channel.ChannelProcessor; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.HttpConfiguration; import org.eclipse.jetty.server.HttpConnectionFactory; import org.eclipse.jetty.server.SecureRequestCustomizer; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.SslConnectionFactory; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.ssl.SslContextFactory; /** * @author keyki */ public class JettyWebSocketServer implements WebSocketServer { private final String host; private final int port; private final String path; private final ChannelProcessor channelProcessor; public JettyWebSocketServer(String host, int port, String path, ChannelProcessor channelProcessor) { this.host = host; this.port = port; this.path = path; this.channelProcessor = channelProcessor; } @Override public void start() throws Exception { Server server = new Server(); ServerConnector http = new ServerConnector(server, new HttpConnectionFactory(new HttpConfiguration())); http.setHost(host); http.setPort(port); server.setConnectors(new Connector[]{http}); configureContextHandler(server); startServer(server); } private void configureContextHandler(Server server) { ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.addServlet(new ServletHolder(new JettyWebSocketServlet(channelProcessor)), path); context.setContextPath("/"); server.setHandler(context); } @Override public void startSSL(String keyStoreLocation, String keyStorePassword) throws Exception { Server server = new Server(); HttpConfiguration httpsConfig = new HttpConfiguration(); httpsConfig.addCustomizer(new SecureRequestCustomizer()); SslContextFactory sslContextFactory = new SslContextFactory(); sslContextFactory.setKeyStorePath(keyStoreLocation); sslContextFactory.setKeyStorePassword(keyStorePassword); ServerConnector https = new ServerConnector(server, new SslConnectionFactory(sslContextFactory, "http/1.1"), new HttpConnectionFactory(httpsConfig)); https.setHost(host); https.setPort(port); server.setConnectors(new Connector[]{https}); configureContextHandler(server); startServer(server); } private void startServer(Server server) throws Exception { server.start(); server.join(); } }