* * Licensed under the Apache License, Version 2.0 (the "License");\r
* * you may not use this file except in compliance with the License.\r
* * You may obtain a copy of the License at\r
- * * \r
+ * *\r
* * http://www.apache.org/licenses/LICENSE-2.0\r
- * * \r
+ * *\r
* * Unless required by applicable law or agreed to in writing, software\r
* * distributed under the License is distributed on an "AS IS" BASIS,\r
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
* </p>\r
* <ul>\r
* <li>One background Thread runs the {@link LogfileLoader} in order to process incoming logfiles.\r
- * This Thread is created as a side effect of the first successful POST to the /internal/logs/ servlet.</li>\r
+ * This Thread is created as a side effect of the first successful POST to the /internal/logs/ servlet.</li>\r
* <li>One background Thread runs the {@link SynchronizerTask} which is used to periodically\r
- * synchronize the database between active and standby servers.</li>\r
+ * synchronize the database between active and standby servers.</li>\r
* <li>One background Thread runs the {@link Poker} which is used to notify the nodes whenever\r
- * provisioning data changes.</li>\r
+ * provisioning data changes.</li>\r
* <li>One task is run once a day to run {@link PurgeLogDirTask} which purges older logs from the\r
- * /opt/app/datartr/logs directory.</li>\r
+ * /opt/app/datartr/logs directory.</li>\r
* </ul>\r
* <p>\r
* The provisioning server is stopped by issuing a GET to the URL http://127.0.0.1/internal/halt\r
* @version $Id: Main.java,v 1.12 2014/03/12 19:45:41 eby Exp $\r
*/\r
public class Main {\r
- /** The truststore to use if none is specified */\r
- public static final String DEFAULT_TRUSTSTORE = "/opt/java/jdk/jdk180/jre/lib/security/cacerts";\r
- public static final String KEYSTORE_TYPE_PROPERTY = "com.att.research.datarouter.provserver.keystore.type";\r
- public static final String KEYSTORE_PATH_PROPERTY = "com.att.research.datarouter.provserver.keystore.path";\r
- public static final String KEYSTORE_PASSWORD_PROPERTY = "com.att.research.datarouter.provserver.keystore.password";\r
- public static final String TRUSTSTORE_PATH_PROPERTY = "com.att.research.datarouter.provserver.truststore.path";\r
- public static final String TRUSTSTORE_PASSWORD_PROPERTY = "com.att.research.datarouter.provserver.truststore.password";\r
-\r
- /** The one and only {@link Server} instance in this JVM */\r
- private static Server server;\r
-\r
- /**\r
- * Starts the Data Router Provisioning server.\r
- * @param args not used\r
- * @throws Exception if Jetty has a problem starting\r
- */\r
- public static void main(String[] args) throws Exception {\r
- Security.setProperty("networkaddress.cache.ttl", "4");\r
- Logger logger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");\r
-\r
- // Check DB is accessible and contains the expected tables\r
- if (! checkDatabase(logger))\r
- System.exit(1);\r
-\r
- logger.info("PROV0000 **** AT&T Data Router Provisioning Server starting....");\r
-\r
- // Get properties\r
- Properties p = (new DB()).getProperties();\r
- int http_port = Integer.parseInt(p.getProperty("com.att.research.datarouter.provserver.http.port", "8080"));\r
- int https_port = Integer.parseInt(p.getProperty("com.att.research.datarouter.provserver.https.port", "8443"));\r
-\r
- // HTTP connector\r
- SelectChannelConnector http = new SelectChannelConnector();\r
- http.setPort(http_port);\r
- http.setMaxIdleTime(300000);\r
- http.setRequestHeaderSize(2048);\r
- http.setAcceptors(2);\r
- http.setConfidentialPort(https_port);\r
- http.setLowResourcesConnections(20000);\r
-\r
- // HTTPS connector\r
- SslSelectChannelConnector https = new SslSelectChannelConnector();\r
- https.setPort(https_port);\r
- https.setMaxIdleTime(30000);\r
- https.setRequestHeaderSize(8192);\r
- https.setAcceptors(2);\r
-\r
- // SSL stuff\r
- SslContextFactory cf = https.getSslContextFactory();\r
- \r
- /**Skip SSLv3 Fixes*/\r
- cf.addExcludeProtocols("SSLv3");\r
- logger.info("Excluded protocols prov-"+cf.getExcludeProtocols());\r
- /**End of SSLv3 Fixes*/\r
-\r
- cf.setKeyStoreType(p.getProperty(KEYSTORE_TYPE_PROPERTY, "jks"));\r
- cf.setKeyStorePath(p.getProperty(KEYSTORE_PATH_PROPERTY));\r
- cf.setKeyStorePassword(p.getProperty(KEYSTORE_PASSWORD_PROPERTY));\r
- cf.setKeyManagerPassword(p.getProperty("com.att.research.datarouter.provserver.keymanager.password"));\r
- String ts = p.getProperty(TRUSTSTORE_PATH_PROPERTY);\r
- if (ts != null && ts.length() > 0) {\r
- System.out.println("@@ TS -> "+ts);\r
- cf.setTrustStore(ts);\r
- cf.setTrustStorePassword(p.getProperty(TRUSTSTORE_PASSWORD_PROPERTY));\r
- } else {\r
- cf.setTrustStore(DEFAULT_TRUSTSTORE);\r
- cf.setTrustStorePassword("changeit");\r
- }\r
- cf.setTrustStore("/opt/app/datartr/self_signed/cacerts.jks");\r
- cf.setTrustStorePassword("changeit");\r
- cf.setWantClientAuth(true);\r
-\r
- // Servlet and Filter configuration\r
- ServletContextHandler ctxt = new ServletContextHandler(0);\r
- ctxt.setContextPath("/");\r
- ctxt.addServlet(new ServletHolder(new FeedServlet()), "/feed/*");\r
- ctxt.addServlet(new ServletHolder(new FeedLogServlet()), "/feedlog/*");\r
- ctxt.addServlet(new ServletHolder(new PublishServlet()), "/publish/*");\r
- ctxt.addServlet(new ServletHolder(new SubscribeServlet()), "/subscribe/*");\r
- ctxt.addServlet(new ServletHolder(new StatisticsServlet()), "/statistics/*");\r
- ctxt.addServlet(new ServletHolder(new SubLogServlet()), "/sublog/*");\r
- ctxt.addServlet(new ServletHolder(new GroupServlet()), "/group/*"); //Provision groups - Rally US708115 -1610 \r
- ctxt.addServlet(new ServletHolder(new SubscriptionServlet()), "/subs/*");\r
- ctxt.addServlet(new ServletHolder(new InternalServlet()), "/internal/*");\r
- ctxt.addServlet(new ServletHolder(new RouteServlet()), "/internal/route/*");\r
- ctxt.addServlet(new ServletHolder(new DRFeedsServlet()), "/");\r
- ctxt.addFilter (new FilterHolder (new ThrottleFilter()), "/publish/*", FilterMapping.REQUEST);\r
-\r
- ContextHandlerCollection contexts = new ContextHandlerCollection();\r
- contexts.addHandler(ctxt);\r
-\r
- // Request log configuration\r
- NCSARequestLog nrl = new NCSARequestLog();\r
- nrl.setFilename(p.getProperty("com.att.research.datarouter.provserver.accesslog.dir") + "/request.log.yyyy_mm_dd");\r
- nrl.setFilenameDateFormat("yyyyMMdd");\r
- nrl.setRetainDays(90);\r
- nrl.setAppend(true);\r
- nrl.setExtended(false);\r
- nrl.setLogCookies(false);\r
- nrl.setLogTimeZone("GMT");\r
-\r
- RequestLogHandler reqlog = new RequestLogHandler();\r
- reqlog.setRequestLog(nrl);\r
-\r
- // Server's Handler collection\r
- HandlerCollection hc = new HandlerCollection();\r
- hc.setHandlers(new Handler[] { contexts, new DefaultHandler() });\r
- hc.addHandler(reqlog);\r
-\r
- // Server's thread pool\r
- QueuedThreadPool pool = new QueuedThreadPool();\r
- pool.setMinThreads(10);\r
- pool.setMaxThreads(200);\r
- pool.setDetailedDump(false);\r
-\r
- // Daemon to clean up the log directory on a daily basis\r
- Timer rolex = new Timer();\r
- rolex.scheduleAtFixedRate(new PurgeLogDirTask(), 0, 86400000L); // run once per day\r
-\r
- // Start LogfileLoader\r
- LogfileLoader.getLoader();\r
-\r
- // The server itself\r
- server = new Server();\r
- server.setThreadPool(pool);\r
- server.setConnectors(new Connector[] { http, https });\r
- server.setHandler(hc);\r
- server.setStopAtShutdown(true);\r
- server.setSendServerVersion(true);\r
- server.setSendDateHeader(true);\r
- server.setGracefulShutdown(5000); // allow 5 seconds for servlets to wrap up\r
- server.setDumpAfterStart(false);\r
- server.setDumpBeforeStop(false);\r
-\r
- server.start();\r
- server.join();\r
- logger.info("PROV0001 **** AT&T Data Router Provisioning Server halted.");\r
- }\r
-\r
- private static boolean checkDatabase(Logger logger) {\r
- DB db = new DB();\r
- return db.runRetroFits();\r
- }\r
-\r
- /**\r
- * Stop the Jetty server.\r
- */\r
- public static void shutdown() {\r
- new Thread() {\r
- @Override\r
- public void run() {\r
- try {\r
- server.stop();\r
- Thread.sleep(5000L);\r
- System.exit(0);\r
- } catch (Exception e) {\r
- // ignore\r
- }\r
- }\r
- }.start();\r
- }\r
+ /**\r
+ * The truststore to use if none is specified\r
+ */\r
+ public static final String DEFAULT_TRUSTSTORE = "/opt/java/jdk/jdk180/jre/lib/security/cacerts";\r
+ public static final String KEYSTORE_TYPE_PROPERTY = "org.onap.dmaap.datarouter.provserver.keystore.type";\r
+ public static final String KEYSTORE_PATH_PROPERTY = "org.onap.dmaap.datarouter.provserver.keystore.path";\r
+ public static final String KEYSTORE_PASSWORD_PROPERTY = "org.onap.dmaap.datarouter.provserver.keystore.password";\r
+ public static final String TRUSTSTORE_PATH_PROPERTY = "org.onap.dmaap.datarouter.provserver.truststore.path";\r
+ public static final String TRUSTSTORE_PASSWORD_PROPERTY = "org.onap.dmaap.datarouter.provserver.truststore.password";\r
+\r
+ /**\r
+ * The one and only {@link Server} instance in this JVM\r
+ */\r
+ private static Server server;\r
+\r
+ /**\r
+ * Starts the Data Router Provisioning server.\r
+ *\r
+ * @param args not used\r
+ * @throws Exception if Jetty has a problem starting\r
+ */\r
+ public static void main(String[] args) throws Exception {\r
+ Security.setProperty("networkaddress.cache.ttl", "4");\r
+ Logger logger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");\r
+\r
+ // Check DB is accessible and contains the expected tables\r
+ if (!checkDatabase(logger))\r
+ System.exit(1);\r
+\r
+ logger.info("PROV0000 **** AT&T Data Router Provisioning Server starting....");\r
+\r
+ // Get properties\r
+ Properties p = (new DB()).getProperties();\r
+ int http_port = Integer.parseInt(p.getProperty("org.onap.dmaap.datarouter.provserver.http.port", "8080"));\r
+ int https_port = Integer.parseInt(p.getProperty("org.onap.dmaap.datarouter.provserver.https.port", "8443"));\r
+\r
+ // HTTP connector\r
+ SelectChannelConnector http = new SelectChannelConnector();\r
+ http.setPort(http_port);\r
+ http.setMaxIdleTime(300000);\r
+ http.setRequestHeaderSize(2048);\r
+ http.setAcceptors(2);\r
+ http.setConfidentialPort(https_port);\r
+ http.setLowResourcesConnections(20000);\r
+\r
+ // HTTPS connector\r
+ SslSelectChannelConnector https = new SslSelectChannelConnector();\r
+ https.setPort(https_port);\r
+ https.setMaxIdleTime(30000);\r
+ https.setRequestHeaderSize(8192);\r
+ https.setAcceptors(2);\r
+\r
+ // SSL stuff\r
+ SslContextFactory cf = https.getSslContextFactory();\r
+\r
+ /**Skip SSLv3 Fixes*/\r
+ cf.addExcludeProtocols("SSLv3");\r
+ logger.info("Excluded protocols prov-" + cf.getExcludeProtocols());\r
+ /**End of SSLv3 Fixes*/\r
+\r
+ cf.setKeyStoreType(p.getProperty(KEYSTORE_TYPE_PROPERTY, "jks"));\r
+ cf.setKeyStorePath(p.getProperty(KEYSTORE_PATH_PROPERTY));\r
+ cf.setKeyStorePassword(p.getProperty(KEYSTORE_PASSWORD_PROPERTY));\r
+ cf.setKeyManagerPassword(p.getProperty("org.onap.dmaap.datarouter.provserver.keymanager.password"));\r
+ String ts = p.getProperty(TRUSTSTORE_PATH_PROPERTY);\r
+ if (ts != null && ts.length() > 0) {\r
+ System.out.println("@@ TS -> " + ts);\r
+ cf.setTrustStore(ts);\r
+ cf.setTrustStorePassword(p.getProperty(TRUSTSTORE_PASSWORD_PROPERTY));\r
+ } else {\r
+ cf.setTrustStore(DEFAULT_TRUSTSTORE);\r
+ cf.setTrustStorePassword("changeit");\r
+ }\r
+ cf.setTrustStore("/opt/app/datartr/self_signed/cacerts.jks");\r
+ cf.setTrustStorePassword("changeit");\r
+ cf.setWantClientAuth(true);\r
+\r
+ // Servlet and Filter configuration\r
+ ServletContextHandler ctxt = new ServletContextHandler(0);\r
+ ctxt.setContextPath("/");\r
+ ctxt.addServlet(new ServletHolder(new FeedServlet()), "/feed/*");\r
+ ctxt.addServlet(new ServletHolder(new FeedLogServlet()), "/feedlog/*");\r
+ ctxt.addServlet(new ServletHolder(new PublishServlet()), "/publish/*");\r
+ ctxt.addServlet(new ServletHolder(new SubscribeServlet()), "/subscribe/*");\r
+ ctxt.addServlet(new ServletHolder(new StatisticsServlet()), "/statistics/*");\r
+ ctxt.addServlet(new ServletHolder(new SubLogServlet()), "/sublog/*");\r
+ ctxt.addServlet(new ServletHolder(new GroupServlet()), "/group/*"); //Provision groups - Rally US708115 -1610\r
+ ctxt.addServlet(new ServletHolder(new SubscriptionServlet()), "/subs/*");\r
+ ctxt.addServlet(new ServletHolder(new InternalServlet()), "/internal/*");\r
+ ctxt.addServlet(new ServletHolder(new RouteServlet()), "/internal/route/*");\r
+ ctxt.addServlet(new ServletHolder(new DRFeedsServlet()), "/");\r
+ ctxt.addFilter(new FilterHolder(new ThrottleFilter()), "/publish/*", FilterMapping.REQUEST);\r
+\r
+ ContextHandlerCollection contexts = new ContextHandlerCollection();\r
+ contexts.addHandler(ctxt);\r
+\r
+ // Request log configuration\r
+ NCSARequestLog nrl = new NCSARequestLog();\r
+ nrl.setFilename(p.getProperty("org.onap.dmaap.datarouter.provserver.accesslog.dir") + "/request.log.yyyy_mm_dd");\r
+ nrl.setFilenameDateFormat("yyyyMMdd");\r
+ nrl.setRetainDays(90);\r
+ nrl.setAppend(true);\r
+ nrl.setExtended(false);\r
+ nrl.setLogCookies(false);\r
+ nrl.setLogTimeZone("GMT");\r
+\r
+ RequestLogHandler reqlog = new RequestLogHandler();\r
+ reqlog.setRequestLog(nrl);\r
+\r
+ // Server's Handler collection\r
+ HandlerCollection hc = new HandlerCollection();\r
+ hc.setHandlers(new Handler[]{contexts, new DefaultHandler()});\r
+ hc.addHandler(reqlog);\r
+\r
+ // Server's thread pool\r
+ QueuedThreadPool pool = new QueuedThreadPool();\r
+ pool.setMinThreads(10);\r
+ pool.setMaxThreads(200);\r
+ pool.setDetailedDump(false);\r
+\r
+ // Daemon to clean up the log directory on a daily basis\r
+ Timer rolex = new Timer();\r
+ rolex.scheduleAtFixedRate(new PurgeLogDirTask(), 0, 86400000L); // run once per day\r
+\r
+ // Start LogfileLoader\r
+ LogfileLoader.getLoader();\r
+\r
+ // The server itself\r
+ server = new Server();\r
+ server.setThreadPool(pool);\r
+ server.setConnectors(new Connector[]{http, https});\r
+ server.setHandler(hc);\r
+ server.setStopAtShutdown(true);\r
+ server.setSendServerVersion(true);\r
+ server.setSendDateHeader(true);\r
+ server.setGracefulShutdown(5000); // allow 5 seconds for servlets to wrap up\r
+ server.setDumpAfterStart(false);\r
+ server.setDumpBeforeStop(false);\r
+\r
+ server.start();\r
+ server.join();\r
+ logger.info("PROV0001 **** AT&T Data Router Provisioning Server halted.");\r
+ }\r
+\r
+ private static boolean checkDatabase(Logger logger) {\r
+ DB db = new DB();\r
+ return db.runRetroFits();\r
+ }\r
+\r
+ /**\r
+ * Stop the Jetty server.\r
+ */\r
+ public static void shutdown() {\r
+ new Thread() {\r
+ @Override\r
+ public void run() {\r
+ try {\r
+ server.stop();\r
+ Thread.sleep(5000L);\r
+ System.exit(0);\r
+ } catch (Exception e) {\r
+ // ignore\r
+ }\r
+ }\r
+ }.start();\r
+ }\r
}\r