Update for OOM integration
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / Main.java
index 3e3f45f..3afce99 100644 (file)
@@ -55,14 +55,14 @@ import javax.servlet.DispatcherType;
 
 /**
  * <p>
- * A main class which may be used to start the provisioning server with an "embedded" Jetty server.
- * Configuration is done via the properties file <i>provserver.properties</i>, which should be in the CLASSPATH.
- * The provisioning server may also be packaged with a web.xml and started as a traditional webapp.
+ * A main class which may be used to start the provisioning server with an "embedded" Jetty server. Configuration is
+ * done via the properties file <i>provserver.properties</i>, which should be in the CLASSPATH. The provisioning server
+ * may also be packaged with a web.xml and started as a traditional webapp.
  * </p>
  * <p>
- * Most of the work of the provisioning server is carried out within the eight servlets (configured below)
- * that are used to handle each of the eight types of requests the server may receive.
- * In addition, there are background threads started to perform other tasks:
+ * Most of the work of the provisioning server is carried out within the eight servlets (configured below) that are used
+ * to handle each of the eight types of requests the server may receive. In addition, there are background threads
+ * started to perform other tasks:
  * </p>
  * <ul>
  * <li>One background Thread runs the {@link LogfileLoader} in order to process incoming logfiles.
@@ -75,14 +75,15 @@ import javax.servlet.DispatcherType;
  * /opt/app/datartr/logs directory.</li>
  * </ul>
  * <p>
- * The provisioning server is stopped by issuing a GET to the URL http://127.0.0.1/internal/halt
- * using <i>curl</i> or some other such tool.
+ * The provisioning server is stopped by issuing a GET to the URL http://127.0.0.1/internal/halt using <i>curl</i> or
+ * some other such tool.
  * </p>
  *
  * @author Robert Eby
  * @version $Id: Main.java,v 1.12 2014/03/12 19:45:41 eby Exp $
  */
 public class Main {
+
     /**
      * The truststore to use if none is specified
      */
@@ -109,8 +110,9 @@ public class Main {
         Logger logger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");
 
         // Check DB is accessible and contains the expected tables
-        if (!checkDatabase(logger))
+        if (!checkDatabase(logger)) {
             System.exit(1);
+        }
 
         logger.info("PROV0000 **** AT&T Data Router Provisioning Server starting....");
 
@@ -139,101 +141,109 @@ public class Main {
         server = new Server(queuedThreadPool);
 
         // HTTP connector
-        ServerConnector httpServerConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfiguration));
-        httpServerConnector.setPort(httpPort);
-        httpServerConnector.setAcceptQueueSize(2);
-
-        // HTTPS configuration
-        HttpConfiguration httpsConfiguration = new HttpConfiguration(httpConfiguration);
-        httpsConfiguration.setRequestHeaderSize(8192);
-
-        // HTTPS connector
-        SslContextFactory sslContextFactory = new SslContextFactory();
-        sslContextFactory.setKeyStorePath(p.getProperty(KEYSTORE_PATH_PROPERTY));
-        sslContextFactory.setKeyStorePassword(p.getProperty(KEYSTORE_PASSWORD_PROPERTY));
-        sslContextFactory.setKeyManagerPassword(p.getProperty("org.onap.dmaap.datarouter.provserver.keymanager.password"));
-        // SSL stuff
-        /* Skip SSLv3 Fixes */
-        sslContextFactory.addExcludeProtocols("SSLv3");
-        logger.info("Excluded protocols prov-" + sslContextFactory.getExcludeProtocols());
-        /* End of SSLv3 Fixes */
-
-        ServerConnector httpsServerConnector = new ServerConnector(server,
-                new SslConnectionFactory(sslContextFactory,HttpVersion.HTTP_1_1.asString()),
+        HandlerCollection hc;
+        try (ServerConnector httpServerConnector = new ServerConnector(server,
+            new HttpConnectionFactory(httpConfiguration))) {
+            httpServerConnector.setPort(httpPort);
+            httpServerConnector.setAcceptQueueSize(2);
+
+            // HTTPS configuration
+            HttpConfiguration httpsConfiguration = new HttpConfiguration(httpConfiguration);
+            httpsConfiguration.setRequestHeaderSize(8192);
+
+            // HTTPS connector
+            SslContextFactory sslContextFactory = new SslContextFactory();
+            sslContextFactory.setKeyStorePath(p.getProperty(KEYSTORE_PATH_PROPERTY));
+            sslContextFactory.setKeyStorePassword(p.getProperty(KEYSTORE_PASSWORD_PROPERTY));
+            sslContextFactory
+                .setKeyManagerPassword(p.getProperty("org.onap.dmaap.datarouter.provserver.keymanager.password"));
+            // SSL stuff
+            /* Skip SSLv3 Fixes */
+            sslContextFactory.addExcludeProtocols("SSLv3");
+            logger.info("Excluded protocols prov-" + Arrays.toString(sslContextFactory.getExcludeProtocols()));
+            /* End of SSLv3 Fixes */
+
+            ServerConnector httpsServerConnector = new ServerConnector(server,
+                new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()),
                 new HttpConnectionFactory(httpsConfiguration));
-        httpsServerConnector.setPort(httpsPort);
-        httpsServerConnector.setIdleTimeout(30000);
-        httpsServerConnector.setAcceptQueueSize(2);
-
-        sslContextFactory.setKeyStoreType(p.getProperty(KEYSTORE_TYPE_PROPERTY, "jks"));
-        sslContextFactory.setKeyStorePath(p.getProperty(KEYSTORE_PATH_PROPERTY));
-        sslContextFactory.setKeyStorePassword(p.getProperty(KEYSTORE_PASSWORD_PROPERTY));
-        sslContextFactory.setKeyManagerPassword(p.getProperty("org.onap.dmaap.datarouter.provserver.keymanager.password"));
-
-        String ts = p.getProperty(TRUSTSTORE_PATH_PROPERTY);
-        if (ts != null && ts.length() > 0) {
-            System.out.println("@@ TS -> " + ts);
-            sslContextFactory.setTrustStorePath(ts);
-            sslContextFactory.setTrustStorePassword(p.getProperty(TRUSTSTORE_PASSWORD_PROPERTY));
-        } else {
-            sslContextFactory.setTrustStorePath(DEFAULT_TRUSTSTORE);
+            httpsServerConnector.setPort(httpsPort);
+            httpsServerConnector.setIdleTimeout(30000);
+            httpsServerConnector.setAcceptQueueSize(2);
+
+            sslContextFactory.setKeyStoreType(p.getProperty(KEYSTORE_TYPE_PROPERTY, "jks"));
+            sslContextFactory.setKeyStorePath(p.getProperty(KEYSTORE_PATH_PROPERTY));
+            sslContextFactory.setKeyStorePassword(p.getProperty(KEYSTORE_PASSWORD_PROPERTY));
+            sslContextFactory
+                .setKeyManagerPassword(p.getProperty("org.onap.dmaap.datarouter.provserver.keymanager.password"));
+
+            String ts = p.getProperty(TRUSTSTORE_PATH_PROPERTY);
+            if (ts != null && ts.length() > 0) {
+                System.out.println("@@ TS -> " + ts);
+                sslContextFactory.setTrustStorePath(ts);
+                sslContextFactory.setTrustStorePassword(p.getProperty(TRUSTSTORE_PASSWORD_PROPERTY));
+            } else {
+                sslContextFactory.setTrustStorePath(DEFAULT_TRUSTSTORE);
+                sslContextFactory.setTrustStorePassword("changeit");
+            }
+            sslContextFactory.setTrustStorePath("/opt/app/datartr/self_signed/cacerts.jks");
             sslContextFactory.setTrustStorePassword("changeit");
-        }
-        sslContextFactory.setTrustStorePath("/opt/app/datartr/self_signed/cacerts.jks");
-        sslContextFactory.setTrustStorePassword("changeit");
-        sslContextFactory.setWantClientAuth(true);
-
-        // Servlet and Filter configuration
-        ServletContextHandler ctxt = new ServletContextHandler(0);
-        ctxt.setContextPath("/");
-        ctxt.addServlet(new ServletHolder(new FeedServlet()), "/feed/*");
-        ctxt.addServlet(new ServletHolder(new FeedLogServlet()), "/feedlog/*");
-        ctxt.addServlet(new ServletHolder(new PublishServlet()), "/publish/*");
-        ctxt.addServlet(new ServletHolder(new SubscribeServlet()), "/subscribe/*");
-        ctxt.addServlet(new ServletHolder(new StatisticsServlet()), "/statistics/*");
-        ctxt.addServlet(new ServletHolder(new SubLogServlet()), "/sublog/*");
-        ctxt.addServlet(new ServletHolder(new GroupServlet()), "/group/*"); //Provision groups - Rally US708115 -1610
-        ctxt.addServlet(new ServletHolder(new SubscriptionServlet()), "/subs/*");
-        ctxt.addServlet(new ServletHolder(new InternalServlet()), "/internal/*");
-        ctxt.addServlet(new ServletHolder(new RouteServlet()), "/internal/route/*");
-        ctxt.addServlet(new ServletHolder(new DRFeedsServlet()), "/");
-        ctxt.addFilter(new FilterHolder(new ThrottleFilter()), "/publish/*", EnumSet.of(DispatcherType.REQUEST));
-
-        ContextHandlerCollection contexts = new ContextHandlerCollection();
-        contexts.addHandler(ctxt);
-
-        // Request log configuration
-        NCSARequestLog nrl = new NCSARequestLog();
-        nrl.setFilename(p.getProperty("org.onap.dmaap.datarouter.provserver.accesslog.dir") + "/request.log.yyyy_mm_dd");
-        nrl.setFilenameDateFormat("yyyyMMdd");
-        nrl.setRetainDays(90);
-        nrl.setAppend(true);
-        nrl.setExtended(false);
-        nrl.setLogCookies(false);
-        nrl.setLogTimeZone("GMT");
-
-        RequestLogHandler reqlog = new RequestLogHandler();
-        reqlog.setRequestLog(nrl);
-
-        // Server's Handler collection
-        HandlerCollection hc = new HandlerCollection();
-        hc.setHandlers(new Handler[]{contexts, new DefaultHandler()});
-        hc.addHandler(reqlog);
-
-        // Daemon to clean up the log directory on a daily basis
-        Timer rolex = new Timer();
-        rolex.scheduleAtFixedRate(new PurgeLogDirTask(), 0, 86400000L);    // run once per day
-
-        // Start LogfileLoader
-        LogfileLoader.getLoader();
-
-        ServerConnector serverConnector = new ServerConnector(server,
-                new SslConnectionFactory(sslContextFactory,HttpVersion.HTTP_1_1.asString()),
-                new HttpConnectionFactory(httpsConfiguration));
-        serverConnector.setPort(httpsPort);
-        serverConnector.setIdleTimeout(500000);
+            sslContextFactory.setWantClientAuth(true);
+
+            // Servlet and Filter configuration
+            ServletContextHandler ctxt = new ServletContextHandler(0);
+            ctxt.setContextPath("/");
+            ctxt.addServlet(new ServletHolder(new FeedServlet()), "/feed/*");
+            ctxt.addServlet(new ServletHolder(new FeedLogServlet()), "/feedlog/*");
+            ctxt.addServlet(new ServletHolder(new PublishServlet()), "/publish/*");
+            ctxt.addServlet(new ServletHolder(new SubscribeServlet()), "/subscribe/*");
+            ctxt.addServlet(new ServletHolder(new StatisticsServlet()), "/statistics/*");
+            ctxt.addServlet(new ServletHolder(new SubLogServlet()), "/sublog/*");
+            ctxt.addServlet(new ServletHolder(new GroupServlet()),
+                "/group/*"); //Provision groups - Rally US708115 -1610
+            ctxt.addServlet(new ServletHolder(new SubscriptionServlet()), "/subs/*");
+            ctxt.addServlet(new ServletHolder(new InternalServlet()), "/internal/*");
+            ctxt.addServlet(new ServletHolder(new RouteServlet()), "/internal/route/*");
+            ctxt.addServlet(new ServletHolder(new DRFeedsServlet()), "/");
+            ctxt.addFilter(new FilterHolder(new ThrottleFilter()), "/publish/*", EnumSet.of(DispatcherType.REQUEST));
+
+            ContextHandlerCollection contexts = new ContextHandlerCollection();
+            contexts.addHandler(ctxt);
+
+            // Request log configuration
+            NCSARequestLog nrl = new NCSARequestLog();
+            nrl.setFilename(
+                p.getProperty("org.onap.dmaap.datarouter.provserver.accesslog.dir") + "/request.log.yyyy_mm_dd");
+            nrl.setFilenameDateFormat("yyyyMMdd");
+            nrl.setRetainDays(90);
+            nrl.setAppend(true);
+            nrl.setExtended(false);
+            nrl.setLogCookies(false);
+            nrl.setLogTimeZone("GMT");
+
+            RequestLogHandler reqlog = new RequestLogHandler();
+            reqlog.setRequestLog(nrl);
+
+            // Server's Handler collection
+            hc = new HandlerCollection();
+            hc.setHandlers(new Handler[]{contexts, new DefaultHandler()});
+            hc.addHandler(reqlog);
+
+            // Daemon to clean up the log directory on a daily basis
+            Timer rolex = new Timer();
+            rolex.scheduleAtFixedRate(new PurgeLogDirTask(), 0, 86400000L);    // run once per day
+
+            // Start LogfileLoader
+            LogfileLoader.getLoader();
+
+            try (ServerConnector serverConnector = new ServerConnector(server,
+                new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()),
+                new HttpConnectionFactory(httpsConfiguration))) {
+                serverConnector.setPort(httpsPort);
+                serverConnector.setIdleTimeout(500000);
+            }
 
-        server.setConnectors(new Connector[]{httpServerConnector, httpsServerConnector});
+            server.setConnectors(new Connector[]{httpServerConnector, httpsServerConnector});
+        }
         server.setHandler(hc);
         server.setStopAtShutdown(true);
         server.setStopTimeout(5000);