private void run() throws Exception { InetSocketAddress address; if (this.host != null) { address = new InetSocketAddress(this.host, this.port); } else { address = new InetSocketAddress(this.port); } Server server = new Server(address); ContextHandlerCollection handlerCollection = new ContextHandlerCollection(); final ModelRegistry modelRegistry = new ModelRegistry(); final MetricRegistry metricRegistry = new MetricRegistry(); Binder binder = new AbstractBinder() { @Override protected void configure() { bind(modelRegistry).to(ModelRegistry.class); bind(metricRegistry).to(MetricRegistry.class); } }; ResourceConfig config = new ResourceConfig(ModelResource.class); config.register(binder); config.register(JacksonFeature.class); config.register(MultiPartFeature.class); config.register(ObjectMapperProvider.class); config.register(RolesAllowedDynamicFeature.class); // Naive implementation that grants the "admin" role to all local network users config.register(NetworkSecurityContextFilter.class); ServletContextHandler servletHandler = new ServletContextHandler(); servletHandler.setContextPath(this.contextPath); ServletContainer jerseyServlet = new ServletContainer(config); servletHandler.addServlet(new ServletHolder(jerseyServlet), "/*"); InstrumentedHandler instrumentedHandler = new InstrumentedHandler(metricRegistry); instrumentedHandler.setHandler(servletHandler); handlerCollection.addHandler(instrumentedHandler); if (this.consoleWar != null) { WebAppContext consoleHandler = new WebAppContext(); consoleHandler.setContextPath(this.contextPath + "/console"); // XXX consoleHandler.setWar(this.consoleWar.getAbsolutePath()); handlerCollection.addHandler(consoleHandler); } server.setHandler(handlerCollection); DirectoryDeployer deployer = null; if (this.modelDir != null) { if (!this.modelDir.isDirectory()) { throw new IOException(this.modelDir.getAbsolutePath() + " is not a directory"); } deployer = new DirectoryDeployer(modelRegistry, this.modelDir.toPath()); } server.start(); if (deployer != null) { deployer.start(); } server.join(); if (deployer != null) { deployer.interrupt(); deployer.join(); } }
/** * Loads jetty configuration from the given URL. * * @param cfgUrl URL to load configuration from. * @throws GridException if load failed. */ private void loadJettyConfiguration(@Nullable URL cfgUrl) throws GridException { if (cfgUrl == null) { HttpConfiguration httpCfg = new HttpConfiguration(); httpCfg.setSecureScheme("https"); httpCfg.setSecurePort(8443); httpCfg.setSendServerVersion(true); httpCfg.setSendDateHeader(true); String srvPortStr = System.getProperty(GG_JETTY_PORT, "8080"); int srvPort; try { srvPort = Integer.valueOf(srvPortStr); } catch (NumberFormatException ignore) { throw new GridException( "Failed to start Jetty server because GRIDGAIN_JETTY_PORT system property " + "cannot be cast to integer: " + srvPortStr); } httpSrv = new Server(new QueuedThreadPool(20, 200)); ServerConnector srvConn = new ServerConnector(httpSrv, new HttpConnectionFactory(httpCfg)); srvConn.setHost(System.getProperty(GG_JETTY_HOST, "localhost")); srvConn.setPort(srvPort); srvConn.setIdleTimeout(30000L); srvConn.setReuseAddress(true); httpSrv.addConnector(srvConn); httpSrv.setStopAtShutdown(false); } else { XmlConfiguration cfg; try { cfg = new XmlConfiguration(cfgUrl); } catch (FileNotFoundException e) { throw new GridSpiException("Failed to find configuration file: " + cfgUrl, e); } catch (SAXException e) { throw new GridSpiException("Failed to parse configuration file: " + cfgUrl, e); } catch (IOException e) { throw new GridSpiException("Failed to load configuration file: " + cfgUrl, e); } catch (Exception e) { throw new GridSpiException( "Failed to start HTTP server with configuration file: " + cfgUrl, e); } try { httpSrv = (Server) cfg.configure(); } catch (Exception e) { throw new GridException("Failed to start Jetty HTTP server.", e); } } assert httpSrv != null; httpSrv.setHandler(jettyHnd); override(getJettyConnector()); }