/******************************************************************************* * Copyright (c) 2013 Hani Naguib. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * Hani Naguib - initial API and implementation ******************************************************************************/ package com.gvmax.web; import java.io.File; import java.net.URL; import java.util.Properties; import org.apache.log4j.Logger; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ssl.SslSocketConnector; import org.eclipse.jetty.util.thread.ThreadPool; import org.eclipse.jetty.webapp.WebAppContext; import org.springframework.core.io.ClassPathResource; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.jetty8.InstrumentedHandler; import com.codahale.metrics.jetty8.InstrumentedQueuedThreadPool; import com.codahale.metrics.servlets.MetricsServlet; import com.gvmax.common.util.MetricsUtil; /** * Web App entry point. */ public final class WebMain { private static Logger logger = Logger.getLogger(WebMain.class); private WebMain() {} @SuppressWarnings("deprecation") public static void main(String[] args) { try { MetricRegistry registry = MetricsUtil.getRegistry(); Properties props = new Properties(); props.load(new ClassPathResource("/web.properties").getInputStream()); int httpPort = Integer.parseInt(props.getProperty("web.http.port", "19080")); int httpsPort = Integer.parseInt(props.getProperty("web.https.port", "19443")); logger.info("Starting server: " + httpPort + " :: " + httpsPort); Server server = new Server(httpPort); ThreadPool threadPool = new InstrumentedQueuedThreadPool(registry); server.setThreadPool(threadPool); // Setup HTTPS if (new File("gvmax.jks").exists()) { SslSocketConnector connector = new SslSocketConnector(); connector.setPort(httpsPort); connector.setKeyPassword(props.getProperty("web.keystore.password")); connector.setKeystore("gvmax.jks"); server.addConnector(connector); } else { logger.warn("keystore gvmax.jks not found, ssl disabled"); } // Setup WEBAPP URL warUrl = WebMain.class.getClassLoader().getResource("webapp"); String warUrlString = warUrl.toExternalForm(); WebAppContext ctx = new WebAppContext(warUrlString,"/"); ctx.setAttribute(MetricsServlet.METRICS_REGISTRY,registry); InstrumentedHandler handler = new InstrumentedHandler(registry,ctx); server.setHandler(handler); server.start(); server.join(); } catch (Exception e) { logger.error(e); System.exit(0); } } }